运维开发网

(一)Kubernetes/K8s 集群架构与组件

运维开发网 https://www.qedev.com 2020-04-07 17:35 出处:51CTO 作者:dwl1988721
K8s相关概念:master/nodemasterMaster是Cluster的大脑,它的主要职责是调度,即决定将应用放在哪里运行,实现高可用,可以运行多个Master。运行的相关组件:KubernetesAPIServer(kube-apiserver),集群的统一入口,各组件协调者,以RESTfulAPI提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etc

(一)Kubernetes/K8s 集群架构与组件

K8s相关概念:master/node

master

Master 是 Cluster 的大脑,它的主要职责是调度,即决定将应用放在哪里运行,实现高可用,可以运行多个 Master。

运行的相关组件:

Kubernetes API Server(kube-apiserver),集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。

Kubernetes Controller Manager,处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。

Kubernetes Scheduler,根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。

etcd Server,分布式键值存储系统。用于保存集群状态数据,比如Pod、Service等对象信息

node

Node 的职责是运行容器应用。Node 由 Master 管理,Node 负责监控并汇报容器的状态,并根据 Master 的要求管理容器的生命周期。运行的相关组件如下:

kubelet:是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。

kube-proxy:在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。

Docker Engine (docker):Docker引擎,负责本机的容器创建和管理工作。

k8s相关概念:Pod,Controllers,Service,Label,Namespace

pod:

Pod 是 Kubernetes 的最小工作单元。每个 Pod 包含一个或多个容器。Pod 中的容器会作为一个整体被 Master 调度到一个 Node 上运行。(注意:可以把pod想象成豌豆荚,豌豆就是容器,可以有一个或多个。)

说到Pod,简单介绍其概念。首先,Pod运行在一个我们称之为节点(Node)的环境中,这个节点可能是物理机或虚拟机,通常一个节点上上面运行几百个Pod;其次每个Pod运行着一个特殊的被称之为根容器(Pause),和一组用户容器组成,这些业务容器共享根容器(Pause)的网络栈和Volume挂载卷,因此它们之间的通信和数据交换效率更为高效。在设计时我们可以充分利用这一特性将一组密切相关的服务进程放到同一个Pod中。最后需要注意的是并不是每一个Pod和它里面运行的容器都能映射到一个Service上,只有那些提供服务的一组Pod才会被映射成一个服务。

静态Pod & 普通Pod

普通的Pod:

普通Pod一旦被创建,就会被放入到etcd中存储,随后会被Kubernetes Master调度到某个具体的Node上并进行绑定(Binding),随后该Pod 被对应的Node上的kubelet进程实例化成一组相关的Docker容器运行起来。

当Pod里的某个容器停止时,Kubernetes会自动检测到这个问题并且重新启动这个Pod (重启Pod里的所有容器),如果Pod所在的Node宕机,则会将这个Node上所有的Pod从新调度到其他节点上。

静态Pod (STatic Pod):

静态Pod不存放在Kubernetes的etcd存储里,而是存放在某个具体的Node上的文件中,并且只在此Node上启动运行。

静态Pod是由kubelet进行管理的仅存在于特定Node上的Pod。他们不能通过API Server进行管理,无法与ReplicationController(RC)、Deployment、或者DaemonSet进行关联,并且kubelet也无法对它们进行健康检查。静态Pod总是由kubelet进行创建的,并且总是在kubelet所在的Node上运行的.

Controllers:

ReplicaSet : 确保预期的Pod副本数量

• Deployment : 无状态应用部署(可以随意的漂移在任意node上运行,不用去读取状态,不用考虑自身的标识,不用考虑存储,典型的如web应用)

• StatefulSet : 有状态应用部署(考虑存储或者网络ID的唯一 如zookeeper,mysql主从)

• DaemonSet : 确保所有Node运行同一个Pod

• Job : 一次性任务

• Cronjob : 定时任务

servers:

• 防止Pod失联

• 定义一组Pod的访问策略

Label :

标签,附加到某个资源上,用于关联对象、查询和筛选.

版本标签:"release" : "stable" , "release" : "canary"...

环境标签:"environment" : "dev" , "environment" : "production"

架构标签:"tier" : "frontend" , "tier" : "backend" , "tier" : "middleware"

分区标签:"partition" : "customerA" , "partition" : "customerB"...

质量管控标签:"track" : "daily" , "track" : "weekly"

Namespace :

命名空间,将对象逻辑上隔离

0

精彩评论

暂无评论...
验证码 换一张
取 消