Container Orchestration/Kubernetes

k3d(k3s in docker)란?

Somaz 2024. 1. 14. 00:51
728x90
반응형

Overview

k3d에 대해서 알아보자.

출처 : https://github.com/k3d-io/k3d

 


k3d(k3s in docker)란?

 

k3d는 docker에서 k3s (Rancher Lab의 최소 Kubernetes 배포판)를 실행하기 위한 경량 Wrapper이다.

k3d를 사용하면 Kubernetes의 로컬 개발 등을 위해 Docker에서 단일 및 다중 노드 k3s 클러스터를 매우 쉽게 생성할 수 있다.

k3s가 궁금하다면 아래의 링크를 참고하길 바란다.

2024.01.05 - [Container Orchestration/Kubernetes] - K3s & k3sup 이란?

 

K3s & k3sup 이란?

Overview 오늘은 경량화된 Kubernetes 배포판인 K3s에 대해 알아보려고 한다. K3s란? K3s는 경량화된 Kubernetes 배포판으로, 특히 리소스가 제한된 환경이나 엣지 컴퓨팅 환경에서 사용하기 적합하게 설계

somaz.tistory.com

 


 

k3d 설치 및 클러스터 생성

# 최신버전 설치
curl -s <https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh> | bash

# 특정버전 설치
curl -s <https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh> | TAG=v5.0.0 bash
# 클러스터 생성
k3d cluster create CLUSTER_NAME

# context merge
k3d kubeconfig merge CLUSTER_NAME --kubeconfig-switch-context

# 클러스터 삭제
k3d cluster delete CLUSTER_NAME

 

 


 

kubectl 설치

리눅스 기준으로 설치하였다. MacOS, Window는 여기를 참고하길 바란다.

curl -LO "<https://dl.k8s.io/release/$>(curl -L -s <https://dl.k8s.io/release/stable.txt>)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client

Client Version: v1.29.0
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3

 

설치 후 kubectl 자동완성과 alias 적용

vi ~/.bashrc

# kubectl
source <(kubectl completion bash)
alias k=kubectl
complete -F __start_kubectl k

# bashrc 적용
source ~/.bashrc

 


 

쿠버네티스 클러스터 실습

 

kind로 클러스터 먼저 생성후에 k3d를 사용해서 클러스터를 생성해본다.

# kind 클러스터 파일생성
cat <<EOF > cluster-3nodes.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
EOF

# kind 클러스터 생성
kind create cluster --name somaz-3nodes-kubernetes --config ./cluster-3nodes.yaml

# kind 클러스터 확인
k get nodes
NAME                                    STATUS   ROLES           AGE   VERSION
somaz-3nodes-kubernetes-control-plane   Ready    control-plane   63m   v1.27.3
somaz-3nodes-kubernetes-worker          Ready    <none>          62m   v1.27.3
somaz-3nodes-kubernetes-worker2         Ready    <none>          62m   v1.27.3

# context 확인
k config get-contexts
CURRENT   NAME                           CLUSTER                        AUTHINFO                       NAMESPACE
*         kind-somaz-3nodes-kubernetes   kind-somaz-3nodes-kubernetes   kind-somaz-3nodes-kubernetes

 

k3d 클러스터 생성한다.

# k3d 클러스터 생성
k3d cluster create somaz-kubernetes --servers 1 --agents 2

INFO[0000] Prep: Network
INFO[0000] Created network 'k3d-somaz-kubernetes'
INFO[0000] Created image volume k3d-somaz-kubernetes-images
INFO[0000] Starting new tools node...
INFO[0000] Starting Node 'k3d-somaz-kubernetes-tools'
INFO[0001] Creating node 'k3d-somaz-kubernetes-server-0'
INFO[0001] Creating node 'k3d-somaz-kubernetes-agent-0'
INFO[0001] Creating node 'k3d-somaz-kubernetes-agent-1'
INFO[0001] Creating LoadBalancer 'k3d-somaz-kubernetes-serverlb'
INFO[0001] Using the k3d-tools node to gather environment information
INFO[0001] HostIP: using network gateway 172.20.0.1 address
INFO[0001] Starting cluster 'somaz-kubernetes'
INFO[0001] Starting servers...
INFO[0001] Starting Node 'k3d-somaz-kubernetes-server-0'
INFO[0005] Starting agents...
INFO[0005] Starting Node 'k3d-somaz-kubernetes-agent-0'
INFO[0005] Starting Node 'k3d-somaz-kubernetes-agent-1'
INFO[0009] Starting helpers...
INFO[0009] Starting Node 'k3d-somaz-kubernetes-serverlb'
INFO[0016] Injecting records for hostAliases (incl. host.k3d.internal) and for 4 network members into CoreDNS configmap...
INFO[0018] Cluster 'somaz-kubernetes' created successfully!
INFO[0018] You can now use it like this:
kubectl cluster-info

