DEV Community

Damrongsak Reetanon
Damrongsak Reetanon

Posted on

kind ของดีที่ทำให้เรามี K8S Cluster ใช้งานแบบไม่ยุ่งยาก บน Ubuntu 20.04 LTS

ตอนนี้เขียนจากส่วนประกอบต่าง ๆ ดังนี้

  • Ubuntu 20.04.2 LTS
  • Docker version 19.03.8
  • kubectl ติดตั้งเรียบร้อย
  • สร้าง Kubernetes Cluster ชื่อว่า d8k ประกอบด้วย 1 Control Plane และ 2 Node

kind - Kubernetes IN Docker เป็นเครื่องมือที่จะทำให้มี Kubernetes Cluster ใช้งานโดยใช้ Docker Container เป็น node ดังนั้นถ้าระบบปฎิบัติการใดที่มี kind ให้ใช้งานได้ และติดตั้ง Docker ได้ก็จะทำได้ เท่าที่อ่านดูก็เป็นการจับคู่ที่หลากหลาย อย่างใน macOS ก็จะเป็น kind สำหรับ macOS และ Docker Desktop หรือว่า kind สำหรับ Windows 10 และ WSL2 - Windods Subsystem for Linux 2 ส่วนใน Linux ไม่น่าจะต้องห่วง น่าจะใช้งาน kind ได้อยู่แล้ว

ตรวจสอบสถานะการทำงานของ Docker

root@docker:~# docker version
Client:
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.13.8
 Git commit:        afacb8b7f0
 Built:             Fri Dec 18 12:15:19 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.8
  Git commit:       afacb8b7f0
  Built:            Fri Dec  4 23:02:49 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.3-0ubuntu2.2
  GitCommit:
 runc:
  Version:          spec: 1.0.1-dev
  GitCommit:
 docker-init:
  Version:          0.18.0
  GitCommit:
Enter fullscreen mode Exit fullscreen mode

ติดตั้ง kind

root@docker:~#  curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.10.0/kind-linux-amd64
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 7277k  100 7277k    0     0  4453k      0  0:00:01  0:00:01 --:--:-- 12.6M

root@docker:~# chmod +x kind

root@docker:~# ./kind version
kind v0.10.0 go1.15.7 linux/amd64
Enter fullscreen mode Exit fullscreen mode

สร้าง Configuration File สำหรับ kind เพื่อสร้าง 1 Control Plane และ 2 Node

❯ cat > lab.yaml <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
EOF
Enter fullscreen mode Exit fullscreen mode

สร้าง Kubernetes Cluster ชื่อว่า d8k จาก lab.yaml

root@docker:~# ./kind create cluster --config lab.yaml --name d8k
Creating cluster "d8k" ...
 ✓ Ensuring node image (kindest/node:v1.20.2) 🖼
 ✓ Preparing nodes 📦 📦 📦
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
 ✓ Joining worker nodes 🚜
Set kubectl context to "kind-d8k"
You can now use your cluster with:

kubectl cluster-info --context kind-d8k

Not sure what to do next? 😅  Check out https://kind.sigs.k8s.io/docs/user/quick-start/
Enter fullscreen mode Exit fullscreen mode
  • การติดตั้งใช้เวลานานพอสมควรเนื่อจาก Container Image ของ kind node (v1.20.2) มีขนาด 1.17 GB
  • หลังจากติดตั้งเสร็จ kind จะเพิ่มข้อมูลลงใน .kube/config เพื่อให้พร้อมใช้งาน

​ตรวจสอบความเรียบร้อย และความพร้อมของ Kubenetes Cluster

root@docker:~# ./kind get clusters
d8k
root@docker:~# kubectl config get-contexts
CURRENT   NAME       CLUSTER    AUTHINFO   NAMESPACE
*         kind-d8k   kind-d8k   kind-d8k
root@docker:~# kubectl get nodes
NAME                STATUS   ROLES                  AGE     VERSION
d8k-control-plane   Ready    control-plane,master   6m11s   v1.20.2
d8k-worker          Ready    <none>                 5m35s   v1.20.2
d8k-worker2         Ready    <none>                 5m39s   v1.20.2
root@docker:~# kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:39737
KubeDNS is running at https://127.0.0.1:39737/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Enter fullscreen mode Exit fullscreen mode

หากไม่ต้องการใช้งาน Kubernetes Cluster แล้วสามารถลบด้วยคำสั่ง kind

root@docker:~# ./kind delete clusters d8k
Deleted clusters: ["d8k"]
Enter fullscreen mode Exit fullscreen mode

หากต้องการระบุ version ของ Kubernetes สามารถทำได้โดยการระบุ version ได้ โดยข้อมูลของ image ในแต่ละ version หาได้จาก kind release เช่นต้องการติดตั้ง Kubernetes Cluster version 1.19.7

root@docker:~# cat > lab.yaml <<EOF
> kind: Cluster
> apiVersion: kind.x-k8s.io/v1alpha4
> nodes:
> - role: control-plane
>   image: kindest/node:v1.19.7@sha256:a70639454e97a4b733f9d9b67e12c01f6b0297449d5b9cbbef87473458e26dca
> - role: worker
>   image: kindest/node:v1.19.7@sha256:a70639454e97a4b733f9d9b67e12c01f6b0297449d5b9cbbef87473458e26dca
> - role: worker
>   image: kindest/node:v1.19.7@sha256:a70639454e97a4b733f9d9b67e12c01f6b0297449d5b9cbbef87473458e26dca
> EOF

root@docker:~# ./kind create cluster --config lab.yaml --name d8k
Creating cluster "d8k" ...
 ✓ Ensuring node image (kindest/node:v1.19.7) 🖼
 ✓ Preparing nodes 📦 📦 📦
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
 ✓ Joining worker nodes 🚜
Set kubectl context to "kind-d8k"
You can now use your cluster with:

kubectl cluster-info --context kind-d8k

Thanks for using kind! 😊

root@docker:~# kubectl get nodes
NAME                STATUS     ROLES    AGE   VERSION
d8k-control-plane   Ready      master   78s   v1.19.7
d8k-worker          NotReady   <none>   46s   v1.19.7
d8k-worker2         NotReady   <none>   46s   v1.19.7
Enter fullscreen mode Exit fullscreen mode

สร้าง pod แรกใน Kubernetes ที่สร้างโดย kind

root@docker:~# kubectl run myfiristpod --image damrongsak/hello:8080
pod/myfiristpod created
root@docker:~# kubectl get pods
NAME          READY   STATUS    RESTARTS   AGE
myfiristpod   1/1     Running   0          26s
Enter fullscreen mode Exit fullscreen mode

มูลค่าความสุข

Discussion (2)

Collapse
itarunpitimon_11 profile image
Internet Protocol

20.04 LTS << not TLS

Collapse
rdamrong profile image
Damrongsak Reetanon Author

ขอบคุณครับ ^___^