-- ECR 리포지토리 생성 후 레지스트리 만들기
=> 레지스트리가 리포지토리의 상위 개념
=> 레지스트리에 리포지토리가 만들어져야만 그곳에 이미지를 push할 수 있음
=> 도커 허브는 push를 하는 순간 리포지토리가 자동으로 생성되면서 push됨
=> ex) skk2022/web-site:v2.0 (도커 허브 아이디/리포지토리 이름)
aws ecr-public get-login-password --region us-east-1
=> 사전에 aws configure를 통해 aws 자원에 접근할 수 있도록 해야 위의 명령어가 적용됨
=> 만약 aws configure를 먼저 하지 않으면 인증 토큰 검색과 레지스트리에 대한 도커 클라이언트 인증 애러 발생
-- 일반사용자로 로그인(클러스터 생성)
* CNI(Container Network Interface)
=> pod 운영을 위한 일종의 서브넷
* kube-proxy
=> enduser들이 pod에 접근할 수 있도록 서비스들을 외부로 노출하야함, 그러한 서비스들에 대한 접속을 도와주는 것
-- 클러스터가 만들어지는 동안 제어 플레인을 관리하기 위한 도구인 kubectl을 설치하기
아래의 사이트에 접속하여 쿠버네티스 버전에 맞는 kubectl 설치 명령어 복사
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
-- eks cli 를 설치( 위에서는 cluster 생성에 시간이 걸리니까 curl 명령어부터 실행한 것)
$ aws eks --region ap-northeast-2 update-kubeconfig --name EKS-CLUSTER
=> EKS-CLUSTER는 클러스터 생성 시 임의로 정한 이름을 넣어줘야 함
=> EKS클러스터와 도커를 연결해주는 자격증명 관련 명령어로 cluster 실행 이후 진행해야 함
$ curl -o kubectl https://s3.us-west-2.amazonaws.com/amazon-eks/1.22.6/2022-03-09/bin/linux/amd64/kubectl
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin
=> kubectl을 bin으로 이동시키면 어떤 경로에서든 작업 가능해짐
$ source <(kubectl completion bash)
=> 자동완성 기능 적용
$ echo "source <(kubectl completion bash)" >> ~/.bashrc
=> 재부팅 시에도 자동완성 기능 유지
$ kubectl version --short --client
$ kubectl get svc
-- 노드 그룹 추가(워커 노드들이 위치할 곳)
- nodegroup 역할 만들기
AmazonEKSWorkerNodePolicy
AmazonEC2ContainerRegistryReadOnly
AmazonEKS_CNI_Policy
=> CNI는 pod에 IP를 부여하고 pod 간 통신이 가능하도록 해주는 장치
=> 우선적으로 IAM에서 위의 세 개 역할을 일반 사용자에 추가
-- HTTPS 이용하기(acm인증서를 통해)
HTTPS -> CLB ->NodePort를 오픈하고 있는 도커 호스트 -> 도커 호스트가 안쪽의 80포트 컨테이너로 연결
-- 보안 그룹에 대한 설명
보안 그룹 소스에 자기 자신을 셋팅하지 않고 ICMP 프로토콜을 허용해도 되지만, 이렇게 하게 되면 새로운 포트가 추가될 때마다 일일이 보안 그룹을 편집해야하므로 자기 자신을 소스로 하는 인바운드 규칙을 만듦
--- ReplicaSet + LoadBalancer
# vi replica-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: 80
---
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
--- Deployment
# vi loadbalancer-deployment.yaml
apiVersion: v1
kind: Service
metadata:
name: loadbalancer-service-deployment
spec:
type: LoadBalancer
externalIPs: # AWS EC2들의 프라이빗 IP를 기입
- 10.13.15.145
- 10.13.11.150
- 10.13.47.143
- 10.13.42.115
selector:
app: nginx-replicaset
ports:
- protocol: TCP
port: 80
targetPort: 80
--- Deployment 롤링 업데이트 제어
# kubectl set image deployment.apps/nginx-deployment nginx-deployment-container=public.ecr.aws/m0z4s0z6/test-site:eagle
=> deployment라는 파일 찾아서 해당 파일의 메타 데이터 중 nginx-deployment인 것 찾아서 nginx-deployment-container라는 이름을 가진 컨테이너 필드 찾아서 해당 컨테이너가 가지고 있는 이미지를 public.ecr ~~~로 바꾼다는 의미
# kubectl get all
# kubectl rollout history deployment nginx-deployment
# kubectl rollout history deployment nginx-deployment --revision=2 # 리비전2 상세보기
# kubectl rollout undo deployment nginx-deployment # 롤백(전 단계로 복원)
# kubectl get all
# kubectl rollout history deployment nginx-deployment
# kubectl rollout history deployment nginx-deployment --revision=3 # 리비전3 상세보기
'KOSA 클라우드 솔루션즈 아키텍트 양성과정' 카테고리의 다른 글
[7.26] Git lab (0) | 2022.07.26 |
---|---|
[7.25] 참고 (0) | 2022.07.26 |
[7.21] kubernetes(ECR, EKS) (0) | 2022.07.21 |
[7.20] kubernetes(도커 이미지 pull 횟수 제한, ResourceQuota, taint, labels) (0) | 2022.07.20 |
[7.19] kubernetes(metallb, nfs-pv-pvc) (0) | 2022.07.19 |