TIL| kind-cluster.yml

타샤's 월드·2025년 4월 18일

전체 kind-cluster.yml

# kind-cluster.yml
kind: Cluster  # 카인드 클러스터 설정임을 나타냄.
apiVersion: kind.x-k8s.io/v1alpha4  #KIND의 API 버전을 지정합니다

# containerd의 레지스트리 미러 설정
containerdConfigPatches:
- |-
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5001"]
    endpoint = ["http://kind-registry:5000"]  # 로컬 레지스트리로 프록시

nodes:
- role: control-plane  # 컨트롤 플레인 노드 정의
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"  # Ingress Controller를 위한 라벨 추가
  extraPortMappings:
  - containerPort: 80     # 호스트의 80 포트를 컨테이너의 80 포트로 포워딩
    hostPort: 80
    protocol: TCP
  - containerPort: 443    # 호스트의 443 포트를 컨테이너의 443 포트로 포워딩
    hostPort: 443
    protocol: TCP

- role: worker  # 워커 노드 1
- role: worker  # 워커 노드 2
- role: worker  # 워커 노드 3

1. 정의

kind: Cluster
kind: Pod
kind: Deployment
kind: Service

2. Api

여기서 api restapi 같은 api 가 아닌 야멜파일 설정 스키마 혹은 설정 형식의 규칙

apiVersion: kind.x-k8s.io/v1alpha4
는 kind.x-k8s.io에서 지원하는 형식이고 그중에 v1alpha4 를 사용한다는것.
대충 한컴 2010버전 같은 느낌이라고 ..

  • v1alpha4는 role: control-plane과 worker 등을 제공

3. containerdConfigPatches

  • 컨테이너디(containerd)의 설정을 수정하기 위한 부분
  • 컨테이너디는 컨테이너 실행 엔진, 컨테이너 실행 삭제 중지 하는 기능, 이미지 업로드 다운로드 기능, 네트워크 기능
containerdConfigPatches:
- |-
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5001"]
    endpoint = ["http://kind-registry:5000"]  # 로컬 레지스트리로 프록시
  • io.containerd.grpc.v1.cri 라는 플러그인을 사용했고,
  • 컨테이너 레지스트리의 미러를 설정을 할거임.
  • 원본 컨테이너 레지스트리 주소는 localhost:5001
  • 이미지 요청이 localhost:5001로 오면 kind-registry:5000으로 리다이렉트
    <이 설정이 필요한 이유>
  • 목표1: 로컬 개발 환경에서 프라이빗 레지스트리를 사용
  • 목표2: KIND 클러스터 내부에서 로컬 레지스트리 접근
  • 목표3: 테스트 환경에서 이미지 관리를 편하게 하기 위해

=> 로컬에서 빌드한 이미지를 프라이빗 레지스트리에 올리고 쿠버네티스에 연결해서 테스트를 해보고 싶다.

4. 노드

nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration # 초기설정
    nodeRegistration: # 노드 등록 관련 설정
      kubeletExtraArgs: # kubelet에 추가할 인자들
        node-labels: "ingress-ready=true" # 노드에 라벨 (인그레스 컨트롤러 추가)
  extraPortMappings:
  - containerPort: 80 # 80을 80으로 매핑
    hostPort: 80
    protocol: TCP
  - containerPort: 443 # 443을 443으로 매핑
    hostPort: 443
    protocol: TCP
- role: worker # 워커 노드1
- role: worker # 워커 노드1
- role: worker # 워커 노드1

InitConfiguration

쿠베어드민이 쿠버네티스 초기화 할때만 사용하는 설정

  1. KIND가 새 노드(컨테이너) 생성
  2. kubeadm init 명령 실행
  3. InitConfiguration 설정 적용
  4. 노드가 'ingress-ready=true' 라벨과 함께 초기화
  5. 클러스터에 노드 등록 완료
profile
그때 그때 꽂힌것 하는 개발블로그

0개의 댓글