Kubernetes: Cluster 이해하기

Kubernetes Cluster

Concept

“클러스터”는 컴퓨터 네트워킹 및 분산 시스템의 영역에서 여러 대의 컴퓨터 또는 서버가 모여 하나의 단일 시스템처럼 작동하는 구성을 의미합니다.
클러스터는 고가용성, 부하 분산, 확장성 등의 이점을 제공합니다.

Features

쿠버네티스(Kubernetes) 1컨텍스트에서 클러스터는 다음과 같은 특성과 구성 요소로 이루어져 있습니다:

  1. 노드 (Node):
    • 쿠버네티스 클러스터의 기본 워킹 유닛입니다.
    • 마스터 노드 (Control Plane Node): 클러스터의 관리와 조정을 담당합니다.
      API 서버, etcd, 컨트롤러 매니저, 스케줄러 등의 컴포넌트를 포함합니다.
    • 워커 노드 (Worker Node): 실제 애플리케이션 워크로드(컨테이너)가 실행되는 노드입니다.
      Kubelet, Kube Proxy 등의 컴포넌트를 포함합니다.
https://www.startkubernetes.com/blog
  1. 파드 (Pod):
    • 쿠버네티스에서 가장 작은 배포 단위입니다.
    • 하나 이상의 컨테이너를 포함하며, 같은 노드에서 함께 실행됩니다.
  2. 서비스 (Service):
    • 파드 그룹에 대한 안정적인 접근 주소를 제공합니다.
    • 클러스터 내부 또는 외부에서 파드 그룹에 네트워크 액세스를 제공합니다.
  3. etcd:
    • 쿠버네티스 클러스터의 설정 정보와 상태 정보를 저장하는 분산 키-값 저장소입니다.
  4. API 서버:
    • 클러스터와 통신하는 주요 엔드포인트입니다.
      kubectl과 같은 도구나 내부 컴포넌트들이 쿠버네티스 API 서버를 통해 클러스터와 소통합니다.
  5. 컨트롤러 (Controller):
    • 클러스터의 상태를 관리하고, 원하는 상태(Desired State)를 유지하기 위한 자동화된 논리를 실행하는 구성 요소입니다.
  6. 스케줄러:
    • 파드를 적절한 워커 노드에 배치하는 역할을 합니다.

쿠버네티스 클러스터는 이러한 컴포넌트와 리소스를 통합하여 애플리케이션의 배포, 확장 및 관리를 단순화하고 자동화합니다.
클러스터를 사용함으로써 사용자는 단일 노드에서의 실패, 리소스 제한 등의 문제를 최소화하고, 확장성, 부하 분산, 높은 가용성 등의 이점을 얻을 수 있습니다.

  1. Note: What is context? ↩︎

Kubernetes Context

쿠버네티스(Kubernetes)에서 “컨텍스트(context)”는 kubectl 사용자가 여러 쿠버네티스 클러스터와 서로 다른 사용자로서 또는 다양한 네임스페이스 내에서 작업할 때 필요한 클러스터 및 사용자 구성 정보의 집합을 나타냅니다.

쿠버네티스 클러스터와 상호 작용하는 개발자나 시스템 관리자는 종종 여러 클러스터와 서로 다른 권한을 가진 여러 사용자 인증서로 작업해야 할 때가 있습니다. 예를 들면, 개발 환경, 스테이징 환경 및 프로덕션 환경과 같은 여러 클러스터에 대한 접근이 필요할 수 있습니다.

kubectl~/.kube/config라는 파일에서 이러한 구성 정보를 관리합니다.
이 파일 내에서, 당신은 여러 클러스터, 사용자, 그리고 네임스페이스 구성을 가질 수 있으며
컨텍스트는 세 가지 설정의 특정 조합을 참조합니다.

  1. 클러스터 (Cluster)
  2. 사용자 (User)
  3. 네임스페이스 (Namespace)

The output shows the two clusters, two users, and three contexts:

Kubernetes Document: Define clusters, users, and contexts

apiVersion: v1
clusters:
- cluster:
    certificate-authority: fake-ca-file
    server: https://1.2.3.4
  name: development
- cluster:
    insecure-skip-tls-verify: true
    server: https://5.6.7.8
  name: test
contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: dev-frontend
- context:
    cluster: development
    namespace: storage
    user: developer
  name: dev-storage
- context:
    cluster: test
    namespace: default
    user: experimenter
  name: exp-test
current-context: ""
kind: Config
preferences: {}
users:
- name: developer
  user:
    client-certificate: fake-cert-file
    client-key: fake-key-file
- name: experimenter
  user:
    # Documentation note (this comment is NOT part of the command output).
    # Storing passwords in Kubernetes client config is risky.
    # A better alternative would be to use a credential plugin
    # and store the credentials separately.
    # See https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins
    password: some-password
    username: exp

kubectl을 사용하여 현재 컨텍스트를 조회하거나 변경할 수 있습니다:

  • 현재 컨텍스트 조회: kubectl config current-context
  • 컨텍스트 목록 조회: kubectl config get-contexts
  • 컨텍스트 변경: kubectl config use-context [CONTEXT_NAME]

이러한 커맨드를 사용하면 여러 쿠버네티스 환경 및 구성 간에 쉽게 전환하면서 작업을 수행할 수 있습니다.

What is the difference from Azure context?

“컨텍스트(context)”는 여러 환경 또는 구성 간에 전환하는 메커니즘을 제공하는데 사용되는 용어입니다.
Kubernetes와 Azure 모두 “컨텍스트”라는 개념을 사용하지만, 둘의 용도와 사용 방법은 서로 다릅니다.
아래에서 두 컨텍스트를 비교합니다:

Kubernetes Context

용도:

  • Kubernetes의 kubectl 도구를 사용하여 여러 클러스터, 사용자, 네임스페이스 간에 전환할 때 사용됩니다.

구성 요소:

  • Cluster: API 서버의 주소와 인증 정보를 포함합니다.
  • User: 사용자 인증 정보 (예: client certificates, bearer tokens)를 포함합니다.
  • Namespace: 기본적으로 kubectl 명령이 영향을 받는 네임스페이스를 지정합니다.

저장 위치:

  • 주로 ~/.kube/config 파일에 저장됩니다.

주요 명령:

  • kubectl config get-contexts: 사용 가능한 컨텍스트 목록 표시
  • kubectl config use-context [CONTEXT_NAME]: 특정 컨텍스트 사용 설정

Azure Context (Azure CLI’s az account)

용도:

  • Azure CLI (az) 도구를 사용하여 여러 Azure 구독 또는 계정 간에 전환할 때 사용됩니다.

구성 요소:

  • Subscription ID: 작업을 수행하려는 Azure 구독의 ID입니다.
  • Tenant ID: Azure Active Directory 테넌트의 ID입니다.
  • User: Azure 계정의 사용자 정보입니다.

저장 위치:

  • Azure CLI가 사용하는 인증 및 프로파일 정보를 저장하는 위치에 저장됩니다.

주요 명령:

  • az account list: 사용 가능한 Azure 구독 목록 표시
  • az account set --subscription [SUBSCRIPTION_ID]: 특정 구독 사용 설정

Conclusion

  1. 두 “컨텍스트” 모두 여러 환경 간의 전환을 용이하게 하기 위한 메커니즘
  2. Kubernetes는 클러스터 기반의 환경 전환에 초점
  3. Azure는 클라우드 리소스 관리에 대한 계정 및 구독 전환에 초점