본문 바로가기
운영체제 (LNX,WIN)

Kubernetes 기본 구조와 etcd 역할 및 클러스터 구성

by 날으는물고기 2023. 12. 17.

Kubernetes 기본 구조와 etcd 역할 및 클러스터 구성

Kubernetes에서 ConfigMap과 Secret은 etcd 데이터베이스에 저장됩니다. etcd는 Kubernetes의 클러스터 상태와 구성 정보를 저장하는 분산 데이터 저장소입니다. ConfigMap은 애플리케이션 설정 정보를 저장하고, Secret은 민감한 정보(예: 암호, API 키)를 안전하게 저장하는 데 사용됩니다.

Kubernetes의 마스터 노드에는 API 서버가 실행되며, 이 서버가 클러스터 상태를 etcd에 저장하고 읽습니다. 따라서 ConfigMap과 Secret은 Kubernetes 클러스터의 상태 데이터로 간주되어 etcd에 안전하게 저장되고 관리됩니다.

 

Pod가 실행되면, 해당 Pod가 필요로 하는 ConfigMap과 Secret은 API 서버를 통해 etcd에서 가져와 Pod 내에 마운트되어 사용됩니다. 이를 통해 애플리케이션은 필요한 설정과 민감한 정보를 동적으로 로드하여 실행할 수 있습니다.

 

중요한 점은 Secret은 Base64 인코딩만 되어 있어서 안전한 것이 아니라는 것입니다. 따라서 민감한 정보를 다룰 때에는 보다 안전한 암호화 방법을 사용하는 것이 좋습니다.

Kubernetes 자체에서는 etcd 데이터베이스를 직접 확인하기 위한 공식적인 웹 UI 도구를 제공하지 않습니다. etcd는 주로 백엔드 데이터베이스로서 클러스터 상태 및 구성 정보를 저장하는 데 사용되며, 직접적인 브라우징을 피하려는 철학을 가지고 있습니다.

 

그러나 etcd 클러스터에 접근하고 데이터베이스를 확인하기 위해 다양한 도구 및 방법이 있습니다.

  1. etcdctl Command-Line 도구
    Kubernetes 클러스터의 etcd 노드에서 etcdctl이라는 명령행 도구를 사용하여 etcd 데이터베이스를 검색할 수 있습니다. 예를 들면 다음과 같습니다.
    etcdctl get --prefix /
  2. etcd 웹 UI 도구
    몇 가지 오픈 소스 프로젝트가 etcd를 시각적으로 검토할 수 있는 웹 기반 도구를 제공합니다. 예를 들면 "etcd-dashboard"나 "etcd-manager" 등이 있습니다. 이러한 도구는 etcd의 HTTP 엔드포인트에 연결하여 데이터베이스를 시각적으로 검토할 수 있게 해줍니다.
    하지만 이러한 도구는 보안 상 이유로 신중하게 사용해야 하며, 실제 운영 환경에서는 직접적인 etcd 데이터베이스 조작을 최소화해야 합니다.
  3. etcd 브라우저 Docker 이미지
    일부 개발자들이 etcd 브라우저를 Docker 이미지로 만들어 공유하고 있습니다. 이러한 이미지를 사용하면 로컬에서 etcd 데이터베이스를 브라우징할 수 있습니다.
    예를 들면 다음과 같이 사용할 수 있습니다.
    docker run -p 8000:8000 --name etcd-browser --rm -e ETCD_BROWSER_ETCD_ENDPOINTS=http://etcd-endpoint:2379 quay.io/coreos/etcd:v3.4.9 etcd --endpoints=http://etcd-endpoint:2379
    위 예제에서 http://etcd-endpoint:2379는 실제 etcd 엔드포인트에 맞게 수정해야 합니다.

많은 경우에는 Kubernetes 클러스터를 안전하게 운영하기 위해 etcd에 직접적으로 접근할 필요가 없습니다. 직접적인 조작은 신중하게 이루어져야 하며, Kubernetes API를 통한 상태 및 구성 관리를 권장합니다.

 

Etcd의 모니터링을 위해 Prometheus와 Grafana를 설정하는 것은 다음과 같은 방법으로 가능합니다.

  1. Prometheus 설치 및 설정
    이 설정에서는 etcd 클러스터의 각 노드를 대상으로 하여 15초마다 스크랩하는 작업을 정의합니다.
    # Prometheus 다운로드 및 압축 해제
    PROMETHEUS_VERSION="2.30.0"
    wget https://github.com/prometheus/prometheus/releases/download/v$PROMETHEUS_VERSION/prometheus-$PROMETHEUS_VERSION.linux-amd64.tar.gz -O /tmp/prometheus-$PROMETHEUS_VERSION.linux-amd64.tar.gz
    tar -xvzf /tmp/prometheus-$PROMETHEUS_VERSION.linux-amd64.tar.gz --directory /tmp/ --strip-components=1
    
    # 설정 파일 작성
    cat > /tmp/prometheus.yml <<EOF
    global:
      scrape_interval: 15s
    
    scrape_configs:
      - job_name: etcd
        static_configs:
          - targets: ['10.240.0.32:2379', '10.240.0.33:2379', '10.240.0.34:2379']
    EOF
    
    # Prometheus 실행
    /tmp/prometheus --config.file /tmp/prometheus.yml
  2. Grafana 설치 및 설정
    이후 웹 브라우저를 열고 http://localhost:3000으로 이동하여 Grafana에 로그인합니다.
    # Grafana 다운로드 및 압축 해제
    GRAFANA_VERSION="8.3.5"
    wget https://dl.grafana.com/oss/release/grafana-$GRAFANA_VERSION.linux-amd64.tar.gz -O /tmp/grafana-$GRAFANA_VERSION.linux-amd64.tar.gz
    tar -xvzf /tmp/grafana-$GRAFANA_VERSION.linux-amd64.tar.gz --directory /tmp/ --strip-components=1
    
    # Grafana 실행
    /tmp/grafana-server -homepath /tmp/grafana-$GRAFANA_VERSION
  3. Prometheus 데이터 소스 추가
    • Grafana 대시보드로 이동하고, 좌측 패널에서 "Settings" > "Data Sources"로 이동합니다.
    • "Add your first data source"를 클릭하고, "Prometheus"를 선택합니다.
    • URL을 http://localhost:9090으로 설정하고, "Save & Test" 버튼을 클릭하여 연결을 확인합니다.
  4. Etcd 대시보드 추가
    • Grafana 대시보드로 이동하고, 좌측 패널에서 "+" 아이콘을 클릭하여 대시보드를 추가합니다.
    • "Import"를 선택하고, 이전에 언급한 etcd 대시보드 JSON 파일을 임포트합니다.
    • 데이터 소스를 선택하고, "Import" 버튼을 클릭하여 대시보드를 추가합니다.
  5. 대시보드 사용자 정의
    • 대시보드가 추가되면 "Settings" > "Variables"로 이동하여 필요한 변수를 설정할 수 있습니다. 예를 들어, 클러스터 내의 각 etcd 노드를 표시하는 변수를 추가할 수 있습니다.

이제 Prometheus와 Grafana가 etcd 클러스터의 메트릭을 수집하고 시각화하도록 설정되었습니다. 이 설정은 환경에 따라 조정될 수 있으며, 특히 보안 및 네트워크 구성에 주의해야 합니다.

728x90

댓글