控制組件狀態(etcd--api---[scheduler,controller-manager])
kubectl get componentstatus
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true"}
工作組件(api--[kube-proxy,kubelet]---docker)
各組件以POD運行
kubectl get pod -o custom-columns=POD:metadata.name,NODE:spec.nodeName --sort-by spec.nodeName -n kube-system
POD NODE
coredns-6967fb4995-c9jlr minikube
coredns-6967fb4995-f2zzv minikube
etcd-minikube minikube
kube-addon-manager-minikube minikube
kube-apiserver-minikube minikube
kube-controller-manager-minikube minikube
kube-proxy-f6ctq minikube
kube-scheduler-minikube minikube
kubernetes-dashboard-95564f4f-8zvs6 minikube
storage-provisioner minikube
資源元數據如何存儲在etcd存儲
etcdctl ls /registry
etcdctl ls /registry/pods
etcdctl ls /registry/pods/default (每個條目對應一個pod的鍵值對)
etcdctl get /regis七ry --prefix = true
ecdct1 get /registry/pods/default/kubia-159041347-wtGga
etcd 實例數量應該是奇數RAFT一致性算法要求集羣大部分(法定數量)節點參與才能進行到下 一 個狀態
API服務器:認證--授權--驗證--監聽
客戶端如kubectl通過http與API進行通信
調度器:爲新建的pod分配節點
調度算法過濾所有節點選出最優,高級高度依賴大量因子
控制器管理器:通過種控制器將實際狀態調整爲期望狀態
replication,replicaset,daemonset, job,deployment,statefulset,node,service,endpoints,namespace,persistentvalue
kubelet:在api服務器創建node資源註冊該節點,分配pod並運行容器
kubelet-proxy:確保對服務IP端口的連接到達某個pod
kubectl----api服務器(deployments,replicasets,pods)---控制器管理器---調度器---kubelet----docker
Deployment控制器生成ReplicaSet---ReplicaSet控制器創建pod資源---調度器分配節點給新創建的pod
觀察羣集事件kubectl get events --watch
[root@mes2 ~]# kubectl run nginx --image=ningx
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/nginx created
[root@mes2 ~]#kubectl get events --watch
0s Normal ScalingReplicaSet deployment/nginx Scaled up replica set nginx-879cf7b8c to 1
0s Normal SuccessfulCreate replicaset/nginx-879cf7b8c Created pod: nginx-879cf7b8c-fpfzn
0s Normal Scheduled pod/nginx-879cf7b8c-fpfzn Successfully assigned default/nginx-879cf7b8c-fpfzn to minikube
暫停容器收納pod所有容器共享一個命名空間
跨pod網絡需要無NAT
基礎設施容器啓動前創建一虛擬ethernet對(容器命名空間eth0,主機命名空間veth)
報文通過:A容器veth pair---網關---A節點適配器---B節點適配器---網關---B容器veth pir
容器網絡接口(CNI)允許Kubemetes可配置使用任何CNI插件
當服務創建時api服務器通知kubelet-proxy會讓該服務在該節點可尋址(重定向到指定pod)
應用高可用:1運行多實例,2領導選舉機制確保一個有效
控制平面高可用:etcd集羣;api服務器多實例;調度器領導選舉
樂觀併發保證多個實例寫名字到資源僅一個成功即領導者
[root@mes2 ~]# kubectl get endpoints kube-scheduler -n kube-system -o yaml
apiVersion: v1
kind: Endpoints
metadata:
annotations:
control-plane.alpha.kubernetes.io/leader: '{"holderIdentity":"mes2_b6640f77-54bb-4d6b-ae5f-c662a6e2cd53","leaseDurationSeconds":15,"acquireTime":"2020-03-20T08:49:12Z","renewTime":"2020-04-10T08:25:18Z","leaderTransitions":3}'
creationTimestamp: "2019-08-23T09:37:46Z"
name: kube-scheduler
namespace: kube-system
resourceVersion: "24246334"
selfLink: /api/v1/namespaces/kube-system/endpoints/kube-scheduler
uid: 795716fa-6b62-4db0-a65d-0e7d6d01e1db