쿠버네티스 스터디 (PKOS 2기) - 1주차

김준영·2023년 3월 5일
2

CloudNet PKOS2기

목록 보기
1/5
post-thumbnail

글에 중간 중간에 첨부된 다이어그램은 스터디에서 사용하는 다이어그램을 캡처하였습니다.

쿠버네티스 전문가이신 가시다님을 통해 스터디를 참가할 수 있는 자격을 얻게 되었고 기존에 쿠버네티스 자격증을 따고 좀 더 깊은 지식을 얻고 싶은 나에게 좋은 경험이 될 것 같았다.

어떤 스터디 인가?

총 4주로 진행이 되는데 실무 위주의 강의와 여러 전문가분들의 경험 발표로 이루어져 있다.
이번 참가자 모집은 마감되었지만 페이스북을 통해 1달 주기로 모집하는 것 같다! 가시다님은 AWS, Kubernetes, CI/CD 관련 강연을 하고 계시고 여러 책을 발간하셨기 때문에 여러 경험에서 오는 내용들로 이루어져 있는게 좋았다. 더불어 트러블 슈팅 예제까지 준비하시니 안 들을 수 가 없는 스터디 였다.
(스터디 참가하시는 분들도 전문가분들!)
스터디는 "24단계 실습으로 정복하는 쿠버네티스" 책을 기반으로 진행하신다고 하셨으며 책의 저자분도 1주차 경험 발표가 예정되어 있다.

쿠버네티스에 대한 기본 지식은 있는 상태라 가정하고 1주차는 kops에 대한 강의를 진행하였다.

kOps란?

Kubernetes Operations(kOps) - production grade k8s installation, Upgrades and Management
kOps는 클라우드 플랫폼에서 쉽게 k8s를 설치할 수 있게 도와주는 도구이며 서버 인스턴스와 네트워크 리소스 등을 클라우드에서 자동으로 생성해 k8s를 설치한다. kOps는 AWS의 다양한 서비스와 유연하게 연동되어 사용 가능하다.

실습

실습 내용은 CloudFormation으로 기본 구성을 미리 설치 한 상태에서 진행한다. CloudFormation 템플릿가시다님이 Public s3 template으로 제공하고 있다! 따라서 이 글을 보는 사람들도 쉽게 실습을 진행 할 수 있을 것이라 생각한다.

실습 구성도


1. cloudformation 스택 생성 후 생성된 ec2로 접속한다
2. 아래 명령어 실행

sudo su -
# 기본 툴 및 SSH 키 설치 등 확인
kubectl version --client=true -o yaml | yh
# 자격 구성 설정 없이 확인
aws ec2 describe-instances
  1. IAM 유저를 생성한다 (IAM User 자격 구성 : 실습 편리를 위해 administrator 권한을 가진 IAM User 의 자격 증명 입력)

  2. Route53 퍼블릿 도메인 생성 (5달러)

  3. 아래 명령어 실행

aws configure
AWS Access Key ID [None]: AKIA5...
AWS Secret Access Key [None]: CVNa2...
Default region name [None]: ap-northeast-2
Default output format [None]: json
# 배포 시 참고할 정보를 환경 변수에 저장
export KOPS_CLUSTER_NAME=<자신의 퍼블릭 호스팅 메인 주소>
export KOPS_STATE_STORE=<s3://(위에서 생성한 자신의 버킷 이름)>
export AWS_PAGER=""
export REGION=ap-northeast-2

kops create cluster --zones="$REGION"a,"$REGION"c --networking amazonvpc --cloud aws \
--master-size t3.medium --node-size t3.medium --node-count=2 --network-cidr 172.30.0.0/16 \
--ssh-public-key ~/.ssh/id_rsa.pub --name=$KOPS_CLUSTER_NAME --kubernetes-version "1.24.10" -y

kops 생성된 후 validate 명령어를 치면 k8s 설정이 아직 완료가 되지 않았다고 5분에서 10분 정도를 기다려 달라고 한다. 가시다님이 설명해주신건 여기서 기본 IP인데 IP는 처음 KOPS가 설치될땐 203.0.113.123. 로 설정되고 K8S 설정이 내부적으로 완료가 되면 IP가 바뀐다고 하였다.(신기)

관리 편의성

  1. kubectl cli 플러그인 매니저 쿠버네티스 크루(krew) 설치
  2. krew로 kube-ctx, kube-ns 설치 및 사용
  3. 기타 플러그인 설치 및 사용

ExternalDNS

기존에 실무에서 쓰는 것과 달라서 이 부분도 재밌게 들었다!
소개 : K8S 서비스/인그레스 생성 시 도메인을 설정하면, AWS(Route 53), Azure(DNS), GCP(Cloud DNS) 에 A 레코드(TXT 레코드)로 자동 생성/삭제
관련 글: https://heuristicwave.github.io/EKS_Upgrade

트러블 슈팅

책에서는 트러블 슈팅을
1. get(리소스 보여줌) ->
2. describe(리소스 상태, 설정 값, 에러값 보여줌) ->
3. log (파드의 로그를 보여줌) ->
4. get event 로 확인한다고 하였다.
본인은 get event(이벤트들을 보여줌) 명령어가 있는지도 몰랐다. 분명 시험 볼때 이런 저런 명령어들을 다 외웠다고 생각했는데 아직도 공부할게 투성이다.

조치 프로세스 가이드

learnk8s.io 홈페이지는 양질의 글들이 많은 것같다. 개발자들이 medium 유로 구독해서 읽는 것처럼 learnk8s.io 사이트도 출근길에 읽을만 하다! (혹은 출근해서 30분정도 ㅎ)

헬름

쿠버네티스 환경에서 애플리케이션을 구동하려면 디플로이먼트, 서비스, 컨피그맵 등의 다양한 리소스가 필요하다. 헬름은 이러한 다양한 리소스를 하나의 패키지로 묶어서 단일 차트로 설치 및 관리할 수 있도록 한다. 많은 업체들이 헬름 차트를 지원하므로 헬름은 현재 쿠버네티스 환경의 애플리케이션 설치의 표준으로 사용되고 있다.

helm repo add # 애플리케이션 설치에 사용하는 헬름 리포지토리를 로컬 환경에 추가한다.
helm pull # 헬름 차트 파일을 로컬호스트로 내려받는다.
cp values.yaml my-values yaml # 원본 템플릿 변수 파일의 이력 관리를 위해 템플릿 변수 파일(value.yaml) 파일을 새로운 파일(my-values.yaml)로 복사한다. 새롭게 생성한 파일에서 필요한 옵션을 수정
helm install {helm 이름} -f my-values.yaml # 수정한 파일을 템플릿 옵션 파일로 지정해 원하는 애플리케이션을 설치
helm ls # 설치된 헬름 차트 목록 확인
helm get manifeset # 주로 디버깅 용도로 사용하며, 현재 실행중인 헬름 차트의 전체 yaml 파일 목록 및 상세 설정을 확인할 수 있음
helm delete # 헬름 차트를 삭제

마치며

원 글의 책에서 저자가 했던 말이 생각난다.
"다수의 프로젝트 경험으로 오히려 쿠버네티스를 도입하지 않을 이유를 찾는 것이 더 어려워 보인다"

다음은 2주차 네트워크/스토리지 스터디이다!

2개의 댓글

comment-user-thumbnail
2023년 3월 5일

모임장 가시다입니다.
좋은 내용 잘 봤습니다.
남은 3주도 잘 부탁드립니다!

1개의 답글