在 RHEL 中使用 Kubeadm 安裝 Kubernetes 叢集
在本文中,我們將學習在 RHEL 8 以及其衍生版本如 AlmaLinux 8、CentOS 8 和 Rocky Linux 8 上使用 Kubeadm 安裝 Kubernetes 叢集。
在開始之前,你必須對 Kubernetes 的概念和架構 有基本的了解。在本文中,我們將展示一個兩節點的集群。
要進行安裝,我們需要以下所提到的基本需求。
- 最少 2 個主機。
- 2 個 CPU。
- 2GB 實體記憶體 (RAM)。
- 20GB 磁碟空間。
- 需要網路連線以下載套件。
1. 配置主機名稱和 IP 位址
在主節點和工作節點上設置主機名稱並配置 hosts。操作系統檔案 hosts 用於將主機名稱或域名轉換為 IP 位址。
在這裡我們將有兩位主持人:
- ostechmaster - 大師
- ostechworker - 工人
使用以下命令設置主機名稱,設置主機名稱後需要重新啟動。
# hostnamectl set-hostname ostechmaster編輯 /etc/hosts 檔案:
# vi /etc/hosts在 /etc/hosts 檔案中加入伺服器和客戶端的主機名稱及 IP 位址:
進行 ping 測試以確保連接性:
[root@ostechmaster ~]# ping ostechworker
PING ostechworker (172.31.5.141) 56(84) bytes of data.
64 bytes from ostechworker (172.31.5.141): icmp_seq=1 ttl=64 time=0.472 ms
64 bytes from ostechworker (172.31.5.141): icmp_seq=2 ttl=64 time=0.492 ms
64 bytes from ostechworker (172.31.5.141): icmp_seq=3 ttl=64 time=1.43 ms
64 bytes from ostechworker (172.31.5.141): icmp_seq=4 ttl=64 time=0.425 ms2. 停用 SElinux
在主節點和工作節點中禁用 SElinux,如此一來如果 SElinux 被禁用,所有容器都可以輕鬆訪問主機文件系統。
使用 vi 編輯器在配置文件 /etc/selinux/config 中設置 'SELINUX=disabled'。需要重啟才能使 SELinux 的更改生效。
[root@ostechmaster ~]# vi /etc/selinux/config使用以下命令確保 SELinux 的狀態。
[root@ostechmaster ~]# sestatus
SELinux status: disabled3. 在主節點和工作節點禁用交換分頁
所有 Kubernetes 主機(主節點和工作節點)都需要停用 Swap。這是 Kubernetes 社群推薦的部署方法。如果未停用 Swap,kubelet 服務將無法在主節點和工作節點啟動。
運行以下命令以禁用交換分頁(SWAP):
[root@ostechmaster ~]# swapoff -a && sed -i '/swap/d' /etc/fstab4. 在防火牆中允許所需的端口
為了讓 Kubernetes 元件彼此互動,必須開啟某些必要的埠。以下是需要開啟的埠,以便 Kubernetes 元件之間的連接。
控制平面/主伺服器:
| 協議 | 方向 | 埠範圍 | 目的 | 使用者 |
| 傳輸控制協定 | 入站 | 6443 | Kubernetes API 伺服器 | 全部 |
| 傳輸控制協定 | 入站 | 2379-2380 | etcd 伺服器客戶端 API | kube-apiserver、etcd |
| 傳輸控制協定 | 入站 | 10250 | Kubelet API | 自我,控制平面 |
| 傳輸控制協定 | 入站 | 10259 | kube-scheduler | 自我 |
| 傳輸控制協議 | 入站 | 10257 | kube-controller-manager | 自我 |
工作節點:
| 協議 | 方向 | 埠範圍 | 目的 | 使用者 |
| 傳輸控制協定 | 入站 | 10250 | Kubelet API | 自我,控制平面 |
| 傳輸控制協定 | 入站 | 30000-32767 | NodePort 服務 | 全部 |
要允許所需的端口通過防火牆,請運行以下命令。
主節點:
[root@ostechmaster ~]# firewall-cmd --permanent --add-port=6443/tcp[root@ostechmaster ~]# firewall-cmd --permanent --add-port=2379-2380/tcp[root@ostechmaster ~]# firewall-cmd --permanent --add-port=10250/tcp[root@ostechmaster ~]# firewall-cmd --permanent --add-port=10251/tcp[root@ostechmaster ~]# firewall-cmd --permanent --add-port=10259/tcp[root@ostechmaster ~]# firewall-cmd --permanent --add-port=10257/tcp[root@ostechmaster ~]# firewall-cmd --reload工作節點:
[root@ostechworker ~]# firewall-cmd --permanent --add-port=10250/tcp[root@ostechworker ~]# firewall-cmd --permanent --add-port=30000-32767/tcp[root@ostechworker ~]# firewall-cmd --reload我們在主節點和工作節點上都禁用了防火牆,因為這只是用於示範目的。然而,不建議在實時生產環境中這樣做。
使用以下命令來停止並禁用防火牆。
[root@ostechmaster ~]# systemctl stop firewalld[root@ostechmaster ~]# systemctl disable firewalld5. 安裝 Docker
Docker 讓「建立」容器變得更簡單,而 Kubernetes 則讓即時「管理」它們成為可能。要打包和傳送軟體,使用 Docker。要啟動和擴展您的應用程式,使用 Kubernetes。
在集群中的所有機器上添加 Docker 軟體庫。
在 /etc/yum.repos.d/ 目錄下建立名為 docker.repo 的檔案:
[root@ostechmaster ~]# vi /etc/yum.repos.d/docker.repo
在其中添加以下行:
[docker]
baseurl=https://download.docker.com/linux/centos/8/x86_64/stable/
gpgcheck=0按下 ESC 鍵並輸入 :wq 來保存檔案並關閉它。
在主節點和工作節點上安裝 Docker:
# yum -y install docker-ce安裝完成後,在兩個節點上啟用並啟動 Docker:
# systemctl enable docker# systemctl start docker檢查並確保 Docker 在兩台機器上都在運行。
# systemctl status docker6. 安裝 Kubernetes
在主節點與工作節點中添加 Kubernetes 儲存庫。
在 Master 和 worker 的 /etc/yum.repos.d/ 目錄下建立檔案 kubernetes.repo:
# vi /etc/yum.repos.d/kubernetes.repo加入以下行:
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg按 ESC 然後輸入 :wq 來保存文件並關閉它。
在主節點和工作節點使用以下命令安裝 kubeadm、kubelet 和 kubectl:
# yum install -y kubelet kubeadm kubectl --disableexcludes=Kubernetes在兩台機器上啟用並啟動 kubelet 服務:
# systemctl enable kubelet# systemctl start kubelet檢查 Kubelet 服務的狀態,並確保它在兩台機器上都運行正常。
# systemctl status kubelet7. 初始化 Kubernetes
使用以下命令在主伺服器上初始化 Kubernetes
[root@ostechmaster ~]# kubeadm init你將會看到以下輸出,顯示 Kubernetes 控制平面已成功初始化。並且會提到某些步驟以開始使用這個集群,請依照操作。
還要從輸出中複製並保存 'kubeadm join' 命令,它將用於將工作節點加入集群。
範例輸出:
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 172.31.10.29:6443 --token 220tvj.051bkeyj5tg6v55r \
--discovery-token-ca-cert-hash sha256:434c49c7969256a7fae3880b340202cadd4fd29d3d381ab37e1cb8b1d05e86f2由於我們正以 root 用戶進行操作,請按照上述輸出在主伺服器上執行以下命令。
[root@ostechmaster ~]# export KUBECONFIG=/etc/kubernetes/admin.conf8. 配置 POD 網路
Kubernetes Pod 網路是在 Kubernetes 中相互連接的組件網路。這個網路概念可以透過幾種不同的方式來實現。在我們的示範中,我們將使用 ‘Weave Net’。
在主伺服器上執行以下命令以設定 POD 網路。
[root@ostechmaster ~]# export kubever=$(kubectl version | base64 | tr -d '\n')[root@ostechmaster ~]# kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version=$kubever範例輸出:
serviceaccount/weave-net created
clusterrole.rbac.authorization.k8s.io/weave-net created
clusterrolebinding.rbac.authorization.k8s.io/weave-net created
role.rbac.authorization.k8s.io/weave-net created
rolebinding.rbac.authorization.k8s.io/weave-net created
daemonset.apps/weave-net created
[root@ostechmaster ~]#9. 加入工作節點
執行 'kubeadm join' 命令將工作節點加入叢集。這是我們從 'kubeadm init' 輸出中複製的命令。
[root@ostechworker ~]# kubeadm join 172.31.10.29:6443 --token 220tvj.051bkeyj5tg6v55r --discovery-token-ca-cert-hash sha256:434c49c7969256a7fae3880b340202cadd4fd29d3d381ab37e1cb8b1d05e86f2您可以使用以下命令在主伺服器中驗證節點
# kubectl get nodes範例輸出:
NAME STATUS ROLES AGE VERSION
ostechmaster Ready control-plane,master 32m v1.23.1
ostechworker Ready <none> 30m v1.23.1結論
在本文中,我們已經看到使用 Kubeadm 設置和配置 Kubernetes 叢集的詳細步驟。請參考我們之前的 Kubernetes 系列文章,以便對 Kubernetes 的架構和概念有詳細的了解。我們將在即將到來的文章中介紹 Kubernetes 的操作。
閱讀下一篇:
- 如何在 Linux 中創建和管理 Kubernetes Pods
資源:
- https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/





