skip to content

快速產生 kubernetes 測試環境(K3D)

最近團隊打算把 kubernetes 納入團隊必須技能, 我這邊來負責 training 團隊成員的部分, 當然 seminar 或是一對一指導是少不了的, 但是我認為沒有好的 playground 是無法讓成員輕鬆無壓力的亂搞亂系統, 學習效率也出不來, 所以今天這篇文章就是要讓大家在 10 分鐘內在自己的電腦中, 生出一個 kubernetes 的環境

緣起

最近團隊打算把 kubernetes 納入團隊必須技能, 我這邊來負責 training 團隊成員的部分, 當然 seminar 或是一對一指導是少不了的, 但是我認為沒有好的 playground 是無法讓成員輕鬆無壓力的亂搞亂系統, 學習效率也出不來, 所以今天這篇文章就是要讓大家在 10 分鐘內在自己的電腦中, 生出一個 kubernetes 的環境…

lab 步驟

  • 產生一個 vm
  • 安裝 docker/k3d 套件
  • 建立一個 k3s cluster/Kubernetes
  • 建立 workspace 操作環境

lab 概念圖

做出來大概的樣子會是這樣子

2022-03-17-01-30-56


安裝 multipass

這裡就直接去安裝好了, 這工具對 mac/windows 都有支援, 寫的很詳細 https://github.com/canonical/multipass

產生一個 vm

# 產生一個 vm
# 資源給太小, 會遇到有的沒有的問題, 先給大點
multipass launch \
  --name vm0 \
  --cpus 2 \
  --mem 4G \
  --disk 20G \
  --cloud-init ./cloud-init.yml

# 列出你建出來的 vm
multipass list

接下來所有的事情都在 vm0 裡面做喔!很重要

接下來所有的事情都在 vm0 裡面做喔!很重要

接下來所有的事情都在 vm0 裡面做喔!很重要

# 進入建出來的 vm
multipass shell vm0

安裝 docker/k3d 套件

# 安裝 docker
curl -fsSL get.docker.com -o get-docker.sh && chmod 700 get-docker.sh && ./get-docker.sh

# 測試是 docker 安裝完成
docker ps

# 安裝 install k3d tools
curl -s https://raw.githubusercontent.com/rancher/k3d/master/install.sh | bash

# 測試 k3d
k3d version

建立一個 k3s cluster

# 建立 cluster, 命名為 abc0
# 一個 server 一個 agent
# 先把 traefik 拿掉
k3d cluster create abc0 \
  --agents 1 \
  --k3s-arg "--disable=traefik@server:0" \
  --api-port <vm-ip>:6550

# 測試 cluster
k3d cluster list

建立 workspace (Kubernetes 控制環境)

為什麼我們要做 workspace 呢? 其實在 vm0 內就可以使用 kubectl 了, k3s 是有幫你安裝一些控制的命令, 注意一下安裝後的 log 檔可以知道了, 但是在正常的情形下會需要 helm 等其他有的沒有的, 所以為了不要讓 server 髒掉, 我都習慣會另外做的 workspace 環境

# 產生 Kubernetes config
# export KUBECONFIG=$(k3d kubeconfig get abc0)
mkdir -p ~/.kube
k3d kubeconfig get abc0 > ~/.kube/config

# check listen port
lsof -i | grep 6550

# 建置 workspace
# --platform linux/arm64 (m1)
docker run --rm -it \
  --net=host \
  -v ~/.kube/config:/root/.kube/config \
  dtzar/helm-kubectl:3.8.0 \
  bash

# test
kubectl get nodes
kubectl cluster-info

結語

這整 lab 做起來, 如果熟悉的話應該不需要 10 分鐘, 用 k3d 來做 kubernetes 的環境, 應該是最簡單的方式。但是有同事反應 service 的 type 為 nodeType, 是無法用 node port 連到, 找一下原因, 是因為 k3d 畢竟還是用 docker 的方式模擬出來的, docker 也只有把 80 和 6550 port 丟出來, 所以如果要連, 是要用 ingress 或是 port-forward 轉出來這樣…想了想, 之後應該會有一篇真實的 2 台 vm 的 kubenetes 的叢集環境, 這樣測試環境才會是比較完整符合生產環境的…

參考