EKS
EKS (Elastic Kubernetes Service) 이란?
AWS kubernetes 시스템이다.
AWS kubernetes은 마스터노드와 제어 영역을 설치 및 운영할 필요 없이 쿠버네티스 환경을 사용 할 수 있다.
> kops으로 kubernetes를 구축하게되면, 마스터 노드 3대 이상 서버를 관리해줘야하고, 제어 영역(통신 방법, etcd 등)를 관리 및 설정해줘야한다.
kubernetes 이란 ?
kubernetes는 구글에서 2014년 오픈소스 공개
여러개의 마스터 노드(3개 이상)와 워커 노드로 구분된다.
kubernetes 링크 : https://kubernetes.io/
> 워커 노드와 쿠버네티스 클러스터를 관리한다.
> API server : 사용자와 컨트롤 플레인과 통신
> scheduler : node. pod 감지 및 pod 배포 관리(스케줄링 결정 요소에 따라서)
> controller manager : 구성 요소 복제, 워커 노드 추척, 노드 장애처리 등
> etcd : 분산 데이터 스토리지
> 워커 노드에서 pod를 배치하고 구동해준다.
> kubelet : 워커 노드의 pod에서 컨테이너 동작 관리
> kube-proxy : 워커 노드의 pod으로 트래픽 포워드 역할 (네트워크 규칙)
> pod : pod안에 한개 이상의 docker 컨테이너를 관리
> 워커 노드는 EKS 클러스터 API 서버 엔드포인트를 통해 클러스터의 제어 영역에 연결 및 제어
EKS 구축
EKS 구축 링크 : https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/getting-started.html
EKS 설치 목차
1. 네트워크 구축 (VPC, subnet, SG 등)
> vpc 생성
> SG 생성
3. EKS 클러스터 생성
4. 워커노드 생성
5. EKS 클러스터 접속
1. 네트워크 구축
- VPC : ekstest-dev-vpc
DNS 호스트 이름 편집 : True
DNS 확인 편집 : True - subnet : private-subnet-a, private-subnet-b, db-subnet-a, db-subnet-b, mgmt-subnet
private subnet : 워커노드 EC2 생성
db subnet : RDS 생성 - NATGATEWAY : private subnet EC2가 외부로 나갈 수 있도록 설정
Name : ekstest-private-nat
subnet : mgmt-subnet - public routetable
Name : ekstest-publiczone-rtb
attachment : IGW - private routetable
Name : ekstest-privatezone-rtb
attachment : NAT - SG
2. EKS 클러스터 Role 생성
> role Name : eksClusterRole-ekstest
> Policy : AmazonEKSClusterPolicy
> role Name : AmazonEKSNodeRole-ekstest
> Policy : AmazonEKSWorkerNodePolicy, AmazonEC2ContainerRegistryReadOnly, AmazonEKS_CNI_Policy
3. EKS 클러스터 생성
> EKS Name : ekstest-eks
> version : 1.21
> EKS role Name : eksClusterRole-ekstest
> VPC : ekstest-dev-vpc
> subnet : ekstest-dev-privatezone-2a, ekstest-dev-privatezone-2c
> SG : ekstest-eks-sg
> 클러스터 엔드포인트 액세스 : 퍼블릭 및 프라이빗
4. 워커노드 생성
> 워커노드는 3가지 방식이 있다. (EKS관리형 노드그룹, 자체 관리형 노드, AWS Fargate)
> EKS 관리형 노드 그룹은 최신 AMI 이미지 버전이 나오면 클릭한번이면 업데이트를 수행할 수 있다.
> 자체 관리형 노드는 tag 설정 필요, BootstrapArguments 인수값 별도 설정(레이블, 테인트 등)
> 자세한 내용은 링크 참조 : https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/eks-compute.html
> Name : ekstest-workernode-service1
> node IAM role : AmazonEKSNodeRole-ekstest
> subnet : ekstest-private-2a, ekstest-private-2c
> type : c5.large
5. EKS 클러스터 접속
-
curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.21.2/2021-07-05/bin/linux/amd64/kubectl chmod +x ./kubectl mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc kubectl version --short --client
kubectl api 명령어를 날리는 EC2의 아이피를 EKS security group에 443 port 허용해줘야한다.
aws eks update-kubeconfig --region region-code --name cluster-name
aws sts get-caller-identity
> 올바른 자격 증명 확인 명령어 (eks 클러스터 생성자인지 확인)
aws eks update-kubeconfig --region ap-northeast-2 --name ekstest-eks
[ kubectl alias 설정 ]
vi ~/.bashrc
alias k='/root/bin/kubectl'
k version
k get svc
> kubernetes service 내용 확인 (접근 여부 확인)
k get no
NAME STATUS ROLES AGE VERSION
ip-200-200-100-102.ap-northeast-2.compute.internal Ready <none> 49s v1.21.5-eks-9017834
ip-200-200-100-103.ap-northeast-2.compute.internal Ready <none> 50s v1.21.5-eks-9017834
ip-200-200-100-236.ap-northeast-2.compute.internal Ready <none> 43s v1.21.5-eks-9017834
> 워커노드 확인
# 특이사항 : error: You must be logged in to the server (Unauthorized)
> kubectl 명령을 통해 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 액세스하려고 하면 다음 권한 부여 오류가 발생합니다. "error: You must be logged in to the server (Unauthorized)."
> EKS 클러스터 생성자에게만 클러스터를 구성할 system:masters 권한이 있음
> aws-auth에 권한 추가 필요
2. 클러스터 Role 생성
클러스터 Role