반응형
- kubernetes란? open source orchestration 도구로 cluster 관리 도구를 제공한다. 각 cluster마다 다른 가상머신의 타입을 가질 수 있다. 또한 auto scaling, service discovery, load balancer, self healing 등의 도구를 제공한다.
- GKE는 google kubernetes engine의 줄임말로 쿠버네티스 서비스를 관리한다. 세부 기능은 아래와 같다.
- auto-repair과 auto-upgrade로 운영을 최소화시킨다.
- pod와 cluster autoscaling을 제공한다.
- cloud logging이 가능하고 monitoring도 가능하다.
- 컨테이너 최적화 OS를 사용한다.
- persistent disk와 local ssd를 제공한다.
- 쿠버네티스 사용 순서 예시
- 쿠버네티스 클러스터를 default node pool 상태로 생성하기
- cloud shell 로그인
- 쿠버네티스 클러스터와 연결하기
gcloud container clusters get-credentials
~ - 마이크로 서비스를 쿠버네티스로 배포하기
kubectl create deployment {name}
kubectl expose deployment {name}
- 마이크로 서비스 인스턴스의 수 늘리기
kubectl scale deployment {name} --replicas=2
- 쿠베네티스 클러스터의 노드 숫자 늘리기
gcloud container clusters resize my-cluster --node-pool my-node-pool --num-nodes 5
- 수동으로 늘리지 말고 마이크로 서비스 auto scaling 설정하기
kubectl autoscale deployment {name} --max=10 --cpu-percent=70
- 쿠버네티스 cluster에 대해 auto scaling 설정하기
gcloud container clusters update cluster-name --enable-autoscaling --min-nodes=1 --max-nodes=10
- 마이크로 서비스에 앱 구성 추가하기
kubectl create configmap {configMapname} --from-literal=RDS_DB_NAME=todos
- 패스워드 구성 추가하기
kubectl create secret {secretName} --from-literal=RDS_PASSWORD=dummytodos
- 새로운 마이크로 서비스에 GPU 얹기
gcloud container node-pools create {poolname} --cluster {clustername}
deployment.yaml에서 nodeSelector를 수정하고 배포하라. - 마이크로서비스 삭제
kubectl delete service
kubectl delete deployment
- 클러스터 삭제
gcloud container clusters delete
- CLI 안쓰고 대시보드에서 YAML 편집함으로써 수정할 수 있음.
- 클러스터 구성 개념 설명
- cluster: compute Engine instance 그룹
- Master Node: 클러스터를 관리함, control plane이라고도 함
- API 서버: 노드와 외부의 의사소통 조정
- 스케쥴러: Pods 위치 결정
- 컨트롤 매니저: 배포 관리, replicasets
- etcd: 클러스터 상태 저장하는 데이터 베이스
- Worker Node:
- workload를 수행함(pods)
- kubelet: 마스터 노드와 통신
- Master Node: 클러스터를 관리함, control plane이라고도 함
- GKE 클러스터 타입
- Zonal cluster: 하나의 control plane을 가지지만 노드가 같은 곳에서 작동한다면 single zone, 노드가 여러 존에서 작동한다면 multi-zonal 이다.
- Regional cluster: control plane의 복제가 주어진 region의 다양한 zone에서 실행. 노드도 control plane이 작동하는 곳과 같은 zone이다.
- private cluster: VPC 지역 클러스터로 오직 하나의 내부 ip만을 가진다. 가상 사설 내부 클라우드이다.
- alpha cluster: alpha api를 가진 클러스터로, 새로운 기능을 가진다.
- pods란?
- 쿠버네티스에서 가장 작은 배포 가능한 단위
- 하나의 pod는 1개 이상의 컨테이너를 가짐
- 각 pod는 일시적인 IP 주소를 가짐
- 한 pod안의 컨테이너들은 network. storage, ip, ports, disk volume을 공유함
- pod의 상태는 running/pending(대기)/succeeded/failed/unknown으로 나뉨
- deployment vs replica set
- deployment: 각각 마이크로 서비스 위해 생성됨
kubectl create deployment m1 --image=m1:v1
- deployment는 release된 마이크로서비스를 나타냄
- deployment는 downtime 없이 새로운 release를 관리함
- replica set: 특정한 수의 pods를 마이크로 서비스 특정 버젼에 맞게 작동
kubectl scale deployment m2 --replicas=2
- 하나의 포드가 죽으면 replica는 새로운 하나를 만들어냄
- 즉 pod의 수를 유지시킴
- 마이크로 서비스의 v2를 배포하면 새로운 레플리카 세트가 생성됨
kubectl set image deployment m1 m1=m1 : v2
- v2 replica set is created
- deployment는 롤링 업데이트가 가능
- 쿠버네티스 서비스에 대한 이해
- 각 pod는 각각의 IP 주소를 가진다.
- 포드가 죽으면 다른 레플리카 셋이 대체하여 외부사용자 영향받지 않게 한다.
- 새로운 버젼의 release가 모든 존재하는 포즈의 구 버젼을 신 버젼으로 교체
- create service
- 예시:
kubectl expose deployments name --type=LoadBalancer --port=80
- pod를 stable ip로 세상에 내보냄, 외부로부터 안정됨
- 예시:
- 세가지 service expose 유형
-
- 클러스터 IP: 클러스터 내부 IP로만 서비스 노출
-
- 로드밸런서: 로드밸런서로 노출
-
- 노드포트: 각각의 노드 port를 노출, ingress 하나로 모두 노출시키는 총괄 포트 만들 수 있음
-
- container registry: mircroservice를 위한 docker image 저장소
- docker hub의 대안 역할로 CI/CD 도구와 통합할 수 있음, registry에 push 가능
- 컨테이너 이미지를 안정화하고 deployment policy의 취약점을 분석, 강화 할 수 있음
- HostName/ProjectID/Image:Tag-gcr.io/projectname/helloworld:1 이런식으로 저장됨
- GKE 에 관해 기억해야될 사항들
- 다양한 zone과 높은 가용성을 위해 master node를 복사하라
- 어떤 CPU 의 노드들은 control plane 에 의해 예약된다
- microservice를 위해 도커이미지 를 만들어라.
- 쿠버네티스는 전략적인 deployments를 위한 kafka ,redis, zookeeper를 지원한다.
- 노드의 로그 컨크롤과 모니터링을 위해 각 노드에 pod를 만들어주는 DaemonSet을 사용할 수 있다.
- 클라우드 모니터링과 로그를 통합하기 위해서 default로 활성화된 cloud logging system과 application logs를 big query나 pub/sub으로 export 할 수 있다.
- 시나리오들
- Q: 비용을 낮추고 최적화 하기 위해서는?
- A: preemitble VM, 적합한 지역, commited-use discounts활용 가능. N1보다는 값이 싼 E2 권장. workload 타입에 따른 올바른 환경 고르기
- Q: 효율적이고 완전한 auto scaling을 위해서는?
- A: horizental pod autoscaler를 구성한다. node pool들에 cluster autoscaler를 둔다.
- Q: 신뢰되지 않는 서드파티 코드를 쿠버네티스 클러스터에서 실행하려면?
- A: 새로운 노드 풀을 GKE 샌드박스에서 만들고 배포한다.
- Q: microservice와 kubernetes cluster 사이의 내부 소통만을 원한다면?
- A: clusterIP 이용
- Q: pod가 계속 pending상태임
- A: 아마 pod가 리소스 부족으로 노드에 스케쥴링 될 수 없는 상태일거임
- Q: pod가 계속 waiting 상태임
- A: 아마 image pull 에 실패한것임
- 클러스터 관리 명령어
- create cluster :
gcloud container clusters create my-cluster --zone us-central1-a --node-location us-central1-c,us-central1-b
- resize cluster:
gcloud container clusters resize my-cluster --node-pool my-node-pool --numd-nodes 10
- autoscale cluster:
gcloud container clusters update cluster-name --enable-autoscaling --min-nodes=1 --max-nodes=10
- delete cluster:
gcloud container clusters delete my-cluster
- adding node pool:
gcloud container node-pools create new-node-pool-name --cluster my-cluster
- list images:
gcloud container images list
- list pods/service/replicasets:
kubectl get pods/services/replicasets
- create deployment:
kubectl apply -f deployment.yaml
orkubectl create deployment
- create service:
kubectl expose deployment hello workd-rest-api --type=Loadbalancer --port=8080
- scale deployment:
kubectl scale deployment hello-world --replicas 5
- autoscale deployment:
kubectl autoscale deployment --max --min --cpu-percent
- delete deployment:
kubectl delete deployment hello-world
- update deployment:
kubectl apply -f deployment.yaml
- rollback deployment:
kubectl rollout undo deployment hello-world --to-revision=1
- 용어 재정리
- 하드웨어(클러스터)
-
- 마스터노드: 클러스터 관리
-
- worker node: workloads를 run함
-
- node pool: 동일한 구성을 가진클러스터의 node 그룹
-
- 소프트웨어
-
- pods: 쿠버네티스에서 배포 가능한 가장 작은 단위
-
- deployments: 포드들 관리
-
- service: 노출된 deployments
-
반응형
'CS 내용 요약, 지식 > Google Cloud Associate' 카테고리의 다른 글
Google Cloud Associate 강의 요약: storage (1) | 2025.01.03 |
---|---|
Google Cloud Associate 강의 요약: cloud function, cloud run, KMS (1) | 2025.01.03 |
Google Cloud Associate 강의 요약: App Engine (2) | 2024.12.26 |
Google Cloud Associate 강의 요약: Service (0) | 2024.11.24 |
Google Cloud Associate 강의 요약: Load Balancer (1) | 2024.11.24 |