안녕하세요 오늘은 BESPIN GLOBAL SRE실 이동열이 작성해주신 ‘k3d(k3s distribution in docker)로 k8s 빠르게 구축하기
‘ 대해 소개해드리도록 하겠습니다.
목차
- Download 하기(Script 방식)
- Quick Start 설치
- 그외 설치 방법
- Basic Test

Update:
-> According to k3d version v5.4.3, k3s version v1.23.6-k3s1 (default)
-> 3-2, 3-4 부분만 새로운 k3d에 맞게 우선 수정했습니다.
TL; DR
k3d(k3s distribution in docker)를 활용하여 단 몇 초, 길어야 5~10분 이내로 빠르게 만들어지는, 간편하고 신속한 k8s 개발/테스트 환경을 구축할 수 있습니다. (표준 k8s 규격 100% 만족, 일부 plugin, add-on 등은 제한적이거나 별도 작업 필요)
일종의 KIND(Kubernetes in Docker) 환경인데, Docker 내부의 k8s container는 containerd runtime이 기본으로 적용되며(containerd in docker), containerd 대신 docker 를 변경 적용 (docker in docker)하는 것도 가능합니다.
물론, docker host 내에 여러 개의 k3s cluster 를 동시에 구축하여 개발/테스트하는 것도 가능합니다. 경험에 의하면 사용하려는 docker host(Mac, Linux, Windows)의 리소스가 2CPU 이상, 2~4GB 이상의 memory 정도는 되어야 원활한 사용이 가능합니다.
1.Download 하기(Script 방식)
Script 방식 이외에도 homebrew, AUR, Chocolately, Github download, Go install 등 여러 방법이 있습니다. 아래 방법으로 version 업그레이드가 가능합니다.

2. Quick Start 설치
기본 설치는 Single node cluster(master=1, worker=0)를 생성합니다.

3. 그 외 설치 방법
Multi server cluster, 개발/테스트용 port forwarding LB 설정 등 다양한 설치 방법이 존재합니다.
- 특정 k8s 버전 설치
특정 버전 즉, 예를 들어 v1.17.13 을 설치하려면 다음과 같이 진행합니다.


설치 가능한 k8s 버전 컨테이너 이미지 리스트는 K3s docker repo를 참조하시기 바랍니다.
3-1. 기본(Traefik_v1 ingress) 설치
기본 설치를 진행하면 Ingress controller 로 Traefik 이, CNI로 Flannel(Network Policy 사용 불가)가 적용됩니다.


3-2. Nginx Ingress controller 적용 설치
Traefik V1 을 설치하지 않고 Nginx ingress controller 를 별도로 설치합니다.
K3s의 Auto-Deploying Manifests 기능을 이용합니다.
- Edit helm-ingress-nginx.yaml
- Helm pod가 kube-system 에 실행되며, 이 pod(klipper-helm) 내부에서 helm chart를 통해 ingress-nginx 컨트롤러를 DaemonSet 형태로 deply 합니다.
- Reference: https://www.suse.com/support/kb/doc/?id=000020082



3-3. Ingress Traefik_v2 controller
Traefik V1 대신 Traefik V2 ingress controller 를 적용합니다.
- Edit helm-ingress-traefikv2.yaml



3-4. Nginx Ingress controller & Calico CNI
Traefik V1 -> Nginx ingress controller & Flannel -> Calico
v5.4.x 에는 자체 network policy 가 지원되나 Calico의 network policy 가 필요할 경우에 사용합니다.
(참고: https://k3d.io/v5.4.3/usage/advanced/calico/)
- Edit helm-ingress-nginx.yaml


- Download calico.yaml

4. Basic Test
4-1. Simple nginx container application
- Deploy it! (3-1 경우)

- Test it!

4-2. Simple Network Policy test
3-4 의 경우와 같이 Calico 를 적용했을 때 테스트 해 볼 수 있습니다.
- Normal test – No policy=allow all

- Network Policy – Deny-all to specific pod

여기까지 ‘’k3d(k3s distribution in docker)로 k8s 빠르게 구축하기’에 대해 소개해드렸습니다. 유익한 정보가 되셨길 바랍니다. 감사합니다.
Written by 이 동열 / SRE실
BESPIN GLOBAL