카카오 클라우드 쿠버네티스 클러스터 구축

문성하·2023년 10월 3일
0

k8s

목록 보기
1/6

사전준비

환경

  • OS: MACBOOK PRO M1
  • Region : kr-central-2

VPC : 172.16.0.0/24 로 생성 후 진행 (서브넷 마스크 등 다른 설정은 default 설정값을 그대로 진행해주시면 됩니다.)

프로그램 설치

패키지매니저 설치

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

git 설치

brew install git

Docker 설치

brew install --cask docker
# 설치된 docker desktop을 실행
# provoleged access 요구창이 뜨면 OK 누르고 랩탑유저 암호 입력
docker help
# 명령어가 잘 뜬다면 설치 완료

kubectl 설치

brew install kubectl
kubectl version --client
# 버전 정보가 뜬다면 설치 완료

사용자 액세스 키 발급 및 관리


카카오 클라우드 우측 상단 사용자 액세스 키 클릭 후 키 생성
키는 다시 조회할 수 없습니다. 클립보드 등에 복사 후 잘 관리해주세요.

쿠버네티스 클러스터 생성하기

카카오클라우드 콘솔에 접속합니다.

Kubernetes Engine > 클러스터 목록 화면에서 [클러스터 만들기] 버튼을 클릭합니다.

클러스터 만들기 2단계에서 아래 목록에 맞게 노드 풀 정보를 입력하여 클러스터를 생성합니다.

인스턴스 타입에 A1-4-CO가 없어 기본으로 선택된 인스턴스 타입으로 진행했습니다.
노드풀 생성 시 노드 수 를 2로 생성합니다.

kubectl로 쿠버네티스 API 호출하기

kubeconfig 파일 다운로드 및 설정


우측 상단 kubectl버튼을 눌러 kubeconfig 파일을 다운로드해 편집해야 합니다.

클러스터에 대한 접근을 구성하기 위해 다운로드 받은 kubeconfig 파일(.yaml)에서 users > user > exec > env 필드를 수정합니다. 사용자 액세스 키 ID와 보안 키 입력 필드에 에서 생성한 키 ID와 보안 키 값을 입력합니다.

아래 보시면 OS_REGION_NAME 의 value가 "kr-central-1"로 되어있는데, 현재 region을 2에서 사용중이라 이를 "kr-central-2"로 바꾸어주셔야 합니다.

kubectldms $HOME/.kube/config 파일에 저장된 정보를 통해 클러스터에 접근합니다.
설정한 kubeconfig 파일을 $HOME/.kube/config 경로에 복사합니다.

cp ${KUBECONFIG_FILE_PATH} $HOME/.kube/config

# ex)
# cp ~/Downloads/kubeconfig-k8s-test.yaml ~/.kube/config

카카오클라우드 인증 클라이언트 다운로드 및 설정

카카오클라우드 인증 클라이언트 kic-iam-auth를 다운로드한 뒤, 카카오클라우드 인증 클라이언트에 실행 권한을 부여합니다. 그 다음 인증 클라이언트를 실행되는 경로로 이동합니다.
https://docs.kakaocloud.com/service/container-pack/k8se/how-to-guides/k8se-kubectl

chmod +x ${KIC_IAM_AUTH_FILE_PATH}
mv ${KIC_IAM_AUTH_FILE_PATH} /usr/local/bin

# ex)
sudo chmod +x ~/Downloads/kic-iam-auth
sudo mv ~/Downloads/kic-iam-auth /usr/local/bin

kubectl 명령어를 사용해 확인을 해보면 오류가 날 수도 있습니다.
인터넷에서 받은 파일(클라이언트 인증서)를 악성 프로그램으로 의심해 실행을 막는 것입니다.
os에 따라 보안수정을 해주면 됩니다.

kubectl get nodes


이제 명령어가 잘 나오는 것을 확인할 수 있습니다.

컨테이너 이미지 가져오기.

  • 카카오 공식문서에는 kic-library-monolithic 이미지를 가져와 하는 예제가 있지만,
    처음인 만큼 보편적으로 많이 사용하는이미지로 진행하겠습니다.
kubectl run webserver --image=nginx:1.14 --port 80
kubectl get pods -o wide

명령어를 제대로 입력하셨다면 STATUS가 곧 Running으로 바뀌게 됩니다.

여기서 IP에 대한 부분을 집고 넘어가겠습니다.
현재 pod 정보를 보면 192.168.xxx.xxx 라고 나오실텐데,
ipV4의 사설ip만 보이시게 됩니다.

공인IP 사설 IP

공인 ip, 사설 ip 개념을 간단하게 설명하자면
ip주소를 우리가 사용하는 거주지 주소 체계라고 생각한다면
공인 ip는 도로명 주소, 사설 ip는 동/ 호수라고 생각하시면 될 것 같습니다.
아파트의 동/호수는 다른 여러 사람이 겹치게 가질 수 있듯이
사설 ip는 공인 ip내부에서 사용하는 주소라고 생각하시면 됩니다.

즉, A아파트 101동 1102호와 B아파트 101동 1102호의 동.호수는 같지만 주소가 전혀 다르듯
사설 IP는 아파트(실제 네트워크 주소)내에서 주소를 나누기 위해 사용하는 IP주소 체계입니다.

그렇다면 방금 만든 webserver를 어떻게 찾아가야 할까?

kubectl expose

사설 ip주소를 공인 ip주소에 할당하는 방법을 알아야 합니다.
네트워크적인 개념에서는 NAT(네트워크 주소 변환)이라는 개념을 따로 공부하도록 하고,
쿠버네티스에서는 expose명령어를 통해 사설 ip를 외부로 노출시키는 방법을 사용합니다.

kubectl expose pods webserver --type=LoadBalancer --name=webserver-test

웹 콘솔에서 로드밸런서 설정

webserver pod를 로드밸런서 타입으로 expose하면서 Load Balancer의 로드밸런서 목록에도 추가된 것을 확인할 수 있습니다. 로드밸런서 목록에서 webserver-test 로드밸런서의 [더보기] 아이콘 > 공인 IP 연결을 클릭해 공인 ip 할당을 해주시면
외부에서 접속 가능한 ip주소가 나오게 됩니다.

실행중인 pod를 변경해보자.

kubectl exec webserver -it -- /bin/bash
ls
cd /usr/share/nginx/html/
ls
cat index.html
echo "MoonSH WebPage" > index.html
exit

0개의 댓글