본문 바로가기
Container/Kubernetes

kOps로 쿠버네티스 설치하기 (on AWS EC2)

by wrynn 2021. 10. 1.

 

 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

댓글