如何用 Kubeadm 在 Debian 11 上安裝 Kubernetes 集群
你是否在尋找一份在 Debian 11(Bullseye)上安裝 Kubernetes 集群的簡易指南?
這份分步指南將向你展示如何使用 Kubeadm 工具在 Debian 11 上安裝 Kubernetes 集群。
Kubernetes(k8s)集群包含主控節點和工作節點,用於運行容器化的應用程序。主控節點作為控制平面,工作節點為實際工作負載提供環境。
前置條件:
- 已安裝 Debian 11
- 2 CPU / vCPU
- 2 GB RAM
- 20 GB 空閑硬碟空間
- 有管理員許可權的 sudo 用戶
- 穩定的網路連接
實驗環境配置:
在本文中,我使用了 3 個 Debian 11 系統的節點,配置如下
- 主控節點(
k8s-master
) – 192.168.1.236 - 工作節點 1(
k8s-worker1
) – 192.168.1.237 - 工作節點 2(
k8s-worker2
) – 192.168.1.238
事不宜遲,我們直接進入安裝步驟。
1、設置主機名和更新 /etc/hosts 文件
在主控節點和工作節點上使用 hostnamectl
命令來設置主機名:
$ sudo hostnamectl set-hostname "k8s-master" // 在主控節點運行
$ sudo hostnamectl set-hostname "k8s-worker1" // 在工作節點 1 運行
$ sudo hostnamectl set-hostname "k8s-worker2" // 在工作節點 2 運行
在所有節點的 /etc/hosts
文件末尾添加下面幾行內容:
192.168.1.236 k8s-master
192.168.1.237 k8s-worker1
192.168.1.238 k8s-worker2
2、在所有節點上關閉交換分區
我推薦關閉交換分區,以便更絲滑地使用 kubelet
。在所有節點上執行以下命令來關閉交換分區:
$ sudo swapoff -a
$ sudo sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab
3、配置 Kubernetes 集群相關的防火牆規則
如果你的操作系統防火牆是打開的,請分別在主控節點和工作節點允許以下的埠。
在主控節點,執行:
$ sudo ufw allow 6443/tcp
$ sudo ufw allow 2379/tcp
$ sudo ufw allow 2380/tcp
$ sudo ufw allow 10250/tcp
$ sudo ufw allow 10251/tcp
$ sudo ufw allow 10252/tcp
$ sudo ufw allow 10255/tcp
$ sudo ufw reload
在工作節點,執行:
$ sudo ufw allow 10250/tcp
$ sudo ufw allow 30000:32767/tcp
$ sudo ufw reload
注意:如果你的 Debian 11 系統防火牆是關閉的,可以跳過此步驟。
4、在所有節點安裝 Containerd 運行時
Containerd 是容器運行時的行業標準,所有節點必須安裝 Containerd。
先在所有節點上配置如下的核心參數,再安裝 Containerd。
$ cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
$ sudo modprobe overlay
$ sudo modprobe br_netfilter
$ cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
運行如下命令,以使上面的更改生效:
$ sudo sysctl --system
現在,在所有節點上運行如下 apt
命令來安裝 Conatinerd。
$ sudo apt update
$ sudo apt -y install containerd
在所有節點上運行如下命令來配置 Containerd:
$ containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
在所有節點上設置 cgroupdriver
為 systemd
,編輯 /etc/containerd/config.toml
文件,找到 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
部分,添加一行內容:SystemdCgroup = true
:
$ sudo vi /etc/containerd/config.toml
保存並退出文件。
在所有節點上重啟並啟用 containerd
服務:
$ sudo systemctl restart containerd
$ sudo systemctl enable containerd
5、添加 Kubernetes Apt 庫
執行以下命令,添加 Kubernetes Apt 庫:
$ sudo apt install gnupg gnupg2 curl software-properties-common -y
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/cgoogle.gpg
$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
6、在所有節點上安裝 kubelet、kubectl 和 kubeadm
在所有節點上執行以下 apt
命令,安裝 Kubernetes 集群組件,如 kubelet
、kubectl
以及 kubeadm
。
$ sudo apt update
$ sudo apt install kubelet kubeadm kubectl -y
$ sudo apt-mark hold kubelet kubeadm kubectl
7、使用 Kubeadm 創建 Kubernetes 集群
現在我們可以創建 Kubernetes 集群了,在主控節點上執行以下命令:
$ sudo kubeadm init --control-plane-endpoint=k8s-master
命令輸出:
出現以上內容,說明控制平面初始化成功。在輸出中,有普通用戶與集群交互的命令,也有把任何工作節點加入到集群的命令。
要開始與集群進行交互,請在主控節點上運行以下命令:
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
執行以下 kubectl
命令來獲取節點和集群的信息:
$ kubectl get nodes
$ kubectl cluster-info
以上命令的輸出:
通過執行 kubeadm join
命令來把兩個工作節點加入到集群。
注意:請從 kubeadm init
命令的輸出中複製完整的命令。在我的例子中,命令如下:
$ sudo kubeadm join k8s-master:6443 --token ta622t.enl212euq7z87mgj
--discovery-token-ca-cert-hash sha256:2be58f54458d0e788c96b8841f811069019161f9a3dd8502a38c773e5c6ead17
在工作節點 1 上的輸出如下:
在工作節點 2 上的輸出如下:
在主控節點上執行以下命令,檢查節點的狀態:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane 23m v1.25.0
k8s-worker1 NotReady <none> 9m27s v1.25.0
k8s-worker2 NotReady <none> 2m19s v1.25.0
$
為了使節點狀態變為 ready
,我們需要安裝 容器莢 網路插件,如 Calico 或 flannel。
8、安裝 Calico Pod 網路插件
在主控節點上執行以下命令安裝 Calico:
$ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml
輸出:
在所有節點上執行以下命令,配置防火牆允許 Calico 的埠:
$ sudo ufw allow 179/tcp
$ sudo ufw allow 4789/udp
$ sudo ufw allow 51820/udp
$ sudo ufw allow 51821/udp
$ sudo ufw allow 4789/udp
$ sudo ufw reload
執行以下命令檢查下 Calico 的狀態:
$ kubectl get pods -n kube-system
完美!現在再檢查下節點狀態:
非常棒!上面的輸出說明主控節點和工作節點的狀態都是 ready
。現在這個集群可以正常工作了。
9、檢查 Kubernetes 集群安裝是否正確
我們嘗試通過 deployment
命令來部署基於 Nginx 的應用程序,來驗證 Kubernetes 集群的安裝是否正確。執行以下命令:
$ kubectl create deployment nginx-app --image=nginx --replicas 2
$ kubectl expose deployment nginx-app --name=nginx-web-svc --type NodePort --port 80 --target-port 80
$ kubectl describe svc nginx-web-svc
以上命令的輸出:
使用以下的 curl
命令通過節點埠 30036 來訪問基於 nginx 的應用程序。
注意:在 curl
命令中,可以使用兩個工作節點任一的主機名。
$ curl http://k8s-worker1:30036
以上的輸出說明我們可以正常訪問基於 nginx 的應用程序了。
以上為全部內容。希望本文對你有用,參照本文可以在 Debian 11 上正常安裝 Kubernetes 集群。如有任何問題,請在下面評論區告訴我。
via: https://www.linuxtechi.com/install-kubernetes-cluster-on-debian/
作者:Pradeep Kumar 選題:lkxed 譯者:lxbwolf 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive