#!/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
$ 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
하여 자격증명
이게 마스터로 접속하는거다.
바로 마스터로 접속하는 건 아님
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
(Number of network interfaces for the instance type × (the number of IP addressess per network interface - 1)) + 2
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로 해당 이미지 푸시
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
🐱🐉 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가 추가된다.