1. 리전 : 캘리포니아
➜ 한 리전에서 팀원들이 각자 VPC나 EC2를 생성하면 같은 화면에 보이는 단점이 있어, 팀원별로 리전을 나눔
2. 기본 망 구축

➜ eks 실습을 위한 기본 인프라 정보 [myeks-host는 bastion 호스트로서 관리용 인스턴스]


3. EC2 Instance Connect
➜ 인스턴스를 선택하고 연결(Connect), EC2 직렬 콘솔(EC2 Serial Console), 연결(Connect)을 선택
➜ 설치 및 세팅
✅ 변수 이름 무조건 같게
#!/bin/bash
# 01.호스트네임 설정
hostnamectl --static set-hostname "myeks-host"
# 02.편의 설정
echo 'alias vi=vim' >> /etc/profile
echo "sudo su -" >> /home/ec2-user/.bashrc
# 03.타임존 변경
sed -i "s/UTC/Asia\/Seoul/g" /etc/sysconfig/clock
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
# 04.패키지 설치
cd /root
yum -y install tree jq git htop lynx
# 05.kubectl 및 helm 설치
#curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.26.2/2023-03-17/bin/linux/amd64/kubectl
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.25.7/2023-03-17/bin/linux/amd64/kubectl
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
curl -s https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
# 06.eksctl 설치
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
mv /tmp/eksctl /usr/local/bin
# 07.AWS CLI v2 설치
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip >/dev/null 2>&1
sudo ./aws/install
complete -C '/usr/local/bin/aws_completer' aws
echo 'export AWS_PAGER=""' >> /etc/profile
export AWS_DEFAULT_REGION=${AWS::Region}n
echo "export AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION" >> /etc/profile
# 08.YAML 하이라이터 설치
wget https://github.com/andreazorzetto/yh/releases/download/v0.4.0/yh-linux-amd64.zip
unzip yh-linux-amd64.zip
mv yh /usr/local/bin/
# 09.krew 설치
curl -LO https://github.com/kubernetes-sigs/krew/releases/download/v0.4.3/krew-linux_amd64.tar.gz
tar zxvf krew-linux_amd64.tar.gz
./krew-linux_amd64 install krew
export PATH="$PATH:/root/.krew/bin"
echo 'export PATH="$PATH:/root/.krew/bin"' >> /etc/profile
# 10.kube-ps1 설치
echo 'source <(kubectl completion bash)' >> /etc/profile
echo 'alias k=kubectl' >> /etc/profile
echo 'complete -F __start_kubectl k' >> /etc/profile
git clone https://github.com/jonmosco/kube-ps1.git /root/kube-ps1
cat <<"EOT" >> /root/.bash_profile
source /root/kube-ps1/kube-ps1.sh
KUBE_PS1_SYMBOL_ENABLE=false
function get_cluster_short(){
echo "$1" | cut -d . -f1
}
KUBE_PS1_CLUSTER_FUNCTION=get_cluster_short
KUBE_PS1_SUFFIX=')'
PS1='$(kube_ps1)'$PS1
EOT
# 11.krew 플러그인 설치
kubectl krew install ctx ns get-all # ktop df-pv m tail tree
# 12.node-shell 설치
curl -LO https://github.com/kvaps/kubectl-node-shell/raw/master/kubectl-node_shell
chmod +x ./kubectl-node_shell
sudo mv ./kubectl-node_shell /usr/local/bin/kubectl-node_shell
# 13.Docker 설치
yum install docker -y
systemctl start docker && systemctl enable docker
# 14.CLUSTER_NAME 환경 변수 설정
export CLUSTER_NAME=${ClusterBaseName}
echo "export CLUSTER_NAME=$CLUSTER_NAME" >> /etc/profile
# 15.SSH 키페어 생성
ssh-keygen -t rsa -N "" -f /root/.ssh/id_rsa
➜ T.S : 리전이 캘리포니아인데 계속 안떠서 Invaild가 뜸
✅ 수동 할당 해주기

