Kubernetes Cluster由Master和Node组成,节点上运行着若干Kubernetes服务。
1、Master节点
Master是Kubernetes Cluster的大脑,运行着的Daemon服务包括kube-apiserver、kube-scheduler、kube-controller-manager、etcd和Pod网络(例如fiannel),如下图所示:
2、Node节点
Node是Pod运行的地方,Kubernetes支持Docker、rkt等容器Runtime。Node上运行的Kubernetes组件有kubelet、kube-proxy和Pod网络(例如flanne),如下图:
3、用例子把他们串起来
mengqp@mengqp-VirtualBox-01:~$ kubectl run httpd-app --image=httpd --replicas=2
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/httpd-app created
mengqp@mengqp-VirtualBox-01:~$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
httpd-app 2/2 2 2 71s
mengqp@mengqp-VirtualBox-01:~$ kubectl get pod
NAME READY STATUS RESTARTS AGE
httpd-app-c77bb8b47-4m6l9 1/1 Running 0 85s
httpd-app-c77bb8b47-5s27z 1/1 Running 0 85s
mengqp@mengqp-VirtualBox-01:~$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
httpd-app-c77bb8b47-4m6l9 1/1 Running 0 114s 10.244.1.2 mengqp-virtualbox-02 <none> <none>
httpd-app-c77bb8b47-5s27z 1/1 Running 0 114s 10.244.2.2 mengqp-virtualbox-03 <none> <none>
mengqp@mengqp-VirtualBox-01:~$
Kubernetes 部署了 deployment httpd-app,有两个副本Pod,分别运行在k8s-node1和k8s-node2。
详细讨论整个部署过程如下:
1、kubectl发送部署请求到API Server
2、API Server 通知 Controller Manager创建一个deployment资源
3、Scheduler 执行调度任务,将两个副本pod分发到k8s-node1和k8s-node2
4、k8s-node1和k8s-node2上的kubectl在各自的节点上创建并运行pod
补充:
1、应用的配置和当前状态信息保存在etcd中,执行kubectl get pod时API Server会从etcd中读取这些数据
2、flannel会为每个pod都分配IP。因为没有创建service,所以目前kube-proxy还没有参与进来。