EC2를 이용한 쿠버네티스 클러스터 구성

최병훈·2024년 10월 30일
post-thumbnail

1) EC2 인스턴스 생성

  • 외부에서 접속을 했을 때는 일정 시간 동안 입력이 없으면 자동으로 세션이 해제
  • Master Node 역할을 할 1개의 EC2 인스턴스와
    Worker Node 역할을 할 2개의 EC2 인스턴스 생성

Master Node

  • CPU가 2개 이상: Core가 1개이면 설치는 성공을 하지만 마스터 노드로 실행할려고 할 때 에러가 발생
  • 포트 개방
    • API Server: 6443
    • etcd Server: 2379, 2380
    • kubelet API: 10250
    • kube scheduler: 10251
    • kube controller manager 10252
    • Flannel CNI 플러그인에 대한 포트: 8285, 8472

Worker Node

  • 하드웨어 제약 없음
  • 포트 개방
    • API Server: 6443
    • kube-proxy가 서비스를 로드밸런싱하기 위해서 사용하는 포트: 26443
    • Flannel CNI 플러그인에 대한 포트: 8285, 8472
    • NodePort 로 사용할 포트: 30000-32767

2) Ubuntu에 쿠버네티스 설치

Master Node 1개와 Worker Node 2개에 모두 설치해야 한다.
: https://hostnextra.com/learn/tutorials/how-to-install-kubernetes-k8s-on-ubuntu

  • 패키지 정보 업데이트
    sudo apt update && sudo apt upgrade -y
  • 런타임 설치
    sudo apt install -y docker.io
  • 런타임 확인
    sudo docker --version
  • 쿠버네티스 저장소 등록
    echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  • 쿠버네티스 클러스터 구성을 위한 패키지 설치
    sudo apt update
    sudo apt install -y kubelet kubeadm kubectl
    • kubeadm: 클러스터 구성을 위한 패키지
    • kubelet: 노드 에이전트(Pod 생성, 실행, 모니터링)
    • kubectl: 명령 수행 도구(CLI)
  • 버전 고정
    sudo apt-mark hold kubelet kubeadm kubectl

    버전을 고정해야 이후에 마스터 노드들과 워커 노드들 간의 버전 충돌 문제가 생기지 않는다.
  • Memory Swap 비활성화: 가상 메모리 사용으로 인한 문제점을 제거
    sudo swapoff -a
    sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
  • Memory Swap 비활성화 확인
    sudo free -m

Master Node 설정

  • 마스터 노드에서 클러스터 생성
    • kubeadm을 초기화하고 파드의 네트워크 대역을 설정
      sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    • 아래 명령어가 출력되는데 이 명령어가 워커노드에서 마스터 노드에 연결하기 위한 join 명령어
      kubeadm join 172.31.6.38:6443 --token j4wub6.c2qh1d216dsc3k39 \
              --discovery-token-ca-cert-hash sha256:a28a3e1e4e48457fc260a6fed1bf1c9a8443fd5064200399a5902cc4114bd538
  • 쿠버네티스 환경 설정 파일 생성
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 노드 확인
    kubectl get nodes
  • Pod Network Add-on 설치
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • 다시 node가 동작 중인지 확인
    kubectl get nodes
  • 방화벽 중지

    sudo systemctl stop ufw
    sudo systemctl disable ufw
  • Cloud 서비스는 기본적으로 포트에 대한 보안을 별도로 설정하도록 되어 있기 때문에 보안 그룹에가서 인바운드 규칙에 추가를 해주어야 합니다.

Worker Node 설정

  • 방화벽 중지

    sudo systemctl stop ufw
    sudo systemctl disable ufw
  • 보안 그룹에서 인바운드 규칙에 추가 Worker Node가 사용하는 포트 개방

3) 워커 노드에서 마스터 노드에 연결

  • 워커 노드에서 join 명령 수행
    sudo kubeadm join 172.31.6.38:6443 --token j4wub6.c2qh1d216dsc3k39 \
            --discovery-token-ca-cert-hash sha256:a28a3e1e4e48457fc260a6fed1bf1c9a8443fd5064200399a5902cc4114bd538
  • 마스터 노드에서 노드 정보 확인
    kubectl get nodes

    워커 노드 2개가 추가되었다.
  • 토큰 생성
    kubeadm token create

    토큰을 새로 생성할 수도 있다.
  • 토큰 확인
    kubeadm token list
  • 해시값 확인
    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

0개의 댓글