k8s 클러스터 구축(2)

박정호·2025년 5월 23일

마스터 노드 설정

이제 쿠버네티스 클러스터 구축을 해보자. server01을 마스터 노드로 server02, 03이 워커 노드가 된다.

k8s 인증서 상태 확인

**# 인증서 만료 확인(쿠버네티스 마스터 노드 설치후 재 확인 예정)
- 클러스터의 주요 구성 요소(API 서버, 컨트롤러 매니저, 스케줄러 등)는 서로 인증된 상태에서만 통신
sudo kubeadm certs check-expiration**

kubeadm이 사용할 수 있는 이미지 리스트들 검색

**# sudo 생략시 없다고 나오기도 함 
sudo kubeadm config images list**

k8s 설치에 필요한 이미지 다운로드

sudo -i

root@server01:~# kubeadm config images pull

CNI 설치 및 클러스터 초기화

  • 주의 apiserver address 현재 내 vm ip로 변경해줘야함.
**sudo kubeadm init --apiserver-advertise-address=10.0.2.4 --pod-network-cidr=192.168.0.0/16 --cri-socket /run/containerd/containerd.sock**
  • kubeadm init을 통해 초기화.
  • —apiserver-advertise-address 옵션을 통해 k8s 마스터 노드의 ip 주소 입력
  • —pod-network-cidr을 통해 네트워크 대역을 설정
    • calico CNI 사용시 192.168.0.0/16 IP로 등록
    • flannel 사용시 10.244.0.0/16
    • calico를 쓰도록 하자.
  • 아래와 같이 나오면 성공 맨 아래 kubeadm join은 워커노드 연결에 쓰이기 때문에 메모해놔야함.

이후 워커 노드와 마스터 노드를 연결할 때 사용할 구문 메모

kubeadm join 10.0.2.4:6443 --token 5a05my.inquc8iu3jgiriwr \
        --discovery-token-ca-cert-hash sha256:56ed8ec32afdba3572298b782df10e5c43a4b8fe3ab3e8a030e801a863cb38cb

쿠버네티스 인증된 상태 확인

  • 클러스터의 주요 구성 요소(API 서버, 컨트롤러 매니저, 스케줄러 등)는 서로 인증된 상태에서만 통신
sudo kubeadm certs check-expiration
  • 다시 쿠버네티스 인증서를 보면 certificate에 인증이 되어있는 것을 확인할 수 있다.

root 권한이 아니라 사용자 권한으로도 k8s 사용 가능하게 설정

  • root 세션을 exit으로 종료하고 아래 명령어 실행
**#root@server01:~# exit
logout

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config**
  • tree 구조로 잘 됐는지 확인
tree .kube/
  • 마스터 노드 상태 확인
**kubectl get nodes -o wide**

calico 네트워크 설정

calico 설치를 위한 yaml 파행

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
  • 최신 버전은 공식 GitHub에서 확인 가능하지만, 위 URL은 v1.29 호환 안정 버전이다.
  • 현재 k8s를 1.29 버전을 쓰고 있으므로 위 명령어를 사용하도록 하자.

옵션) 단일 매니페스트 기반 설치가 아닌 오퍼레이터 기반 설치

  • Tigera Operator 설치
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml
  • Custom Resource 생성
    • 실제 calico 네트워크를 구성을 지
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/custom-resources.yaml

이 파일에는 CIDR, IPPools, BGP 등 설정이 포함되어 있습니다.

  • 필요 시: custom-resources.yaml 수정

만약 kubeadm init에서 --pod-network-cidr=192.168.0.0/16 을 사용했다면,

custom-resources.yaml을 직접 받아서 아래처럼 수정한 후 설치해야 한다.

다운로드 & 수정

curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/custom-resources.yaml
vi custom-resources.yaml
  • 아래 부분을 찾아서 CIDR을 맞게 수정:
spec:
  cidr: 192.168.0.0/16  # ← init할 때 사용한 CIDR로 수정
  • 적용
kubectl apply -f custom-resources.yaml
  • 상태 확인
kubectl get pods -n calico-system

모든 Pod가 Running 상태여야 정상

잘 설치됐는 확인

kubectl get pods -n kube-system

  • 클러스터 정보 확인
**kubectl cluster-info**

워커 노드 설정

마스터 노드인 server01의 설정 파일 그대로 가져오기

**mkdir -p $HOME/.kube

scp -p ubuntu@server01:~/.kube/config ~/.kube/config

ubuntu@server02:~$ cd .kube/
ubuntu@server02:~/.kube$ ls
config**

마스터 노드와 워커 노계

sudo -i

kubeadm join 10.0.2.4:6443 --token 5a05my.inquc8iu3jgiriwr \
        --discovery-token-ca-cert-hash sha256:56ed8ec32afdba3572298b782df10e5c43a4b8fe3ab3e8a030e801a863cb38cb

클러스터 상태 확인

정상적으로 모두 연결되었음을 볼 수 있다.

잘 되는지 테스트

kubectl run hello-world --image=hello-world --restart=Never

kubectl get pod

0개의 댓글