這篇文章主要是講講k8s中的知識點歸納,以幫助理解。
雖然平時也做筆記和總結,但是就將內容復制過來不太好,而且我比較喜歡打字。
因此知識點歸納總結還是以敘述的口吻來說說,并結合我的理解加以論述。
k8s和docker
首先講一講docker和k8s之間的聯系,由于k8s在1.2之后就不再原生支持docker,因此需要使用cri-dockerd來做適配。
cri是k8s定義的一組gRPC接口,用于標準化k8s和底層容器的交互。除此之外,k8s提供了cri的客戶端工具crictl來和cri交互。
cri-dockerd就是實現了上面說的接口,作為docker與k8s之間的適配器進行轉換。
像cri-o、containerd也實現了該接口,并且不需要像docker一樣依賴適配器。containerd曾經是docker的底層組件,不過后面被提取出來作為獨立的項目。
主要是docker過于臃腫,與k8s的理念背道而馳,不過containerd倒是挺好用的。
禁用交換空間
強調多次,首先禁用交換空間。k8s的調度依賴cpu和內存,如果使用交換空間,會導致對內存的估計不準確(或者說使用了交換空間)。
過度調度導致部分進程都換到交換空間中去,而交換空間的IO速度遠遠低于內存,這樣會導致集群的性能整體下降。
這是k8s不能容忍的,所以為了獲得更好的性能,需要犧牲對交換空間的使用,雖然這樣主機就不能在休眠的時候依舊保存狀態了,交換空間的存在能夠在系統休眠的時候保存系統狀態。
k8s組件的介紹
控制平面組件:kube-apiserver、ectd、kube-controller-manager、kube-schedule
雖然控制平面組件可以在任何節點,但是為了方便管理,建議都放在master節點上。
- kube-apiserver集群api入口
- kube-schedule調度資源pod,確定哪個pod在哪個node上運行
- etcd--分布式鍵值存儲數據庫,保存集群的所有配置和狀態數據
- kube-controller-manager?--運行各種控制器,確保集群狀態符合預期
數據平面組件:kubelet、kube-proxy
其實這里叫數據平面組件不太合適,master節點也需要kubelet組件。當然,漏說了一個kubectl這個與apiserver交互的客戶端工具,也是在master節點上的。
kubeadm的init工作
我們都是用kubeadm來初始化集群的,這是個很方便的工具,主要可以做以下三個事情:1.初始化master節點,2.提供集群維護命令,3.配置集群網絡。
初始化包括
- 自動創建 CA 根證書、API Server 證書、Service Account 密鑰等,確保集群通信安全。?
- 啟動 `kube-apiserver`、`etcd`、`kube-scheduler`、`kube-controller-manager`等核心組件?
- 創建 kubeconfig文件(如/etc/kubernetes/admin.conf),供 kubectl訪問集群。
- 生成加入令牌(Token):為 Worker 節點提供安全的加入憑證
集群維護命令包括kubeadm reset清理集群,kubeadm upgrade來升級集群。當然,還提供kubeadm join來講節點加入到集群中去。