目录
一、list-watch机制
1.list-watch介绍
1)kubernetes是通过list-watch的机制进行每个组件的动作,保持数据同步的,每个组件之间的设计实现了解耦。
2)用户是通过kubelet根据配置文件,向apiserver发送命令,在node节点上面建立pod和container。
APIserver经过API调用,权限控制,调用资源和存储资源的过程,实际上还没有真正开始部署应用,这里需要controller manager,scheduler和kubelet的协助才能完成整个部署过程。
![](/qrcode.jpg)
3)在kubernetes中,所以部署的信息都会写到etcd中保存,实际上etcd在存储部署信息的时候,会发送create事件给APIserver会通过监听(watch)etcd发过来的事件。其他组件也会监听APIserver发出来的事件。
2.list-watch工作流程
pod是kubernetes的基础单元,pod启动典型创建过程如下:
1.基本的调度方式
1)nodeName用于将pod调度到指定的node名称上(跳过调度器之间分配)
2)nodeselector用于将pod调度到匹配label的node上
2.nodename
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
3.nodeselector
查看标签用法
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