# k3d 클러스터 확인
k get nodes
NAME                            STATUS   ROLES                  AGE   VERSION
k3d-somaz-kubernetes-server-0   Ready    control-plane,master   68s   v1.27.4+k3s1
k3d-somaz-kubernetes-agent-0    Ready    <none>                 65s   v1.27.4+k3s1
k3d-somaz-kubernetes-agent-1    Ready    <none>                 64s   v1.27.4+k3s1

# context 확인
k config get-contexts
CURRENT   NAME                           CLUSTER                        AUTHINFO                       NAMESPACE
*         k3d-somaz-kubernetes           k3d-somaz-kubernetes           admin@k3d-somaz-kubernetes
          kind-somaz-3nodes-kubernetes   kind-somaz-3nodes-kubernetes   kind-somaz-3nodes-kubernetes

# context 전환 확인
k config use-context kind-somaz-3nodes-kubernetes
Switched to context "kind-somaz-3nodes-kubernetes".

k get nodes
NAME                                    STATUS   ROLES           AGE   VERSION
somaz-3nodes-kubernetes-control-plane   Ready    control-plane   67m   v1.27.3
somaz-3nodes-kubernetes-worker          Ready    <none>          67m   v1.27.3
somaz-3nodes-kubernetes-worker2         Ready    <none>          67m   v1.27.3

 

생성된 docker 컨테이너 확인

docker ps
CONTAINER ID   IMAGE                            COMMAND                  CREATED             STATUS             PORTS                             NAMES
4cb38b8fd35d   ghcr.io/k3d-io/k3d-proxy:5.6.0   "/bin/sh -c nginx-pr…"   2 minutes ago       Up 2 minutes       80/tcp, 0.0.0.0:34989->6443/tcp   k3d-somaz-kubernetes-serverlb
266220bc2ce1   rancher/k3s:v1.27.4-k3s1         "/bin/k3s agent"         2 minutes ago       Up 2 minutes                                         k3d-somaz-kubernetes-agent-1
9dd0a50a6034   rancher/k3s:v1.27.4-k3s1         "/bin/k3s agent"         2 minutes ago       Up 2 minutes                                         k3d-somaz-kubernetes-agent-0
4a131c88043b   rancher/k3s:v1.27.4-k3s1         "/bin/k3s server --t…"   2 minutes ago       Up 2 minutes                                         k3d-somaz-kubernetes-server-0
595f7331fed1   kindest/node:v1.27.3             "/usr/local/bin/entr…"   About an hour ago   Up About an hour                                     somaz-3nodes-kubernetes-worker2
57df19fea220   kindest/node:v1.27.3             "/usr/local/bin/entr…"   About an hour ago   Up About an hour                                     somaz-3nodes-kubernetes-worker
a4f16f71efc1   kindest/node:v1.27.3             "/usr/local/bin/entr…"   About an hour ago   Up About an hour   127.0.0.1:39557->6443/tcp         somaz-3nodes-kubernetes-control-plane

 

삭제

k3d cluster delete somaz-kubernetes
kind delete cluster --name somaz-3nodes-kubernetes

 


kind vs k3d

kind는 컨테이너 런타임을 활용하여 k3d와 마찬가지로 로컬 시스템에서 사용할 수 있는 유연한 k8s 클러스터를 제공한다. 그러나 둘 사이의 차이점은 kind가 컨테이너화된 k8s 클러스터를 구현하는 반면 k3d는 컨테이너화된 k3d 클러스터를 구현한다는 것이다.

 

또한 kind는 로컬 머신에서 Kubernetes 클러스터를 실행하는 데 더 적합하고 CI 파이프라인을 통한 프로덕션 환경에도 적합하다. 반면 k3d는 로컬 컴퓨터 외에도 Raspberry Pi, IoT, Edge 장치와 같은 소규모 설정에 사용하기에 이상적이다.


 

kind 아키텍처

kind 아키텍처

 

k3d 아키텍처

k3d 아키텍

 

 


Reference

https://k3d.io/v5.6.0/#install-specific-release

https://thechief.io/c/editorial/kind-vs-k3s/

https://github.com/k3d-io/k3d

728x90
반응형

'Container Orchestration > Kubernetes' 카테고리의 다른 글

Kubernetes Network  (0) 2024.02.17
Kubernetes 클러스터 구축하기(kubespray 2024v.)  (0) 2024.02.02
kind(Kubernetes in Docker)란?  (2) 2024.01.13
K3s & k3sup 이란?  (2) 2024.01.05
Flux란? / Flux + Kustomize  (2) 2023.10.16