올해도 가시다님의 은총을 받아 Kubernetes 스터디에 참여하게 되었다.
이번 스터디는 '24단계 실습으로 정복하는 쿠버네티스' 책과 함께 진행되는 스터디임을 밝힌다.
kops : The easiest way to get a production grade Kubernetes cluster up and running.
k8s를 쉽게 AWS, GCP 등 클라우드에 쉽게 프로비저닝 할 수 있는 오픈소스이다. AWS와 호환성이 좋고, HA구성, Terraform 연동 등의 기능을 제공한다.
실습 전 AdministratorAccess 권한을 가진 AWS IAM 계정과 Access key 및 Route53에서 구입한 도메인, EC2용 key pair가 필요하다.
실습 구성도는 위 그림과 같이 EC2를 통해 kops로 배포한 k8s 클러스터에 접근하는 방법을 사용한다.
EC2는 스터디에서 제공해준 Cloudformation을 통해 설치하도록 한다.
# yaml 파일 다운로드
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/kops-new-ec2.yaml
# 배포
# aws cloudformation deploy --template-file ~/Downloads/kops-new-ec2.yaml --stack-name mykops --parameter-overrides KeyName=<My SSH Keyname> SgIngressSshCidr=<My Home Public IP Address>/32 --region <리전>
예시) aws cloudformation deploy --template-file ~/Downloads/kops-new-ec2.yaml --stack-name mykops --parameter-overrides KeyName=kimchigood SgIngressSshCidr=$(curl -s ipinfo.io/ip)/32 --region ap-northeast-2
# CloudFormation 스택 배포 완료 후 EC2 IP 출력
aws cloudformation describe-stacks --stack-name mykops --query 'Stacks[*].Outputs[*].OutputValue' --output text
예시) 3.35.137.31
# kOps-ec2 에 SSH 접속
예시) ssh -i <My SSH Keyfile> ec2-user@3.35.137.31
ssh -i ~/.ssh/kimchigood.pem ec2-user@$(aws cloudformation describe-stacks --stack-name mykops --query 'Stacks[*].Outputs[0].OutputValue' --output text)
위 작업까지 끝나면 k8s와 연동되는 EC2가 생성된 것이다. Cloudformation으로 설치한 EC2에는 kops, kubectl, aws cli, rsa key 가 미리 설치되어 있다.
# IAM User 자격 구성 : 실습 편리를 위해 administrator 권한을 가진 IAM User 의 자격 증명 입력
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
# S3 Bucket 생성
REGION=ap-northeast-2 # 서울 리전 사용
aws s3 mb s3://버킷<유일한 이름> --region $REGION
자, 이제 kops를 통해 kubernetes를 provisioning 해보자. domain, s3 등 몇가지 세팅이 필요하다.
export AWS_PAGER=""
export REGION=ap-northeast-2
export KOPS_CLUSTER_NAME=kimchigood.link
export KOPS_STATE_STORE=s3://kimchigood
echo 'export AWS_PAGER=""' >>~/.bashrc
echo 'export REGION=ap-northeast-2' >>~/.bashrc
echo 'export KOPS_CLUSTER_NAME=kimchigood.link' >>~/.bashrc
echo 'export KOPS_STATE_STORE=s3://kimchigood' >>~/.bashrc
# kops 설치
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
간단히 설명하면, cni는 amazonvpc를 사용하고, master/worker node의 스펙은 t3.medium, pod network 대역은 172.30.0.0./16을 사용하겠다는 의미이다.
설치화면
설치가 다 되었는지 확인해보자.
# 노드 IP 확인
aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,PrivateIPAdd:PrivateIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output table
# 파드 IP 확인
kubectl get pod -n kube-system -o=custom-columns=NAME:.metadata.name,IP:.status.podIP,STATUS:.status.phase
# kops 클러스터 정보 확인
kops get cluster
NAME CLOUD ZONES
kimchigood.link aws ap-northeast-2a,ap-northeast-2c
# Instance Group 확인
(⎈|kimchigood:default) [root@kops-ec2 ~]# kops get ig
NAME ROLE MACHINETYPE MIN MAX ZONES
master-ap-northeast-2a Master t3.medium 1 1 ap-northeast-2a
nodes-ap-northeast-2a Node t3.medium 2 2 ap-northeast-2a
nodes-ap-northeast-2c Node t3.medium 1 1 ap-northeast-2c
kops로 k8s 설치가 되고, dns연동이 끝났다면, 노드접속이 되는 지 확인한다.
ssh -i ~/.ssh/id_rsa ubuntu@api.$KOPS_CLUSTER_NAME
kops로 설치가 끝났다. 다음 포스팅에서는 kops 기능에 대해 알아보자.