본문 바로가기
MLOps/Doker & Kubernetes

Udemy CKA 강의 정리 13: ETCD in Kubernetes

by 공부하는 무니 2023. 1. 1.
반응형

해당 내용은 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests  강의를 공부한 내용입니다. 내용을 그대로 번역하기보다는, 제가 이해하기 쉬운 대로 수정한 부분들이 있습니다.

⚠️ 영어 독해가 많이 부족합니다. 틀린 내용이 있으면 알려주시면 감사하겠습니다.


이번 강의에서는 Kubernetes에서 etcd의 역할에 대해 알아보겠습니다.

ETCD Datastore

etcd는 클러스터에 대한 정보를 저장하는 데이터 저장소입니다. 어떤 정보들이 있을까요? NodesPODSConfigsSecretsAccountsRolesRole Bindings등이 있습니다.

kube control get 명령을 실행할 때 우리가 볼 수 있는 정보는 모두 etcd 서버에서 가져온 것들입니다. 노드 추가, pod 나 replica sets 배포와 같은 클러스터에 대한 모든 변경사항들이 etcd서버에서 업데이트됩니다. etcd 서버에 딱 한 번만 업데이트 되는 것이 있는데 그것은 바로 complete하는 변경사항입니다.

 

클러스터를 어떻게 설정하느냐에 따라 etcd는 다르게 배포됩니다. 이 섹션 전체에서 두 가지 유형의 Kubernetes 배포에 대해 배울 것입니다.

  • 하나는 scratch로부터의 배포
  • 다른 하나는 Qadium 툴을 사용하여 배포하는 것입니다. 모의고사 환경에서는 Qadium 툴을 사용하여 배포합니다. 코스의 뒤 강의에서 클러스터를 설정하게 될 텐데, 이때 scratch로 설정(밑바닥부터 처음부터 설정)할 것입니다. 따라서 두 방법의 차이를 알아두면 좋습니다.

Setup - Manual

클러스터를 scratch 설정하는 경우, etcd바이너리를 직접 다운로드 하여 etcd를 deploy하고, 바이너리를 설치하여 etcd를 직접 마스터 노드에서 서비스로 구성합니다.

$ wget -q --https-only "https://github.com/etcd-io/etcd/releases/download/v3.3.11/etcd-v3.3.11-linux-amd64.tar.gz"

서비스에 전달되는 많은 옵션들이 있습니다. 그 중 다수는 인증서와 관련이 있습니다. 이 과정의 후반부에서 인증서를 어떻게 생성하고 구성하는지에 대해 자세히 알아보겠습니다. TLS 인증서에 대한 섹션이 따로 있습니다. 나머지는 etcd를 클러스터로 구성하는 것과 관련된 것들입니다.

Kubernetes에서 high availability를 설정할 때 해당 옵션들을 살펴보겠습니다. 지금 주목할 유일한 옵션은 advertised client URL입니다.

이것은 etcd가 대기(listens)하고 있는 주소입니다. 서버 ip와 2379포트로 구성되어 있는데, 2379포트는 etcd가 대기하는 디폴트 포트입니다. 이 URL은 kube API 서버에서 etcd 서버에 접근하려고 할 때 구성되어 있어야 합니다.

Setup - kubeadm

kubeadm을 사용하여 클러스터를 설정하는 경우, kubeadm이 etcd서버를 kube 시스템 네임스페이스 안의 파드로 배포합니다.

$ kubectl get pods -n kube-system

 

Explore ETCD

etcd 데이터베이스를 탐색할 수 있습니다. 이 파드 내에서 etcd control utility를 사용하여 etcd database를 탐색할 수 있습니다. Kubernetes에 저장된 모든 키를 나열하려면 다음과 같이 etcd control get 명령을 실행하면 됩니다.

etcdctl get / --prefix -keys-only

쿠버네티스는 특정 디렉토리 구조로 데이터를 저장합니다. 루트 디렉토리는 Registry이며 그 아래에 minions, pods, replicasets, deployments, roles, secrets 등 다양한 Kubernetes 구성이 있습니다.

ETCD in HA Environment

high availability 환경에서는 클러스터에 여러 마스터 노드가 있습니다. 그리고 마스터 노드들에 분산된 여러 etcd 인스턴스를 갖게 됩니다. 이때, etcd 서비스 구성에서 파라미터를 잘 설정하면 etcd 인스턴스가 서로에 대해 알게 됩니다. --initial-cluster 옵션에 etcd 서비스의 다른 인스턴스를 지정하면 됩니다. 이 과정의 뒷 부분에서 훨씬 더 자세히 high availability에 대해 이야기해보겠습니다만, 여기서 한번 포인트를 짚고 넘어가는 것이 좋다고 생각했습니다.

 

 

반응형

댓글