CS 내용 요약, 지식/Google Cloud Associate

Google Cloud Associate 강의 요약: Kubernetes

걍판자 2025. 1. 3. 23:33
반응형
  • 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를 제공한다.
      • 쿠버네티스 사용 순서 예시
      1. 쿠버네티스 클러스터를 default node pool 상태로 생성하기
      2. cloud shell 로그인
      3. 쿠버네티스 클러스터와 연결하기
        gcloud container clusters get-credentials ~
      4. 마이크로 서비스를 쿠버네티스로 배포하기
        kubectl create deployment {name}
        kubectl expose deployment {name}
      5. 마이크로 서비스 인스턴스의 수 늘리기
        kubectl scale deployment {name} --replicas=2
      6. 쿠베네티스 클러스터의 노드 숫자 늘리기
        gcloud container clusters resize my-cluster --node-pool my-node-pool --num-nodes 5
      7. 수동으로 늘리지 말고 마이크로 서비스 auto scaling 설정하기
        kubectl autoscale deployment {name} --max=10 --cpu-percent=70
      8. 쿠버네티스 cluster에 대해 auto scaling 설정하기
        gcloud container clusters update cluster-name --enable-autoscaling --min-nodes=1 --max-nodes=10
      9. 마이크로 서비스에 앱 구성 추가하기
        kubectl create configmap {configMapname} --from-literal=RDS_DB_NAME=todos
      10. 패스워드 구성 추가하기
        kubectl create secret {secretName} --from-literal=RDS_PASSWORD=dummytodos
      11. 새로운 마이크로 서비스에 GPU 얹기
        gcloud container node-pools create {poolname} --cluster {clustername}
        deployment.yaml에서 nodeSelector를 수정하고 배포하라.
      12. 마이크로서비스 삭제
        kubectl delete service
        kubectl delete deployment
      13. 클러스터 삭제
        gcloud container clusters delete
      • CLI 안쓰고 대시보드에서 YAML 편집함으로써 수정할 수 있음.
      • 클러스터 구성 개념 설명
      • cluster: compute Engine instance 그룹
        • Master Node: 클러스터를 관리함, control plane이라고도 함
          • API 서버: 노드와 외부의 의사소통 조정
          • 스케쥴러: Pods 위치 결정
          • 컨트롤 매니저: 배포 관리, replicasets
          • etcd: 클러스터 상태 저장하는 데이터 베이스
        • Worker Node:
          • workload를 수행함(pods)
          • kubelet: 마스터 노드와 통신
      • 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 유형
          1. 클러스터 IP: 클러스터 내부 IP로만 서비스 노출
          1. 로드밸런서: 로드밸런서로 노출
          1. 노드포트: 각각의 노드 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 or kubectl 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
      • 용어 재정리
      • 하드웨어(클러스터)
          1. 마스터노드: 클러스터 관리
          1. worker node: workloads를 run함
          1. node pool: 동일한 구성을 가진클러스터의 node 그룹
      • 소프트웨어
          1. pods: 쿠버네티스에서 배포 가능한 가장 작은 단위
          1. deployments: 포드들 관리
          1. service: 노출된 deployments
반응형