상세 컨텐츠

본문 제목

[Kubernetes] AWS EC2에 Kubernetes직접 구축하기 / EKS ❌ (2)

DevOps 연구 노트/아마존 웹 서비스

by bydawn25 2023. 9. 29. 08:56

본문

https://bydawn25.tistory.com/78

 

[Kubernetes] AWS EC2에 Kubernetes직접 구축하기 / EKS ❌

여러분 안녕하세요 ? ㅎ 새벽이는 잘 살아있답니다 ㅎㅎ.. 회사에서 업무에 치이고, 과제에 치이고 개인 공부에 치이느라 기술블로그 관리를 소홀히 했어요. 이번에 수행한 과제가 직접 Kubernates

bydawn25.tistory.com

 

2편에서는 워커노드를 구성하고 Master노드와 연결해보겠습니다.

 

 

 

 

워커노드도 Kubernates를 설치해야 합니다

우리는 워커노드를 2개를 구성한다고 했죠? 먼저 첫번째 워커노드 설치를 진행하겠습니다.

 

첫번째 워커노드와 두번째 워커노드에 아래 일곱단계를 똑같이 실행해 주세요

먼저 EC2인스턴스중에 worker1로 지정한 인스턴스에 접속해 주세요.

 

1. 쿠버네티스는 루트 권한을 요구합니다. 루트 계정으로 바꿔주세요.

sudo su

 

 

 

 

2. 필요한 라이브러리를 먼저 설치해 줍니다

apt update && apt install -y jq apt-transport-https ca-certificates libseccomp2

여기서 앞에 두 라이브러리는 kubernetes에 앱을 deploy할때 https로 접근하기 위해 필요한 라이브러리입니다.

 

마지막 라이브러리는 우분투 리눅스 상 파일 시스템 호환을 위해 필요한 라이브러리 입니다. 

 

 

 

 

3. 쿠버네티스가 Docker와 소통하기 위해 필요한 CRI-O설치하기

//도커 환경이 사용하는 커널 모듈 설치
modprobe overlay
modprobe br_netfilter

//쿠버네티스가 도커를 알아볼 수 있도록 Iptable 설정하기
//이 부분이 제대로 되지 않으면 쿠버네티스 내부에서 서로를 찾지 못한다
cat <<EOF> /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

https://www.tutorialworks.com/difference-docker-containerd-runc-crio-oci/#:~:text=Docker%20Engine%2C%20being%20a%20project,containers%20with%20the%20Docker%20runtime.

 

The differences between Docker, containerd, CRI-O and runc

The container ecosystem is full of terms you’re expected to know. We’ve decoded them for you.

www.tutorialworks.com

쿠버네티스는 도커 등의 컨테이너 서비스를 운영해주는 오케스트라이기 때문에 컨테이너와 소통하기 위한 사전 설치가 필요하다.

 

그래서 CRI가 뭔데? 궁금하다면 위 링크 클릭클릭. 설명이 잘 되어 있다.

 

 

 

 

 

4. CRI-O설정을 잘 마쳤다면 반영해주기

sysctl --system

 

 

 

 

5. 설정해 놓은 CRI-O 정보를 바탕으로 설치하기

{
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/1.22/xUbuntu_18.04/ /" | sudo tee -a /etc/apt/sources.list.d/cri-0.list
curl -L http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/1.22/xUbuntu_18.04/Release.key | sudo apt-key add -
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_18.04/ /" | sudo tee -a /etc/apt/sources.list.d/libcontainers.list

apt update && apt install -y cri-o cri-o-runc
}

 

 

 

 

23년 9월 20일 기준 설치에 문제가 없으나 혹시 설치가 되지 않는다면 해당하는 레포지토리 주소에 접속하여 최신 URL을 가져와서 시도해 보시길 추천드려요!

 

 

 

 

 

 

6. CRI-O를 설치했으니 다시 가동해 줍시다.

rm -rf /etc/cni/net.d
{
systemctl daemon-reload
systemctl enable crio
systemctl restart crio
}

 

 

 

 

7. 사전준비 끝! Kubectl, kubelet, kubeadm 설치하기

{
curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://dl.k8s.io/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
apt update &&apt install -y kubelet kubeadm kubectl
}

인증키 -> 설치리스트 -> apt으로 라이브러리 설치 후 필요한 kubernetes 도구들 설치!

 

여기까지 잘 진행이 되셨다면 이제 여러분들의 ec2에는 쿠버네티스가 깔린겁니다.

 

 

 

 

 

systemctl status kubelet

위 명령어를 입력하면 우리가 설치한 서비스가 잘 돌아가고 있음을 확인할 수 있습니다.

 

 

 

 

 

Wokrer Node에 모두 설치를 완료했으면 Master Node와 연결시켜야 합니다

1. 워커노드를 마스터 노드에 join하기

 

이렇게 두개의 워커노드에 모두 설치가 완료되었다면 마스터 노드로 이동해서 아래 명령어를 입력해 주세요

kubeadm token create --print-join-command --ttl 0

 

이 명령어를 입력하면 kubeadm join ~으로 시작하는 명령어가 나오는데 이 명령어를 이용해서 워커노드와 마스터노드를 도킹! 시킬 수 있어요.

 

해당명령어를 통해 나온 kubeadm join ~ 명령어를 복사하여 워커노드로 이동해 주세요.

 

 

 

 

 

 

2. 2개의 워커노드에 각각 해당하는 명령어를 입력하고 다시 마스터 노드로 돌아오세요.

2개의 워커노드에 각각 입력해 주셔야합니다. 한군데만 입력하고 돌아오시면 아니되어

 

 

 

 

 

3. 약간의 시간후에 kubectl get node를 검색

해당 명령어를 검색하면 해당 정보가 새로 추가되었음을 확인할 수 있습니다. 두 노드가 깔끔하게 연결된것이죠.

 

모두 Ready 상태가 되어야 서비스를 구동하고 배포시킬 수 있습니다.

 

 

 

 

 

 

이렇게 워커노드에 쿠버네티스를 설치하고 마스터와 Join시키는 방법까지 알아보았어요. 다음에는 deploy, service, ingress를 통해서 외부 ip를 통해 서비스로 접속하는 튜토리얼을 진행하도록 하겠습니다. 

관련글 더보기