EKS Cluster Setup ํ๊ธฐ
AWS CLI๋ฅผ ํตํด EKS ํด๋ฌ์คํฐ๋ฅผ ๋์ฐ๊ณ , AWS Access Key๋ฅผ ์ด์ฉํด ์ ์ํด๋ณด์! ์ฒ์์๋ โEKS Cluster? ๊ทธ๊ฑฐ ๊ทธ๋ฅ ๋์ฐ๋ฉด K8s ํด๋ฌ์คํฐ ๋์ฐ๋ ๊ฑฐ ์๋๊ฐ?โ๋ผ๊ณ ๋ง๋งํ๊ฒ ๋ดค๋๋ฐ, ์ด๋ฐโฆ EKS ํด๋ฌ์คํฐ๋ฅผ ๋์ฐ๊ณ ์ค์ ์ ์๊น์ง ํ๋ ๊ณผ์ ์ด ์ํ์น ์์๋ค. ์ด๋ฒ์ ์ํ ์ฐ์ต์ผ๋ก ๊ฒฝํํด๋ดค์ผ๋ ์ด์ ์์ ์๋ค!!
EKS์ K8s ํด๋ฌ์คํฐ๋ ํฐ ๊ด์ ์ผ๋ก (1) ๋ง์คํฐ ๋ ธ๋๋ฅผ ๊ด๋ฆฌํ๋ ํด๋ฌ์คํฐ์ (2) ์์ปค ๋ ธ๋๋ฅผ ๊ด๋ฆฌํ๋ ๋ ธ๋ ๊ทธ๋ฃน์ผ๋ก ์ด๋ค์ง๋ค.
(์ ํ) Bastion ํธ์คํธ ์ธํ ํ๊ธฐ
๋ง์ฝ AWS CLI๋ฅผ ๋ณธ์ธ ๋ก์ปฌ์์ ์ํํ๋ค๋ฉด, ์๊ด ์๋ ๋ถ๋ถ์ด๋ค. ๋ณธ์ธ์ Bastion ํธ์คํธ๋ฅผ ํ๋ ๋์์ ํด๋น ํธ์คํธ์์ AWS CLI๋ก ์์ ํ๋ค. ์ด ๊ฒฝ์ฐ ์๋ ๋ช ๋ น์ด๋ค๋ก ํจํค์ง๋ค์ ์ค์นํ ํ์๊ฐ ์๋ค.
# ๊ธฐ๋ณธ ํจํค์ง ์ค์น
sudo apt update && \
sudo apt install -y jq \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
gettext \
software-properties-common
# aws-cli ์ค์น
sudo apt-get install awscli
aws --version
# kubectl ์ค์น
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - && \
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list && \
sudo apt update && \
sudo apt install -y kubectl=1.25.0-00
kubectl version
AWS CLI ์ธํ ํ๊ธฐ
EKS ํด๋ฌ์คํฐ๋ ์ฝ์์ด ์๋ AWS CLI๋ฅผ ์ฌ์ฉํด ๋์ธ ๊ฒ์ด๋ค. EKS ํด๋ฌ์คํฐ๋ฅผ ๋์ฐ๋ ๊ถํ์ด ์๋ IAM ์ ์ ๋ก AWS CLI๋ฅผ ์ธํ
ํ์. ์ด ๋จ๊ณ์์๋ ์ผ๋จ Administrator
Role์ ๋ถ์ฌํ๋๊ฒ ํธํ๋ค.
์ค์ํ ์ ์ EKS ํด๋ฌ์คํฐ๋ฅผ ๋์ฐ๋ฉด, ์ฒ์์๋ ํด๋น ํด๋ฌ์คํฐ๋ฅผ ๋์ด IAM ์ ์ ๋ฅผ ์ ์ธํ๊ณ ๋ ํด๋น EKS ํด๋ฌ์คํฐ์ ์ ์ํ ์ ์๋ค๋ ์ ์ด๋ค!! ๊ทธ๋์ AWS CLI ์ธํ ์ ์ด๋ค IAM ์ ์ ๋ก ํ๋์ง๊ฐ ์ ๋ง ์ค์ํ๋ค!!!
EKS ํด๋ฌ์คํฐ ๋์ฐ๊ธฐ
๋จผ์ ๋ง์คํฐ ๋ ธ๋๋ฅผ ๊ด๋ฆฌํ๋ EKS ํด๋ฌ์คํฐ๋ถํฐ ๋์๋ณด์.
๋จผ์ EKS ํด๋ฌ์คํฐ์ ๋ถ์ฌํ IAM Role์ ์ธํ
ํ์. ์ด๋ฆ์ xxxx-eks-cluster-role
์ ๋๋ก ์ค์ ํ๊ณ ์๋์ ๋ IAM Policy๋ฅผ ๋ถ์ฌ์ฃผ์.
AmazonEKSClusterPolicy
AmazonEKSVPCResourceController
๊ทธ ์ดํ์ bastion ํธ์คํธ์์ ์๋์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋๋ค.
aws eks create-cluster \
--region us-west-2 \
--name xxxx-eks-cluster \
--kubernetes-version 1.25 \
--role-arn arn:aws:iam::12345678:role/xxxx-eks-cluster-role \
--resources-vpc-config subnetIds=subnet-xxxx,subnet-xxxx,subnet-xxxx,subnet-xxxx
EKS ํด๋ฌ์คํฐ๊ฐ ์ ๋์์ก์ผ๋ฉด kubectl
๋ก ์ ์ํด๋ณด์! ์ ์์ ์ฌ์ฉํ kubeconfig๋ฅผ ์๋ ๋ช
๋ น์ด๋ก ์์ฑํ๋ค.
aws eks update-kubeconfig
--region us-west-2
--name xxxx-eks-cluster
--kubeconfig ./xxxx-eks-config
๋ง๋ค์ด๋ xxxx-eks-config
๋ฅผ ์ฌ์ฉํด์ ์ ์์ ํ
์คํธ ํ๋ค.
$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.111.0.1 <none> 443/TCP 2d19h
EKS ๋ ธ๋๊ทธ๋ฃน ๋์ฐ๊ธฐ
๋ค์์ ์์ปค ๋ ธ๋๋ฅผ ๊ด๋ฆฌํ๋ EKS ๋ ธ๋๊ทธ๋ฃน์ ๋์ฐ์!
์ฐธ๊ณ ๋ก ๋ ธ๋๊ทธ๋ฃน๊น์ง ๋์์ผ ๋ค๋ฅธ AWS IAM User์๊ฒ EKS ํด๋ฌ์คํฐ ์ ์ํ ๊ถํ์ ๋ถ์ฌ ํด์ค ์ ์๋ค!
์ด EKS ๋
ธ๋๊ทธ๋ฃน์๋ IAM Role์ ๋ถ์ฌํด์ผ ํ๋ค. xxxx-eks-nodegroup-role
์ ๋๋ก ์ค์ ํ๊ณ ์๋์ IAM Policy๋ฅผ ๋ถ์ฌ์ฃผ์.
AmazonEKSWorkerNodePolicy
AmazonEC2ContainerRegistryReadOnly
AmazonEKS_CNI_Policy
๊ทธ ์ดํ์ bastion ํธ์คํธ์์ ์๋์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋๋ค.
aws eks create-nodegroup \
--cluster-name xxxx-eks-cluster \
--nodegroup-name xxxx-eks-nodegroup \
--subnets subnet-xxxx subnet-xxxx \
--node-role arn:aws:iam::12345678:role/xxxx-eks-nodegroup-role
EKS ํด๋ฌ์คํฐ ์ ์ ๊ถํ ์ค์
EKS ํด๋ฌ์คํฐ๋ K8s ํด๋ฌ์คํฐ์ ์ ์ํ๋ IAM User/Role์ ๊ถํ์ kube-system
๋ค์์คํ์ด์ค์ ์๋ configmap/aws-auth
์์ ๊ด๋ฆฌํ๋ค. ์ ConfigMap์ EKS ๋
ธ๋๊ทธ๋ฃน์ด EKS ํด๋ฌ์คํฐ์ ๋ถ์ผ๋ฉด ์๋์ผ๋ก ์์ฑ๋๋ ๋ฆฌ์์ค๋ค!
kubectl get configmap aws-auth -n kube-system -o yaml
๋ก ๋ด์ฉ์ ํ์ธํ๋ฉด ์๋์ ๊ฐ๋ค.
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
- groups:
- system:bootstrappers
- system:nodes
rolearn: arn:aws:iam::12345678:role/xxxx-eks-nodegroup-role
username: system:node:
์ฒ์์๋ nodegroup์ ๋ง๋ค๋ ๋ถ์ฌํ IAM Role๋ง ๋ฑ๋ก๋์ด ์๋ค! ์ด์ ๋ค๋ฅธ IAM ์ ์ ์ Role์ ๋ฑ๋กํด๋ณด์!
data:
mapRoles: |
- groups: ...
- groups:
- system:masters
rolearn: arn:aws:iam::12345678:role/Administrator
username: adminRole
mapUsers: |
- groups:
- system:masters
userarn: arn:aws:iam::12345678:user/BlueHorn
username: bluehorn
IAM ์ ์ ๋ฅผ ๋ฑ๋กํ๋ค๋ฉด data.mapUsers.groups[*]
์ ๋ฑ๋กํ๋ฉด ๋๊ณ , IAM Role์ ๋ฑ๋กํ๋ค๋ฉด data.mapRoles.groups[*]
์ ๋ฑ๋กํ๋ค.
ํ๊ธฐ
vs. EC2์ ์ง์ K8s ํด๋ฌ์คํฐ ๊ตฌ์ถ
CKA ์ํ ๋ ์ฐ์ต ํ๋, ๋
ธ๋ ๋จธ์ ์ kubeadm
์ผ๋ก ์ง์ ๋
ธ๋ ๋ฑ๋กํด์ K8s ํด๋ฌ์คํฐ ๊ตฌ์ถํ๋ ๊ฒ๋ณด๋ค๋ ํจ์ฌ ์ฝ๋ค! aws eks
์ปค๋งจ๋๋ฅผ 3๋ฒ๋ง ์
๋ ฅํด์ K8s ํด๋ฌ์คํฐ ๋ง๋ค์์ผ๋ ํจ์ฌ ํธํ์
.
vs. AWS ECS
์ด๊ฑด ์ฌ์ค AWS ECS๋ K8s๋ ๋น๊ต๋ ๊ฐ์ด ๋ค์ด๊ฐ ์ ๋ฐ์ ์๊ธด ํ๋ค. ๊ทธ๋ฌ๋ AWS์์ ์ ์ ํ๋ ๊ฒ๋ง ๋น๊ตํ๋ฉด AWS EKS ์ชฝ์ด ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํ๊ณ Deployment๋ฅผ ๋์ฐ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ํจ์ฌ ๋น ๋ฅด๋ค! ์ด๋ฌ๋ค๊ฐ ์์ AWS ECS๋ ์ ์ฐ๊ฒ ๋๋ฒ๋ฆฌ๋ ๊ฑธ๊น? ใ ใ ์์ง AWS ECS ๋์ฐ๋ ๊ฑด ํฌ์คํธ๋ก ์ ๋ฆฌ๋ฅผ ๋ชป ํ๋๋ฐ ์ผ๋ฅธ ์ ๋ฆฌํด์ผ ๊ฒ ๋ค.
์ฝ์ง์ ๊ธฐ๋กโฆ
์ฌ์ค EKS ํด๋ฌ์คํฐ ๋์ฐ๋ ๊ฑธ ํ๋ฒ์ ์ฑ๊ณตํ ๊ฑด ์๋๋ค.
1. AWS ์ฝ์์์ ๋์ฐ๊ธฐ
EKS ํด๋ฌ์คํฐ ๋์ฐ๋ฉด ์ฒ์์ ํด๋ฌ์คํฐ๋ฅผ ๋์ด ์ ์ ๋ง ์ ์ ๊ฐ๋ฅํ๋จ ๊ฑธ ๋ชฐ๋์ด์, AWS ์ ์ ์ Access Key ๋ฐ๊ณ ๋ค์ ๋์์ผ ํ๋ค ใ ใ
2. eksctl
๋ก ๋์ฐ๊ธฐ
์ ์ธ์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ EKS ๋ ธ๋๊ทธ๋ฃน ๋์ธ ๋ CloudFormation ์ค๋ฅ๊ฐ ๋์ ์คํจํ๋ค;; ๊ฒฐ๊ตญ์ ์ ํต ๋ฐฉ์์ธ AWS CLI๋ก ๋์ ๋ค!
๋ค์์ ๋ญ ํด๋ณผ๊น?
- EKS ํด๋ฌ์คํฐ๋ฅผ ํ ๋ผํผ์ผ๋ก ๋์ฐ๊ธฐ
- EKS ํด๋ฌ์คํฐ ์ ์ ๊ถํ๋ ํ ๋ผํผ์ผ๋ก ์ค์ ํด๋ณด๊ธฐ