kubernetes 架构
什么是 Kubernetes
Kubernetes(简称K8s) 是由 Google 在2014年开源的容器编排与调度管理框架,主要是为用户提供一个具有普遍意义的容器编排工具。该项目是Google内部大规模集群管理系统-Borg的一个开源版本,目前是由CNCF(Cloud Native Computing Foundation)托管项目。 Kubernetes 的主要特点:
- 可扩展:Kubernetes 是高度可配置且可扩展的。
- 可移植:Kubernetes 不限于特定平台,可以在各种公共或者私有云平台上运行。
- 自动化:Kubernetes 是一个高度自动化的平台:可自动部署/回滚、自我修复、自动扩缩容。
Kubernetes 架构
K8s 遵循服务器/客户端(C/S)架构,分为两部分master和node,其中master是服务端,是控制节点主要控制和管理整个K8s集群;node是客户端,是工作节点,主要处理来自于master的任务。K8s可以设置多master来实现高可用,但是默认情况下单个master 就可以完成所有的工作。
master包含的组件有:kube-apiserver, etcd, kube-controller-manager, kube-scheduler, cloud-controller-manager;
node 包含的组件有: kubelet, kube-proxy;
master 组件
kube-apiserver: 提供集群HTTP REST API, 是集群控制的唯一入口,提供访问控制、注册、信息存储功能, 同时也是集群内部模块之间数据交换的枢纽。
etcd: 兼具一致性和高可用性的键值数据库,保存 K8s 所有集群数据;
kube-scheduler: 对K8s中的Pod资源进行监控调度,为Pod选择合适的工作节点;
kube-controller-manager: K8s实现自动化的关键组件,是集群中所有资源的自动化控制中心;
cloud-controller-manager: 云控制器管理器是指嵌入特定云的控制逻辑的控制平面组件,使得 K8s 可以直接利用云平台实现持久化卷、负载均衡、网络路由、DNS 解析以及横向扩展等功能。
node 组件
kubelet: 负责与master节点通信,处理master下发的任务,管理节点上容器的创建、停止与删除等;
kube-proxy: 负责K8s集群服务的通信以及负载均衡;
数据流转

0. 在集群组件一启动 kube-scheduler,kube-controller-manager,kubelet就会通过list-watch机制监听自己关心的事件;
- API作为集群入口,接收命令请求;
- Deployment 控制器通过 watch 获取到 Deployment 的创建事件;
- Deployment 控制器创建 ReplicaSet 资源;
- ReplicaSet 控制器通过 watch 获取到 ReplicaSet 的创建事件;
- ReplicaSet 控制器创建 POD 资源;
- Scheduler 通过 watch 获取 Pod 创建事件以及获取未绑定Node的Pod;
- Scheduler 通过调度算法为 Pod 选择合适的Node;
- kubelet 通过 watch 获取部署在当前Node的 Pod;
- kubelet 通过 CRI 通知container runtime 创建 Pod;
- container runtime 成功创建Pod;
观察POD创建过程相关事件
我们可以通过kubectl get events --watch 来观察POD创建过程所产生的事件。使用watch 选项可以监听整个过程。 以下是创建nginx的过程:
1➜ ~ kubectl get events --watch
2LAST SEEN TYPE REASON OBJECT MESSAGE
30s Normal ScalingReplicaSet deployment/nginx Scaled up replica set nginx-6799fc88d8 to 2
40s Normal SuccessfulCreate replicaset/nginx-6799fc88d8 Created pod: nginx-6799fc88d8-dlvsf
50s Normal SuccessfulCreate replicaset/nginx-6799fc88d8 Created pod: nginx-6799fc88d8-b7868
60s Normal Scheduled pod/nginx-6799fc88d8-dlvsf Successfully assigned default/nginx-6799fc88d8-dlvsf to k8s-node1
70s Normal Scheduled pod/nginx-6799fc88d8-b7868 Successfully assigned default/nginx-6799fc88d8-b7868 to k8s-node1
80s Normal Pulling pod/nginx-6799fc88d8-b7868 Pulling image "nginx"
90s Normal Pulling pod/nginx-6799fc88d8-dlvsf Pulling image "nginx"
100s Normal Pulled pod/nginx-6799fc88d8-b7868 Successfully pulled image "nginx" in 14.134421496s
110s Normal Created pod/nginx-6799fc88d8-b7868 Created container nginx
120s Normal Started pod/nginx-6799fc88d8-b7868 Started container nginx
130s Normal Pulled pod/nginx-6799fc88d8-dlvsf Successfully pulled image "nginx" in 19.163499736s
140s Normal Created pod/nginx-6799fc88d8-dlvsf Created container nginx
150s Normal Started pod/nginx-6799fc88d8-dlvsf Started container nginx
以上就是关于K8s架构以及数据流转的介绍。
参考
Kubernetes Architecture
INTRODUCTION TO KUBERNETES ARCHITECTURE
服务
Kubernetes的三种外部访问方式:NodePort、LoadBalancer 和 Ingress
极客时间