k8s 心得
安裝:
我們通過kubeadm工具安裝,安裝些基本元件 如 kubeadm kubectl kubelet,其他通過kubeadm配置啟動,具體在kubeadm init的時候都會打印出來,可以看到。
單獨安裝docker,並且k8s對docker相容的版本有限制,並不支援最近的docker版本。k8s會支援不僅一種容器,不僅是docker。
元件作用:
kubeadm 用來master初始化叢集 node加入叢集
kubectl 指令碼命令包 用來對叢集操作的,授權之後就可以對叢集操作了。可以用root 非root使用者操作。可以在master機器(預設)上授權操作。猜測也可以在node機器,叢集外機器(介面機)上授權操作。
kubelet 每臺節點都要安裝,集成了cAdvisor,收集本機資訊,node與master通訊。
kubeadm在初始化叢集時還會通過docker啟動一些服務,master獨有etcd,apiserver,kube-controller-manager,kube-scheduler,kube-dns。每臺機器上都會啟動kube-proxy。如果使用了flannel網路的話,還有kube-flannel。其他網路應該是對應其他網路服務容器。
master是可以HA的。
etcd用於儲存k8s資訊
apiserver 是api中心,https restful api和kubectl命令應該都訪問這裡
kube-controller-manager
kube-scheduler
kube-dns
kube-proxy kube-flannel 用於實現虛擬網路。容器分配ip是在kube-flannel上。其他服務埠轉發,服務ip應該都是靠這些服務來支援的。
nvidia-device-plugin,是容器中使用gpu使用的。看起來只起在node節點上,可能master需要再找一臺機器,不要浪費gpu資源。
NAME READY STATUS RESTARTS AGE IP NODE po/etcd-tensorflow0 1/1 Running 0 5h 192.168.163.11 tensorflow0 po/kube-apiserver-tensorflow0 1/1 Running 0 5h 192.168.163.11 tensorflow0 po/kube-controller-manager-tensorflow0 1/1 Running 0 5h 192.168.163.11 tensorflow0 po/kube-dns-6f4fd4bdf-pk4d5 3/3 Running 0 5h 172.17.0.2 tensorflow0 po/kube-flannel-ds-bzxfk 1/1 Running 0 5h 192.168.163.11 tensorflow0 po/kube-flannel-ds-d5g44 1/1 Running 0 5h 192.168.163.13 tensorflow2 po/kube-flannel-ds-t74hh 1/1 Running 0 5h 192.168.163.12 tensorflow1 po/kube-proxy-fs58k 1/1 Running 0 5h 192.168.163.11 tensorflow0 po/kube-proxy-jmk45 1/1 Running 0 5h 192.168.163.12 tensorflow1 po/kube-proxy-p5r9w 1/1 Running 0 5h 192.168.163.13 tensorflow2 po/kube-scheduler-tensorflow0 1/1 Running 0 5h 192.168.163.11 tensorflow0 po/kubernetes-dashboard-58f5cb49c-z4pbk 1/1 Running 0 5h 10.244.1.2 tensorflow1 po/nvidia-device-plugin-daemonset-4rbj2 1/1 Running 0 4h 10.244.2.2 tensorflow2 po/nvidia-device-plugin-daemonset-nscfk 1/1 Running 0 4h 10.244.1.3 tensorflow1
監控:
cAdvisor+Heapster+InfluxDB+Grafana
cAdvisor是自帶監控,整合進了 kubelet,採集每臺機器的資訊
Heapster是容器叢集監控和效能分析工具。
InfluxDB作為後端儲存
Grafana作為前端介面展示。
dashboard 可選元件,k8s配套介面,可以檢視很多叢集,節點,容器資訊,進行操作等等。可能通過restful api訪問apiserver實現的。需要授權才能訪問。
dashboard沒有預設沒有機器狀態的資訊,支援通過安裝Heapster來顯示監控資訊。
以上都可以通過容器啟動
許可權管理:
1.6新增RBAC授權。簡單來說就是許可權--角色--使用者的管理關係。
初始化時就建立了不少規則,所以可以叢集操作。其他更多的個性化的許可權就要自定義許可權來管理了。通過建立角色,許可權繫結關係等等來實現。許可權可以通過token來授權,也可以通過賬號密碼來授權。