前言
本文為「Kubernetes 實作手冊:基礎入門篇」課程的學習筆記。
安裝 kubeadm
指令 kubeadm
適合一般使用者創建 Kubernetes 叢集,並且支援單一節點或多節點。
根據官方文件,需要在每台機器上安裝以下套件:
- kubeadm:用來初始化叢集的指令。
- kubelet:在叢集中的每個節點上用來啟動 Pod 和容器等。
- kubectl:用來與叢集通訊的命令列工具。
首先,指定要安裝的 Kubernetes 版本。
1 | export KUBE_VERSION="1.17.0" |
更新 apt 套件索引,並安裝使用 Kubernetes apt 倉庫所需要的套件:
1 | sudo apt-get update && sudo apt-get install -y apt-transport-https curl |
下載 Google Cloud 公開簽名密鑰:
1 | curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - |
添加 Kubernetes apt 倉庫:
1 | cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list |
更新 apt 套件索引,安裝指定版本的 kubelet、kubeadm 和 kubectl:
1 | sudo apt-get update |
kubelet 現在每隔幾秒就會重啟,因為它陷入了一個等待 kubeadm 的無窮迴圈。
啟動叢集
注意 Pod 網路不行和任何主機網路重疊,如果有衝突,在執行 kubeadm init
指令時需要使用 --pod-network-cidr
參數。
1 | sudo kubeadm init --pod-network-cidr=10.244.0.0/16 |
kubeadm 會開始在 /etc/kubernetes/manifests
資料夾創建一些檔案,這些 YAML 檔各自描述了四個核心元件:包括 API Server、Controller、Scheduler 和 etcd。
kubelet 會去讀取這些檔案,然後透過 Docker 創造出這些 container,這些 container 互相溝通就形成了 Kubernetes 叢集,最後 kubeadm 會透過和 API Server 溝通的方式,把 kube-proxy 以及 DNS 這兩個 container 部署到 Kubernetes 叢集之中。
為了讓一般使用者也能夠使用叢集,執行以下指令。
1 | mkdir -p $HOME/.kube |
接著,使用以下指令取得 Pod 列表,由於 Kubernetes 的 4 個核心元件是被放到預設的 namespace,因此需要指定 namespace 為 kube-system
。
1 | kubectl -n kube-system get pods |
最後,啟動一個 CNI 外掛,此處使用 Flannel 外掛。
1 | kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml |
再檢查一次 Pod 列表,所有的 Pod 狀態都已更新為正在運行。
1 | kubectl -n kube-system get pods |