1. eksctl 설치
eksctl 바이너리를 다운로드 하여 설치 합니다.
Copy curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv -v /tmp/eksctl /usr/local/bin
eksct 명령어 동작을 확인합니다.
eksctl bash-completion을 활성화 합니다.
Copy eksctl completion bash >> ~/.bash_completion
. /etc/profile.d/bash_completion.sh
. ~/.bash_completion
2. EKS 클러스터 만들기
eksctl을 사용하여 아무 설정 값을 주지 않고 이 명령어(eksctl create cluster
)를 실행하면 default parameter로 클러스터가 배포됩니다.
eksctl create cluster --name=eksworkshop-eksctl --nodes=3 --region=${AWS_REGION}
본 실습에서는 다음 코드 블록을 사용하여 클러스터를 생성하는 데 사용할 ekctl deployment 파일(eksworkop.yaml)을 생성합니다.
Copy cat << EOF > eksworkshop.yaml
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: eksworkshop-eksctl
region: ${AWS_REGION}
version: "1.25"
availabilityZones: ["${AZS[0]}", "${AZS[1]}", "${AZS[2]}"]
managedNodeGroups:
- name: nodegroup
desiredCapacity: 3
instanceType: t3.small
ssh:
enableSsm: true
cloudWatch:
clusterLogging:
enableTypes: ["*"]
secretsEncryption:
keyARN: ${MASTER_ARN}
EOF
Copy cat << EOF > eksworkshop.yaml
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: eksworkshop
region: ${AWS_REGION}
version: "1.26"
vpc:
id: ${vpc_ID}
subnets:
public:
PublicSubnet01:
az: ${AWS_REGION}a
id: ${PublicSubnet01}
PublicSubnet02:
az: ${AWS_REGION}b
id: ${PublicSubnet02}
PublicSubnet03:
az: ${AWS_REGION}c
id: ${PublicSubnet03}
private:
PrivateSubnet01:
az: ${AWS_REGION}a
id: ${PrivateSubnet01}
PrivateSubnet02:
az: ${AWS_REGION}b
id: ${PrivateSubnet02}
PrivateSubnet03:
az: ${AWS_REGION}c
id: ${PrivateSubnet03}
secretsEncryption:
keyARN: arn:aws:kms:ap-northeast-2:886962536491:key/37caebce-65ae-401f-98f5-f70fa19ebf8b
nodeGroups:
- name: ng-public-01
instanceType: t3.small
subnets:
- ${PublicSubnet01}
- ${PublicSubnet02}
desiredCapacity: 2
minSize: 2
maxSize: 4
volumeSize: 200
volumeType: gp2
volumeEncrypted: true
amiFamily: AmazonLinux2
labels:
nodegroup-type: frontend-workloads
ssh:
publicKeyPath: "${publicKeyPath}"
iam:
attachPolicyARNs:
withAddonPolicies:
autoScaler: true
cloudWatch: true
ebs: true
- name: ng-private-01
instanceType: t3.small
subnets:
- ${PrivateSubnet01}
- ${PrivateSubnet02}
desiredCapacity: 2
privateNetworking: true
minSize: 2
maxSize: 4
volumeSize: 200
volumeType: gp2
volumeEncrypted: true
amiFamily: AmazonLinux2
labels:
nodegroup-type: backend-workloads
ssh:
publicKeyPath: "${publicKeyPath}"
iam:
attachPolicyARNs:
withAddonPolicies:
autoScaler: true
cloudWatch: true
ebs: true
cloudWatch:
clusterLogging:
enableTypes: ["*"]
EOF
생성한 eksworkop.yaml로 클러스터를 생성합니다.
Copy eksctl create cluster -f eksworkshop.yaml
eksctl.io 를 참고하여 클러스터 생성에 필요한 구성파일 작성할 수 있습니다.
아래 명령어로 생성된 노드를 확인합니다.
Copy kubectl -n kube-system get all
kubectl get nodes
실습에 사용할 역할 이름을 환경변수로 설정합니다.
Copy STACK_NAME=$(eksctl get nodegroup --cluster eksworkshop-eksctl -o json | jq -r '.[].StackName')
ROLE_NAME=$(aws cloudformation describe-stack-resources --stack-name $STACK_NAME | jq -r '.StackResources[] | select(.ResourceType=="AWS::IAM::Role") | .PhysicalResourceId')
echo "export ROLE_NAME=${ROLE_NAME}" | tee -a ~/.bash_profile
3. AWS Console 자격 증명
거의 모든 실습이 CLI를 사용하기 때문에 이 단계는 선택 사항입니다. 그러나 EKS 콘솔에서 실습 클러스터에 대한 전체 액세스 권한이 필요한 경우 이 단계 수행하는 것을 권장합니다.
EKS 콘솔을 사용하면 클러스터의 구성 측면 뿐만 아니라 배포, 파드 및 노드와 같은 쿠버네티스 클러스터 오브젝트를 볼 수 도 있습니다. 이러한 유형의 액세스의 경우 콘솔 IAM 사용자 또는 역할을 클러스터 내에서 허용해야 합니다.
기본적으로 클러스터를 만드는 데 사용 되는 자격 증명은 aws-auth 라는 ConfigMap에 클러스터 RBAC 구성의 system:masters 권한이 자동적으로 부여됩니다. 실습에서 Cloud9의 IAM credential을 통해, 클러스터를 생성하였기 때문에 Amazon EKS 콘솔창에서 해당 클러스터 정보를 확인하기 위해서는 실제 콘솔에 접근할 IAM 사용자 또는 역할의 AWS Console credential을 클러스터에 추가하는 작업이 필요합니다.
IAM 사용자 및 역할은 aws-auth
라는 ConfigMap을 통해 EKS 클러스터에 바인딩 됩니다.
Copy kubectl describe configmap -n kube-system aws-auth
Cloud9를 통해서 사용자 계정에 EKS 클러스터에 대한 권한을 부여 합니다. 권한은 제한되고 세분화 될 수 있지만 워크샵 클러스터이므로 사용자 계정을 관리자로 추가 합니다.
우선 IAM > 사용자 에서 사용자 계정의 ARN을 확인하고 복사합니다.
사용자 권한을 mapRoles 뒤에 추가합니다.
Copy kubectl edit -n kube-system configmap/aws-auth
Copy mapUsers: |
- userarn: arn:aws:iam::<account ID>:user/<username>
username: <username>
groups:
- system:masters
명령어로 확인합니다.
Copy kubectl describe configmap -n kube-system aws-auth
<Optional>
eksctl
을 사용하여 하나의 명령어로 이 작업을 수행 할 수도 있습니다.
AWS 콘솔 액세스에 추가 할 올바른 자격 증명을 결정해야 합니다. 이미 알고 있다면 eksctl create iamidentitymapping
을 건너 뛸 수 있습니다.
Cloud9 에서 클러스터를 구축 한 경우 환경에서 다음을 호출하여 IAM 역할 또는 사용자 ARN을 확인하십시오.
Copy c9builder=$(aws cloud9 describe-environment-memberships --environment-id=$C9_PID | jq -r '.memberships[].userArn')
if echo ${c9builder} | grep -q user; then
rolearn=${c9builder}
echo Role ARN: ${rolearn}
elif echo ${c9builder} | grep -q assumed-role; then
assumedrolename=$(echo ${c9builder} | awk -F/ '{print $(NF-1)}')
rolearn=$(aws iam get-role --role-name ${assumedrolename} --query Role.Arn --output text)
echo Role ARN: ${rolearn}
fi
확인된 ARN을 사용하여 명령어을 실행하여 클러스터 내에서 자격 증명 매핑을 생성 할 수 있습니다.
Copy eksctl create iamidentitymapping --cluster eksworkshop-eksctl --arn ${rolearn} --group system:masters --username admin
이제 콘솔 내의 AWS 인증 맵에서 항목을 확인할 수 있습니다.
Copy kubectl describe configmap -n kube-system aws-auth
이제 AWS Console에 접근하여 생성된 EKS 클러스터를 확인합니다.
Last updated 9 months ago