雲端工程師在k3d上的初體驗

身為DevOps工程師
8 min readJun 6, 2021

--

Photo by Roman Synkevych on Unsplash

平時在使用到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工程師

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

身為DevOps工程師
身為DevOps工程師

Written by 身為DevOps工程師

目前在蓋亞資訊擔任DevOps Consultant。最近才從後端的世界轉成投向DevOps的懷抱,目前專注在Kubernetes, GitLab, DevSecOps的學習中。

Responses (1)

Write a response