雲端工程師在k3d上的初體驗
平時在使用到k8s的場合,通常都是在公司上班的時候才會有需要,但最近希望可以在自己的mac上直接部署一套簡單的 k8s起來,方便我做一些小測試與研究。稍微查了一下,發現了k3d與KIND似乎都蠻符合我目前想找的條件 — 簡單快速。
今天這邊主要就是紀錄我使用k3d的一些過程,也希望可以幫助到一些需要k3d中文教學的人,未來若是有多測試的一些功能的話,會再記錄在medium上。KIND的部分就留給未來的我去處理了~
k3d
而k3d 是由Rancher開發出來的工具,是將他們自家(Rancher)開發的k3s使用Docker的方式直接部署。而k3s是基於k8s的架構,朝向更輕量化的方向,開發出來的產品。由於k8s全名為 “kubernetes” 總共有十個字,組合方式為 “ k +中間的8個字 + s” 的方式,所組合出來的簡寫。 k3s將消耗的記憶體減少了一半,所以把十個字減少一半的話,就會變成五個字,所以稱為 k3s,也是蠻有趣的XD
因為我是使用了mac,來攥寫這篇文章。安裝方式是選擇了 homebrew 來安裝,若是其他的作業系統請參考k3d官網(https://k3d.io/)來進行安裝。
# brew install k3d
Step 1. 首先,使用k3d建立cluster
我們先試著使用最簡單的方式直接部署了單台node的k8s cluster。
# k3d cluster createINFO[0000] Prep: Network
INFO[0000] Created network ‘k3d-k3s-default’ (e93451fe390a8ecd7a637e6a51a97c192e078510008c770b2f95ea01144a9b41)
INFO[0000] Created volume ‘k3d-k3s-default-images’
INFO[0001] Creating node ‘k3d-k3s-default-server-0’
INFO[0005] Pulling image ‘docker.io/rancher/k3s:latest’
INFO[0017] Creating LoadBalancer ‘k3d-k3s-default-serverlb’
INFO[0022] Pulling image ‘docker.io/rancher/k3d-proxy:v4.4.4’
INFO[0028] Starting cluster ‘k3s-default’
INFO[0028] Starting servers…
INFO[0028] Starting Node ‘k3d-k3s-default-server-0’
INFO[0042] Starting agents…
INFO[0042] Starting helpers…
INFO[0042] Starting Node ‘k3d-k3s-default-serverlb’
INFO[0043] (Optional) Trying to get IP of the docker host and inject it into the cluster as ‘host.k3d.internal’ for easy access
INFO[0049] Successfully added host record to /etc/hosts in 2/2 nodes and to the CoreDNS ConfigMap
INFO[0049] Cluster ‘k3s-default’ created successfully!
INFO[0049] — kubeconfig-update-default=false → sets — kubeconfig-switch-context=false
INFO[0049] You can now use it like this:
kubectl config use-context k3d-k3s-default
kubectl cluster-info
在最後看到了,建立cluster成功,並可以使用kubectl command來操作。
若是希望部署成多台node的cluster,多加 -s 的參數來設定 node數量。
k3d cluster create -s <node數量>
以下我們直接使用3台node的cluster做demo。
使用k3d commands確認狀態皆正常
# k3d node list
NAME ROLE CLUSTER STATUS
k3d-k3s-default-server-0 server k3s-default running
k3d-k3s-default-server-1 server k3s-default running
k3d-k3s-default-server-2 server k3s-default running
k3d-k3s-default-serverlb loadbalancer k3s-default running
— — — — —
Step 2. 使用kubectl 操作k3d cluster
首先,先將kubeconfig中的context 切換為我們剛剛建立出來的 k3d-k3d-default
。
# kubectl config use-context k3d-k3s-default
Switched to context “k3d-k3s-default”.
使用 kubectl 確認node狀態
# kubectl get no
NAME STATUS ROLES AGE VERSION
k3d-k3s-default-server-0 Ready control-plane,etcd,master 3m10s v1.21.1+k3s1
k3d-k3s-default-server-1 Ready control-plane,etcd,master 2m53s v1.21.1+k3s1
k3d-k3s-default-server-2 Ready control-plane,etcd,master 2m10s v1.21.1+k3s1
Step 3. 新增Node
建立新的node
k3d node create — role=server demo
重新確認狀態,雖然`k3d node list` 可以看到server處於 running的狀態了,但是使用 `kubectl get no` 卻沒辦法看到。
# k3d node list
NAME ROLE CLUSTER STATUS
k3d-demo-0 server k3s-default running
k3d-k3s-default-server-0 server k3s-default running
k3d-k3s-default-server-1 server k3s-default running
k3d-k3s-default-server-2 server k3s-default running
k3d-k3s-default-serverlb loadbalancer k3s-default running# kubectl get no
NAME STATUS ROLES AGE VERSION
k3d-k3s-default-server-0 Ready control-plane,etcd,master 3m45s v1.21.1+k3s1
k3d-k3s-default-server-1 Ready control-plane,etcd,master 3m28s v1.21.1+k3s1
k3d-k3s-default-server-2 Ready control-plane,etcd,master 2m45s v1.21.1+k3s1
等待一下後,重新執行 kubectl get no
這時新的node就能夠正常被加入與開啟
# kubectl get no
NAME STATUS ROLES AGE VERSION
k3d-demo-0 Ready control-plane,etcd,master 40s v1.21.1+k3s1
k3d-k3s-default-server-0 Ready control-plane,etcd,master 4m56s v1.21.1+k3s1
k3d-k3s-default-server-1 Ready control-plane,etcd,master 4m39s v1.21.1+k3s1
k3d-k3s-default-server-2 Ready control-plane,etcd,master 3m50s v1.21.1+k3s1
Facebook: 身為DevOps工程師