AWS

[ 1 ] - 기본 Setting

zhuxiclover 2024. 9. 10. 16:47

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