들어가며
- <24단계 실습으로 정복하는 쿠버네티스> 라는 책을 갖고 스터디를 시작하였고, 1주차에 배운 내용인 kops를 활용한 aws kubernetes 셋업에 대한 내용을 정리합니다.
Kops 란 ?
- Kops (Kubernetes Operations) 는 CSP(aws, gcp, azure, ...)가 제공하는 클라우드 환경에서 손쉽게 k8s를 설치하게 도와주는 도구 입니다.
- 클라우드 환경에서 제공하는 다양한 서비스와 유연하게 연동되어 사용이 가능합니다.
- Kops의 장점
- AWS와 GCP를 비롯한 다양한 클라우드에서 Kubernetes 클러스터를 구성하고 관리할 수 있습니다.
- Kubernetes 버전 관리를 지원하므로 쉽게 클러스터를 업그레이드하거나 다운그레이드할 수 있습니다.
- kubectl을 사용하여 리소스를 관리할 수 있기 때문에 Kubernetes 생태계에 익숙한 사용자에게는 진입 장벽이 낮습니다.
- AWS와 GCP의 다양한 기능을 활용하여 Kubernetes 클러스터를 관리할 수 있습니다.
- 커뮤니티 지원이 활발하며, 다양한 플러그인과 템플릿이 제공됩니다.
- 지원하는 쿠버네티스 버전 업데이트도 빠른편 (현재 기준 1.26 까지지원)
- 결론적으로 운영에는 적합한 툴은 아니라 생각하고, 빠르게 교육 환경을 구성하는 용도로 적합하다고 생각합니다
실습 구성도
kops를 활용하여 aws에서 위와 같은 환경의 kubernetes 클러스터를 구축해보겠습니다
# 클라우드에 리소스를 생성하기 미리 작성된 cloudformation 파일을 다운로드합니다.
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/kops-new-ec2.yaml
# cloudformation 배포
aws cloudformation deploy --template-file kops-new-ec2.yaml --stack-name mykops --parameter-overrides KeyName=<My SSH Keyname> SgIngressSshCidr=<My Home Public IP Address>/32 --region <리전>
# CloudFormation 스택 배포 완료 후 EC2 IP 출력
aws cloudformation describe-stacks --stack-name **mykops** --query 'Stacks[*].Outputs[*].OutputValue' --output text
# kOps-ec2 에 SSH 접속
예시) ssh -i <My SSH Keyfile> **ec2-user**@< MY-IP >
서버에 접속
설치되어 있는 명령어 확인
# 기본 툴 및 SSH 키 설치 등 확인
kubectl version --client=true -o yaml | yh
... gitVersion: v1.26.2 ...
kops version
Client version: 1.25.3 (git-v1.25.3)
aws --version
aws-cli/2.10.3 Python/3.9.11 Linux/4.14.304-226.531.amzn2.x86_64 exe/x86_64.amzn.2 prompt/off
ls /root/.ssh/id_rsa*
# 자격 구성 설정 없이 확인
aws ec2 describe-instances
aws 명령어 사용을 위해 IAM 인증을 합니다
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
kops는 쿠버네티스 설정값을 s3에 저장합니다. 저장에 필요한 버킷을 생성합니다.
aws s3 mb s3://버킷<유일한 이름> --region $REGION
kops로 쿠버네티스 클러스터 배포
export KOPS_CLUSTER_NAME=<자신의 퍼블릭 호스팅 메인 주소>
export KOPS_STATE_STORE=<s3://(위에서 생성한 자신의 버킷 이름)>
export AWS_PAGER=""
export REGION=ap-northeast-2
# 옵션 [터미널1] EC2 생성 모니터링
while true; do aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output text ; echo "------------------------------" ; sleep 1; done
# kops 설정 파일 생성(s3) 및 k8s 클러스터 배포 : 6분 정도 소요
## CNI는 aws vpc cni 사용, 마스터 노드 1대(t3.medium), 워커 노드 2대(t3.medium), 파드 사용 네트워크 대역 지정(172.30.0.0/16)
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
명령어를 실행하면 아래와 같은 아웃풋을 볼 수 있다. 클러스터 생성엔 보통 6-10분 소요 됩니다.
입력한 도메인존에 쿠버네티스 API서버와 통신에 필요한 A레코드 3개가 생성 됩니다.
생성이 완료되면 kubectl 명령어로 쿠버네티스를 제어할 수 있습니다.
삭제
- kops 클러스터 삭제
- kops delete cluster --yes
- AWS CloudFormation 스택 삭제
- aws cloudformation delete-stack --stack-name <name>
마치며
kops 라는 툴로 k8s를 쉽게 설치하는 법을 배울수 있는 좋은 시간이였습니다. 특히 kops에서 지원하는 다양한 플러그인을 사용하면 helm없이도 패키지 설치를 쉽게 할 수 있는게 장점이라고 느꼈습니다. 처음에 언급한것처럼 운영에는 적합하지 않을지 모르지만 간단한 테스트를 위한 환경을 빠르게 생성하는데에는 효과적이라고 생각합니다. (eks 대비 빠르게 생성됨)
'Kubernetes' 카테고리의 다른 글
kubernetes 스터디 3주차 (0) | 2023.03.24 |
---|---|
kubernetes 스터디 2주차 (0) | 2023.03.18 |
머신러닝 워크플로우를 위한 kubeflow 설치 및 CR,CRD 분석 (0) | 2022.06.25 |
Kafka Operator 설치 및 테스트 (0) | 2022.06.11 |
kubernetes prometheus operator 설치 및 알림 정책추가 (0) | 2021.02.15 |