728x90
반응형
15장에서 다루는 내용
- 클러스터 업그레이드
- 클러스터 스케일링
- 클러스터 유지보수
기반 인스턴스와 리소스 불안정성을 처리하는 방법
부분적으로만 사용할 수 있는 기반 HW에서 고가용성 워크로드를 실행하기 위한 전략
- 쿠버네티스 컴포넌트의 배포 계획 수립
- 쿠버네티스 인프라의 보호
- 클러스터와 kubeadm 업그레이드
- 클러스터 스케일업
- 사용할 수 있는 외부 리소스
클러스터 계획
클러스터 구축을 계획할 때 사용할 수 있는 옵션을 간략하게 짚고 가봅시다.
적합한 솔루션 선택
- 로컬 솔루션
- minikube: 단일 노드 클러스터
- 우분투에 LXD/KVM설치: 멀티인스턴스 클러스터
- IBM 클라우드 프라이빗 CE: 멀티인스턴스 클러스터
- kubeadm-dind(Docker-in-Docker): 멀티 노드 클러스터
- 호스팅 솔루션
- Google Kubernetes Engine
- AWS ECS
- Azure Kubernetes Service(AKS)
- ...
클러스터 보안
- 쿠버네티스 로그 활성화: https://kubernetes.io/docs/tasks/debug-application-cluster/audit/#log-backend
- 사용자, 운영자, 서비스를 식별할 수 있는 인증 활성화: https://kubernetes.io/ko/docs/reference/access-authn-authz/controlling-access/#%EC%9D%B8%EA%B0%80
- 권한 부여를 이용해 역할 기반 접근 제어, 세부 권한 분류 수행
- 특정 그룹에 속하거나 권한이 있어야 API를 사용할 수 있는지 확인
- 어드미션-컨트롤러로 비즈니스 로직 기반의 유효성 검사를 추가로 수행해 클러스터 보호
- sysctl 인터페이스로 리눅스 시스템 매개변수 조정
클러스터 업그레이드
- 일반적인 로컬 클러스터: 사용자가 직접 업그레이드 관리
- 호스팅된 쿠버네티스 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들을 다른곳으로 이동
- GCE: https://cloud.google.com/kubernetes-engine/docs/how-to/upgrading-a-cluster
- 관리자 노드 업그레이드: 같은 퍼시스턴스 디스크를 사용해 Master노드를 삭제하고 다시 생성
- 작업자 노드 업그레이드: GCP 인스턴스 그룹 관리 기능으로 클러스터 롤링 업그레이드 수행
-> 워크로드 중단없이 노드 삭제 및 교체 (장점) - 유의사항: 노드는 다운그레이드할 수 있지만, 마스터는 다운그레이드 할 수 없음
- --enable-autoupgrade 옵션을 추가해 클러스터를 생성하면 노드 자동 업그레이드가 기본 설정
클러스터 스케일링
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)
노드 유지보수
클러스터를 스케일업/다운하는 경우, 수동으로 노드를 비우고 등록해제하는 방법: kubectl drain
- 노드에서 모든 파드를 제거한 후 클러스터에서 노드 제거
- 파드를 미리 제거해야 인스턴스나 VM이 워크로드를 감당하지 않고 있을 때 노드 제거 가능
kubectl drain <노드 명>
단순한 유지보수 목적으로 노드를 제거하는 경우, uncordon 커멘드로 다시 사용할 수 있는 노드로 추가 가능
kubectl uncordon <노드>
728x90
반응형
'개발 > Docker & Kubernetes' 카테고리의 다른 글
컨테이너(Container)와 도커 (Docker) (0) | 2020.12.28 |
---|---|
Cloud Computing, 특징, 서비스 유형, 배치 모델 (0) | 2020.12.20 |
[k8s study] 8. 모니터링과 로깅 (0) | 2020.10.06 |
[k8s study] 4. 신뢰성있는 컨테이너 네이티브 애플리케이션 구현 (0) | 2020.08.29 |
[k8s study] 1장. 쿠버네티스 소개 (0) | 2020.08.06 |
댓글