[쿠버네티스] 3장 쿠버네티스 환경 선택

공효은·2023년 7월 3일
0

도커

목록 보기
11/12
post-thumbnail

3.1 쿠버네티스 환경의 종류

쿠버네티스는 여러 플랫폼 환경에서 클러스터를 구성하여 사용할 수 있다.
쿠버네티스 클러스터를 구성하려면 크게 다음과 같은 세 가지 방법을 고려할 수 있다.

  • 로컬 쿠버네티스
    • 물리 머신 한 대구축하여 사용
    • 네트워크가 연결되지 않아도 되고 바로 눈으로 확인할 수 있다는 점에서 개인 적인 테스트나 개발 환경으로 적당하다.
    • 이중화 되어 있지 않아 서비스 환경에는 적합하지 않다.
  • 쿠버네티스 구축 도구
    • 도구를 사용하여 온프레미스/클라우드에 클러스터구축하여 사용
    • 온프레미스에 배포하는 경우나 세밀한 커스터마이즈가 필요한 경우 사용한다.
  • 관리형 쿠버네티스 서비스
    • 퍼블릭 클라우드의 관리형 서비스로 제공하는 클러스터를 사용
    • 기본적으로 관리형 쿠버네티스 서비스를 사용할 수 있다면사용하자.

이 장에서는 여러 쿠버네티스 환경 중에서 다음과 같이 방법별로 2~3가지 환경을 소개한다.

  • 로컬 쿠버네티스

    • 미니큐브(Minikube_
    • Docker Desktop for Mac/Windows
    • kind(Kubernetes in Docker)
  • 쿠버네티스 구축 도구

    • 큐브어드민(kubeadm)
    • 랜처 (Rancher)
  • 퍼블릭 클라우드 관리형 쿠버네티스 서비스

    • Google Kubernetes Engine(GKE)
    • Azure Kubernetes Service(AKS)
    • Elastic Kubernetes Service(EKS)

    3.2 로컬 쿠버네티스

    로컬 쿠버네티스는 물리 머신에서 손쉽게 쿠버네티스를 테스트할 수 있는 방법이다. 한 대의 머신에 올인원으로 구성되어 이중화가 보장되지 않는 점에 주의해야 한다. 또한, 일부 사용할 수 없는 기능도 있다.

    3.2.1 미니큐브

  • 미니큐브(Minikube)는 물리 머신에 로컬 쿠버네티스를 쉽게 구축하고 실행할 수 있는 도구다.

  • 실행되는 쿠버네티스는 단일 노드 구성이라 여러 대의 구성이 필요한 쿠버네티스 기능 등은 사용할 수 없다.

  • 미니큐브는 로컬 가상 머신에 쿠버네티스를 설치하기 위해 하이퍼바이저가 필요하다. 하이퍼바이저는 다음과 같이 맥 운영체제(macOs)/리눅스(Linux)/윈도우(Windows) 운영체제 환경에 맞는 소프트웨어를 사전에 설치해아한다.

  • 맥 운영 체제

    • 도커/하이퍼킷 드라이버/버추얼박스/패럴러즈/브이엠웨어 퓨전/포드맨 중 하나.
  • 미니 큐브는 하이퍼바이저를 하이퍼바이저에 맞는 드라이버를 사용해 조작함으로써 자동으로 호스트가 되는 컨테이너나 가상 머신을 생성하고 그 환경에 쿠버네티스를 설치한다.

설치 과정은 p59 참고

⭐️ 3.2.2 Docker Desktop for Mac/Windows

Docker Desktop에서 쿠버네티스를 사용하려면 기동 후에 Preference에서 쿠버네티스를 활성화 해야한다.

여러 쿠버네티스 클러스터를 사용하는 경우에는 kubectl의 컨텍스트를 전환하여 사용해야한다.
다음 명령어로 컨텍스트를 전환한 후에는 kubectl을 사용하여 Docker Desktop 클러스터를 조작할 수 있다.

# 컨텍스트 변경
kubectl config use-context docker-desktop
Switched to context "docker-desktop".

kubectl 에서는 로컬 머신에 기동 중인 도커 호스트를 쿠버네티스 노드로 인식한다.

# 노드 확인
kubectl get nodes

쿠버네티스 클러스터 기능을 담당하고 있는 구성 요소 (component) 그룹도 컨테이너로 기동된다. 쿠버네티스를 활성화할때 Show system containers (advanced) 도 활성화하면 다음과 같이 docker container ls 명령어로 구성요소를 확인할 수 있다.

3.2.3 kind

kind(kubernetes in Docker)는 쿠버네티스 자체 개발을 위한 도구다.
이름처럼 도커 컨테이너를 여러 개 기동하고 그 컨테이너를 쿠버네티스 노드로 사용하는 것으로, 여러 대로 구성된 쿠버네티스 클러스터를 구축한다.
현재 로컬 환경에서 멀티 노드 클러스터를 구축하려면 이 kind를 사용하는 것이 가장 좋다.
p64 참고

3.3 쿠버네티스 구축 도구

모두 여러 노드의 쿠버네티스 클러스터를 구축할 수 있다.

3.3.1 쿠버네티스 서비스 수준 목표(SLO)

SIG-Scalability라는 분과회는 쿠버네티스 확장성을 논의하고 있다. SIG-Scalability에서는 다음과 같은 서비스 수준 지표 (Service Level Indicator, SLI)와 서비스 수준 목표(Service Level Objective, SLO)를 정의하고 있다. 또한, 아래에 제시된 것들 외의 SLI/SLO 에서도 책정중이다. 자세한것은 링크 확인

3.3.2 큐브어드민

큐브 어드민(kubeadm)은 쿠버네티스에서 제공하는 공식 구축 도구이다.

이 장에서는 Ubuntu 18.04 머신 여러 대로 멀티 노드 쿠버네티스 클러스터를 구성하는 예제를 설명한다. 먼저 사전 준비로 모든 노드에 도커, CLI 등 관련 패키지를 설치하고 클러스터에서 사용하는 오버레이 네트워크용 커널 파라미터를 변경한다.

p70쪽 참고

3.3.3 플라넬

기본적으로 도커에서 기동한 컨테이너에 할당된 IP 주소는 호스트 외부에서 볼 수 없는 내부 IP(Internal IP) 주소다. 그래서 이 경우 각 노드에 배포된 컨테이너 간의 통신은 불가능한 상태다.

이 문제를 해결하고 멀티 노드 쿠버네티스 클러스터가 되기 위해서는 각 호스트의 내부 네트워크 접속성을 확보해야만 한다.

이런 네트워크 구성을 만들기 위한 방법으로 플라넬(Flannel) 이 있다.
플라넬은 노드 사이를 연결하는 네트워크에 가상 터널 (오버레이 네트워크)을 구성하여 쿠버네티스 클러스터 내부의 파드 간 통신(파드 네트워크)을 구현한다.

3.4 퍼블릭 클라우드 관리형 쿠버네티스 서비스

퍼블릭 클라우드의 쿠버네티스 서비스는 영구 볼륨이나 로드 밸런서와의 연계 등을 쉽게 사용할 수 있도록 기능을 제공한다.

3.4.1 GKE(Google Kubernete Engine)

  • 가장 먼저 출시된 관리형 쿠버네티스 서비스.
  • 릴리스 채널이나 노드 자동 업데이트 기능, 노드 자동 복구 기능, 노드 인스턴스 유형을 자동으로 결정해주는 노드 자동 프로비저닝 기능 등 쿠버네티스 클러스터 관리를 돕는 많은 기능이 포함 되어있어 클러스터 자체의 운용 부하를 크게 낮춘다.

    프로비저닝(provisioning)은 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다

# Google Cloud SDK(gcloud 명령어를 포함) 설치
# 자세한 사용 방법은 https://cloud.google.com/sdk/docs/quickstarts를 참고
curl https://sdk.cloud.google.com | bash

# 설치한 gcloud 명령어를 사용할 수 있도록 셸을 재기동
exec -l $SHELL

# gcloud CLI 인증
gcloud init
profile
잼나게 코딩하면서 살고 싶어요 ^O^/

0개의 댓글