kOps를 활용하여 쿠버네티스 클러스터를 구성해보겠습니다. Bastion 서버로 AWS EC2 (Amazon LInux 2, t2.micro)를 생성하여 사용하였습니다. EC2에는 기본 이미지에 awscli 및 python이 포함되어 있어 본문의 내용 외에 다른 도구는 설치하지 않고 EC2 인스턴스 생성 직후인 상태 그대로 진행하였습니다.
※ AWS의 유료 서비스를 사용하므로 비용이 발생할 수 있습니다.
kOps 및 kubectl 설치
# kops
wget -O 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
sudo mv ./kops /usr/local/bin/
# kubectl
wget -O kubectl https://storage.googleapis.com/kubernetes-release/release/\
$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)\
/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
AWS Credentials 설정
aws 명령어를 사용하기 위해 credentials 정보를 설정합니다. Access Key ID 및 Secret Access Key는 AWS 웹 콘솔 상단 본인 계정 - My Security Credentials - Access keys for CLI, SDK, & API access 에서 생성할 수 있습니다.
aws configure # <Access Key ID>, <Secret Access Key>, ap-northeast-2, json
AWS Access Key ID [None]: <Access Key ID>
AWS Secret Access Key [None]: <Secret Access Key>
Default region name [ap-northeast-1]: ap-northeast-2
Default output format [json]: json
kOps가 사용할 AWS 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/IAMFullAccess \
--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/AmazonSQSReadOnlyAccess \
--group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonVPCFullAccess \
--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/AmazonEventBridgeReadOnlyAccess \
--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
그 다음 생성한 kops 계정으로 AWS 인증 정보를 변경합니다. kops 계정의 credentials 정보는 아래 경로에서 확인할 수 있습니다. (IAM - Users - kops 계정 클릭 - Security credentials 탭 - Create Access Key)
aws configure # kops 계정의 <Access Key ID>, <Secret Access Key>, ap-northeast-2, json
AWS Access Key ID [****************BR5L]: kops 계정의 <Access Key ID>
AWS Secret Access Key [****************1E9o]: kops 계정의 <Secret Access Key>
Default region name [ap-northeast-1]:
Default output format [json]:
S3 버킷 생성
kOps는 클러스터에 관한 config, manifest 등을 저장하기 위해 S3를 사용합니다. 버킷 이름으로 kops-bucket-sample 을 사용하였으며 Versioning 기능을 켜둡니다.
aws s3api create-bucket \
--bucket kops-bucket-sample \
--region ap-northeast-2
aws s3api put-bucket-versioning \
--bucket kops-bucket-sample \
--versioning-configuration Status=Enabled
SSH 키 생성
키 파일을 생성합니다. 사용자 입력을 요구하는 경우 Enter 키로 모두 넘어갑니다.
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ec2-user/.ssh/id_rsa.
Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:f2w13CyYo4MUCB3ABE61ChUSkI3WkrgXTHbcjEilcLg ec2-user@bastion-host
The key's randomart image is:
+---[RSA 2048]----+
|BX%XB*.. |
|=%=++o+.. |
|oo+.. . . |
|E... . o + o |
| .. . S + = o|
| . o o o o |
| . + + |
| + |
| |
+----[SHA256]-----+
클러스터 설정 구성
클러스터명을 나타내는 NAME 변수는 별도의 DNS를 사용하지 않고 kops-cluster.k8s.local 로 명시하였습니다. KOPS_STATE_STORE 값에는 위에서 생성한 S3 버킷의 이름(kops-bucket-sample)을 입력합니다.
echo "export NAME=kops-cluster.k8s.local" >> ~/.bashrc
echo "export KOPS_STATE_STORE=s3://kops-bucket-sample" >> ~/.bashrc
source ~/.bashrc
kops create cluster --zones ap-northeast-2a $NAME
노드 설정
생성될 마스터 및 워커 노드의 인스턴스 타입, 노드 수 등을 지정합니다. 기본 설정을 사용하시려면 이 단계는 건너뛰어도 좋습니다. 기본 설정은 마스터와 워커 노드 모두 t3.medium 타입으로 1개씩 생성됩니다.
kops edit ig master-ap-northeast-2a --name $NAME
kops edit ig nodes-ap-northeast-2a --name $NAME
클러스터 생성
위에서 지정한 클러스터 정의를 바탕으로 실제로 EC2를 생성하고 클러스터를 구성합니다.
kops update cluster $NAME --yes
클러스터 상태 확인
클러스터가 생성된 것을 확인합니다. 클러스터가 생성되기까지 약 10분 이내의 시간이 소요됩니다.
kops validate cluster
이 때, 다음과 같이 오류가 나타나면 kops export 명령으로 해결한 후 다시 시도해 봅니다.
# Validation failed: unexpected error during validation: error listing nodes: Unauthorized
kops export kubecfg --admin
정상적으로 생성되었다면 kubectl 명령어로 클러스터 정보를 조회할 수 있습니다.
kubectl get no
클러스터 삭제
클러스터가 더 이상 필요없는 경우 두가지 방법 중 하나를 선택할 수 있습니다. 먼저 클러스터를 삭제하는 방법입니다.
kops delete cluster --name $NAME --yes # 클러스터 삭제
또는 마스터와 워커 노드 수를 0으로 조정하여 비용을 절약할 수 있습니다.
kops edit ig nodes-ap-northeast-2a # 노드의 minSize를 0으로 수정
kops edit ig master-ap-northeast-2a # 마스터의 minSize를 0으로 수정
kops update cluster --name=$NAME --yes
참고자료
[1] Installing Kubernetes with kops
Installing Kubernetes with kops
This quickstart shows you how to easily install a Kubernetes cluster on AWS. It uses a tool called kops. kops is an automated provisioning system: Fully automated installation Uses DNS to identify clusters Self-healing: everything runs in Auto-Scaling Grou
kubernetes.io
[2] kOps Github Repositoy
GitHub - kubernetes/kops: Kubernetes Operations (kops) - Production Grade K8s Installation, Upgrades, and Management
Kubernetes Operations (kops) - Production Grade K8s Installation, Upgrades, and Management - GitHub - kubernetes/kops: Kubernetes Operations (kops) - Production Grade K8s Installation, Upgrades, an...
github.com
'Container > Kubernetes' 카테고리의 다른 글
3. Deployment (0) | 2022.03.09 |
---|---|
2. Pod, Replication Controller and Replica Set (0) | 2021.11.28 |
1. Kubernetes Overview (0) | 2021.11.27 |
[Health Check] 2. Readiness and Startup Probe (0) | 2021.11.16 |
[Health Check] 1. Liveness Probe (0) | 2021.11.15 |
댓글