K3s - 在內部網路架設 K3s + Rancher

K3s - 在內部網路架設 K3s + Rancher

jimchen5209

前言

這篇發生的時間點其實應該是在 K8s 之前。
起因是我們很久以前開發了一個在 K8s 上的服務,由於最近做了大版本更新需要進行測試,但是又不想影響到現有的服務,因此就想說要架設一個 K8s 環境來測試。
剛好看到了 K3s 這個輕量級的 Kubernetes 發行版,就決定來試試看。

K3s 簡介

K3s 是 Rancher Labs 開發的輕量級 Kubernetes 發行版,專為邊緣(Edge) 、IoT、CI/CD、開發者、測試等場景而設計。
K3s 是一個完整的 Kubernetes 發行版,包括 Kubernetes、etcd、CoreDNS、Flannel、Traefik 等核心組件,並且 K3s 記憶體使用較少,適合在資源有限的環境中使用。

安裝 K3s

最低系統需求

  • 1 CPU
  • 512 MB RAM

雖然官網是這麼說的,但仍建議記憶體開大一點,我把服務架設完之後,發現我 8GB 的記憶體已經使用 70% 了。

安裝

K3s 安裝相對 K8s 來說簡單許多,因為官方提供了一個安裝腳本,只需要執行這個腳本即可。

1
curl -sfL https://get.k3s.io | sh -

提示

如果需要指定版本,可以透過 INSTALL_K3S_VERSION 環境變數來指定。

1
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=<K3s version> sh -

例如:

1
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.27.11+k3s1 sh -

提示

如果需要指定網卡,可以透過 INSTALL_K3S_EXEC 環境變數來指定。
例如:

1
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--node-ip=192.168.129.31 -flannel-iface=ens34" sh -

安裝之後,同樣可以執行以下指令,讓你的 user 可以控制 k3s。

1
2
3
4
5
6
7
mkdir -p $HOME/.kube
sudo cp -i /etc/rancher/k3s/k3s.yaml $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 覆寫 KUBECONFIG 環境變數,請視需要改成別的 shell 設定檔
echo export KUBECONFIG=~/.kube/config >> .bashrc
source .bashrc

加入 K3s 集群 (可加可不加)

首先在 Master 節點上執行以下指令,取得 Token。

1
sudo cat /var/lib/rancher/k3s/server/node-token

會輸出類似以下訊息:

1
K1029e71cc72**********a3f10255891acc651c7585c**********fc37458aa76e::server:670837f4446e63020ff0870238997b08

到 Worker 節點上執行以下指令,加入 K3s 集群。

1
curl -sfL https://get.k3s.io | K3S_URL=https://<master 的 ip>:6443 K3S_TOKEN=<剛剛拿到的 token> sh -

例如:

1
curl -sfL https://get.k3s.io | K3S_URL=https://192.168.129.31:6443 K3S_TOKEN=K1029e71cc72**********a3f10255891acc651c7585c**********fc37458aa76e::server:670837f4446e63020ff0870238997b08 sh -

若您在上個步驟有額外設定環境變數,請記得在 Worker 節點上也設定相同的環境變數。

之後,回到 Master 節點,檢查 Node 是否已經加入 。

1
kubectl get nodes -o wide

安裝 Helm

Rancher 需要有 K8s 集群、Helm、Ingress Controller 才能正常運作。
K3s 安裝完成後即為 K8s 集群,並內建 Ingress,所以不需要另外安裝。
因此接下來要安裝的是套件管理工具 Helm。
Helm 是 Kubernetes 的套件管理工具,可以用來管理 Charts。

安裝

Helm 需要 git 和 curl,如果沒有安裝,請先安裝。
Helm 提供了一個安裝腳本,只需要執行這個腳本即可。

1
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

安裝 Rancher

前置作業都完成之後,接下來就是安裝 Rancher。
Rancher 是一個開源的 Kubernetes 管理平台,可以用來管理多個 Kubernetes 集群。

安裝 Helm Chart

Cert-Manager

Rancher 需要 Cert-Manager 來管理 SSL 憑證,所以我們需要先加入 Cert-Manager 的 Chart Repository。

1
helm repo add jetstack https://charts.jetstack.io

Rancher

Rancher 是透過 Helm Chart 來安裝的,所以我們需要先加入 Rancher 的 Chart Repository。

1
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

更新 Helm Repository

1
helm repo update

安裝 Cert-Manager 與 Rancher

建立一個 namespace 來安裝 Rancher。

1
kubectl create namespace cattle-system

安裝 Cert-Manager

1
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set installCRDs=true

安裝 Rancher

等待 Cert-Manager 安裝完成後,安裝 Rancher。
這邊現在是在內部網路,所以我們不需要使用 Let’s Encrypt 的憑證,可以直接使用自簽憑證。
Domain 請自取,稍後會用到。

1
helm install rancher rancher-stable/rancher --namespace cattle-system --set hostname=<Domain> --set bootstrapPassword=<bootstrap 密碼>

例如:

1
helm install rancher rancher-stable/rancher --namespace cattle-system --set hostname=rancher.k3s-master.lan --set bootstrapPassword=0000

等待 Rancher 安裝完成

1
kubectl -n cattle-system rollout status deploy/rancher

輸出類似以下訊息:

1
2
3
4
5
6
7
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
Waiting for deployment spec update to be observed...
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
Waiting for deployment "rancher" rollout to finish: 1 of 3 updated replicas are available...
Waiting for deployment "rancher" rollout to finish: 2 of 3 updated replicas are available...
...
deployment "rancher" successfully rolled out

設定 Domain (Hosts)

Rancher 安裝完成後,我們需要設定 Domain,讓我們可以透過瀏覽器連線到 Rancher。
最好的方法是透過路由器(如 RouterOS)設定 Static DNS,讓 Domain 指向到 Master 節點。
如果無法設定 Static DNS,可以在電腦上設定 Hosts 檔案。

  • Windows:C:\Windows\System32\drivers\etc\hosts
  • Linux:/etc/hosts

在 Hosts 檔案中加入以下設定。

1
<Master 節點的 IP> <Domain>

例如:

1
192.168.129.31 rancher.k3s-master.lan

連線到 Rancher

打開瀏覽器,連線到 https://<Domain>
瀏覽器會警告無效的憑證,這是因為我們使用的是自簽憑證,點擊進隱藏進階選項,然後點擊繼續前往。

接著會進入 Rancher 的設定頁面,輸入剛剛設定的 bootstrap 密碼,並設定 Rancher 網址及建立使用者之後,即可進入 Rancher。

恭喜你完成了 K3s + Rancher 的架設。

後記

第一次架設的時候,因為還不太熟 K8s,所以有不少部分不如我之前的認知。
回來寫這篇的時候,因為開始學 K8S 了,而且寫的時候有重新測試一次,有發現過程實際上還蠻簡單的。
綜合本篇與 K8s 的經驗,如果要測試 K8s 的使用,我覺得 K3s 會是一個不錯的選擇。
當然,如果是要在生產環境使用,還是建議使用原生的 K8s。

資料來源

  • Title: K3s - 在內部網路架設 K3s + Rancher
  • Author: jimchen5209
  • Created at : 2024-04-10 20:21:52
  • Updated at : 2024-04-14 22:27:41
  • Link: https://jw-blog.jimchen5209.me/2024/04/10/K3s-在內部網路架設-K3s-Rancher/
  • License: This work is licensed under CC BY-NC-SA 4.0.