前言

前篇 已經撰寫完安裝用的設定檔,接下來就是安裝系統了。

這是一個系列文,目錄 在此。

下載相對應的安裝檔案

如果是 Proxmox 或是實體機器,可以參考 Talos - 安裝 Extension,進 talos image factory 網站下載包含需要的 Extension 的 metal 版 ISO 檔。

Proxmox 記得多勾 qemu guest 的 Extension。

若是 ESXi,可以直接下載 ova 格式:https://github.com/siderolabs/talos/releases/download/v1.7.2/vmware-amd64.ova

建立 VM

Proxmox

建立 Proxmox VM 時要注意 CPU 選擇 x86-64-v2,在 Proxmox 8.0 以前預設的 kvm64 是不支援的。

其他設定可以依照自己需求,能掛上 ISO 開機即可。詳情可參考 官方文件

ESXi

ESXi 可使用 ISO 開機,後續的作法如同 Proxmox

也可使用獨有的方式,以 ova 檔案建立 VM,建立後調整硬碟大小至適當大小,並加上以下設定

guestinfo.talos.config=$(base64 -i controlplane.yaml)
disk.enableUUID=1

圖形化介面操作大概是:

第一步選擇 OVF File,依照步驟建立 VM

建立完 VM 後,將硬碟、CPU、RAM 調整至適當的大小

進入進階設定

新增兩個鍵值,一個是 guestinfo.talos.config,另一個是 disk.enableUUID

  • guestinfo.talos.config 的值需要將對應的 controlplane.yaml 轉成 base64 後貼上
  • disk.enableUUID 的值設為 1

VM 開機

避免出錯,我有先將所有 VM 產生的 MAC Address 填入 DHCP Server 綁定 IP

Proxomx

此時的 Proxmox 應該會是 Maintenance Mode,等待我們下指令送出 Machine Configuration

執行 talosctl apply-config 送出指令

$ talosctl apply-config --talosconfig=./efficient-cluster01/talosconfig --nodes=10.2.7.11 --file=./efficient-cluster01/controlplane.11.yaml --insecure;
$ talosctl apply-config --talosconfig=./efficient-cluster01/talosconfig --nodes=10.2.7.13 --file=./efficient-cluster01/controlplane.13.yaml --insecure;
$ talosctl apply-config --talosconfig=./efficient-cluster01/talosconfig --nodes=10.2.7.16 --file=./efficient-cluster01/worker.16.yaml --insecure;

下完 talosctl apply-config 後,會開始進入 Installing Mode,並重新開機

重新開機後,進入 Booting Mode,kubelet 會從 unhealthy 變成 healthy

ESXi

因為前面已經先用 guestinfo.talos.config 餵給 ESXi VM machine config 了,會直接進入 Booting Mode,不需要再下指令

但若使用 ISO 開機,就要像 Proxmox 的步驟下 talosctl apply-config

設定 talosctl

在啟動機器之前可以先設定 talosctl,往後下指令就不需要那麼繁瑣,每一次都要加上 --talosconfig 指定設定檔位置

# controlplanes
$ talosctl --talosconfig=./efficient-cluster01/talosconfig config endpoint 10.2.7.11 10.2.7.12 10.2.7.13
# all nodes (controlplane + worker)
$ talosctl --talosconfig=./efficient-cluster01/talosconfig config node 10.2.7.11 10.2.7.12 10.2.7.13 10.2.7.16 10.2.7.17
$ talosctl config merge ./efficient-cluster01/talosconfig
# Config 會被 merge 至 ~/.talos/config
 
