您好,登錄后才能下訂單哦!
《深入剖析Kubernetes - 09? 從容器到容器云 談談Kubernetes的本質》
kubeadm 簡化部署操作,僅需要以下2個操作即可創建一個k8s 集群
#?創建一個?Master?節點 $?kubeadm?init #?將一個?Node?節點加入到當前集群中 $?kubeadm?join
k8s 每個組件都是一個獨立的二進制文件,部署過程無非就是將二進制跟配置文件分布到指定機器,并通過腳本啟停進程,這些工作在物理機時代完全可以通過saltstack 或者ansible 來完成,但后續運維成本會比較高,得自己實現進程監控,健康檢查等等。
既然k8s 做服務編排,自然可以解決服務發現,服務注冊,健康檢查等功能。
具體方法是,master機器上 先手動在機器上安裝kubeadm、kubelet、kubectl 這3個二進制文件;
而node 節點上面則只需要安裝kubelet / kubeadm 然后通過kubeadm join 添加到集群內部即可
一、kubeadm init 工作流程
(1)檢查機器環境是否滿足
1、linux內核是否3.10 以上
2、cgroups 模塊是否啟用
3、hostname 是否符合標準(遵循DNS命名規則)
4、kubeadm 和 kubelet 版本是否匹配
5、是否已安裝kubernetes 二進制文件
6、10250/10251/10252 等端口是否被占用
7、ip、mount 等指令是否存在
8、docker 是否安裝
... ...
(2)生成kubernetes 對外提供服務所需證書和對應目錄
默認放在/etc/kubernetes/pki 目錄下
主要有ca.crt / ca.key
apiserver-kubelet-client.crt / apiserver-kubelet-client.key
(3)為master組件生成Pod 配置文件
即api-server、scheduler、controller-manager 以static-pod 方式部署
static-pod 允許將yaml 文件放在指定目錄,在kubelet 啟動時指定該目錄,此時它會自動檢查該目錄并加載所有pod yaml文件并啟動相應pod
為什么要用static pod?
剛創建集群的時候,上面并沒有api-server 、kubectl ,無法創建相關的pod,故只能通過這種方式啟動pod。
master 組件yaml文件生成目錄為:/etc/kubernetes/manifests
ls?/etc/kubernetes/manifests/ etcd.yaml??kube-apiserver.yaml??kube-controller-manager.yaml??kube-scheduler.yaml
這里有個api-server.yaml 的例子:
apiVersion:?v1 kind:?Pod metadata: ??annotations: ????scheduler.alpha.kubernetes.io/critical-pod:?"" ??creationTimestamp:?null ??labels: ????component:?kube-apiserver ????tier:?control-plane ??name:?kube-apiserver ??namespace:?kube-system spec: ??containers: ??-?command: ????-?kube-apiserver ????-?--authorization-mode=Node,RBAC ????-?--runtime-config=api/all=true ????-?--advertise-address=10.168.0.2 ????... ????-?--tls-cert-file=/etc/kubernetes/pki/apiserver.crt ????-?--tls-private-key-file=/etc/kubernetes/pki/apiserver.key ????image:?k8s.gcr.io/kube-apiserver-amd64:v1.11.1 ????imagePullPolicy:?IfNotPresent ????livenessProbe: ??????... ????name:?kube-apiserver ????resources: ??????requests: ????????cpu:?250m ????volumeMounts: ????-?mountPath:?/usr/share/ca-certificates ??????name:?usr-share-ca-certificates ??????readOnly:?true ????... ??hostNetwork:?true ??priorityClassName:?system-cluster-critical ??volumes: ??-?hostPath: ??????path:?/etc/ca-certificates ??????type:?DirectoryOrCreate ????name:?etc-ca-certificates ??...
通過這么一個yaml配置文件,告訴k8s 創建相應的api object , 這個api對象定義參考上述yaml 文件
(4)為該集群生成bootstrap token
供worknode 節點 通過kubeadm join 加入到該集群
(5)安裝默認插件
例如kube-proxy / dns (以容器的方式部署)
二、kubeadm join 工作流程
為了方便部署操作,不需要手動從master 上面拷貝證書到每臺worknode , kubeadm 至少需要發起一次"不安全模式" 的訪問到api-server,從而拿到保存在configmap中的cluster-info,而bootstrap token 扮演的就是這個過程中安全驗證的角色。
三、指定kubeadm 部署參數
$ kubeadm init --config kubeadm.yaml
在kubeadm.yaml 配置文件中定義
PS:kubeadm 的不足之處在于,它并沒有解決像etcd 、master 等組件的高可用部署,而是單點部署。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。