Infra/Kubernetes

kubernetes 8

서머스 2022. 7. 22. 21:31

인스턴스 새로 생성한다.

 

보안 그룹도 새로 만들어 준다.

 

#!/bin/bash
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=test-site halilinux/web-site:v1.0

 

레코드를 추가한다.

 

IP -> 도메인으로 변경할 수 있도록 한다.

 

 

연결이 잘 되었다.

 

 

 

ECR - public 탭에서 Repository를 생성한다.

 

 

선택 후 [View push commands] 클릭

 

 

configure 한다.

 

tag 후 push 할려니까 권한이 없다고 뜬다.

 

일단 docker에 로그인하고

User Data에서 다운로드 받았던 이미지를 stop-삭제한 뒤 다시 run하고 tag단다.

그리고 exit한 뒤, 마저 하면 된다.

그러면 image가 올라와 있다.

 

IAM 사용자를 firefox에서 로그인한다.

Summary- 에 있는 Console sign-in의 링크를 클릭하면 손쉽게 로그인 할 수 있다.

 

EKS로 들어간다.

리전을 서울로 하고 클러스터를 생성해야 한다.

 

 

 

public subnet은 2a, 2c로 선택한다.

SG - MY-SG-WEB2(아까 만들었던 거)

 

reverse proxy - LB의 개념

 

생성 완료

 

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html

 

kubectl 설치 - Amazon EKS

kubectl 설치 Kubernetes는 클러스터 API 서버와 통신하기 위해 kubectl이라는 명령줄 유틸리티를 사용합니다. 많은 운영 체제 패키지 관리자에서 kubectl 이진 파일을 제공하며, 흔히 이 방법이 수동 다운

docs.aws.amazon.com

 

맨위에 명령어를 인스턴스에 입력한다.

 

2번에 chmod +x ... 도 입력한다.

 

 

노드 그룹을 추가한다.

 

 

 

노드에 대한 SSH 접근 허용에 체크한다.

ASG가 만들어져 있다.

 

EKS 클러스터에서 노드를 각각 확인해 보면

 

pod 2개를 만들고 확인해 보면 노드 하나에 두개가 생긴다. -> AWS에 파드 개수에 제한이 있기 때문이다.

 

LB 생성

 

 

 

 

HTTPS 인증서 생성하기

리스너 탭에서 [Edit] 클릭

 

SSL 선택(HTTPS, SSL 둘다 동일하다.)

 

맨위에 ACM을 누르면 자동으로 인증서가 생성된다.

 

Description(설명) 탭에서 Security- 선택된 SG를 클릭한다.

 

 

인바운드 규칙 편집한다.

 

443번 포트가 열리도록 한다.

 

https~ 로 접속한다.

 

SG-EKS-remote : 관리자용 SG

cluster SG : EKS위에 있는 CLB와 worker node간에 접속을 가능하게 한다.

sg-0a~ : 자기 자신이 source가 되었다.

worker1과 worker2가 통신해야 한다.

 

sg-0bb ~... : 보안 그룹의 source를 보안 그룹의 id로 지정한다. CLB를 거친 트래픽만 허용하는 것이다.

worker1에서 2로 ping을 쳐보면 간다.

 

 

자기 자신의 SG인 cluster-sg를 삭제해 본다.

 

 

그러고 ping을 치면 안 간다.

같은 네트워크에 같은 보안그룹에 있더라도 보안그룹에서 트래픽, 포트를 열지 않으면 통신이 되지 않는다.

 

 

아까 만들었던 노드 그룹을 삭제하고, 다시 만든다(비용 문제 때문)

onDemand방식으로 만들고, 나머지는 이전과 동일하다.

 

그러면 인스턴스가 네 개 더 생겨있다.

 

Route53에서 레코드 추가한다.

 

 

*replica set은 롤링 업데이트가 안 된다.

 

mkdir test && cd $_

