kubernetes 스터디 1주차

입력하다

  • 라는 책으로 연구를 시작했습니다.
    그리고 첫 주에 배운 kops로 aws-kubernetes 설정 내용을 정리했습니다.

캅스란?

  • Kops(Kubernetes Operations)는 CSP(aws, gcp, azure, …)에서 제공하는 클라우드 환경에 k8s를 쉽게 설치할 수 있도록 해주는 도구입니다.
  • 클라우드 환경에서 제공되는 다양한 서비스와 연동하여 사용할 수 있습니다.
  • 콥스의 장점
    1. AWS 및 GCP를 비롯한 다양한 클라우드에서 Kubernetes 클러스터를 구성하고 관리할 수 있습니다.
    2. Kubernetes 버전 관리를 지원하므로 클러스터를 쉽게 업그레이드하거나 다운그레이드할 수 있습니다.
    3. kubectl을 사용하여 리소스를 관리할 수 있기 때문에 Kubernetes 생태계에 익숙한 사용자의 진입 장벽이 낮습니다.
    4. AWS 및 GCP의 다양한 기능을 사용하여 Kubernetes 클러스터를 관리할 수 있습니다.
    5. 강력한 커뮤니티 지원을 제공하며 많은 플러그인과 템플릿이 함께 제공됩니다.
    6. 지원되는 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에 Kubernetes 설정을 저장합니다.
스토리지용 버킷을 생성합니다.

aws s3 mb s3://버킷<유일한 이름> --region $REGION

kops로 Kubernetes 클러스터 배포

export KOPS_CLUSTER_NAME=<자신의 퍼블릭 호스팅 메인 주소>
export KOPS_STATE_STORE=<s3://(위에서 생성한 자신의 버킷 이름)>
export AWS_PAGER=""
export REGION=ap-northeast-2

## 예시)
export AWS_PAGER=""
export REGION=ap-northeast-2
export KOPS_CLUSTER_NAME=<도메인 입력>
export KOPS_STATE_STORE=s3://<위에서 생성한 s3명 입력>

# 옵션 (터미널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분이 소요됩니다.


등록된 도메인 영역에는 Kubernetes API 서버와 통신하는 데 필요한 3개의 A 레코드가 생성됩니다.

일단 생성되면 kubectl 명령으로 Kubernetes를 제어할 수 있습니다.


마지막으로

kops라는 툴을 이용하여 k8s를 쉽게 설치하는 방법을 배울 수 있는 좋은 시간이었습니다.
특히 kops에서 지원하는 다양한 플러그인을 사용하면 helm 없이 패키지를 쉽게 설치할 수 있다는 느낌을 받았습니다.
처음에 말씀드린 것처럼 프로덕션에는 적합하지 않을 수 있지만 간단한 테스트를 위한 환경을 만드는 데는 적합하다고 생각합니다.