ECS, ECR, EKS

박기원·2022년 7월 14일
0

AWS

목록 보기
11/11
post-thumbnail

📑 AWS EC2 Docker userdata 설치

#!/bin/bash
timedatectl set-timezone Asia/Seoul
rdate -s time.bora.net
clock -w
cd /tmp
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install
amazon-linux-extras install docker -y
systemctl enable --now docker
curl https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.sh
usermod -a -G docker ec2-user
docker run -d -p 80:80 --name webtest rldnjsdlsi/web-site:v2.0
cat <<EOF >> /home/ec2-user/.bashrc
alias i='ip a'
alias c='clear'
alias d='docker'
alias k='kubectl'
EOF
source ~/.bashrc
yum update -y


📑 EKS Master에게 kubectl 설치

$ curl -o kubectl https://s3.us-west-2.amazonaws.com/amazon-eks/1.19.6/2021-01-05/bin/linux/amd64/kubectl
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin
$ source <(kubectl completion bash)
$ echo "source <(kubectl completion bash)" >> ~/.bashrc
$ kubectl version --short --client

AWS에서 EKS 클러스터를 생성 후
$ aws eks --region ap-northeast-2 update-kubeconfig --name EKS-CLUSTER
하여 자격증명

이게 마스터로 접속하는거다.

바로 마스터로 접속하는 건 아님

AWS Kubectl 버젼 별 설치

AMAZON VPC CNI [Container Network Interface]

  • 클러스터 내에서 파드들이 통신하기 위한 네트워크를 꾸며주는 도구
  • 내부 통신용 / 일종의 서브 네트워크
  • VM으로 사용했을 때는 flannel을 따로 설치해서 사용했음

kube-proxy

  • 외부 네트워크를 꾸며주는 컨퍼넌트

🤹‍♀️ nodegroup 역할 만들기

  • AmazonEKSWorkerNodePolicy
    이 정책은 Amazon EKS 작업자 노드가 Amazon EKS 클러스터에 연결할 수 있도록 허용합니다.

  • AmazonEC2ContainerRegistryReadOnly
    Amazon EC2 Container Registry 리포지토리에 대한 읽기 전용 액세스를 제공합니다.

  • AmazonEKS_CNI_Policy
    이 정책은 EKS 작업자 노드에서 IP 주소 구성을 수정하는 데 필요한 권한을 Amazon VPC CNI 플러그인(amazon-vpc-cni-k8s)에 제공합니다.
    이 권한 집합을 통해 CNI는 사용자를 대신하여 Elastic Network Interface를 나열, 설명 및 수정할 수 있습니다.
    AWS VPC CNI 플러그인에 대한 자세한 내용은 https://github.com/aws/amazon-vpc-cni-k8s에서 확인할 수 있습니다.

3가지 정책을 수행할 수 있는 역할을 만들어준다. For Nodes

💡 현재 노드 당 사용할 수 있는 pod의 개수 출력

(Number of network interfaces for the instance type × (the number of IP addressess per network interface - 1)) + 2

💡 ECR 활용

  1. Public ECR 생성
  2. EC2 aws configure
  3. 해당 ECR의 푸시 명령으로 Docker 클라이언트를 인증
docker tag rldnjsdlsi/web-site:v1.0 public.ecr.aws/p4p4s2e6/test-site:latest

태그 달기
5.

docker push public.ecr.aws/p4p4s2e6/test-site:latest

ECR로 해당 이미지 푸시

💡 LB+Deployment 활용

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx-deployment
  template:
    metadata:
      name: nginx-deployment
      labels:
        app: nginx-deployment
    spec:
      containers:
      - name: nginx-deployment-container
        image: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: loadbalancer-service-deployment
spec:
  type: LoadBalancer
  externalIPs:
    - 10.22.11.215
    - 10.22.6.28
    - 10.22.42.126
    - 10.22.36.3
  selector:
    app: nginx-deployment
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  • externalIPs에 worker들의 내부 IP를 적용하여 퍼블릭으로도 접속이 가능하게 한다.
  • worker들끼리 통신이 가능한 이유는 내부 네트워크 이여서만 가능한게 아니고 보안그룹이 자기 자신으로 되어있기 때문이다.

🐱‍🐉 RollOut CHANGE-CAUSE 🐱‍🐉

  • deployment.app을 만들고 rollout을 통해 이미지를 바꾸면 중단없이 새로운 웹사이트를 운영할 수 있다.
kubectl rollout history deployment nginx-deployment

를 통해 rollout history를 확인할 수 있는 데 CHANGE-CAUSE를 설정해주지 않으면 어떤 이미지인지 알 수 없다.

kubectl set image deployment.apps/nginx-deployment nginx-deployment-container=nginx --record
  • 이미지를 변경할 때 --record를 붙여주면 CHNAGE CAUSE가 추가된다.

0개의 댓글