第四章 Kubernetes 架构
4.1 Master节点:Master是大脑,运行如下Daemon服务:
- API Server(kube-apiserver)
API server提供了HTTP/HTTPS RESTful API,即Kubernetes API。 API server是Kubernetes Cluster的前端接口。其他客户端工具(CLI或UI)以及K8S其它组件可以通过它管理Cluster资源。
- Scheduler(kube-scheduler)
负责决定将Pod放在哪个Node上运行。调度时候考虑Cluster拓扑,各个节点的负载,以及应用对高可用、性能、数据亲和性的需求。
- Controller Manager(kube-controller-manager)
负责管理Cluster的各种资源。
- etcd
负责保存K8s Cluster的配置信息和各种资源的状态信息。当数据发生变化时,etcd可以快速的通知K8s 组件。
- Pod网络
Pod能通信,k8s cluster必须部署Pod网络(比如flannel是其中一个方案)
4.2 Node节点:
- Kubelet - 是Node的agent,当scheduler确定在某个Node上运行Pod后,会将Pod的具体配置信息(image、volume等)发送给该节点的kubelet,kubelet根据这些信息创建和运行容器,并向Master报告运行状态。
- kube-proxy - service在逻辑上代表了后端的多个Pod,外界通过service访问Pod。service接收到的请求是如何转发到Pod的呢?这就是kube-proxy要完成的工作。每个node都运行kube-proxy服务,它负责将访问service的TCP/UDP数据流转发到后端容器。如果有多个副本,kube-proxy实现负载均衡。
- Pod网络 - Pod能通信,k8s cluster必须部署Pod网络(比如flannel是其中一个方案)
(注意:为什么Master上也有kubelet和kube-proxy呢? 因为Master上也可以运行应用,即Master同时也是一个Node )
kubectl get pod --all-namespaces -o wide
4.3 完整的架构图:P21
4.4 用例子把他们串起来:P23