K3s - 在內部網路架設 K3s + Rancher
前言
這篇發生的時間點其實應該是在 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 | mkdir -p $HOME/.kube |
加入 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 | Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available... |
設定 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。
資料來源
- Quick-Start Guide | K3s
- Helm | Installing Helm
- Install/Upgrade Rancher on a Kubernetes Cluster | Rancher
- k3s 輕量化叢集組建 - HackMD
- Downgrade K3s Version. Want to downgrade your K3s version? | by Madusha Gunasekara | Medium
- Installing Rancher on k3s with Helm Charts | by Özgür Kolukısa | Medium
- Is there any way to bind K3s / flannel to another interface? - Stack Overflow
- Title: K3s - 在內部網路架設 K3s + Rancher
- Author: jimchen5209
- Created at : 2024-04-10 20:21:52
- Updated at : 2024-11-27 14:50:30
- Link: https://blog.lce-lab.dev/2024/04/10/K3s-在內部網路架設-K3s-Rancher/
- License: This work is licensed under CC BY-NC-SA 4.0.