網站搜尋

在 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 位址:

設定主機名稱和 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 ms

2. 停用 SElinux

在主節點和工作節點中禁用 SElinux,如此一來如果 SElinux 被禁用,所有容器都可以輕鬆訪問主機文件系統。

使用 vi 編輯器在配置文件 /etc/selinux/config 中設置 'SELINUX=disabled'。需要重啟才能使 SELinux 的更改生效。

[root@ostechmaster ~]# vi /etc/selinux/config

停用 SElinux

使用以下命令確保 SELinux 的狀態。

[root@ostechmaster ~]# sestatus
SELinux status: disabled

3. 在主節點和工作節點禁用交換分頁

所有 Kubernetes 主機(主節點和工作節點)都需要停用 Swap。這是 Kubernetes 社群推薦的部署方法。如果未停用 Swap,kubelet 服務將無法在主節點和工作節點啟動。

運行以下命令以禁用交換分頁(SWAP):

[root@ostechmaster ~]# swapoff -a && sed -i '/swap/d' /etc/fstab

4. 在防火牆中允許所需的端口

為了讓 Kubernetes 元件彼此互動,必須開啟某些必要的埠。以下是需要開啟的埠,以便 Kubernetes 元件之間的連接。

控制平面/主伺服器:

協議方向埠範圍目的使用者
傳輸控制協定入站6443Kubernetes API 伺服器全部
傳輸控制協定入站2379-2380etcd 伺服器客戶端 APIkube-apiserver、etcd
傳輸控制協定入站10250Kubelet API自我,控制平面
傳輸控制協定入站10259kube-scheduler自我
傳輸控制協議入站10257kube-controller-manager自我

工作節點:

協議方向埠範圍目的使用者
傳輸控制協定入站10250Kubelet API自我,控制平面
傳輸控制協定入站30000-32767NodePort 服務全部

要允許所需的端口通過防火牆,請運行以下命令。

主節點:

[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 firewalld

5. 安裝 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 docker

檢查 Docker 狀態

6. 安裝 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 kubelet

檢查 Kubelet 服務狀態

7. 初始化 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

初始化 Kubernetes

由於我們正以 root 用戶進行操作,請按照上述輸出在主伺服器上執行以下命令。

[root@ostechmaster ~]#  export KUBECONFIG=/etc/kubernetes/admin.conf

8. 配置 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/