kubernetes

kops k8s 클러스터 관리도구

misankim 2023. 4. 10. 22:19
Kops로 k8s 설치하기
https://kubernetes.io/ko/docs/setup/production-environment/tools/kops/

Kops를 사용하여 AWS에서 Kubernetes 클러스터 관리
https://aws.amazon.com/blogs/compute/kubernetes-clusters-aws-kops/

GitHub kubernetes/kops
https://github.com/kubernetes/kops

공식 가이드
https://kops.sigs.k8s.io/getting_started/install/

kops 설치

curl -Lo kops https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-linux-amd64

chmod +x kops
mv kops /usr/local/bin/kops

iam 권한 설정

kops 사용자에게 필요한 권한

AmazonEC2FullAccess
AmazonRoute53FullAccess
AmazonS3FullAccess
IAMFullAccess
AmazonVPCFullAccess

iam 사용자 그룹 및 정책 부여, 사용자 생성 및 그룹 조인

aws iam create-group --group-name kops

aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonRoute53FullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/IAMFullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonVPCFullAccess --group-name kops

aws iam create-user --user-name kops

aws iam add-user-to-group --user-name kops --group-name kops

aws iam create-access-key --user-name kops

인증 설정

프로파일 설정
aws configure

환경변수 세팅
export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id)
export AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key)

dns 구성

kops로 클러스터를 생성하려면 1차 도메인 혹은 2차 도메인이 필요
-> example.com

yum install -y jq

호스팅 영역 생성

ID=$(uuidgen) && \
aws route53 create-hosted-zone \
--name example.com \
--caller-reference $ID \
| jq .DelegationSet.NameServers

호스팅 영역 확인

aws route53 list-hosted-zones | jq '.HostedZones[] | select(.Name=="example.com.") | .Id'

클러스터 상태 저장을 위한 s3 버킷 설정

aws s3api create-bucket \
    --bucket example-kops-kubernetes \
    --region us-east-1

aws s3api put-bucket-versioning --bucket example-kops-kubernetes  --versioning-configuration Status=Enabled

export KOPS_STATE_STORE=s3://example-kops-kubernetes

키 설정

~/.ssh/id_rsa.pub 파일에 퍼블릭키 준비

클러스터 생성

kops create cluster \
--name example.com \
--zones ap-northeast-2a \
--master-size t3a.medium \
--master-count 1 \
--node-size t3a.medium \
--node-count 2 \
--state s3://example-kops-kubernetes \
--yes

--yes 옵션 없이 생성만 먼저 한 경우 배포 진행
kops update cluster --name example.com --yes --admin

kops validate cluster --wait 10m
kubectl get nodes --show-labels
ssh -i ~/.ssh/id_rsa ubuntu@api.example.com

클러스터 상태 확인
kops validate cluster --state=s3://example-kops-kubernetes

마스터노드 ssh 접속
ssh -i ~/.ssh/id_rsa ubuntu@api.example.com

클러스터 수정
kops edit cluster

클러스터 정보 확인
kubectl cluster-info

클러스터 버전 업데이트

버전 참고
https://github.com/kubernetes/kops/blob/master/channels/stable

버전 업데이트 확인 및 적용

kops upgrade cluster \
--name example.com \
--state s3://example-kops-kubernetes \
--yes

클러스터 상태에 맞게 저장소 상태 업데이트

kops update cluster \
--name example.com \
--state s3://example-kops-kubernetes \
--yes

마스터/워커 노드 롤링 업데이트 수행

kops rolling-update cluster \
--name example.com \
--state s3://example-kops-kubernetes \
--yes

워커노드만 업데이트 하려면 --instance-group 옵션 추가

클러스터 삭제

kops delete cluster example.com --state=s3://example-kops-kubernetes --yes