새로 multi master node 구성하기

2025. 6. 15. 23:25k8s

nginx load balancer 설정

# nginx.conf
stream {
    # master node load balance
    upstream k8s_apiserver {
        server node1 IP:6443;
        server node2 IP:6443;
        server node3 IP:6443;
    }

    server {
        listen {port};
        proxy_pass k8s_apiserver;
    }
}

# 재시작 및 확인
sudo systemctlr restart nginx
sudo ss -tnlp | grep {port}

기존 master node 초기화

# 기존 자료 제거
sudo kubeadm reset -f
sudo rm -rf /etc/kubernetes/pki
sudo rm -rf /etc/kubernetes/*.conf
sudo rm -rf /var/lib/etcd
sudo rm -rf ~/.kube
sudo rm -rf /etc/cni/net.d

# 초기화
# 초기화된 이후의 join 정보 복사
sudo kubeadm init \
  --control-plane-endpoint "{도메인}:{port}" \
  --upload-certs

kubeconfig 설정(현재 사용자)

mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

  
# 정상여부 확인
# 결과가 나와야 함
kubectl get cm kubeadm-config -n kube-system

CNI 플러그인 설치

# 아래 파일이 없으면 설치해야 함
/etc/cni/net.d

# 이게 없으면 node의 상태가 Ready가 안됨
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml

# 확인
kubectl get node

다른 node를 master node로 추가

  kubeadm join {도메인}:{port} --token {token} \
        --discovery-token-ca-cert-hash {hash} \
        --control-plane --certificate-key {key}

kubeconfig 설정(현재 사용자)

mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

  
# 정상여부 확인
kubectl get node

master node에 pod 할당 가능하게 하기

kubectl taint nodes <노드이름> node-role.kubernetes.io/control-plane:NoSchedule-

external IP 할당을 위해 metallb 설정

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml


# metallb-config.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: my-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.0.240-192.168.0.250  # 예: 내부 네트워크 IP 범위

---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2adv
  namespace: metallb-system

Ingress Nginx Controller 설치

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/baremetal/deploy.yaml


# 확인
kubectl get svc -n ingress-nginx


# 외부 IP가 할당이 안되어 있는 경우
# type 확인
kubectl get svc ingress-nginx-controller -n ingress-nginx -o yaml

# LoadBalancer IP 할당
kubectl patch svc ingress-nginx-controller -n ingress-nginx \
  -p '{"spec": {"type": "LoadBalancer", "loadBalancerIP": "192.168.0.241"}}'
  
# 확인
kubectl get svc -n ingress-nginx