筆記 | 在 Ubuntu 22.04 安裝 Kubernetes Cluster

Share
筆記 | 在 Ubuntu 22.04 安裝 Kubernetes Cluster
Photo by Growtika / Unsplash

許多網路文章中都有安裝 kubernetes cluster 的教學,也因為版本更迭,爬了很多的文章、裝了非常多次,整理以下的筆記,幫自己防忘記。

實作環境

  • 主機 (VM) 3 台,一台 master、兩台 node
    • pve-master
    • pve-node1
    • pve-node2
  • 作業系統 Ubuntu 22.04
  • Container Runtime 選擇 containerd.io

筆記的幾個大步驟,有些是所有節點都要做,有些則否,整理如底下的表格:

Step pve-master pve-node1 pve-node2
安裝前置 V V V
安裝 Container Runtime V V V
安裝 kubeadm V V V
建立 Kubernetes Control-Plane Node V
建立 Kubernetes Worker Node V V

安裝前置

重新載入設定以生效

sudo sysctl --system

載入 k8s 需要的核心模組

sudo modprobe overlay
sudo modprobe br_netfilter

調整 iptables 規則及啟用 IPv4 封包轉發

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

關閉系統交換區
參考 kubeadm 的安裝前說明

sudo swapoff -a
#目的是註解 /etc/fstab 裡的 swap
sudo sed -i '/swap/s/^/#/' /etc/fstab

更新系統套件至最新

sudo apt update
sudo apt upgrade

安裝 Container Runtime

啟動 Container Runtime

sudo systemctl start containerd
sudo systemctl enable containerd

將設定檔中的 SystemdCgroup 改為 true

sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

參考說明

產生 containerd 設定檔 (依預設值)

containerd config default | sudo tee /etc/containerd/config.toml

更新套件資訊,安裝 containerd.io

sudo apt update
sudo apt install containerd.io

加入 Docker 套件伺服器

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

取得 Docker for Ubutnu 的 GPG key

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

安裝需要的套件
OS 預設應該有安裝,但如果在安裝 OS 時有自行選擇套件,就需要再確認

sudo apt install ca-certificates curl

安裝 kubeadm

更新套件資訊,安裝 kubelet、kubeadm、kubectl

sudo apt update
sudo apt install -y kubelet kubeadm kubectl
#設定套件不更新
sudo apt-mark hold kubelet kubeadm kubectl

加入Kubernetes 套件伺服器

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

取得 Kubernetes 的 GPG key

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

建立 Kubernetes Control-Plane Node

安裝 Flannel,負責分配 cluster 中每個 pod 的 IP

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

便於非 root 用戶後續使用 kubectl 操作子節點

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

初始化 Kubernetes control-plane node

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

執行成功後會有一串提示訊息,將最後一段的 kubeadm join 複製備存,如以下的範例 (參考用,實際建置需複製 kubeadm init 成功後的提示訊息),子節點加入 cluster 時使用

sudo kubeadm join 10.10.1.3:6443 --token diwo8f.sm21fe24mj7c4mv2 --discovery-token-ca-cert-hash sha256:568c62d5c74a8e7b6b57e0fd4268365a896d3f2c78a60616bb6fc47154b4352c

建立 Kubernetes Worker Node

初始化 Kubernetes Worker Node,加入前一步建立好的 kubernetes cluster
以下範例僅參考,實際應該使用在 master 執行 kubeadm init 成功後產生的指令

sudo kubeadm join 10.10.1.3:6443 --token diwo8f.sm21fe24mj7c4mv2 --discovery-token-ca-cert-hash sha256:568c62d5c74a8e7b6b57e0fd4268365a896d3f2c78a60616bb6fc47154b4352c

完成前述步驟就已經建置起一個 Kubernetes Cluster 了,回到 Master 執行指令可以查看

kubectl get nodes

參考資料

Read more

又搬家了:從 Zeabur 遷移到 AWS Lightsail

又搬家了:從 Zeabur 遷移到 AWS Lightsail

是的,又搬家了。 前一篇「部落格遷移紀錄」才記錄了從 WordPress 搬到 Ghost,主機也從 SugarHosts、GCP 一路輾轉到了 Zeabur。原本覺得以這個部落格的流量與使用方式來說,Zeabur 簡單方便,應該可以安穩地用上一段時間。 近期 Zeabur 發生的資安事件,剛好讓我重新思考一直沒去想想這個筆記到底放哪好的問題,能符合掛這個小站的經濟效益,我又能在有餘裕時利用主機做一些嘗試,最後決定搬到 AWS Lightsail。 選擇 Lightsail 其實沒有太多 AWS 的使用經驗,一開始在查看時,想過是不是直接用 EC2,但研究了一會,對我這種單純放部落格的小站來說,建一個 EC2 能調整的東西很多,相對也代表需要理解與管理的東西更多,殺雞何需牛刀呢.. 於是又看到了 Lightsail ,看起來比較接近我需要的樣子:一台固定規格的 VM、一個 Static IP,加上相對單純的計價方式(

By Jo
桌面上的筆電顯示程式碼,旁邊放著咖啡杯,象徵日常部署與開發工作流

[紀錄] OpenClaw 部署指定模型

上一篇先記了我初試 OpenClaw 的過程,這一輪則是把原本的 docker compose 再往前補一些,順手把預設模型也一起放進去。 這次選擇的是 Ollama,預設模型設成 minimax-m2.5:cloud。 原本以為把 .env 補好、compose 啟動,接著就能開始用了。做了才知道事情沒有我想得順利,仍然還是需要手動進 container 執行指令。 因為這次在 docker compose 想放進預設模型,所以整個配置也跟著多補了一些。原本比較單純的 OpenClaw 部署,後來變成 openclaw + ollama 的配置,讓 OpenClaw 啟動後能直接接上模型。 不過模型名稱先放進去,事情也沒這麼順。 Ollama 要使用 cloud model 得先登入。第一次啟動後,要先進到 Ollama 容器裡跑

By Jo Assistant, Jo
[紀錄] 初試 OpenClaw

[紀錄] 初試 OpenClaw

夯了很久的 OpenClaw,近期開始出現了退安裝潮,我卻正要開始嘗試使用。 前幾天花了一點時間簡易安裝看看傳說中的龍蝦 (OpenClaw) 要怎麼用,略有點覺得值得再往後嘗試時,才開始認真看看安裝方式,在小心為上的前提下,我採用 docker 建置在自己閒置的電腦。 在 docker-compose.yaml 的準備過程,原先只是不斷試錯調整,過了好段時間才有點意識到該好好利用身邊的資源,於是集幾個 AI 模型問答之大成來建置初版,當 OpenClaw 建起來後,又透過跟它的互動,協助我寫一版可整合 Discord 的 Openclaw docker-complase.yaml 自用。(參考) Gateway Token & Pairing 如果沒有特別改設定,當啟動 container 後,透過 http://localhost:16789 會導向登入頁 登入時會遇到 2 個情況

By Jo