Kubernets

目录

目标

主要功能

核心组件

基本概念

Pod

Node

Namespace

Service

Label

Annotations

Volume

扩展应用

滚动升级

资源限制

健康检查

LivenessProbe

ReadinessProbe

k8s集群

集群联邦

部署(Deployment)

任务(Job)

存储卷(Volume)


简称k8s,是google开源的容器集群管理系统。

目标

旨在消除编排物理/虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上自助运营。

具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力,透明的服务注册和服务发现机制,内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容,可扩展的资源自动调度机制、多力度的资源配额管理能力

主要功能

1.基于容器的应用部署、维护和滚动升级

2.负载均衡和服务发现

3.跨机器和跨地区的集群调度

4.自动伸缩

5.无状态服务和有状态服务

6.广泛的Volume支持

7.插件机制保证扩展性

核心组件

1.etcd保存了整个集群的状态

2.apiserver提供了资源操作的唯一入口,并提供认证、授权、访问机制、api注册和发现等机制

3.controller manager负责维护集群状态,比如故障检测、自动扩展、滚动更新等

4.scheduler负责资源的调度,按照预定的调度策略将pod调度到相应的机器上。

5.kubelet 负责维护容器的生命周期,同时也负责volume(cvi)和网络(cni)的管理

6.container runtime负责镜像管理以及pod和容器的真正运行(cri)

7.kube-proxy负责为service提供cluster内部的服务发现和负载均衡。

基本概念

Pod

是一组紧密关联的容器集合,共享IPC、Network和UTC namespace,是kubernets调度的基本单位。

设计理念:支持多个容器在一个pod中共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。

在k8s中,所有对象都使用manifest(yaml或json)来定义,比如一个简单的nginx服务可以定义为nginx.yaml,包含一个镜像为nginx的容器:

     

Node

是Pod真正运行的主机,可以物理话,也可以是虚拟机。为了管理Pod,每个Node节点上至少要运行container runtime(比如docker或rkt),kubelet和kube-proxy。

Namespace

对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods,services,replication controllers和deployVolumes等都属于某一个namespace的(默认是default),而node,persistentVolumes等则不属于任何namespace。

Service

是应用服务的抽象,通过labels为应用提供负载均衡和服务发现。匹配labels的Pod IP和端口列表组成endpoints,由kube-proxy负责将服务器IP负载均衡到这些endpoints上。

每个Service都会自动分配一个cluster IP(仅在集群内部可访问的虚拟地址)和DNS名,其他容器可以通过该地址或DNS来访问服务,而不需要后端容器的运行。

虽然创建了Pod,但是在k8s中,Pod的ip地址会随着Pod重启而变化,不建议直接拿Pod的ip来交换。使用Service为一组Pod(通过Labels来选择)提供一个统一的入口,并为他们提供负载均衡和服务发现。

Label

是k8s对象的标签,以key/value的方式附加到对象上(key最长不能超过63字节,value可以为空,也可以是不超过253字节的字符串)

Label不提供唯一性,而且实际上经常是很多对象(如Pods)都使用相同的label来标志具体的应用。

Label定义好后,其他对象可以使用Label Selector来选择一组相同label的对象。

Annotations

以key/value形式附加于对象的注解。不同于Labels用来标记和选择对象,Annotations是用来记录一些附加信息,用来辅助应用部署、安全策略以及调度策略等。

Volume

Pod的生命周期通常比较短,只要出现了异常,就会创建一个新的Pod来代替它。容器内的数据会随着Pod消亡而自动消失。Volume为了持久化数据产生。

扩展应用

通过修改Deployment中副本的数量(replicas),可以动态扩展或收缩应用。

自动扩展的容器会自动加入service,而收缩回收的容器也会自动从service中删除。

滚动升级

Rolling Update通过逐个容器替代升级的方式来实现无中断的服务升级。

滚动升级过程中,如果发现了失败或者配置错误,还可以随时回滚。

资源限制

k8s通过cgroups提供容器资源管理的功能,可以限制每个容器的CPU和内存使用。

健康检查

k8s作为一个面向应用的集群管理工具,需要确保容器在部署后确实处在正常运行状态。

k8s提供了两种探针(Probe:支持exec、tcp和http方式)来探测容器状态。

LivenessProbe

探测应用是否处于健康状态,如果不健康则删除重建改容器

ReadinessProbe

探测应用是否启动完成并且处于正常服务状态,如果不正常则更新容器状态。

k8s集群

一个k8s集群由分布式存储etcd、控制节点controller以及服务节点Node组成。

控制节点:主要负责整个集群的管理,比如容器的调度、维护资源的状态、自动扩展以及滚动更新等

服务节点:真正运行容器的主机,负责管理镜像和容器以及cluster内的服务发现和负载均衡

etcd集群保存了整个集群的状态

集群联邦

集群联邦(Federation)用于跨可用区的k8s集群,需要配合云服务商(如GCE, AWS)一起实现。

部署(Deployment)

表示拥护对k8s集群的一次更新操作。可以是创建一个新的服务,更新一个新的服务,也可以是滚动升级一个服务。

任务(Job)

k8s用来控制批处理型人物API对象。批处理任务与长期伺服业务的主要区别是批处理任务的运行有头有尾,而长期伺服业务是在用户不停止的情况下永远运行。

Job管理的Pod根据用户的设置把任务成功完成就自动退出了。成功完成的标志根据不同spec.complications策略而不同。

存储卷(Volume)

k8s中的存储卷跟Docker的存储卷类似,只不过Docker的存储卷作用范围是一个容器,而k8s的存储卷的生命周期和作用范围是一个Pod

猜你喜欢

转载自blog.csdn.net/u010918487/article/details/82055674