k3d를 사용하여 로컬 Kubernetes 클러스터 구축

k3d는 Docker에서 k3s(Rancher Labs의 최소 Kubernetes 배포)를 실행하는 경량 래퍼입니다.

k3d를 사용하여 로컬 개발 목적으로 Docker에서 단일 및 다중 노드 k3s 클러스터를 생성할 수 있습니다.

이 블로그에서는 k3d를 설정하기 위해 Ubuntu 20.04 LTS를 사용할 것입니다.


편의 스크립트를 사용하여 Docker 설치

$ curl -fsSL https://get.docker.com -o get-docker.sh

$ sudo sh get-docker.sh


사용자를 docker 그룹에 추가하여 루트가 아닌 사용자로 명령을 실행하고 현재 세션에서 로그아웃합니다.

$ sudo usermod -aG docker $USER


다시 로그인하고 루트가 아닌 사용자로 Docker 명령을 확인합니다.

$ docker info

$ docker container run hello-world


k3d 다운로드 및 설치

$ curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash

$ k3d version


kubectl 다운로드 및 설치

$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

$ sudo install kubectl /usr/local/bin/kubectl

$ kubectl version --client


아래 구성 파일을 사용하여 클러스터를 생성합니다.

$ cat config.yml



apiVersion: k3d.io/v1alpha4
kind: Simple
metadata:
  name: dev
servers: 1
agents: 2
image: rancher/k3s:v1.25.2-k3s1
ports:
- port: 30000-30100:30000-30100
  nodeFilters:
  - server:*
registries:
  create:
    name: dev
    host: 0.0.0.0
    hostPort: "5000"
options:
  k3s:
    extraArgs:
    - arg: --disable=traefik
      nodeFilters:
      - server:*



$ k3d cluster create --config config.yml


클러스터 세부 정보 및 노드 확인

$ kubectl cluster-info

$ kubectl get nodes



샘플 index.html 파일 만들기

$ echo "Hello from Pod!" > index.html


아래 Dockerfile을 사용하여 사용자 정의 Docker 이미지 빌드

$ cat Dockerfile



FROM nginx:1.23
COPY index.html /usr/local/nginx/html



$ docker image build -t app:v1 .


맞춤형 빌드 이미지에 태그를 지정하고 k3d에서 생성한 컨테이너 레지스트리로 푸시합니다.

$ docker image tag app:v1 localhost:5000/app:v1

$ docker image push localhost:5000/app:v1


커스텀 빌드 이미지를 사용하여 포드 배포

$ cat app-pod.yml



apiVersion: v1
kind: Pod
metadata:
  labels:
    run: app
  name: app
spec:
  containers:
  - image: dev:5000/app:v1
    name: app
    ports:
    - containerPort: 80



$ kubectl create -f app.yml



$ kubectl get pods


포드를 노드 포트 서비스에 노출

$ cat app-nodeport.yml



apiVersion: v1
kind: Service
metadata:
  labels:
    run: app
  name: app-nodeport
spec:
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30000
  selector:
    run: app
  type: NodePort



$ kubectl create -f app-nodeport.yml



$ kubectl get svc


브라우저 또는 curl을 사용하여 웹페이지 확인

$ curl http://localhost:30000

좋은 웹페이지 즐겨찾기