yeonghoon.kim

  • 게시판
  • 갤러리

Kubernetes 기본 클러스터, ingress-nginx 설치

김영훈 2026.06.09 12:03 조회 수 : 15

DGX 호스트에 Kubernetes용 VM 8대 생성.

  • LB 2대
  • control-plane 3대
  • worker 3대

VM 생성 스크립트와 Ansible 사용.

사용한 파일:

inventory.ini
k8s-lb-setup.yml
k8s-common-setup.yml
kubeadm-init-k8s-cp1.yaml

LB에 HAProxy와 Keepalived 구성.

# Kubernetes API VIP용 HAProxy와 Keepalived를 구성한다.
cd /home/ioniere/ansible
ansible-playbook -i inventory.ini k8s-lb-setup.yml

# LB 상태를 확인한다.
for h in 192.168.200.40 192.168.200.41; do
  ssh ubuntu@$h "ip -4 -brief addr show enp1s0; systemctl is-active haproxy keepalived"
done

Kubernetes 노드 공통 설정 적용.

# containerd와 Kubernetes 패키지 등 노드 공통 설정을 적용한다.
cd /home/ioniere/ansible
ansible-playbook -i inventory.ini k8s-common-setup.yml

첫 번째 control-plane 구성.

# kubeadm 설정 파일을 cp1로 복사한다.
scp /home/ioniere/scripts/kubeadm-init-k8s-cp1.yaml \
  [email protected]:/home/ubuntu/kubeadm-init.yaml

# 필요한 이미지를 먼저 받는다.
ssh [email protected] "
sudo kubeadm config images pull --config /home/ubuntu/kubeadm-init.yaml
"

# cp1에서 클러스터를 초기화한다.
ssh [email protected] "
set -e
sudo install -m 600 -o root -g root /dev/null /root/kubeadm-init.log
sudo sh -c 'kubeadm init --config /home/ubuntu/kubeadm-init.yaml --upload-certs > /root/kubeadm-init.log 2>&1'
"

Flannel 설치 후 나머지 control-plane과 worker를 클러스터에 join.

# Flannel CNI를 설치한다.
kubectl apply -f https://github.com/flannel-io/flannel/releases/download/v0.28.4/kube-flannel.yml
kubectl -n kube-flannel rollout status daemonset/kube-flannel-ds --timeout=180s

# 전체 노드 상태를 확인한다.
kubectl get nodes -o wide

MetalLB 설치.

# MetalLB를 설치한다.
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.9/config/manifests/metallb-native.yaml

# MetalLB 상태를 확인한다.
kubectl -n metallb-system get pods -o wide

MetalLB IP 범위 설정.

cat <<EOF | kubectl apply -f -
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: dgx-lan-pool
  namespace: metallb-system
spec:
  addresses:
    - 192.168.200.49-192.168.200.69
  autoAssign: true
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: dgx-lan-l2advert
  namespace: metallb-system
spec:
  ipAddressPools:
    - dgx-lan-pool
EOF

ingress-nginx 설치 후 Ingress VIP를 192.168.200.49로 고정.

# ingress-nginx를 설치한다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.15.1/deploy/static/provider/cloud/deploy.yaml

# Ingress VIP를 고정한다.
kubectl -n ingress-nginx patch service ingress-nginx-controller \
  --type merge \
  -p '{"spec":{"loadBalancerIP":"192.168.200.49","externalTrafficPolicy":"Local"}}'

# 최종 상태를 확인한다.
kubectl get nodes -o wide
kubectl -n metallb-system get pods
kubectl -n ingress-nginx get svc,pods -o wide

  • 추천 0

  • 비추천 0
이 게시물을
목록

댓글 0

번호 제목 글쓴이 날짜 조회 수
19 DGX Kubernetes 구성 계획 김영훈 2026.06.08 25
» Kubernetes 기본 클러스터, ingress-nginx 설치 김영훈 2026.06.09 15
17 Docker Compose 서비스를 Kubernetes로 이전(깃랩 도커 저장소 필요) [2] 김영훈 2026.06.10 20
16 yeonghoon.kim 배포 파일을 Helm Chart로 전환 [1] 김영훈 2026.06.12 18
15 SOPS age로 Kubernetes Secret 암복호화 김영훈 2026.06.15 23
14 ArgoCD와 GitOps 구조 준비 김영훈 2026.06.16 16
13 CoreDNS로 GitLab Registry 내부 주소 고정 김영훈 2026.06.17 19
12 복구 런북 초반 누락 사항 정리 김영훈 2026.06.17 15
11 SOPS Secret 복구와 ArgoCD root Application 적용 김영훈 2026.06.18 28
10 관측 스택과 앱 배포 저장소 구조 정리 김영훈 2026.06.19 23
9 ArgoCD 복구 중 GitLab 접근 문제 정리 김영훈 2026.06.22 26
8 ImagePullBackOff와 registry pull secret 누락 김영훈 2026.06.22 17
7 worker 재부팅 전 drain 절차 정리 김영훈 2026.06.26 20
6 control-plane 장애 시나리오 관찰 김영훈 2026.06.27 12
5 OutOfSync와 Degraded 구분하기 김영훈 2026.06.28 25
4 Git revert는 기록을 지우는 게 아니라 되돌리는 기록을 남기는 것 김영훈 2026.06.29 19
3 Stateful과 Stateless 구분해보기 김영훈 2026.07.02 23
2 GitLab Registry PAT 만료로 이미지 Pull 실패 김영훈 2026.07.08 14
1 yeonghoon.kim php 업그레이드 김영훈 2026.07.09 0
쓰기 태그
 첫 페이지 8 9 10 11 12 13 14 15 16 17 끝 페이지