vi replicaset-loadbalancer.yaml

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-replicaset
spec:
  replicas: 3 # desired state (kube-controller-manager)
  selector:
    matchLabels:
      app: nginx-replicaset #라벨

  template:
    metadata:
      name: nginx-replicaset # 라벨 - 위의 라벨과 일치해야 한다.
      labels:
        app: nginx-replicaset
    spec:
      containers:
      - name: nginx-replicaset-container
        image: nginx
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: loadbalancer-service-replicaset
spec:
  type: LoadBalancer
  #externalIPs:
  #  - 172.25.0.137
  selector:
    app: nginx-replicaset
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

 

 

[ec2-user@ip-10-29-9-220 test]$ kubectl edit rs nginx-replicaset

 

rs = replicaset의 줄임

replicas 의 개수를 4로 늘린다.

바로 바뀌어있다.

 

[ec2-user@ip-10-29-9-220 test]$ kubectl exec nginx-replicaset-2p4c8 -- sh -c "echo 'web01' > /usr/share/nginx/html/index.html"
[ec2-user@ip-10-29-9-220 test]$ kubectl exec nginx-replicaset-bwfbf -- sh -c "echo 'web02' > /usr/share/nginx/html/index.html"
[ec2-user@ip-10-29-9-220 test]$ kubectl exec nginx-replicaset-d8pw9 -- sh -c "echo 'web03' > /usr/share/nginx/html/index.html"
[ec2-user@ip-10-29-9-220 test]$ kubectl exec nginx-replicaset-g29cg -- sh -c "echo 'web04' > /usr/share/nginx/html/index.html"

 

라운드 로빙 방식으로 동작한다.

 

 

 

Deployment

 

vi deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  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

 

vi clusterip-deployment.yaml

apiVersion: v1
kind: Service
metadata:
  name: clusterip-service-deployment
spec:
  type: ClusterIP
  externalIPs:
  - 10.29.0.67 # AWS의 프라이빗 ip(eth0의 ip) worker1~n개 입력
  selector:
    app: nginx-deployment
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

 

 

External Ip에 worker1의 ip를 입력한 뒤, externalIP로 접속해 보면 똑같이 nginx가 뜨는데 나는안됨

private ip를 external ip에 입력한다.

1:1 nat로 연결된 것.

 

[ec2-user@ip-10-29-9-220 test]$  kubectl set image deployment.apps/nginx-deployment nginx-deployment-container=halilinux/test-home:v0.0
deployment.apps/nginx-deployment image updated
[ec2-user@ip-10-29-9-220 test]$ watch kubectl get po
[ec2-user@ip-10-29-9-220 test]$  kubectl set image deployment.apps/nginx-deployment nginx-deployment-container=halilinux/test-home:v1.0
deployment.apps/nginx-deployment image updated
[ec2-user@ip-10-29-9-220 test]$ watch kubectl get po
[ec2-user@ip-10-29-9-220 test]$  kubectl set image deployment.apps/nginx-deployment nginx-deployment-container=halilinux/test-home:v2.0
deployment.apps/nginx-deployment image updated

pod마다 이미지가 다르다.

 

[ec2-user@ip-10-29-9-220 test]$ kubectl rollout undo deployment nginx-deployment --to-revision 2
deployment.apps/nginx-deployment rolled back

이전 홈페이지로 롤백한다.

 

 

wordpress 구축하기

 

vi wordpress-pod-svc.yaml

apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod
  labels:
    app: mysql-pod
spec:
  containers:
  - name: mysql-container
    image: mysql:5.7
    envFrom: #컨�~T�그맵 �~D��| ~U �| ~D체를 �~U~\꺼�~H�~W~P �~H�~_��~Y~@�~D~\ �~B��~Z��~U~X기
    - configMapRef:
        name: config-wordpress #컨�~T�그맵�~]~X �~]��~D�~L �~^~E�| ��~U~X면 �~P~\�~K�.
    ports:
    - containerPort: 3306
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
spec:
  type: ClusterIP
  selector:
    app: mysql-pod
  ports:
  - protocol: TCP
    port: 3306
    targetPort: 3306

 

apply 후 CNAME 추가한다.

 

'Infra > Kubernetes' 카테고리의 다른 글

EKS로 배포하기  (0) 2022.08.04
kubernetes 9  (0) 2022.07.25
kubernetes 7  (0) 2022.07.21
kubernetes 5  (0) 2022.07.20
kubernetes 4  (0) 2022.07.19