시작전 EKS관리자 계정을 생성하고 시작하세요. 추후에 EC2에서 aws authentication이 있습니다.
역할 생성
IAM>Roles>Create role의 서비스 목록에서 EKS를 선택하고 사용사례에 "EKS에서 사용자를 대신하여 클러스터를 관리하도록 허용" "(영어로는) Allow EKS to manage clusters on your behalf"을 선택하고 마지막 단계에서 역할이름에 "eksServiceRole"을 입력하고 역할생성을 합니다.
클러스터 용 VPC 생성
– Cloud Formation을 사용하여 클러스터 용 VPC, Subnet, Security Group을 생성합니다.
Cloud Formation
1. Cloud Formation>Create stack>템플릿 선택: Amazon S3 템플릿 URL 지정을 선택하고 아래 URL을 붙여 넣습니다.
https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2019-01-09/amazon-eks-vpc-sample.yaml |
2. 세부정보지정 페이지에서 스택이름 예:"mytest-eks"를 입력합니다. VPC주소범위나 Subnet 주소범위도 여기서 지정할 수 있습니다.
3. 마지막 단계에서 Create를 선택하면, 자동으로 VPC, Subnet, Security Group이 생성됩니다.
EKS 클러스터 생성
Cluster name, Kubernetes version, Role name, VPC, Subnet, Security group를 선택하여 EKS cluster를 생성합니다. 여기서 필요한 정보는, 앞에서 자동으로 생성한 클러스터용 VPC의 Cloud Formation 스택>출력 탭에서 확인해 볼 수 있습니다.
클러스터 생성은 약 5-10분 정도 소요되는데, 생성이 완료되어도 사용자의 콘솔에서는 EKS Control Plane을 구성하는 리소스들이 보이지 않습니다. 다만, 클러스터의 Worker Node에 attach될 ENI가 각 AZ마다 1개 생성된 것은 볼 수 있습니다.
EKS 관리용 EC2 혹은 온프레미스 서버 만들기
1) kubectl 설치하기
Kubernetes는 클러스터 API 서버와 통신하기 위해 kubectl이라는 명령줄 유틸리티를 사용합니다. 많은 운영 체제 패키지 관리자에서 kubectl 이진 파일을 제공하며, 흔히 이 방법이 수동 다운로드 및 설치 프로세스보다 훨씬 쉽습니다. 해당 운영 체제 또는 패키지 관리자에 대한 Kubernetes 문서의 지침에 따라 설치할 수 있습니다.
#curl -o kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.11.5/2018-12-06/bin/linux/amd64/kubectl
#chmod +x kubectl
#mv kubectl /usr/bin/
#kubectl version –short –client
2) AWS CLI 플러그인 설치
AWS를 CLI로 관리하고 싶다면 플러그인을 설치해야합니다.
#curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
#yum install unzip
#unzip awscliv2.zip
#sudo ./aws/install
3) aws-iam-authenticator 플러그인 설치
AWS의 리소스를 접근하는 것은 IAM 관련 플러그인을 설치해야 합니다.
#curl -o aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.11.5/2018-12-06/bin/linux/amd64/aws-iam-authenticator
#chmod +x aws-iam-authenticator
#mv aws-iam-authenticator /usr/bin/
#aws-iam-authenticator help
4) kubeconfig 받아오기
AWS CLI의 eks update-kubeconfig 명령으로 클러스터에 대한 kubeconfig 파일을 생성합니다. 만약, AWS CLI를 설치하고 싶지 않거나, kubeconfig를 수동으로 관리하고자 한다면 Amazon EKS에 대한 kubeconfig 생성를 참조하십시오.
앞에서 준비한 관리자용 클라이언트 EC2에서 AWS CLI의 버전을 확인해 봅니다. 1.16.18버전 이상이 설치되어 있지 않다면, 아래 명령어로 설치 혹은 최신 버전으로 업그레이드합니다.
# aws –version
aws-cli/1.15.83 Python/2.7.14 Linux/4.14.77-70.59.amzn1.x86_64 botocore/1.10.82
클러스터를 생성한 계정의 IAM유저의 보안자격증명을AWS CLI에 설정합니다.
#aws configure
AWS Access Key ID [None]: AKIAIHE#########FELA
AWS Secret Access Key [None]: uqm8MSDK######################Ddz29PcAz5
Default region name [ap-northeast-2]:
Default output format [None]:
#aws sts get-caller-identity
{
"Account": "4952894#####",
"UserId": "AIDAJU5LO##########LQ",
"Arn": "arn:aws:iam::4952894#####:user/[username]"
}
AWS CLI update-kubeconfig 명령을 사용하여 클러스터에 대한 kubeconfig를 생성하거나 업데이트합니다.
#aws eks update-kubeconfig –name mytest
Added new context arn:aws:eks:ap-northeast-2:49528#######:cluster/mytest to /root/.kube/config
#kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m
Amazon EKS작업자 노드 구성
클러스터용 VPC와 Kubernetes 제어 플레인이 생성되었고 kubectl이 설치 및 구성이 되었으므로 이제 Worker Node를 구성할 수 있습니다. Worker Node를 구성하면 EC2인스턴스들이 생성됩니다.
Cloud Formation>스택>[Create stack]을 선택합니다.
템플릿에서 다음 URL을 붙여 넣고 다음을 선택합니다.
https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2019-01-09/amazon-eks-nodegroup.yaml |
세부정보지정 페이지에서 아래 파라미터들을 넣고 다음을 선택합니다.
스택 이름: (예: mytest-eks-nodeA)
ClusterName: 위 단계에서 생성한 Amazon EKS 클러스터 이름과 정확하게 일치해야 합니다. 그렇지 않은 경우 Worker Node를 클러스터에 조인할 수 없습니다. (예: mytest)
ClusterControlPlaneSecurityGroup: 위 단계에서 생성된 AWS CloudFormation 출력의 SecurityGroups 값을 선택합니다.(예: mytest-eks-ControlPlaneSecurityGroup-GNNM8LC0N44O)
NodeGroupName: 이 이름은 나중에 Worker Node에 대해 생성된 Auto Scaling 노드 그룹을 식별하는 데 사용할 수 있습니다.(예: mytest-eks-nodeA)
NodeAutoScalingGroupMinSize: 예: 1
NodeAutoScalingGroupDesiredCapacity: 예: 3
NodeAutoScalingGroupMaxSize: 예: 4
NodeInstanceType: Worker Node에 대한 인스턴스 유형을 선택합니다.(예: t2.small)
NodeImageId: Amazon Marketplace에서 "amazon-eks-node" 혹은 "amazon-eks-gpu-node"로 검색하면 나오는 AMI 중 커뮤니티AMI 메뉴에 있는 amazon-eks-node-1.18-v20210628의 AMI ID를 입력(예: ami-033cb6de8270b4ce7)
※ kubernetes 클러스터 버전과 맞추어 검색하셔서 worker노드를 선택해야 합니다.
KeyName: 시작 이후 SSH를 사용하여 작업자 노드에 연결하는 데 사용할 수 있는 Amazon EC2 SSH 키 페어 이름을 입력합니다.
BootstrapArguments: 비워둠
VpcId: Amazon EKS 클러스터 VPC 생성에서 생성한 VPC에 대한 ID를 입력합니다.
Subnets: Amazon EKS 클러스터 VPC 생성에서 생성한 서브넷을 선택합니다.
옵션 페이지와 검토페이지를 확인 후 생성을 선택합니다.
스택이 생성된 후 출력 탭을 선택하여 NodeInstanceRole을 메모하여 나중에 Amazon EKS 작업자 노드를 구성할 때 사용합니다.
Worker Node를 클러스터에 조인
AWS Authenticator 구성 맵 다운로드, 편집 및 적용합니다. EKS 관리용 EC2에서 다음을 수행합니다.
#curl -O https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2019-01-09/aws-auth-cm.yaml
#vi aws-auth-cm.yaml <-위에서 메모한 NodeInstanceRole를 rolearn의 값으로 교체 후 저장
#kubectl apply -f aws-auth-cm.yaml
configmap/aws-auth created
#kubectl get nodes –watch
NAME STATUS ROLES AGE VERSION
ip-192-168-122-60.ap-northeast-2.compute.internal Ready <none> 2m v1.11.5
ip-192-168-132-24.ap-northeast-2.compute.internal Ready <none> 2m v1.11.5
ip-192-168-177-2.ap-northeast-2.compute.internal Ready <none> 2m v1.11.5
※ NodeInstanceRole은 Cloudformation의 해당 스크립트에서 확인할수 있습니다.
예) arn:aws:iam::531907074272:role/mytest-eks-nodeA-NodeInstanceRole-1FL4CGNYPFP9J
잠시 후, 노드의 상태가 Ready가 되면 정상적으로 적용된 것입니다.
샘플 애플리케이션 시작해 보기
샘플 게스트 북 애플리케이션을 생성해서 생성한 클러스터를 확인해 봅니다. 아래 명령을 차례로 진행합니다.
#kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-master-controller.json
replicationcontroller/redis-master created
#kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-master-service.json
service/redis-master created
#kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-slave-controller.json
replicationcontroller/redis-slave created
#kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-slave-service.json
service/redis-slave created
#kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/guestbook-controller.json
replicationcontroller/guestbook created
#kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/guestbook-service.json
service/guestbook created
#kubectl get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
guestbook LoadBalancer 10.100.110.135 a5baba20e22cf11e9845d0a50976ac11-468761890.ap-northeast-2.elb.amazonaws.com 3000:31955/TCP 30s app=guestbook
kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 5h <none>
redis-master ClusterIP 10.100.125.201 <none> 6379/TCP 1m app=redis,role=master
redis-slave ClusterIP 10.100.169.153 <none> 6379/TCP 47s app=redis,role=slave
마지막 과정에서 EXTERNAL-IP가 이용 가능하게 되면 웹 브라우저를 포트 3000의 해당 주소로 가리켜 게스트 북을 확인합니다. 예: a5baba20e22cf11e9845d0a50976ac11-468761890.ap-northeast-2.elb.amazonaws.com:3000
'IaaS > 퍼블릭클라우드' 카테고리의 다른 글
(완독정리) 클라우드 컴퓨팅 솔루션 아키텍팅/에이콘 - 2. 비즈니스 모티브, 성과지표 및 사용사례 (0) | 2021.07.29 |
---|---|
(완독정리) 클라우드 컴퓨팅 솔루션 아키텍팅/에이콘 - 1. 설계 고려사항 (0) | 2021.07.29 |
(AWS) ELB를 적용해 로드벨런싱 하는방법 (0) | 2021.06.17 |
AWS Professional DevOps 시험준비 (0) | 2021.06.14 |
(AWS) CodePipeline을 활용한 EC2 소스 배포 자동화(with Cloud9, CodeCommit, CodeDeploy) (0) | 2021.06.13 |