Cloud/Kubernetes

[k8s] kind๋กœ Kubernetes ์‹ค์Šต ํ™˜๊ฒฝ ๊ตฌ์„ฑํ•˜๊ธฐ

The Engineer, Lucy 2024. 10. 21. 22:22

Kind๋ž€?

Kind๋Š” ๋กœ์ปฌ ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์†์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

Kind๋Š” Go ์–ธ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ, Docker์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ kubeadm์„ ์ด์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์œ„ ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ด kind ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Kind ์„ค์น˜ํ•˜๊ธฐ

์„ค์น˜ ๊ฐ€์ด๋“œ ์›๋ณธ URL : https://kind.sigs.k8s.io/docs/user/quick-start/#installation

MacOS

brew install kind

Windows

choco install kind

Linux

curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.15.0/kind-windows-amd64
Move-Item .\kind-windows-amd64.exe c:\some-dir-in-your-PATH\kind.exe

Kind๋กœ ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ

ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ

kind create cluster # Default cluster context ์ด๋ฆ„์€ 'kind' ๋กœ ์ƒ์„ฑ
kind create cluster --name lucy # cluster context ์ด๋ฆ„์„ 'lucy' ๋กœ ์ง€์ •

ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ ํ™•์ธ

kind get clusters
kubectl cluster-info --context lucy

ํด๋Ÿฌ์Šคํ„ฐ ์‚ญ์ œ

kind delete cluster # ํด๋Ÿฌ์Šคํ„ฐ ํ•œ ๊ฐœ ์‚ญ์ œ

kind delete clusters kind-local-cluster # ํด๋Ÿฌ์Šคํ„ฐ ํ•˜๋‚˜ ์ด์ƒ ์‚ญ์ œ

์„ค์ • ํŒŒ์ผ์„ ์ด์šฉํ•œ Kind ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ

ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ

์„ค์ • ํŒŒ์ผ์„ ์ด์šฉํ•œ ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ

์„ค์ •ํŒŒ์ผ์„ ์ด์šฉํ•ด์„œ kind ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kind create cluster --config kind-example-config.yaml

3๊ฐœ ๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ

3๊ฐœ ๋…ธ๋“œ(1 controller, 2worker) ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •

# three node (two workers) cluster config
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker

6๊ฐœ ๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: control-plane
- role: control-plane
- role: worker
- role: worker
- role: worker

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฒ„์ „ ์„ค์ •

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฒ„์ „์— ๋”ฐ๋ฅธ ์ด๋ฏธ์ง€๋Š” https://github.com/kubernetes-sigs/kind/releases์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  image: kindest/node:v1.16.4@sha256:b91a2c2317a000f3a783489dfb755064177dbc3a0b2f4147d50f04825d016f55
- role: worker
  image: kindest/node:v1.16.4@sha256:b91a2c2317a000f3a783489dfb755064177dbc3a0b2f4147d50f04825d016f55

๋„คํŠธ์›Œํฌ ์„ค์ •

  • Pod Subnet ์„ค์ •
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  podSubnet: {IP ์ฃผ์†Œ}

๊ธฐ๋ณธ์ ์œผ๋กœ IPv4 pod subnet์œผ๋กœ "10.244.0.0/16"์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • Service Subnet ์„ค์ •
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  serviceSubnet: {IP ์ฃผ์†Œ}

๊ธฐ๋ณธ์ ์œผ๋กœ IPv4 pod subnet์œผ๋กœ "10.96.0.0/16"์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • Default CNI ์„ค์ •

Caliaco์™€ ๊ฐ™์€ 3rd party CNI ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ๋Š” default CNI ์„ค์น˜๋ฅผ ํ•˜์ง€ ๋ง์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค..

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  # default CNI๊ฐ€ ์„ค์น˜ ๋˜์ง€ ์•Š๋Š”๋‹ค.
  disableDefaultCNI: true
  • kube-proxy ๋ชจ๋“œ ์„ค์ •

iptables ๋˜๋Š” IPVS ์ค‘์— ์„ ํƒํ•ด์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  default ๋Š” iptables์ž…๋‹ˆ๋‹ค.

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  kubeProxyMode: "ipvs"

์ตœ์ข… ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ

  • ํด๋Ÿฌ์Šคํ„ฐ yaml ์ž‘์„ฑ
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: cwave-cluster
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  image: kindest/node:{{์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฒ„์ „}}
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: TCP
  - containerPort: 443
    hostPort: 443
    protocol: TCP
- role: worker
  image: kindest/node:{{์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฒ„์ „}}
- role: worker
  image: kindest/node:{{์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฒ„์ „}}
networking:
  serviceSubnet: {IP ์ฃผ์†Œ}
  podSubnet: {IP ์ฃผ์†Œ}
  • ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ
# ์ƒ์„ฑ
kind create cluster  --config {yaml ํŒŒ์ผ}

# ์‚ญ์ œ
kind delete cluster --name {ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„}
  • ํด๋Ÿฌ์Šคํ„ฐ ์ ‘์† ์ •๋ณด ํ™•์ธ
kind get kubeconfig --internal --name {ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„}

ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ ๊ฒฐ๊ณผ

$ kind create cluster --config .\set-cluster.yaml
Creating cluster "lab-cluster" ...
 • Ensuring node image (kindest/node:v1.31.0) ๐Ÿ–ผ  ...
 โœ“ Ensuring node image (kindest/node:v1.31.0) ๐Ÿ–ผ
 • Preparing nodes ๐Ÿ“ฆ ๐Ÿ“ฆ ๐Ÿ“ฆ ๐Ÿ“ฆ   ...
 โœ“ Preparing nodes ๐Ÿ“ฆ ๐Ÿ“ฆ ๐Ÿ“ฆ ๐Ÿ“ฆ
 • Writing configuration ๐Ÿ“œ  ...
 โœ“ Writing configuration ๐Ÿ“œ
 • Starting control-plane ๐Ÿ•น๏ธ  ...
 โœ“ Starting control-plane ๐Ÿ•น๏ธ
 • Installing CNI ๐Ÿ”Œ  ...
 โœ“ Installing CNI ๐Ÿ”Œ
 • Installing StorageClass ๐Ÿ’พ  ...
 โœ“ Installing StorageClass ๐Ÿ’พ
 • Joining worker nodes ๐Ÿšœ  ...
 โœ“ Joining worker nodes ๐Ÿšœ
Set kubectl context to "kind-lab-cluster"
You can now use your cluster with:

kubectl cluster-info --context kind-lab-cluster

Have a nice day! ๐Ÿ‘‹