作者:邓德华
API Server:
APIServer 负责对外提供 RESTful 的 Kubernetes API 服务,它是系统管理指令的统一入口,任何对资源进行增删改查的操作都要交给 APIServer 处理后再提交给 etcd。如架构图中所示,kubectl(Kubernetes 提供的客户端工具,该工具内部就是对 Kubernetes API 的调用)是直接和 APIServer 交互的
Scheduler:
scheduler 的职责很明确,就是负责调度 pod 到合适的 Node 上。如果把 scheduler 看成一个黑匣子,那么它的输入是 pod 和由多个 Node 组成的列表,输出是 Pod 和一个 Node 的绑定,即将这个 pod 部署到这个 Node 上。Kubernetes 目前提供了调度算法,但是同样也保留了接口,用户可以根据自己的需求定义自己的调度算法
Controller Manager
如果说 APIServer 做的是“前台”的工作的话,那 controller manager 就是负责“后台”的。每个资源一般都对应有一个控制器,而 controller manager 就是负责管理这些控制器的。比如我们通过 APIServer 创建一个 pod,当这个 pod 创建成功后,APIServer 的任务就算完成了。而后面保证 Pod 的状态始终和我们预期的一样的重任就由 controller manager 去保证了
ETCD
etcd 是一个高可用的键值存储系统,Kubernetes 使用它来存储各个资源的状态,从而实现了 Restful 的 API
kubelet
Kubelet 是 Master 在每个 Node 节点上面的 agent,是 Node 节点上面最重要的模块,它负责维护和管理该 Node 上面的所有容器,但是如果容器不是通过 Kubernetes 创建的,它并不会管理。本质上,它负责使 Pod 得运行状态与期望的状态一致
kube-proxy
该模块实现了 Kubernetes 中的服务发现和反向代理功能。反向代理方面:kube-proxy 支持 TCP 和 UDP 连接转发,默认基于 Round Robin 算法将客户端流量转发到与 service 对应的一组后端 pod。服务发现方面,kube-proxy 使用 etcd 的 watch 机制,监控集群中 service 和 endpoint 对象数据的动态变化,并且维护一个 service 到 endpoint 的映射关系,从而保证了后端 pod 的 IP 变化不会对访问者造成影响。
Pod 就是包装多个容器的抽象,在 pod 初始化时必须创建一个 pause 容器,这个根容器用来对其他容器提供网络共享和数据存储共享。通过 pause 容器间可以通过 localhost+端口来彼此访问。
Pod 控制器:RC&RS、Deployment、DaemonSet、Job&CronJob、StatefulSet
RC(ReplicationController)用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的 pod 来替代;异常退出的容器也会自动回收。现在,使用 RS(ReplicaSet)来替代 RC,RS 和 RC 没有本质区别,只是支持了集合式的 selector。RS 可以独立使用,但建议用 Deployment 来自动管理
扩容
kubectl scale deployment myapp-deployment --replicas=5
更新镜像
kubectl set image deployment/myapp-deployment myapp=Harbor的IP和端口/library/nginx:v2
Service:为一组具有相同功能的容器应用提供一个统一的入口地址,将请求进行负载分发到后端的各个容器应用上,固定 IP。
使用 k8s 部署应用
中间件:zookeeper、redis
后端服务:test-service、test-web
k8s 集群主要是两种类型的节点:master 和 worker,主要是 master,worker 节点根据需要自行增减就行。
master 节点的高可用拓扑有两种方式:
至于其他组件: