본문 바로가기
  • 클라우드야 나랑 친해지자!
서버/Docker&Kubernetes

AWS에서 kubeadm으로 Kubernetes 시작하기

by 정민규 2021. 5. 4.
반응형

수업을 듣고 배운 내용과 연습한 내용을 정리하였습니다

개인 공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.

 

잘못된 부분이 있거나 질문사항은 댓글로 남겨주시면 성심성의껏 답변해드리겠습니다. 감사합니다!


교재 <시작하세요! 도커/쿠버네티스 - 용찬호 지음>와 구글링을 참고하였습니다.

 

 

 

 

실습에 필요한 기본적인 VPC 구성요소는 설정되어 있다는 전제하에 포스팅을 시작하겠습니다!

 

Master node 1대와 Worker node 2대를 생성하도록 하겠습니다.

원래, AWS 프리티어인 t2.micro의 성능으로는 Kubeadm을 설치할 수 없습니다.

하지만, 추후 별도의 설정을 통해서 설치할 것이므로 EC2 인스턴스 생성 시 t2.micro로 생성하시면 됩니다.

 

 

 

 

* 실습요약

1. Kubernetes Master node 설정

2. Kubernetes Worker node 설정

3. 컨테이너 네트워크 에드온 설치

 

 

 

 

 

 

* Kubeadm 설치 전 기본 요구사항

 

- 서버 요구사항

  - CPU 2코어, RAM 2GB 이상

  - 클러스터 내 모든 노드간 네트워크 통신 가능

 

 

- 쿠버네티스 구성 요소가 사용하는 포트에 대한 방화벽 오픈

  - Master node

    - TCP - Inbound - 6443 : Kubernetes API Server

    - TCP - Inbound - 2379~2380: Etcd server client API (used by kube-apiserver, etcd)
    - TCP - Inbound - 10250: Kubelet API (used by Self, Control plane)
    - TCP - Inbound - 10251: kube-scheduler (used by Self)
    - TCP - Inbound - 10252: kube-controller-manager (used by Self)

 

  - Worker node
    - TCP - Inbound - 10250: Kubelet API (used by Self, Control plane)
    - TCP - Inbound - 30000~32767: NodePort Services (used by All)

 

 

 

 

 

 

 

 

* Kubernetes Master node 설정

 

 

모든 과정은 root 권한으로 진행합니다.

아래 명령어를 입력해 쿠버네티스 저장소를 추가합니다.

# apt update
# apt install -y apt-transport-https curl
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
# cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
>deb https://apt.kubernetes.io/ kubernetes-xenial main
>EOF

 

 

 

 

kubeadm은 kubelet과 kubectl을 설치해주지 않기 때문에 별도로 설치해야 합니다.

# apt update
# apt-get install -y kubelet kubeadm kubectl

 

 

 

 

패키지 버전 홀드 ( 업데이트에서 제외 )

# apt-mark hold kubelet kubeadm kubectl

 

 

 

 

설치가 정상적으로 완료됐는지 버전을 확인하고 추가 설정을 한 뒤 재시작합니다.

--exec-opt native.cgroupdriver=systemd

// 기본 cgroupdriver설정은 cgroupfs이지만 systemd로 설정하여 쿠버네티스를 정상적으로 실행되게함

# kubeadm version
# kubectl version
# apt install docker.io
# docker info | grep Cgroup
# vi /lib/systemd/system/docker.service
               14라인 뒤에  --exec-opt native.cgroupdriver=systemd 추가
               
# systemctl stop kubelet
# systemctl start kubelet
# systemctl daemon-reload
# systemctl restart docker

 

 

 

 

아래 명령어를 입력하여 도커를 설치합니다.

+sleep 20 이라고 출력되지만 당황하지 말고 잠시 기다리면 정상적으로 진행됩니다.

# wget -qO- get.docker.com | sh

 

 

 

 

--apiserver-cert-extra-sans

// 이 값에는 쿠버네티스가 생성한 TLS 인증서에 적용할 IP 또는 도메인을 명시할 수 있습니다.

// 만약 개발자 로컬 환경에서 kubectl을 통해 이 클러스터에 접근하려면 kube-apiserver와 통신할 수 있어야 하기 때문에 마스터 노드가 실행되고 있는 EC2 인스턴스의 퍼블릭 IP 주소를 추가해야 합니다.

 

다음 명령어를 입력하여 클러스터를 초기화합니다.

# kubeadm init   --apiserver-advertise-address=0.0.0.0     --pod-network-cidr=192.168.0.0/16     --apiserver-cert-extra-sans=[사설IP],[공인IP] --ignore-preflight-errors=NumCPU,Mem

 

 

 

 

 

단, 위 명령어 입력 시 오류가 출력된다면 도커 서비스를 재시작하고 다시 입력해봅니다.

# systemctl start docker.service

 

 

 

 

3분정도 기다리면 쿠버네티스 마스터 노드(control-plane)가 정상적으로 설치된 것을 확인할 수 있습니다.

아래 mkdir~ 로 시작하는 세 줄은 마스터 노드에서 입력하고,

맨 아래 kubeadm join 부분은 워커 노드에서 입력하면 됩니다.

 

 

# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config
# kubectl version --short
Client Version: v1.21.0
Server Version: v1.21.0

 

 

 

 

마스터 노드의 설정은 여기까지입니다!

 

 

 

 

 

 

 

* Kubernetes Worker node 설정

 

Worker노드의 설정은 Master노드와 같고 비교적 간단합니다.

쿠버네티스 저장소를 추가하고, kubeadm, kubelet, kubectl을 설치합니다.

# apt update
# apt install -y apt-transport-https curl
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
# cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
# apt update
# apt-get install -y kubelet kubeadm kubectl
# apt-mark hold kubelet kubeadm kubectl
# apt install docker.io

 

 

 

 

다음으로 마스터 노드에서 출력된 kubeadm join ~ 을 워커 노드에 붙여넣습니다.

# kubeadm join [마스터노드IP]:6443 --token ~~~~~~ \
        --discovery-token-ca-cert-hash sha256:해시값

 

 

 

 

 

잠시 후, 아래와 같이 출력되는 것을 확인할 수 있습니다.

 

 

 

 

 

Master 노드에서 'kubectl get nodes' 명령어를 입력했을 때 아래와 같이 출력되면 성공입니다!

 

 

 

 

 

 

 

 

* 컨테이너 네트워크 에드온 설치

 

쿠버네티스의 컨테이너 간 통신을 위해 Master노드에서 calico 네트워크 플러그인을 설치합니다.

# kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml

 

 

 

 

설치가 정상적으로 완료됐는지 확인하기 위해, 다음 명령어로 쿠버네티스 핵심 컴포넌트들의 실행 목록을 확인합니다.

처음에는 Status에 Pending 상태가 많지만, 잠시 후 해보면 Running으로 바뀌는 모습을 확인할 수 있습니다.

# kubectl get pods --namespace kube-system

 

 

 

 

kubectl get nodes 명령어를 사용하여 쿠버네티스에 등록된 모든 노드를 확인합니다.

STATUS가 Not Ready 에서 Ready 로 변경되었습니다.

 

 

 

 

 

 

이제 쿠버네티스가 정상적으로 설치되어 다른 실습을 정상적으로 진행할 수 있게 되었습니다!

kops를 활용해서 설치했을 때의 오류가 발생하지 않고 보다 정상적으로 작동되어 책에 있는 실습을 계속해서 진행할 수 있었습니다~!

 

 

 

 

 

 

* kubeadm 삭제

 

kubeadm으로 설치된 쿠버네티스는 각 노드에서 다음 명령어를 사용해 삭제할 수 있습니다.

쿠버네티스 설치 도중 오류가 발생했거나 테스트용 쿠버네티스 클러스터를 삭제할 때 사용합니다.

# kubeadm reset

 

 

 

반응형

'서버 > Docker&Kubernetes' 카테고리의 다른 글

[Kubernetes] Kubespray 로 kubernetes 구축하기  (0) 2023.07.27
도커로 가상 비트코인 거래하기  (3) 2021.05.09
kops로 AWS에서 Kubernetes 설치  (0) 2021.04.28
Docker Compose  (0) 2021.04.22
Docker Swarm  (0) 2021.04.20

댓글