目录
1)kubernetes是通过list-watch的机制进行每个组件的动作,保持数据同步的,每个组件之间的设计实现了解耦。
2)用户是通过kubelet根据配置文件,向apiserver发送命令,在node节点上面建立pod和container。
APIserver经过API调用,权限控制,调用资源和存储资源的过程,实际上还没有真正开始部署应用,这里需要controller manager,scheduler和kubelet的协助才能完成整个部署过程。
3)在kubernetes中,所以部署的信息都会写到etcd中保存,实际上etcd在存储部署信息的时候,会发送create事件给APIserver会通过监听(watch)etcd发过来的事件。其他组件也会监听APIserver发出来的事件。
pod是kubernetes的基础单元,pod启动典型创建过程如下:
1)nodeName用于将pod调度到指定的node名称上(跳过调度器之间分配)
2)nodeselector用于将pod调度到匹配label的node上
- apiVersion: v1
- kind: Pod
- metadata:
- name: pod-example
- labels:
- app: nginx
- spec:
- nodeName: node1
- containers:
- - name: nginx
- image: nginx:1.15
- kubectl apply -f node1.yaml
- kubectl get pods -o wide
- 查看标签用法
- kubectl label --help
- Usage:
- kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N
- [--resource-version=version] [options]
- 需要获取node上的NAME名称
- kubectl get node
- 给对应的node设置标签分别
- kubectl label nodes node1 zz=cxk
-
- kubectl label nodes node2 cc=cxk
- 查看标签
- kubectl get nodes --show-labels
- vim nodeselector.yaml
- apiVersion: v1
- kind: Pod
- metadata:
- name: pod-example
- labels:
- app: nginx
- spec:
- nodeSelector:
- lc: fuheinan
- containers:
- - name: nginx
- image: nginx:1.15
- kubectl delete -f nodeselectl.yaml
- kubectl get pods -o wide
值 | 描述 |
Pending | Pod创建已经提交到Kubernetes。但是,因为某种原因而不能顺利创建。例如下载镜像慢,调度不成功。 |
Running | Pod已经绑定到一个节点,并且已经创建了所有容器。至少有一个容器正在运行中,或正在启动或重新启动。 |
Succeeded | Pod中的所有容器都已成功终止,不会重新启动。 |
Failed | Pod的所有容器均已终止,且至少有一个容器已在故障中终止。也就是说,容器要么以非零状态退出,要么被系统终止。 |
Unknown | 由于某种原luapiserver无法获得Pod的状态,通常是由于Master与Pod所在主机kubelet通信时出错。 |
- 查看pod事件
- kubectl describe TYPE NAME_PREFIX
-
- 查看pod日志(Failed状态下)
- kubectl logs POD_NAME
-
- 进入pod(状态为running,但是服务没有提供)
- kubectl exec –it POD_NAME bash