Skip to content

Zeroplex 生活隨筆

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

在 Ubuntu 22.04 上建立 Kubernetes cluster

Posted on 2022 年 10 月 15 日2022 年 10 月 15 日 By 日落 在〈在 Ubuntu 22.04 上建立 Kubernetes cluster〉中尚無留言

以下為 Ubuntu 22.04 上建立 Kubernetes cluster 的操作步驟,會建立:

  • 1 個 master node
  • 2 個 worker node,並透過 kubeadm join 到 master node

安裝前準備

要能夠作為 kubernetes nodes,硬體必須要:

  • 2 cores CPU 或更多
  • 至少 2GB RAM
  • SWAP 必須停用

Cluster Info

這邊建立的 cluster 會有三個 node,IP 請依照自己的測試環境替換:

  • 192.168.0.100 : master.kube.lab
  • 192.168.0.101 : worker1.kube.lab
  • 192.168.0.102 : worker2.kube.lab

設定 hostname

使用 hostnamectl 分別設定 3 個 node 的 hostname:

sudo hostnamectl set-hostname "master.kube.lab"

sudo hostnamectl set-hostname "worker1.kube.lab"
sudo hostnamectl set-hostname "worker2.kube.lab"

設定 /etc/hosts

將 node 的 IP / hostname 寫入 /etc/hosts :

192.168.0.100 master.kube.lab
192.168.0.101 worker1.kube.lab
192.168.0.101 worker2.kube.lab

停用 SWAP

記得在所有的 kubernetes node 停用 SWAP:

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

設定 iptables

這邊需要設定 IP forwarding 和 bridges:

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

設定完成以後,載入新的設定:

sudo sysctl --system

安裝 containerd.io

安裝 containerd 的步驟,可以直接參考 docker 的官方文件「Install Docker Engine on Ubuntu」。

先安裝必要套件:

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release \
    apt-transport-https

加入 docker 的 repository:

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新套件庫,並安裝 containerd:

sudo apt-get update
sudo apt-get install containerd.io

使用 cgroup 來跑 containerd:

containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

設定完成後,重新啟動 containerd:

sudo systemctl restart containerd
sudo systemctl enable containerd

安裝 kubeadm

可以參考官方文件「Install kubeadm」的步驟來安裝 kubeadm。

新增 kubeadm 套件庫:

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

安裝 kubeadm:

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

到此告一個段落。

機下來的步驟會依照 master node 以及 worker node 而有所不同。master node 會需要特別安裝一些控制套件;worker node 則比較簡單,只需要直接 join 到 master node 即可,不需要特別的設定。

設定 Kubernetes master node

啟動 master node 需要二個步驟:

  • kubeadm init
  • 安裝 Calico

初始化 kubeadm,記得修改 endpoint 的名稱:

sudo kubeadm init --control-plane-endpoint="master.kube.lab"

這個步驟會花掉一點時間。當所有動作都正確完成後,會看到類似下面的訊息:

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

....

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join master.kube.lab:6443 --token n07eg4.nedanz2kqztuvws2 \
	--discovery-token-ca-cert-hash sha256:f5e929bb2c6dbbaa7e2529955b18ccd99a71bb2c7282791e5ebb07013c8047c4

先將最後一行 kubeadm join 的指令記下來,這個指令將由 worker node 的 kubeadm 執行。

按照說明,建立 kube 的設定檔:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

動作都完成以後,執行 kubectl get nodes 就可以看到 cluster 的狀態:

kubectl get nodes
NAME              STATUS   ROLES           AGE   VERSION
master.kube.lab   Ready    control-plane   20m   v1.25.3

master node 因為剛初始化完畢,所以只會顯示一個 node。等到 worker node 都 join 到 master node 以後,就可以看到所有 nodes 的狀態。

master node 需要多安裝 Calico 套件,執行以下指令來安裝:

curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O
kubectl apply -f calico.yaml

指令執行以後,會在 kube-system 啟動需要的 pods:

kubectl get pods -n kube-system
NAME                                       READY   STATUS    RESTARTS      AGE
calico-kube-controllers-58dbc876ff-ls2br   1/1     Running   0             3m33s
calico-node-4m7jq                          1/1     Running   0             3m33s
calico-node-5zr5b                          1/1     Running   0             3m33s
coredns-565d847f94-8tclp                   1/1     Running   0             16m
coredns-565d847f94-g6mwh                   1/1     Running   0             16m
etcd-master.kube.lab                       1/1     Running   2 (13m ago)   16m
kube-apiserver-master.kube.lab             1/1     Running   2 (13m ago)   16m
kube-controller-manager-master.kube.lab    1/1     Running   2 (13m ago)   16m
kube-proxy-vp8rr                           1/1     Running   0             6m47s
kube-proxy-whzmv                           1/1     Running   1 (13m ago)   16m
kube-scheduler-master.kube.lab             1/1     Running   2 (13m ago)   16m

若 pods 都正常啟動,代表 master node 準備好讓 worker node join 了。

設定 worker node

worker node 不需要 kubeadm init,直接執行 kubeadm join 即可。將上方 worker node 的 join 指令直接貼上並執行:

sudo kubeadm join master.kube.lab:6443 --token 3bg0gz.ltu6i9qgylycwo8z \
	--discovery-token-ca-cert-hash sha256:30c700960b8eb1033f37cc057c7bde64dcab4ba1663e9e430bd5679d90d5ca03

這個步驟也會花掉一些時間。執行完成以後,可以回到 worker node 執行 kubectl get nodes,變可以看到 join 成功的 worker node。

第二個 worker node 一樣透過上面的方法直接做 join 即可。

有正常運作的話,在 master node 執行 kubectl get nodes 就可以看到 nodes 的狀態了,例如:

kubectl get nodes
NAME               STATUS   ROLES           AGE     VERSION
master.kube.lab    Ready    control-plane   12m     v1.25.3
worker1.kube.lab   Ready    <none>          70s     v1.25.3
worker2.kube.lab   Ready    <none>          5m10s   v1.25.3

備註:若 kubeadm 設定有發生錯誤的話,可以透過 kubeadm reset 重新建立設定檔。

Tags:Kubernetes, Linux, Ubuntu

文章導覽

Previous Post: 住院建議攜帶物品
Next Post: proxmox download mirror

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 小提琴 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.

Go to mobile version