k3d(k3s distribution in docker)로 k8s 빠르게 구축하기

안녕하세요 오늘은 BESPIN GLOBAL SRE실 이동열이 작성해주신 ‘k3d(k3s distribution in docker)로 k8s 빠르게 구축하기
‘ 대해 소개해드리도록 하겠습니다.

목차

  1. Download 하기(Script 방식)
  2. Quick Start 설치
  3. 그외 설치 방법
  4. Basic Test

k3d(k3s distribution in docker)로 k8s 빠르게 구축하기

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 업그레이드가 가능합니다.

아래 방법으로 version 업그레이드 가능함

2. Quick Start 설치

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

기본 설치는 Single node cluster(master=1, worker=0)를 생성한다

3. 그 외 설치 방법

Multi server cluster, 개발/테스트용 port forwarding LB 설정 등 다양한 설치 방법이 존재합니다.

  • 특정 k8s 버전 설치

특정 버전 즉, 예를 들어 v1.17.13 을 설치하려면 다음과 같이 진행합니다.

특정 버전 즉, 예를 들어 v1.17.13 을 설치하려면 다음과 같이 한다
특정 버전 즉, 예를 들어 v1.17.13 을 설치하려면 다음과 같이 한다

설치 가능한 k8s 버전 컨테이너 이미지 리스트는 K3s docker repo를 참조하시기 바랍니다.

3-1. 기본(Traefik_v1 ingress) 설치

기본 설치를 진행하면 Ingress controller 로 Traefik 이, CNI로 Flannel(Network Policy 사용 불가)가 적용됩니다.

기본 설치를 진행하면 Ingress controller 로 Traefik 이, CNI로 Flannel(Network Policy 사용 불
가) 가 적용된다

기본 설치를 진행하면 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

Reference: https://www.suse.com/support/kb/doc/?id=000020082

Reference: https://www.suse.com/support/kb/doc/?id=000020082

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

Edit helm-ingress-traefikv2.yaml

Edit helm-ingress-traefikv2.yaml

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

Edit helm-ingress-nginx.yaml

Edit helm-ingress-nginx.yaml

  • Download calico.yaml

Download calico.yaml

4. Basic Test

4-1. Simple nginx container application

  • Deploy it! (3-1 경우)

Deploy it! (3-1 경우)

  • Test it!

Test it!

4-2. Simple Network Policy test

3-4 의 경우와 같이 Calico 를 적용했을 때 테스트 해 볼 수 있습니다.

  • Normal test – No policy=allow all

Normal test - No policy=allow all

  • Network Policy – Deny-all to specific pod

Network Policy - Deny-all to specific pod

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

Written by 이 동열 / SRE실

BESPIN GLOBAL