基本原理
kubernetes通過watch的機制進行每個組件的協作,每個組件之間的設計實現瞭解耦.
調度方式
nodeName用於將Pod調度到指定的Node名稱上,跳過調度器直接分配.
nodeSelector用於將Pod調度到匹配Label的Node上,前提是node要有標籤.
原理詳解
圖中左上角的運維人員往節點中創建一個nginx資源.
API Server和etcd和Scheduler是master.
Kubelet和Docker是node節點.
API Server做爲唯一入口,接受create創建資源的屬性信息寫入到etcd中(屬性信息:名稱,鏡像名稱,限制條件),
etcd完善發現機制(watch)給Scheduler調度器(查看那個節點適合),然後綁定相關pod的網絡信息,
反饋給API Server,收到信息後api寫入etcd中,此時etcd存儲了pod的網絡信息(IP),node1、中的kubelet會管理pod資源,
會觸發容器的創建命令,安裝完成後docker就會反饋狀態信息給API Server,當API Server收到狀態信息寫入到etcd中.
API Server相當於是平臺中的管理員,負責記錄相關信息,
etcd相當於管理員的記事本,相關信息內容寫在其中,
如果API Server掛了,那麼k8s基本上就癱瘓了.
範例演示-nodeName
vim pod5.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-example
labels:
app: nginx
spec:
nodeName: 192.168.142.131
#指定給node1節點
containers:
- name: nginx
image: nginx:1.15
#驗證是否創建了nginx
kubectl create -f pod5.yaml
kubectl get pods
kubectl describe pod pod-example
kubectl delete -f .
kubectl get pods
範例演示-nodeSelector
kubectl label --help
kubectl get node
- 給對應的node設置標籤分別爲kgc=a和kgc=b
kubectl label nodes 192.168.142.130 kgc=a
kubectl label nodes 192.168.142.131 kgc=b
kubectl get nodes --show-labels
vim pod5.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-example
labels:
app: nginx
spec:
nodeSelector:
kgc: b
containers:
- name: nginx
image: nginx:1.15
kubectl apply -f pod5.yaml
kubectl describe pod pod-example
故障排除
kubectl describe TYPE NAME_PREFIX
kubectl logs POD_NAME
- 進入pod(狀態爲running,但是服務沒有提供)
kubectl exec –it POD_NAME bash
謝謝閱讀!