Study

[스터디] PKOS 스터디 1주차 Kops 개념 및 실습

mokpolar 2023. 3. 11. 21:15
반응형

CloudNeta Kubernetes 스터디 시작

3월부터 가시다님의 CloudNeta Kubernetes 스터디에 합류했다. 

이에 각 주차별 학습 내용을 정리해야 한다. 

1주차의 내용은 KOPS를 사용한 K8S 환경 구축이다. 

 

KOPS란 무엇인가?

Kubernetes KOPS는 Cloud 환경에서 Kubernetes 클러스터를 쉽게 배포, 관리 및 업그레이드할 수 있는 오픈소스 도구이다.

KOPS는 클러스터를 생성, 업데이트 및 삭제하는 프로세스를 자동화한다.

 

AWS, GCP 같은  CSP사의 환경에서 사용할 수 있다는데, Kops 깃허브에 가보면

DigitalOcean, Hetzner, OpenStack은 베타 지원, Azure는 알파 지원 중이라고 한다.

 

KOPS는 클라우드에 Kubernetes 클러스터를 간단하고 효율적인 방법으로 배포할 수 있다. 

기능들은 다음과 같은데,

  • 여러 CSP Kubernetes 클러스터의 프로비저닝을 자동화
  • 고가용성(HA) Kubernetes 마스터 배포
  • dryrun 및 자동 비활성화를 위한 상태 동기화 모델 기반 구축
  • 테라폼 생성 기능
  • 사용자 정의 Kubernetes 애드온 지원
  • 명령줄 자동 완성
  • YAML 매니페스트 기반 API 구성
  • 매니페스트 생성을 위한 템플릿 및 dryrun 모드
  • 8개의 다른 CNI 네트워킹 제공자 중에서 즉시 선택 가능
  • Kube-up에서 업그레이드 지원
  • 클러스터 매니페스트를 통해 컨테이너를 훅으로, 파일을 노드에 추가하는 기능

라고 되어 있는데, 왠지 많이 듣던 얘기같아 보인다. 

 

그럼 Kubespray와의 비교는 어떨까? 

마침 Kubespray 깃허브(아래 링크)에 자신들과 KOPS와 비교한 내용이 있다. 

https://github.com/kubernetes-sigs/kubespray/blob/master/docs/comparisons.md

Kubespray는 베어메탈과 대부분의 클라우드에서 실행되며, 프로비저닝 및 오케스트레이션을 위한 기반으로 Ansible을 사용합니다. Kops는 프로비저닝과 오케스트레이션을 직접 수행하므로 배포 플랫폼에서 유연성이 떨어집니다. Ansible에 익숙하거나, 기존 Ansible 배포를 사용 중이거나, 여러 플랫폼에서 Kubernetes 클러스터를 실행하고자 하는 사람들에게는 Kubespray가 좋은 선택이 될 수 있습니다. 그러나 Kops는 지원하는 클라우드의 고유 기능과 더 긴밀하게 통합되어 있으므로 가까운 미래에 하나의 플랫폼만 사용할 예정이라면 더 나은 선택이 될 수 있습니다.

CSP에서는 Kops를, 온프레미스에서는 Kubespray를 써야하는 것처럼 들린다.

물론 Kops를 실제 운영 환경에서 사용할까..? 라는 의문은 들 수 있다.

 

Kops 실습 

구조

CloudNeta 스터디의 멋진 점은 일단 스터디하는 내용을 쉽게 테스트해볼 수 있도록 CloudFormation 매니페스트를 만들어주시는데, 

잘 구성되어 있어 아주 유용하다. 

 

실습 환경 아키텍쳐는 아래와 같다. 

 

Kops를 시작하려면 CSP 계정과 Kubernetes 클러스터 구성 파일이 있어야 한다. 

그러니 이 경우는 AWS의 계정이다.

 

Kops 생성

일단 주어진 CloudFormation으로 환경을 생성한다.

# 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

 

해당 ec2로 접근하면 기본적으로 필요한 kubectl, kops, awscli 등은 다 설치가 되어있다. 

aws configure를 통해 administrator 권한을 부여한다.

위 아키텍쳐에서 보듯이 Kops는 배포 설정파일을 AWS S3에 저장할 수 있다. 

그러니 이렇게 실습을 수행할 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

# Kops deploy
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

 

EC2를 모니터링하고 있으면 아래와 같이 EC2가 생성되는 모습을 볼 수 있다.

nodes-ap-northeast-2c.mydns       x.x.x.x   running
nodes-ap-northeast-2a.mydns       x.x.x.x    running
control-plane-ap-northeast-2a.masters.mydns      x.x.x.x     running

컨트롤 플레인용 EC2 1개, 워커용 2개를 생성했다는 사실을 알 수 있다. 

클러스터가 실제로 동작하고 있는지는 아래와 같이 validate 할 수 있다. 

# validate
kops validate cluster --wait 10m

NODE STATUS
NAME			ROLE		READY
i-xxx	control-plane	True
i-xxx	node		True
i-xxx	node		True

Your cluster xxx is ready

kops 커맨드들에는 이런 것들이 있다. 

CSP의 환경과 잘 어우러짐을 알 수 있다. 

kops get ig
NAME				ROLE		MACHINETYPE	MIN	MAX	ZONES
control-plane-ap-northeast-2a	ControlPlane	t3.medium	1	1	ap-northeast-2a
nodes-ap-northeast-2a		Node		t3.medium	1	1	ap-northeast-2a
nodes-ap-northeast-2c		Node		t3.medium	1	1	ap-northeast-2c

kops get cluster
NAME			CLOUD	ZONES
xxx 	aws	ap-northeast-2a,ap-northeast-2c

 

이제 클러스터가 정상 동작함을 알았으니, kubectl 커맨드로 api가 정상동작 하는 지도 체크해보자.

kubectl get pod -A
NAMESPACE     NAME                                          READY   STATUS    RESTARTS        AGE
kube-system   aws-cloud-controller-manager-2896c            1/1     Running   0               4m39s
kube-system   aws-node-gnxqv                                1/1     Running   0               4m41s
kube-system   aws-node-nvmsp                                1/1     Running   0               3m24s
kube-system   aws-node-s8j5f                                1/1     Running   0               3m23s
kube-system   coredns-68cd66b8cc-hllvp                      1/1     Running   0               4m41s
...
kube-system   kops-controller-px7r8                         1/1     Running   0               4m39s
kube-system   kube-apiserver-i-0047ba5c624558645            2/2     Running   1 (5m21s ago)   3m50s
kube-system   kube-controller-manager-i-0047ba5c624558645   1/1     Running   2 (5m18s ago)   3m37s
kube-system   kube-proxy-i-0047ba5c624558645                1/1     Running   0               3m51s
kube-system   kube-proxy-i-033132198031060ce                1/1     Running   0               3m23s
kube-system   kube-proxy-i-09ce1522a59884a65                1/1     Running   0               3m22s
kube-system   kube-scheduler-i-0047ba5c624558645            1/1     Running   0               4m4s

 

잘 되는 것 같아보인다. 

 

 

아까 생성한 S3 bucket에는 어떤 것들이 저장되는지 확인해볼 수 있다. 

 

마무리

Kops 를 사용하면 EKS 를 쓰지 않고도, AWS에서 Kubernetes cluster를 정말 쉽게 구축할 수 있음을 확인해보았다. 

운영환경에서 쓸지.. 는 모르겠지만 특히 테스트용으로 정말 유용해보인다. 

 

 

Reference

 

 

반응형