Overview
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 이란?
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 아키텍처
k3d 아키텍처
Reference
https://k3d.io/v5.6.0/#install-specific-release
'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 |