본문 바로가기
개발/Docker & Kubernetes

[k8s study] 15. 쿠버네티스 인프라 관리

by 달사쿠 2020. 11. 27.
반응형

15장에서 다루는 내용

  1. 클러스터 업그레이드
  2.  
  3. 클러스터 스케일링
  4. 클러스터 유지보수
기반 인스턴스와 리소스 불안정성을 처리하는 방법
부분적으로만 사용할 수 있는 기반 HW에서 고가용성 워크로드를 실행하기 위한 전략

- 쿠버네티스 컴포넌트의 배포 계획 수립
- 쿠버네티스 인프라의 보호
- 클러스터와 kubeadm 업그레이드
- 클러스터 스케일업
- 사용할 수 있는 외부 리소스

클러스터 계획

클러스터 구축을 계획할 때 사용할 수 있는 옵션을 간략하게 짚고 가봅시다.

적합한 솔루션 선택

  • 로컬 솔루션
    • minikube: 단일 노드 클러스터
    • 우분투에 LXD/KVM설치: 멀티인스턴스 클러스터
    • IBM 클라우드 프라이빗 CE: 멀티인스턴스 클러스터
    • kubeadm-dind(Docker-in-Docker): 멀티 노드 클러스터
  • 호스팅 솔루션
    • Google Kubernetes Engine
    • AWS ECS
    • Azure Kubernetes Service(AKS) 
    • ...

클러스터 보안

출처: https://kubernetes.io/ko/docs/reference/access-authn-authz/controlling-access/#%EC%9D%B8%EA%B0%80

 


클러스터 업그레이드

  • 일반적인 로컬 클러스터: 사용자가 직접 업그레이드 관리
  • 호스팅된 쿠버네티스 Paas 클러스터

PaaS 클러스터 업그레이드

  • 애저: https://docs.microsoft.com/ko-kr/azure/aks/upgrade-cluster
    • 버전 업그레이드: upgrade 커멘드
    • 버전 확인: show 커멘드
    • 업그레이드 메커니즘: 클러스터에 새 노드를 추가하는 작업을 처리하고 실행 중인 애플리케이션 중단을 방지하기 위해 노드를 cordon(봉쇄)하고, drain(비우는) 프로세스를 관리 (참고: https://arisu1000.tistory.com/27845 )
      • cordon: 지정된 노드에 더이상 Pod들이 스케쥴링되서 실행되지 않도록 함
      • drain: 노드 관리를 위해서 지정된 노드에 있는 Pod들을 다른곳으로 이동
 

AKS(Azure Kubernetes Service) 클러스터 업그레이드 - Azure Kubernetes Service

AKS (Azure Kubernetes Service) 클러스터를 업그레이드 하 여 최신 기능 및 보안 업데이트를 가져오는 방법에 대해 알아봅니다.

docs.microsoft.com

  • GCE: https://cloud.google.com/kubernetes-engine/docs/how-to/upgrading-a-cluster
    • 관리자 노드 업그레이드: 같은 퍼시스턴스 디스크를 사용해 Master노드를 삭제하고 다시 생성
    • 작업자 노드 업그레이드: GCP 인스턴스 그룹 관리 기능으로 클러스터 롤링 업그레이드 수행
      -> 워크로드 중단없이 노드 삭제 및 교체 (장점)
    • 유의사항: 노드는 다운그레이드할 수 있지만, 마스터는 다운그레이드 할 수 없음
    • --enable-autoupgrade 옵션을 추가해 클러스터를 생성하면 노드 자동 업그레이드가 기본 설정
 

클러스터 또는 노드 풀 수동 업그레이드  |  Kubernetes Engine 문서  |  Google Cloud

기본적으로 Google Kubernetes Engine 클러스터와 노드 풀은 Google에 의해 자동으로 업그레이드됩니다. 이 페이지에서는 GKE 클러스터 또는 노드의 업그레이드 또는 다운그레이드를 수동으로 요청하는

cloud.google.com


클러스터 스케일링

GKE와 AKS의 스케일링

  • GKE: 워커 그룹의 인스턴스 수를 변경하는 스케일링 커멘드 실행
gcloud container cluster resize [클러스터 명] --node-pool [pool 명] --size [크기]

 

  • AKS: GKE와 비슷하며, --resource-group 옵션으로 리소스 그룹을 지정하고 필요한 노드 수 지정
az aks scale --name myAKSCluster --resource-group gsw-k8s-group --node-count 1

 

직접 구축한 클러스터의 스케일링

  • 스케일링 그룹을 이용해 자동으로 노드 추가
  • --register-node 플래그를 사용해 노드 자동 등록 활성화 (새 노드가 스스로 자동 등록을 시도하는 것이 default)

 

 

노드

쿠버네티스는 컨테이너를 파드내에 배치하고 노드 에서 실행함으로 워크로드를 구동한다. 노드는 클러스터에 따라 가상 또는 물리적 머신일 수 있다. 각 노드에는 컨트롤 플레인이라는 파드를

kubernetes.io

노드 유지보수

클러스터를 스케일업/다운하는 경우, 수동으로 노드를 비우고 등록해제하는 방법: kubectl drain

  • 노드에서 모든 파드를 제거한 후 클러스터에서 노드 제거
  • 파드를 미리 제거해야 인스턴스나 VM이 워크로드를 감당하지 않고 있을 때 노드 제거 가능
kubectl drain <노드 명>

 

단순한 유지보수 목적으로 노드를 제거하는 경우, uncordon 커멘드로 다시 사용할 수 있는 노드로 추가 가능

kubectl uncordon <노드>
반응형

댓글