자주 묻는 질문
자주 묻는 질문 (Frequently Asked Questions)
이 페이지는 Consul 사용에 관한 자주 묻는 질문과 답변을 제공해요.
출처: 문서
본문
Kubernetes의 Consul (Consul on Kubernetes)
Q: 특정 Helm 차트 버전으로 직접 업그레이드할 수 있나요, 아니면 한 번에 하나의 패치 릴리스씩 업그레이드해야 하나요?
특정 버전으로 직접 업그레이드하는 것은 안전해요. 업그레이드하는 모든 버전의 릴리스 노트를 읽고 파괴적인 변경 사항이 있는지 확인하세요.
Q: 제자리 업그레이드가 가능한가요, 아니면 새 Kubernetes 클러스터를 만들어야 하나요?
새 Kubernetes 클러스터를 만드는 것이 항상 더 안전하지만 대부분의 팀에게는 선택지가 아니에요. Consul은 제자리 업그레이드를 지원해요.
비프로덕션 환경을 먼저 업그레이드해야 해요. Consul 버전을 업그레이드한다면 Consul 데이터를 백업해야 해요.
Q: Consul 서버에서 tcpdump를 어떻게 실행하나요?
먼저 values.yaml 파일에 다음을 추가해 루트로 kubectl exec로 Consul 서버 컨테이너에 들어갈 수 있게 해요:
server:
securityContext:
runAsNonRoot: false
runAsGroup: 0
runAsUser: 0
fsGroup: 0
helm upgrade를 실행해요(전체 업그레이드 지침은 Kubernetes에서 Consul 업그레이드 참고).
이제 서버 파드로 kubectl exec를 실행해요:
$ kubectl exec -it consul-server-0 -- sh
tcpdump를 설치해요:
$ apk add --no-cache tcpdump
$ which tcpdump
/usr/bin/tcpdump
일반적인 Consul 질문 (Generic Consul Questions)
Q: Checkpoint란 무엇인가요? / Consul은 귀가(home) 호출을 하나요?
Consul은 업데이트와 중요한 보안 게시판을 확인하는 데 사용되는 Checkpoint라는 HashiCorp 서비스를 사용해요. 사용자나 호스트를 식별하는 데 사용할 수 없는 익명 정보만 Checkpoint로 전송돼요. 경고 메시지 중복을 줄이는 데 도움이 되는 익명 ID가 전송돼요. 이 익명 ID는 비활성화할 수 있어요. 실제로 Checkpoint 서비스 사용은 선택 사항이며 비활성화할 수 있어요.
disable_anonymous_signature와 disable_update_check를 참고해요.
Q: Consul은 UDP 브로드캐스트나 멀티캐스트에 의존하나요?
Consul은 TCP와 UDP 유니캐스트에 의존하는 Serf 가십 프로토콜을 사용해요. 멀티테넌트 또는 클라우드 네트워크 환경에서 브로드캐스트와 멀티캐스트는 거의 사용할 수 없어요. 그렇기 때문에 Consul과 Serf는 모두 그러한 기능에 대한 의존을 피하도록 설계되었어요.
Q: Consul은 최종적 일관성인가요, 강한 일관성인가요?
Consul에는 서비스 카탈로그와 가십 프로토콜이라는 두 가지 중요한 하위 시스템이 있어요. 서비스 카탈로그는 모든 노드, 서비스 인스턴스, 헬스 체크 데이터, ACL, KV 정보를 저장해요. 이는 강하게 일관되며 합의 프로토콜을 사용해 복제돼요.
가십 프로토콜은 어떤 노드가 클러스터의 일부인지 추적하고 노드 또는 에이전트 장애를 감지하는 데 사용돼요. 이 정보는 본질적으로 최종적으로 일관돼요. 서버가 멤버십 변경을 감지하거나 헬스 업데이트를 받으면 그에 따라 서비스 카탈로그를 업데이트해요.
이 분리 때문에 질문에 대한 답은 미묘해요. 거의 모든 클라이언트 API는 서비스 카탈로그와 상호작용하며 강하게 일관돼요. 카탈로그에 대한 업데이트는 최종적으로 일관된 가십 프로토콜을 통해 올 수 있으며, 이는 상태가 조정될 때까지 카탈로그의 현재 상태가 지연될 수 있음을 의미해요.
Q: failed 또는 left 노드는 제거되나요?
죽은 노드(failed 또는 left 상태의 노드)의 축적을 방지하기 위해 Consul은 카탈로그에서 죽은 노드를 자동으로 제거해요. 이 과정을 리핑(reaping) 이라고 해요. 이는 현재 구성 가능한 72시간 간격으로 수행돼요. 리핑은 떠나는 것과 유사하며 연결된 모든 서비스가 등록 해제되게 해요. failed 또는 left 노드 수를 줄이기 위해 미용상의 이유로 리핑 간격을 변경하는 것은 권장되지 않아요(failed 또는 left 상태의 노드는 Consul에 추가 부담을 주지 않아요).
Q: Consul은 watcher 또는 blocking 쿼리에 대한 델타 업데이트를 지원하나요?
Consul은 현재 watcher 또는 blocking 쿼리에 델타 또는 변경 전용 응답을 보내는 것을 지원하지 않아요. API는 단순히 전체 결과로 에지 트리거(edge-trigger) 반환만 허용해요. 클라이언트는 마지막 읽기의 결과를 유지하고 클라이언트 측에서 델타를 계산해야 해요.
설계상 Consul은 델타 계산을 지원하는 대신 이를 클라이언트에 오프로드해요. 이는 서버의 값비싼 상태 유지와 데이터 업데이트와 watch 등록 사이의 경쟁 조건을 피해요.
Q: Consul은 어떤 네트워크 포트를 사용하나요?
구성 문서의 사용 포트(Ports Used) 섹션은 Consul이 사용하는 모든 포트를 나열해요.
Q: Consul은 특정 사용자 프로세스 리소스 제한이 필요한가요?
Consul 클라이언트 에이전트에 필요한 열린 파일 디스크립터는 소수여야 해요. 가십 계층은 다른 노드와 일시적인 연결을 수행하고, 클라이언트 에이전트에 대한 각 연결(blocking 쿼리 같은 경우)은 연결을 열며, 일반적으로 Consul 서버 중 하나에 대한 연결이 있을 거예요. watch 핸들러, 헬스 체크, 로그 파일에도 소수의 파일 디스크립터가 필요해요.
Consul 서버 에이전트의 경우 위의 요구 사항에 클러스터의 각 노드에서 들어오는 추가 연결을 계획해야 해요. 이는 일반적인 경우가 아니어야 하지만, 최악의 경우 다른 서버에 문제가 있으면 다른 클라이언트 에이전트가 모두 단일 서버에 연결될 것으로 예상되므로 이 가능성에 대한 준비가 도움이 돼요.
기본 ulimit는 일반적으로 Consul에 충분하지만, 자체 환경의 특정 요구 사항을 면밀히 검토하고 제한을 임의로 늘리기 전에 과도한 리소스 사용의 근본 원인을 식별해야 해요.
Q: Consul 키/값 저장소의 키당 값 크기 제한은 얼마인가요?
키 값 크기의 기본 권장 제한은 512KB예요. 이는 엄격하게 적용되며 값에 그 제한을 초과하는 내용을 저장하려는 모든 클라이언트에는 HTTP 413 상태가 반환돼요. kv_max_value_size 구성 옵션을 사용해 제한을 늘릴 수 있어요.
Consul 키/값 저장소는 일반적인 목적의 데이터베이스로 사용하도록 설계되지 않았다는 점에 유의해야 해요. 자세한 내용은 서버 성능을 참고해요.
Q: Consul 데이터센터 간에 어떤 데이터가 복제되나요?
일반적으로 데이터는 서로 다른 Consul 데이터센터 간에 복제되지 않아요. 다른 데이터센터의 리소스에 대한 요청이 들어오면 로컬 Consul 서버는 해당 리소스에 대한 RPC 요청을 원격 Consul 서버로 전달하고 결과를 반환해요. 원격 데이터센터를 사용할 수 없으면 해당 데이터센터에서도 해당 리소스를 사용할 수 없어요. 이는 로컬 데이터센터에 대한 요청에는 영향을 미치지 않아요. Consul의 내장 ACL 복제 기능이나 consul-replicate 같은 외부 도구와 같이 제한된 데이터 하위 집합이 복제될 수 있는 몇 가지 특수한 상황이 있어요.
Q: Consul은 다른 프로세스가 Consul의 메모리 상태에 접근하는 것을 보호하는 것을 네이티브하게 처리할 수 있나요?
Consul은 내장 메모리 접근 보호를 제공하지 않으며, 애플리케이션 보안을 변경하거나 조작하기 위해 호스트 시스템과 상호작용하지 않아요.
운영체제에 따라 개별 프로세스에 대해 일반적으로 수행하는 예방 조치나 수정 단계를 취할 것을 권장해요.
자세한 내용은 보안 모델을 참고해요.
Q: Consul Docker 이미지는 OCI를 준수하나요?
공식 Consul Docker 이미지는 OCI를 준수하는 Docker 이미지 스키마 V2를 사용해요. Docker Hub의 Docker 이미지를 확인하려면 docker manifest inspect consul 명령을 사용해 매니페스트 페이로드를 검사해요. docker manifest inspect를 사용하려면 실험적 기능을 활성화해야 할 수 있어요.
Q: Consul UI는 어떤 브라우저를 지원하나요?
Consul은 현재 일반적으로 최신 버전인 모든 'evergreen' 브라우저를 지원해요. 즉 다음을 지원해요:
- Chrome
- Firefox
- Safari
- Microsoft Edge
Internet Explorer 11(IE 11)은 지원하지 않아요. Consul은 IE 11에 대한 Microsoft 자체 입장과 유사한 태도를 따르며, 이는 지원 웹사이트에서 확인할 수 있어요.