# verify
$ talosctl config contexts
# CURRENT   NAME                  ENDPOINTS                       NODES
# *         efficient-cluster01   10.2.7.11,10.2.7.12,10.2.7.13   10.2.7.11,10.2.7.12,10.2.7.13...
$ talosctl get members -n 10.2.7.11
# NODE        NAMESPACE   TYPE     ID            VERSION   HOSTNAME      MACHINE TYPE   OS               ADDRESSES
# 10.2.7.11   cluster     Member   control-e01   20        control-e01   controlplane   Talos (v1.7.3)   ["10.2.7.11"]
# 10.2.7.11   cluster     Member   control-e02   12        control-e02   controlplane   Talos (v1.7.3)   ["10.2.7.12"]
# 10.2.7.11   cluster     Member   control-e03   18        control-e03   controlplane   Talos (v1.7.3)   ["10.2.7.13"]
# 10.2.7.11   cluster     Member   worker-e01    17        worker-e01    worker         Talos (v1.7.3)   ["10.2.7.16"]
# 10.2.7.11   cluster     Member   worker-e02    16        worker-e02    worker         Talos (v1.7.3)   ["10.2.7.17"]

啟動

進入 Booting Mode 後,等待 control plane 的 kubelet 進入 healthy 狀態,就可以開始啟用叢集了

啟用叢集只需要對其中一台 control plane 下指令即可

$ talosctl bootstrap -n 10.2.7.11

此時會發現 stage 會變成 running,但 ready 會是 false,因為還沒有加上 CNI

下載 kubeconfig

使用 talosctl kubeconfig 可以協助我們下載 kubeconfig,這樣就可以使用 kubectl 來操作叢集了

$ talosctl kubeconfig --nodes 10.2.7.11
# ~/.kube/config 會被 update 叢集
$ kubectl get nodes
# NAME          STATUS     ROLES           AGE    VERSION
# control-e01   NotReady   control-plane   117s   v1.30.1
# control-e02   NotReady   control-plane   2m4s   v1.30.1
# control-e03   NotReady   control-plane   2m     v1.30.1
# worker-e01    NotReady   <none>          98s    v1.30.1
# worker-e02    NotReady   <none>          116s   v1.30.1

安裝 CNI

由上面 kubectl get nodes 的結果可以看到,叢集還是 NotReady 的狀態,因為我們還沒有安裝 CNI

$ helm repo add cilium https://helm.cilium.io/
# "cilium" has been added to your repositories
$ helm repo update
# Hang tight while we grab the latest from your chart repositories...
# ...Successfully got an update from the "cilium" chart repository
# Update Complete. ⎈Happy Helming!⎈
$ helm install \
    cilium \
    cilium/cilium \
    --version 1.15 \
    --namespace kube-system \
    --set ipam.mode=kubernetes \
    --set=kubeProxyReplacement=true \
    --set=securityContext.capabilities.ciliumAgent="{CHOWN,KILL,NET_ADMIN,NET_RAW,IPC_LOCK,SYS_ADMIN,SYS_RESOURCE,DAC_OVERRIDE,FOWNER,SETGID,SETUID}" \
    --set=securityContext.capabilities.cleanCiliumState="{NET_ADMIN,SYS_ADMIN,SYS_RESOURCE}" \
    --set=cgroup.autoMount.enabled=false \
    --set=cgroup.hostRoot=/sys/fs/cgroup \
    --set=k8sServiceHost=localhost \
    --set=k8sServicePort=7445 \
    --set=hubble.listenAddress=":4244" \ # hubble ui cilium 內建的監控工具,可以觀察網路流量
    --set=hubble.relay.enabled=true \
    --set=hubble.ui.enabled=true
# NAME: cilium
# LAST DEPLOYED: Sat May 25 00:02:42 2024
# NAMESPACE: kube-system
# STATUS: deployed
# REVISION: 1
# TEST SUITE: None
# NOTES:
# You have successfully installed Cilium with Hubble.
 
# Your release version is 1.15.5.
 
# For any further help, visit https://docs.cilium.io/en/v1.15/gettinghelp

安裝完 CNI 後,叢集的狀態就會變成 Ready 了

$ kubectl get nodes
# NAME          STATUS   ROLES           AGE   VERSION
# control-e01   Ready    control-plane   12m   v1.30.1
# control-e02   Ready    control-plane   12m   v1.30.1
# control-e03   Ready    control-plane   12m   v1.30.1
# worker-e01    Ready    <none>          12m   v1.30.1
# worker-e02    Ready    <none>          12m   v1.30.1

大功告成,叢集已經啟用完成,可以開始部署應用程式了