Calico 데이터스토어
Calico는 클러스터의 운영·설정 상태 데이터를 중앙 데이터스토어에 저장해요. 이 문서는 Kubernetes API 데이터스토어와 etcd 중 무엇을 선택할지 판단 기준을 제시하고, hardway 과정에서 데이터스토어를 준비하고 calicoctl을 검증하는 단계를 다뤄요.
출처: 문서
본문
Calico는 클러스터의 운영 및 설정 상태에 대한 데이터를 중앙 데이터스토어에 저장해요. 데이터스토어를 사용할 수 없게 되면 Calico 네트워크는 계속 동작하지만, 업데이트는 불가능해요 (새 파드를 네트워킹할 수 없고, 정책 변경을 적용할 수 없는 등).
Calico에는 선택할 수 있는 두 가지 데이터스토어 드라이버가 있어요
- etcd - etcd 클러스터에 직접 연결
- Kubernetes - Kubernetes API 서버에 연결
Kubernetes를 데이터스토어로 사용하기
이 가이드는 Kubernetes API 데이터스토어 드라이버를 사용해요. Kubernetes에서 Calico를 사용할 때 이 드라이버의 장점은 다음과 같아요
- 별도의 데이터스토어가 필요 없어서 관리가 더 단순해요
- Kubernetes RBAC를 사용해 Calico 리소스에 대한 접근을 제어할 수 있어요
- Kubernetes 감사(audit) 로깅을 사용해 Calico 리소스 변경에 대한 감사 로그를 생성할 수 있어요
완전성을 위해, etcd 드라이버의 장점은 다음과 같아요
- Kubernetes가 아닌 플랫폼(예: OpenStack)에서 Calico를 실행할 수 있어요
- Kubernetes와 Calico 리소스 사이의 관심사 분리가 가능해요. 예를 들어 데이터스토어를 독립적으로 확장할 수 있어요
- 하나의 Kubernetes 클러스터만 담는 게 아니라 더 큰 Calico 클러스터를 실행할 수 있어요. 예를 들어 Calico 호스트 보호 기능이 적용된 베어메탈 서버가 Kubernetes 클러스터와 상호 운용하거나, 여러 Kubernetes 클러스터를 묶을 수 있어요.
커스텀 리소스
Kubernetes API 데이터스토어 드라이버를 사용할 때, 대부분의 Calico 리소스는 Kubernetes 커스텀 리소스로 저장돼요.
몇몇 Calico 리소스는 커스텀 리소스로 저장되지 않고, 그 대신 대응하는 네이티브 Kubernetes 리소스가 뒷받침해요. 예를 들어 워크로드 엔드포인트는 Kubernetes 파드예요.
Kubernetes를 Calico 데이터스토어로 사용하려면, Calico가 사용하는 커스텀 리소스를 정의해야 해요.
Calico 커스텀 리소스 정의 목록을 다운로드해서 살펴보고, 파일 편집기로 열어요.
wget https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/crds.yaml
Kubernetes에 커스텀 리소스 정의를 생성해요.
kubectl apply -f crds.yaml
calicoctl
Calico 데이터스토어와 직접 상호작용하려면 calicoctl 클라이언트 도구를 사용해요.
설치
-
Kubernetes에 접근할 수 있는 Linux 호스트에
calicoctl바이너리를 다운로드해요.wget -O calicoctl https://github.com/projectcalico/calico/releases/latest/download/calicoctl-linux-amd64 chmod +x calicoctl sudo mv calicoctl /usr/local/bin/ -
Kubernetes에 접근하도록
calicoctl을 설정해요.export KUBECONFIG=/path/to/your/kubeconfig export DATASTORE_TYPE=kubernetes대부분의 시스템에서 kubeconfig는
~/.kube/config에 있어요. 다음 로그인 때도 유지되도록export줄을~/.bashrc에 추가하고 싶을 수 있어요.
테스트
다음을 실행해서 calicoctl이 데이터스토어에 도달할 수 있는지 확인해요
calicoctl get nodes
다음과 비슷한 출력이 보여야 해요
NAME
ip-172-31-37-123
ip-172-31-40-217
ip-172-31-40-30
ip-172-31-42-47
ip-172-31-45-29
노드는 Kubernetes node 오브젝트가 뒷받침하므로, kubectl get nodes와 일치하는 이름이 보여야 해요.
커스텀 리소스가 뒷받침하는 오브젝트를 조회해 보세요
calicoctl get ippools
빈 결과가 보여야 해요
NAME CIDR SELECTOR
다음
더 알아보기 (Learn more)
Kubernetes API 데이터스토어는 관리가 단순하고 RBAC·감사 로깅을 그대로 쓸 수 있어서 대부분의 경우 권장돼요. 데이터스토어가 다운되어도 기존 네트워킹은 계속 동작하지만 변경은 막힌다는 점을 기억하세요. calicoctl get nodes로 데이터스토어 연결을 먼저 검증하세요.