官网主页: Kubernetes
什么是k8s
Kubernetes 也称为 K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统。
它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。Kubernetes 源自Google 15 年生产环境的运维经验,同时凝聚了社区的最佳创意和实践。
永不过时
Kubernetes 是开源系统,可以自由地部署在企业内部,私有云、混合云或公有云,让您轻松地做出合适的选择。
请访问下载部分下载 Kubernetes。
kubernetes的特性
自动化上线和回滚
Kubernetes 会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。如果出现问题,Kubernetes 会为你回滚所作更改。你应该充分利用不断成长的部署方案生态系统。
服务发现与负载均衡
无需修改你的应用程序去使用陌生的服务发现机制。Kubernetes 为容器提供了自己的 IP 地址和一个 DNS 名称,并且可以在它们之间实现负载均衡。
自我修复
重新启动失败的容器,在节点死亡时替换并重新调度容器, 杀死不响应用户定义的健康检查的容器, 并且在它们准备好服务之前不会将它们公布给客户端。
存储编排
自动挂载所选存储系统,包括本地存储、公有云提供商所提供的存储或者诸如 iSCSI 或 NFS 这类网络存储系统。
Secret 和配置管理
部署和更新 Secret 和应用程序的配置而不必重新构建容器镜像, 且不必将软件堆栈配置中的秘密信息暴露出来。
自动装箱
根据资源需求和其他限制自动放置容器,同时避免影响可用性。 将关键性的和尽力而为性质的工作负载进行混合放置,以提高资源利用率并节省更多资源。
批量执行
除了服务之外,Kubernetes 还可以管理你的批处理和 CI 工作负载,在期望时替换掉失效的容器。
IPv4/IPv6 双协议栈
为 Pod 和 Service 分配 IPv4 和 IPv6 地址
水平扩缩
使用一个简单的命令、一个 UI 或基于 CPU 使用情况自动对应用程序进行扩缩。
为扩展性设计
无需更改上游源码即可扩展你的 Kubernetes 集群。
kubernetes的关键组件:
Kubernetes节点有运行应用容器必备的服务,而这些都是受Master的控制。每个节点上都要运行Docker。Docker来负责所有具体的映像下载和容器运行。
- Kubernetes主要由以下几个核心组件组成:
-
etcd:保存了整个集群的状态;
-
apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
-
controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
-
scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
-
kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
-
Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI);
-
kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡;
除了核心组件,还有一些推荐的Add-ons: -
kube-dns:负责为整个集群提供DNS服务
-
Ingress Controller:为服务提供外网入口
-
Heapster:提供资源监控
-
Dashboard:提供GUI
-
Federation:提供跨可用区的集群
-
Fluentd-elasticsearch:提供集群日志采集、存储与查询
kubernetes的工作原理:
Kubernetes的工作原理包括以下几个核心组件:
- Master:主组件提供群集的控制平面。主组件对集群做出全局决策(例如,调度),并且它们检测并响应集群事件(例如,在部署的副本字段不满足时启动新的pod)。主组件可以在群集中的任何计算机上运行。但是,为简单起见,设置脚本通常会在同一台计算机上启动所有主组件,并且不在此计算机上运行用户容器。
- kubectl:这是集群管理命令行工具集,通过客户端的kubectl命令集操作,API Server响应对应的命令结果,从而达到对kubernetes集群的管理。
- kube-apiserver:这是资源操作入口,提供了资源对象的唯一操作入口,其他所有组件都必须通过它提供的API来操作资源数据,只有API Server与存储通信,其他模块通过API Server访问集群状态。对相关的资源数据“全量查询”+“变化监听”,实时完成相关的业务功能。
此外,Kubernetes还具有以下功能特性:
- 副本与弹性伸缩:容器如果部署无状态服务,一个好处就是可以多副本,并且可以弹性伸缩。在Kubernetes里面,副本数目是以pod为单位的,由controller进程控制,可以通过创建一个Deployment来控制副本数。Kubernetes也可以实现autoscaling。有一个组件Horizontal Pod Autoscaling,可以通过监控CPU的使用情况动态调整Pod的数量。
- 编排:为了能够通过编排文件一键创建整个应用,需要有编排功能。Kubernetes的编排是基于yml文件。
- 服务发现与DNS:容器平台的一个重要的功能是服务发现,也即当容器的地址改变的时候,可以自动进行服务之间的关联。Kubernetes的DNS组件是通过skyDNS实现的,负载均衡是通过将DNS转化为VIP,有个内置的负载均衡器kube-proxy来完成这件事情。
kubernetes中的重要概念:
Kubernetes API:
Kubernetes API是Kubernetes的核心接口,它提供了一组RESTful API,用于与Kubernetes集群进行交互。通过这些API,用户可以创建、查询、更新和删除Kubernetes中的各种资源,如Pod、Service、Deployment等。
Pod:
Pod是Kubernetes中的基本运行单元,它包含了运行应用程序的容器和相关的配置信息。一个Pod中可以运行一个或多个容器,这些容器共享相同的网络命名空间、存储卷和IPC。
ReplicaSet:
ReplicaSet是Kubernetes中的一种控制器,它用于管理Pod的复制和调度。通过创建ReplicaSet,用户可以指定Pod的复制数量,并确保这些Pod始终在集群中运行。
Horizontal Pod Autoscaler(HPA):
HPA是Kubernetes中的一种扩展机制,它可以根据应用程序的资源使用情况自动调整Pod的数量。HPA可以根据CPU或内存的使用率来决定是否需要增加或减少Pod的数量。
Vertical Pod Autoscaler(VPA):
VPA是Kubernetes中的另一种扩展机制,它可以根据应用程序的资源使用情况自动调整Pod的资源分配。VPA可以根据CPU或内存的使用率来决定是否需要增加或减少Pod的资源分配。
Volume:
Volume是Kubernetes中用于提供容器存储的抽象概念,它提供了一种将持久化存储映射到容器的方法。Volume可以用于存储应用程序的数据、日志和其他持久化数据。
Persistent Volume(PV):
PV是Kubernetes中的一种存储资源,它提供了容器持久化存储的能力。PV可以被多个Pod共享,并且可以在Pod的生命周期之外保持数据。PV通过声明Persistent Volume Claim(PVC)来申请和使用。
Kubernetes的主要工作原理包括以下几个方面:
- 容器编排:Kubernetes可以自动在多个节点上运行容器,提供了应用部署、规划、更新、维护的一种机制。
- 自我修复:Kubernetes可以通过监控容器的运行状态,自动重启失效的容器,或者重新调度容器的运行位置。
- 自动扩展:Kubernetes可以根据应用程序的运行情况,自动扩展或缩减容器的数量,以满足不断变化的需求。
- 负载均衡:Kubernetes可以自动分配网络流量,以确保应用程序能够均匀地承受负载。
- 存储管理:Kubernetes可以自动管理存储卷,为应用程序提供稳定的数据存储。
- API和服务网格:Kubernetes提供了一组强大的API,可以用来管理和查询Kubernetes集群,同时也提供了一个服务网格,可以用来监控和调整网络流量。
容器编排:
Kubernetes的容器编排主要通过以下步骤完成:
- 用户通过Kubernetes API提交Pod规格,Kubernetes控制器将规格转换为ReplicaSet对象。
- ReplicaSet会根据需要创建或删除Pod副本的数量。这主要依赖于对象的规模设置,即期望的Pod数量。
- 在调度器中,Kubernetes会根据可用资源、Pod亲和性或反亲和性规则、存储要求等,选择最适合运行Pod的节点。
- 节点接受Pod并将其启动在适当的位置上。
- 如果Pod由于某种原因失败,则Kubernetes会自动重启它。如果需要增加或减少Pod的数量,Kubernetes会自动扩展或缩减ReplicaSet。
- 在运行过程中,Kubernetes还会根据实时的性能数据,自动调整Pod副本的数量,以满足实际负载的需求。
通过这些步骤,Kubernetes能够自动、高效地完成容器编排,为应用程序提供稳定、可靠的运行环境。
自我修复
Kubernetes的自我修复主要通过以下几种方式实现:
- 容器失败自动重启:当一个容器因故障或其他原因停止运行时,Kubernetes会根据定义好的ReplicaSet或Pod规格,自动重启该容器。
- 替换失效容器:如果一个容器持续出现故障,Kubernetes可以通过创建新的容器来替换它。这可以通过设置Pod的重启策略或使用ReplicaSet来实现。
- 重新调度:当一个节点出现故障时,Kubernetes会将该节点上的所有容器重新调度到其他可用的节点上,确保应用程序在节点故障的情况下仍然可以继续运行。
- 自动扩展或缩减:根据应用程序的运行情况,Kubernetes可以自动扩展或缩减容器的数量,以满足不断变化的需求。这可以通过设置Horizontal Pod Autoscaler(HPA)或Vertical Pod Autoscaler(VPA)来实现。
此外,Kubernetes还提供了多种自我修复的机制,如健康检查、探针等,以确保应用程序在运行过程中始终处于健康状态。这些机制可以帮助运维人员及时发现和解决问题,从而提高应用程序的稳定性和可靠性。
自动扩展
Kubernetes的自动扩展主要通过Horizontal Pod Autoscaler(HPA)实现。HPA是Kubernetes的一个核心组件,用于根据应用程序的资源使用情况自动调整Pod的数量。
HPA的工作流程如下:
- HPA定期检测目标Pod的资源性能指标,通常是CPU使用率。
- 如果检测到的资源使用率超过设定的扩缩容阈值,HPA会创建一个新的Pod副本。
- 如果检测到的资源使用率下降到缩容阈值以下,HPA会销毁一个Pod副本。
在这个过程中,HPA可以基于实时性能数据进行动态调整,以满足不断变化的需求。此外,HPA还可以根据不同的策略进行扩展,如基于固定数量的Pod副本进行扩展,或者根据自定义的函数进行扩展。
除了HPA,Kubernetes还提供了垂直自动扩展(VPA)和自定义资源自动扩展(CRA)等扩展机制,以满足不同场景的需求。这些扩展机制共同构成了Kubernetes强大的自动扩展能力,为应用程序提供了稳定、高效的运行环境。
负载均衡
Kubernetes的负载均衡主要通过以下组件实现:
- Service:Service是Kubernetes的核心组件之一,它定义了一组Pod的访问方式。Service将来自客户端的流量路由到后端的Pod副本中。
- 负载均衡器:Kubernetes的负载均衡器将流量均衡地分配到后端的Pod副本中。它可以根据不同的算法和规则进行负载均衡,如基于IP的算法、基于哈希的算法等。
- 健康检查:Kubernetes可以通过健康检查机制,确保后端的Pod副本处于健康状态,并将不健康的Pod排除在负载均衡之外。
Kubernetes的负载均衡可以在不同的层次上实现,如四层负载均衡和七层负载均衡。四层负载均衡基于IP和端口号进行流量转发,而七层负载均衡基于应用层协议和URL等进行流量转发。Kubernetes默认采用七层负载均衡,通过Service将流量路由到后端的Pod副本中。
此外,Kubernetes还支持多种负载均衡模式,如单臂模式、NAT模式和直接模式等。这些模式可以根据不同的应用场景和需求进行选择,以满足应用程序的负载均衡需求。
总之,Kubernetes通过Service、负载均衡器和健康检查等组件,实现了对容器的负载均衡,为应用程序提供了稳定、高效的运行环境
存储管理
Kubernetes的存储管理主要通过Volume和Persistent Volume(PV)实现。Volume是Kubernetes中用于提供容器存储的抽象概念,它提供了一种将持久化存储映射到容器的方法。
Volume有以下几种常见类型:
- EmptyDir:EmptyDir类型的Volume是一个临时目录,它只在Pod运行时存在,当Pod被销毁时,EmptyDir中的数据会被清除。这种类型的Volume常用于在容器中存储临时数据。
- HostPath:HostPath类型的Volume是将宿主机的某个目录映射到容器中。这种类型的Volume常用于在容器中使用宿主机的文件系统存储。
- GCEPersistentDisk:GCEPersistentDisk类型的Volume是Google Cloud Engine上的持久化磁盘,它可以将云硬盘映射到容器中。这种类型的Volume常用于在容器中使用云存储。
- PersistentVolumeClaim(PVC):PVC是一种特殊的Volume,它通过声明一个Persistent Volume(PV)来申请存储资源。PVC提供了一种灵活的存储资源管理方式,可以根据需求动态申请和释放存储资源。
除了Volume,Kubernetes还提供了Persistent Volume(PV)和Persistent Volume Claim(PVC)的概念,用于实现更灵活的存储管理。PV是一个独立的存储资源,它可以被多个Pod共享。PVC通过声明一个PV来申请存储资源,它可以与Pod一起创建和销毁,并且可以动态地扩展或缩减存储资源。
总之,Kubernetes通过Volume、PV和PVC等组件,实现了对容器的存储管理,为应用程序提供了稳定、高效的存储资源。
kubernetes与docker的关系:
Docker和Kubernetes是两个不同的概念和技术,但是它们之间有很密切的关系。
Docker是一个开源的容器化平台,它可以将应用程序打包成一个独立的容器,包含应用程序所需的所有组件和依赖项,从而实现了跨平台、可移植和快速部署的能力。Docker提供了一个容器化的应用程序开发、部署和运行的环境,可以方便地将应用程序或服务打包、分发和运行。
Kubernetes是一个开源的容器编排平台,旨在简化应用程序在分布式系统中的部署、扩展和管理。它主要解决了面对包含成千上万个容器和节点的大规模分布式部署时,如何保证平台的可伸缩性、灵活性和可靠性的问题。Kubernetes提供了容器编排、容器管理、容器存储、网络通信等功能,通过自动化、智能化的方式对容器进行部署、扩容、缩容等操作,提高了应用程序的可用性和稳定性。
Docker和Kubernetes之间的关系在于,Docker提供了应用程序容器化的能力,而Kubernetes则负责管理、协调和监控这些容器。Kubernetes通过对容器进行编排和调度,将多个容器组合为一个复杂的微服务应用,并可以动态地进行扩展和缩容。因此,Docker和Kubernetes可以一起使用,共同构建和管理分布式应用程序的整个生命周期,其中Docker主要负责容器化和打包应用程序,Kubernetes则负责自动化地部署、扩展和管理应用程序。
总之,Docker和Kubernetes是互补的技术,它们相互协作,共同实现了容器技术的全栈式解决方案。
kubernetes的技术选型原因以及为何选择kubernetes:
Kubernetes的技术选型原因以及为何选择Kubernetes,主要有以下几点:
- 行业趋势:IT行业正在不断追求更高的效率和更低的成本,容器化和云原生化的需求正在逐渐增加。Kubernetes作为当前被业界广泛认可和看好的基于Docker的大规模容器化分布式系统解决方案,得到了以谷歌为首的IT巨头们的大力宣传和推进,正在成为云原生应用的首选平台。
- 跨平台兼容:Kubernetes可以运行在多种公有云和私有云平台上,比如Google Cloud、Amazon Web Services、Azure、OpenStack等,这使得它具有很高的灵活性,可以轻松地在不同的环境中进行迁移和扩展。
- 自动化部署:Kubernetes提供了强大的部署、扩展和管理应用程序的能力,可以通过简单的命令、UI或基于CPU使用情况自动对应用程序进行扩缩,大大减少了人工干预的需求,提高了开发效率。
- 自我修复:Kubernetes具有自我修复的功能,可以自动检测和修复容器故障,确保应用程序的持续可用性和高可靠性。
- 社区生态:Kubernetes拥有庞大的社区和丰富的生态,有大量的工具和应用支持Kubernetes,使得学习和使用Kubernetes变得更加容易,同时也提供了更多的可能性来扩展和定制Kubernetes的功能。
综上所述,Kubernetes的技术选型原因主要是其高效、灵活、可扩展和易用性,而选择Kubernetes作为容器编排平台,则可以更好地满足现代应用程序的高效开发和部署需求。
kubernetes与同类型产品对比
Docker Swarm
是Docker公司的原生容器编排工具,可以在多个Docker节点上运行容器,提供容器管理和服务发现等功能。Swarm最大的特点是易于使用,它与Docker本身集成得非常好,且可以无缝地创建和管理容器。
Apache Mesos
是Apache开源项目之一,是一个集群管理器,可以管理和调度分布式应用程序。Mesos可以处理数千个节点和数万个容器,提供了一个集中的控制点,可以管理和调度所有的资源。
Kubernetes与同类型产品对比,如Docker Swarm和Apache Mesos,主要区别如下:
- 规模:Kubernetes可以支持大规模的容器化应用程序,可以处理数千个容器和数百个节点,而Docker Swarm和Apache Mesos在处理大规模应用程序方面相对较弱。
- 语言中立性:Kubernetes是多语言且语言不敏感的容器管理平台,可以运行云原生和传统的容器化应用程序,提供的服务可供各种语言使用。而Docker Swarm主要支持Docker容器,对于非Docker容器支持较弱。
- 跨平台性:Kubernetes可以运行在多种公有云和私有云平台上,比如Google Cloud、Amazon Web Services、Azure、OpenStack等,而Docker Swarm和Apache Mesos的跨平台能力相对较弱。
- 自动化部署和管理:Kubernetes提供了强大的部署、扩展和管理应用程序的能力,可以通过简单的命令、UI或基于CPU使用情况自动对应用程序进行扩缩,大大减少了人工干预的需求,提高了开发效率。而Docker Swarm和Apache Mesos在自动化部署和管理方面相对较弱。
- 自我修复:Kubernetes具有自我修复的功能,可以自动检测和修复容器故障,确保应用程序的持续可用性和高可靠性。而Docker Swarm和Apache Mesos的自我修复能力相对较弱。
- 社区和生态:Kubernetes拥有庞大的社区和丰富的生态,有大量的工具和应用支持Kubernetes,使得学习和使用Kubernetes变得更加容易,同时也提供了更多的可能性来扩展和定制Kubernetes的功能。而Docker Swarm和Apache Mesos在社区和生态方面相对较弱。
综上所述,Kubernetes相对于其他同类型产品具有更大的规模、语言中立性、跨平台性、自动化部署和管理、自我修复以及社区和生态优势。
kubernetes版本迭代特性对比
- Kubernetes 1.0 (2015年7月):这是Kubernetes的初始版本,标志着Kubernetes的正式发布。此版本提供了基础架构即服务(IaaS)的功能,包括容器编排、自动扩展和自我修复等。
- Kubernetes 1.1 (2015年11月):这个版本增加了更多的功能,例如,性能改进、更好的网络插件以及新的存储插件。此外,还改进了集群节点的规模和集群的整体性能。
- Kubernetes 1.2 (2016年4月):这个版本引入了重要的新特性,如StatefulSet(用于有状态应用的部署和扩展)、DaemonSet(用于每个节点都需要运行的应用)以及自适应的副本计数器。
- Kubernetes 1.3 (2016年7月):这个版本更加注重安全性和集群的高可用性,增加了诸如认证、授权、API聚合、服务网格等新特性。
- Kubernetes 1.4 (2016年12月):这个版本增加了更多的安全特性,如强密码策略、支持静态和LDAP身份验证、Webhook身份验证等。此外,还引入了集群联邦(federation),使得Kubernetes可以管理跨多个云的集群。
- Kubernetes 1.5 (2017年4月):这个版本主要在稳定性和性能方面进行了改进,包括更好的存储和网络插件的稳定性、改进的调度器性能、以及对IPv6的支持等。
- Kubernetes 1.6 (2017年7月):这个版本增加了更多的安全特性,如更强的角色和角色绑定限制、自动双向TLS、自我修复等。此外,还引入了对多租户模式的支持。
- Kubernetes 1.7 (2017年12月):这个版本引入了新的API聚合层、改进的StatefulSet和更好的GPU支持等。
以上就是Kubernetes主要版本的迭代历程和特性对比。随着版本的更新,Kubernetes的功能不断完善和增强,逐渐发展成为容器编排领域的领先者