이전 가이드에 이어, 이번 포스트에서는 Kubernetes 마스터 노드를 초기화하고, CNI(네트워크 플러그인)를 설치한 뒤, 워커 노드를 클러스터에 참여시키는 과정을 다룹니다. 마지막으로 편리한 관리를 위한 대시보드까지 설정해보겠습니다.
1. 마스터 노드 초기화 (kubeadm init)
kubeadm init 명령어는 컨트롤 플레인 컴포넌트들을 설치하여 Kubernetes 클러스터를 초기화하는 역할을 합니다. 이 명령어를 실행하는 서버가 바로 마스터 노드가 됩니다.
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.56.10
주요 옵션 설명:
- --pod-network-cidr=10.244.0.0/16
- 클러스터 내에서 Pod(컨테이너 그룹)들이 사용할 IP 주소 대역을 지정합니다.
- 💡 Tip: 이후에 설치할 CNI인 Calico는 기본적으로 192.168.0.0/16 대역을 사용합니다. 만약 현재 서버의 네트워크 대역과 겹칠 경우 충돌이 발생할 수 있으므로, 여기서는 다른 CNI인 Flannel의 기본 대역(10.244.0.0/16)을 예시로 사용하여 충돌 가능성을 피했습니다.
- --apiserver-advertise-address=192.168.56.10
- API 서버의 주소를 명시적으로 지정합니다. 클러스터의 다른 노드들이 이 주소를 통해 마스터 노드와 통신하게 됩니다.
- 이 옵션을 생략하면 시스템의 기본 네트워크 인터페이스 IP가 자동으로 선택됩니다.
초기화가 성공적으로 완료되면, 다음과 같은 메시지가 출력됩니다.
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
...
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.56.10:6443 --token vbteo9.q02ofqn05z9cnn9k \
--discovery-token-ca-cert-hash sha256:ecf0b78081d6548088e08ed337f7ac4d781956ca76e10fa8770a96028345dc23
이 메시지에는 앞으로 진행할 중요한 명령어들이 포함되어 있으니 잘 기록해두세요.
2. kubectl 명령어 환경 설정
마스터 노드에서 클러스터를 관리하기 위해 kubectl 명령어를 사용해야 합니다. 위 성공 메시지에 나온 대로 일반 사용자 계정에서 아래 명령어를 실행하여 환경을 설정합니다.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3. CNI(Container Network Interface) 설치: Calico
이제 Pod들이 서로 통신할 수 있도록 네트워크를 구성해 줄 CNI 플러그인을 설치합니다. 여기서는 Calico를 사용합니다.
📚 참고 문서: Calico 공식 설치 가이드
- Tigera Operator 설치
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/tigera-operator.yaml - Custom Resources 설치⚠️ 주의: 만약 kubeadm init 시 --pod-network-cidr 값을 Calico의 기본값(192.168.0.0/16)이 아닌 다른 값으로 설정했다면, custom-resources.yaml 파일을 직접 다운로드하여 CIDR 부분을 수정한 뒤 적용해야 합니다. 그렇지 않으면 Pod들이 정상적으로 생성되지 않을 수 있습니다.
-
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/custom-resources.yaml
4. 워커 노드 클러스터에 참여시키기
이제 준비된 워커 노드들을 클러스터에 추가할 차례입니다. kubeadm init 성공 시 출력되었던 kubeadm join 명령어를 각 워커 노드에서 root 권한으로 실행합니다.
# 이 명령어는 예시이며, 반드시 본인의 init 결과에 나온 명령어를 사용해야 합니다.
sudo kubeadm join 192.168.56.10:6443 --token z5z6oy.6w35d577yrp6oa9h \
--discovery-token-ca-cert-hash sha256:b4169183a8343d04d0991de24daadc7da18da1448c6e456ad37ece5cf40a3e2e
5. (선택) 마스터 노드에서 Pod 스케줄링 허용
기본적으로 마스터 노드에는 Taint라는 '얼룩'이 설정되어 있어, 시스템 Pod를 제외한 일반 애플리케이션 Pod가 실행되지 않도록 보호합니다.
하지만 학습이나 개발 환경처럼 리소스가 제한적인 경우, 마스터 노드도 워커 노드처럼 활용할 수 있습니다. 아래 명령어로 Taint를 제거하여 마스터 노드에도 Pod가 배포되도록 설정할 수 있습니다.
🚫 경고: 이 설정은 학습 및 개발 환경에만 권장됩니다. 실제 운영 환경에서는 마스터 노드의 안정성을 위해 Taint를 유지해야 합니다.
# 마스터(컨트롤 플레인) 역할의 Taint 제거
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
6. Kubernetes 대시보드 설치 및 외부 접속 설정
마지막으로, 클러스터의 상태를 시각적으로 확인하고 관리할 수 있는 웹 UI 대시보드를 설치합니다.
📚 참고 문서: Kubernetes 공식 대시보드 문서
- 대시보드 배포
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml - 외부 접속을 위한 서비스 수정 기본적으로 대시보드는 클러스터 내부에서만 접근 가능합니다. 외부에서 접속하기 위해 서비스 타입을 NodePort로 변경합니다.편집기에서 아래와 같이 spec.type을 NodePort로 수정하고, spec.ports 항목에 nodePort를 추가합니다.이제 https://<마스터노드IP>:30000 주소로 대시보드에 접속할 수 있습니다.
... spec: ports: - port: 443 protocol: TCP targetPort: 8443 nodePort: 30000 # <-- 이 라인을 추가 selector: k8s-app: kubernetes-dashboard type: NodePort # <-- ClusterIP를 NodePort로 수정 ...# kubernetes-dashboard 네임스페이스의 서비스를 수정 모드로 엽니다. kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard - 대시보드 접속 토큰 생성 대시보드에 로그인하려면 인증 토큰이 필요합니다. 이를 위해 관리자 권한을 가진 서비스 계정(Service Account)을 생성하고 토큰을 발급받아야 합니다.계정 생성이 완료된 후, 아래와 같은 명령어로 토큰을 조회하여 로그인 화면에 붙여넣으면 됩니다.
# 예시: admin-user 라는 서비스 계정의 토큰을 조회하는 명령어 kubectl -n kubernetes-dashboard create token admin-user - (자세한 계정 생성 및 권한 부여 YAML 파일은 공식 문서를 참고하여 생성합니다.)
이제 모든 설치와 기본 설정이 완료되었습니다! 👏
'기술, 개발 > DevOps' 카테고리의 다른 글
| Rocky Linux에서 Kubernetes 설치하기 Part 4: 서비스 배포와 온프레미스 환경의 한계 (0) | 2025.09.18 |
|---|---|
| Rocky Linux에서 Kubernetes 설치하기 Part 3: 워커 노드 추가 및 초기 설정 (1) | 2025.09.18 |
| Rocky Linux에서 Kubernetes 설치하기 Part 1: 기본 환경 설정 (0) | 2025.09.18 |
| 컨테이너 한방 정리 (0) | 2025.09.14 |