➜ 확인
// CLUSTER_NAME 변수 확인
echo $CLUSTER_NAME
// EKS를 배포할 myeks-VPC 정보 확인
aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq
// EKS를 배포할 myeks-VPC ID 값만 확인
aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq -r .Vpcs[].VpcId
// VPCID 변수에 myeks-VPC ID 값을 저장
export VPCID=$(aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq -r .Vpcs[].VpcId)
// VPCID를 전역 변수로 선언
echo "export VPCID=$VPCID" >> /etc/profile
// VPCID 변수 호출
echo $VPCID
// 변수에 퍼블릭 서브넷 ID 값을 저장
export PubSubnet1=$(aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet1" --query "Subnets[0].[SubnetId]" --output text)
export PubSubnet2=$(aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet2" --query "Subnets[0].[SubnetId]" --output text)
// 퍼블릭 서브넷 ID를 전역 변수로 선언
echo "export PubSubnet1=$PubSubnet1" >> /etc/profile
echo "export PubSubnet2=$PubSubnet2" >> /etc/profile
// VPCID 변수 호출
echo $PubSubnet1
echo $PubSubnet2
echo $AWS_DEFAULT_REGION
echo $CLUSTER_NAME
echo $VPCID
echo $PubSubnet1
echo $PubSubnet2
aws configure list
aws ec2 desvribe-instance
aws configure
4. eks클러스터 생성에 앞서 먼저 IAM role 필요
➜ IAM role 생성
✅ eks, eks cluster
✅ 이름 지정 ,검토 및 생성
➜ eks 생성하기
✅ eks > 클러스터 생성 > 이름 : myeks
✅ 역할 > eksClusterRole-SJH, Kubernetes 버전 설정 > 1.27
➜ 네트워킹 지정

✅ 클러스터 엔드포인트 액세스 : 퍼블릭
✅ 보안그룹 : 위의 사진 말고 일단 default로 설정
✅ 관리콘솔에서 eks클러스터를 생성하면 aws managed vpc에서 control plane이 구성, 따라서 eks가 aws 리소스를 구성하기 위한 권한이 필요
✅ 그러므로 IAM 역할을 생성하는 작업이 선행적으로 이루어지고, eks에 자격증명을 수행 [assume role], 생성 작업 수행
✅ eks관리용 인스턴스인 myeks-host에 생성된 eks 클러스터 정보를 업데이트
➜ 클러스터 > myeks > 컴퓨팅
✅ 개요 : 엔드포인트 (https://9D6896C13ECD1F56BF08ED4D01472CCB.gr7.us-west-1.eks.amazonaws.com) 접속해보기 [ 인증서 문제로 접속 불가능 ]
✅ EC2 Instance Connect
//eks관리용 인스턴스인 myeks-host에 생성된 eks 클러스터 정보를 업데이트
[root@myeks-host ~]# aws eks update-kubeconfig --region us-west-1 --name eksClusterRole-SJH
kubeoff
[root@myeks-host ~]# cat ~/.kube/config
[root@myeks-host ~]# kubectl get svc

✅ managed vpc 생성완료, 관리 인스턴스에서 접근 가능한 상태 custom vpc에 관리형 node group 생성
✅ 생성된 node group에 다양한 aws 자원을 동적으로 구성하기
5. 권한 추가
➜ eks management policy [ EKS 노드 IAM 역할의 신뢰 대상 지정 파일 생성 ]
// EKS 노드 IAM 역할의 신뢰 대상 지정 파일 생성
cat <<EOT > node-role-trust-policy-SJH.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOT
// EKS 노드 IAM 역할 생성 (eksNodeRole)
aws iam create-role \
--role-name eksNodeRole-SJH \
--assume-role-policy-document file://"node-role-trust-policy-SJH.json"
// EKS 노드 IAM 역할에 정책 연결
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \
--role-name eksNodeRole-SJH
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \
--role-name eksNodeRole-SJH
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \
--role-name eksNodeRole-SJH
6. 노드 그룹 구성
➜ eks 클러스터 > 노드 그룹 추가
✅ 이름 부여 : myeks-nodegroup
✅ IAM 역할 : 생성한 역할 지정
✅ 노드에 대한 원격 액세스 허용 > 키 페어 선택 > 보안 그룹 : sg-071db6080f020411a | eks-cluster-sg-myeks-104368993
➜ IAM 역할 [ eksNodeRole-SJH ]

'AWS' 카테고리의 다른 글
| [ 4 ] (0) | 2024.09.13 |
|---|---|
| [ 3 ] (0) | 2024.09.12 |
| [ 2 ] (0) | 2024.09.11 |
| [ AWS batch & ECR ] (0) | 2024.09.06 |
| [ AWS Architecture Diagram ] (0) | 2024.09.05 |