k8s组件之间如何协同工作?
用一个用户创建一个Nginx服务的例子,
看各组件如何配合:
1、用户操作
执行kubectl create deployment nginx --image=nginx --replicas=2
(创建2个Nginx副本)。
2、API Server
接收命令,验证合法性后,
将创建2个Nginx Pod的请求存入etcd。
3、Controller Manager
其中的Deployment Controller发现etcd中记录了期望2个Nginx Pod,
但当前实际数量为0,
于是创建对应的ReplicaSet(负责维护Pod数量)。
4、Scheduler
检测到有新的Pod需要创建(还没分配节点),
根据节点的资源情况(比如哪个节点CPU空闲多),
选择2个合适的节点,
然后通过API Server更新Pod的分配节点信息到etcd。
1、Kubelet
每个节点的Kubelet会定期向API Server查询
“是否有分配给我的Pod”,
发现有Nginx Pod后,
调用容器运行时(比如Docker)拉取Nginx镜像,
启动2个容器。
2、Kube-proxy
当用户创建Service(kubectl expose deployment nginx --port=80)后,
Kube-proxy在每个节点上配置网络规则,
确保外部请求能通过Service的IP:
端口转发到两个Nginx Pod。
7、CoreDNS
为这个Service生成域名(比如nginx.default.svc.cluster.local),
其他Pod可以通过这个域名访问Nginx服务,
不用记Service的IP。
8、持续监控
Controller Manager会持续检查Pod数量是否为2,
若某个Pod崩溃,Kubelet重启失败后,
Controller Manager会通知Scheduler重新调度一个新Pod;
etcd则实时同步所有状态变更。
829

被折叠的 条评论
为什么被折叠?



