TKG(Tanzu Kubernetes Grid) 1.2.1을 기준으로 TKG를 구성하고 있는 각종 구성요소들이 어떤 것인지 정리해 보았다.
ALERTMANAGER
Alert Manager는 Prometheus 서버와 같은 클라이언트 애플리케이션에서 보낸 경고(alert)를 처리합니다. e-메일, PagerDuty 또는 OpsGenie와 같은 올바른 수신기 통합으로 중복 제거, 그룹화 및 라우팅 작업을 수행한다. 또한 경고 음소거 및 억제를 처리한다.
Antrea
Antrea는 CNI(컨테이너 네트워크 인터페이스)와 Kubernetes NetworkPolicy을 구현하여 포드 워크로드를 위한 네트워크 연결 및 보안을 제공하는 Kubernetes 네이티브 프로젝트다. Antrea는 Open vSwitch(OVS)에서 프로그래밍 가능한 네트워크의 이점을 Kubernetes로 확장한다.
cAdvisor
cAdvisor(Container Advisor)는 컨테이너 사용자에게 실행 중인 컨테이너의 리소스 사용 및 성능 특성에 대한 이해를 제공한다. 실행 중인 데몬으로 실행 중인 컨테이너에 대한 정보를 수집, 집계, 처리 및 내보낸다. 특히 각 컨테이너에 대해 리소스 분리 매개 변수, 과거 리소스 사용, 전체 과거 리소스 사용 내역 및 네트워크 통계를 보관한다. 이 데이터는 컨테이너와 시스템 전체에 의해 내보내진다.
Calico
Calico는 컨테이너, 가상 시스템 및 기본 호스트 기반 워크로드를 위한 오픈 소스 네트워킹 및 네트워크 보안 솔루션이다.
Calico는 여러 데이터 평면을 지원하므로 최신 순수 Linux eBPF 데이터 평면, 표준 Linux 네트워킹 데이터 평면, Windows HNS 데이터 평면 등 필요에 가장 적합한 기술을 선택할 수 있다.
Calico는 최첨단 eBPF를 선호하거나 기존 시스템 관리자가 이미 알고 있는 표준 기본 요소에 익숙해지거나 매우 빠른 성능과 탁월한 확장성을 제공한다.
Cluster API
Cluster API는 여러 Kubernetes 클러스터의 프로비저닝, 업그레이드 및 운영을 단순화하는 선언적 API 및 툴링을 제공하는 데 초점을 맞춘 Kubernetes 하위 프로젝트다.
Kubernetes Special Interest Group (SIG) Cluster Lifecycle에 의해 시작된 클러스터 API 프로젝트는 플랫폼 운영자의 클러스터 라이프사이클 관리를 자동화하기 위해 Kubernetes 스타일의 API와 패턴을 사용한다. 가상 시스템, 네트워크, 로드 밸런싱 장치 및 VPC와 같은 지원 인프라와 Kubernetes 클러스터 구성은 모두 애플리케이션 개발자가 워크로드를 배포하고 관리하는 방식으로 정의된다. 이를 통해 다양한 인프라 환경에서 일관되고 반복 가능한 클러스터를 구축할 수 있다.
Contour
Contour는 Envoy edge 및 서비스 프록시에 대한 제어 평면을 제공하는 오픈 소스 Kubernetes 인그레스 컨트롤러입니다. Contour는 경량 프로파일을 유지하면서 동적 구성 업데이트 및 다중 팀 인그레스 위임을 즉시 지원한다.
CoreDNS
CoreDNS는 DNS 서버다. Go로 작성되었다. 유연성 때문에 여러 환경에서 사용할 수 있다. 코어DNS는 Apache License Version 2에 따라 라이센스가 부여되며 완전히 오픈 소스다.
CoreDNS는 쿠버네티스 클러스터의 DNS 역할을 수행할 수 있는, 유연하고 확장 가능한 DNS 서버이다. 쿠버네티스와 동일하게, CoreDNS 프로젝트도 CNCF가 관리한다.
사용자는 기존 디플로이먼트인 kube-dns를 교체하거나, 클러스터를 배포하고 업그레이드하는 kubeadm과 같은 툴을 사용하여 클러스터 안의 kube-dns 대신 CoreDNS를 사용할 수 있다.
Crashd
Crash Diagnostics (Crashd)은 자동 진단 및 문제 해결 등의 작업을 위해 인간 운영자가 쿠버네티스에서 실행되는 인프라에서 쉽게 상호 작용하고 정보를 수집할 수 있도록 도와주는 도구다.
Crashd 기능
- Crashd는 파이썬 방언인 Starlark 언어를 사용하여 자동화 기능을 표현하고 호출한다.
- Kubernetes를 실행하는 인프라와의 상호 작용을 쉽게 자동화
- SSH를 통해 시스템과 같은 컴퓨팅 리소스에서 정보 상호 작용 및 캡처
- 계산 노드에서 자동으로 명령을 실행하여 결과 캡처
- Kubernetes API 서버에서 개체 및 클러스터 로그 캡처
- 클러스터-API 관리 클러스터에서 데이터를 쉽게 추출
cri-tools
Kubelet Container Runtime Interface (CRI)를 위한 CLI 및 검증 도구다. cri-tools는 다음을 포함하는 Kubelet CRI를 위한 일련의 디버깅 및 검증 도구를 제공하는 것을 목표로 한다.
- crictl: kubelet CRI를 위한 CLI.
- critest: kubelet CRI용 검증 테스트 세트.
dex
Dex는 OpenID Connect를 사용해서 다른 애플리케이션에 인증을 드라이브하는 아이덴티티 서비스다.
Dex “커넥터(connector)”를 통해 다른 아이덴티티 프로바이더에 대한 포털 역할을 한다. 이를 통해 Dex는 LDAP 서버, SAML 공급자 또는 GitHub, Google 및 Active Directory와 같은 확립된 아이덴티티 프로바이더에 대한 인증을 연기(defer)할 수 있다. 클라이언트는 한 번 인증 로직을 작성하여 덱스와 대화한 다음, 덱스가 지정된 백엔드에 대한 프로토콜을 처리한다.
envoy
Envoy는 현대의 대규모 서비스 지향 아키텍처를 위해 설계된 L7 프록시 및 통신 버스다. 이 프로젝트는 다음과 같은 믿음에서 탄생했다.
네트워크는 애플리케이션에 투명해야 한다. 네트워크 및 애플리케이션 문제가 발생할 경우 문제의 원인을 쉽게 파악할 수 있어야 한다.
실제로, 앞서 언급한 목표를 달성하는 것은 매우 어렵다. Envoy는 고급 기능을 제공하여 이러한 작업을 시도한다.
etcd
etcd는 분산 시스템 또는 시스템 클러스터가 액세스해야 하는 데이터를 안정적으로 저장할 수 있는 방법을 제공하는 매우 일관된 분산 키 값 저장소다. 네트워크 파티션 중 리더 선택을 우아하게 처리하고 리더 노드에서도 시스템 장애를 허용할 수 있다.
간단한 웹 앱에서 쿠버네티스에 이르기까지 복잡한 애플리케이션은 데이터를 읽고 등에 쓸 수 있다.
애플리케이션은 데이터를 읽고 etcd에 쓸 수 있다. 간단한 사용 사례는 데이터베이스 연결 세부 정보 또는 기능 플래그를 키-값(key-value) 쌍으로 저장하는 것이다. 이러한 값은 앱이 변경 시 자체 재구성할 수 있도록 감시할 수 있다. 고급 용도는 데이터베이스 리더 선택을 구현하거나 작업자 클러스터에 분산 잠금을 수행하기 위해 etcd의 일관성 보증을 활용한다.
fluent-bit
Fluent Bit는 서로 다른 소스에서 메트릭 및 로그와 같은 데이터를 수집하고 이를 필터로 풍부하게 하여 여러 대상으로 전송할 수 있는 오픈 소스 로그 프로세서(Log Processor) 및 Forwarder다. 쿠버네티스와 같은 컨테이너형 환경에서 선호되는 선택이다.
Fluent Bit은 CPU 및 메모리 사용량이 적으나 높은 처리량을 염두에 두고 설계되었다. C 언어로 작성되었으며 입력, 필터 및 출력을 위한 70개 이상의 확장을 지원하는 플러그형 아키텍처가 있다.
플루언트 비트(Fluent Bit)는 플루언트 산하의 클라우드 네이티브 컴퓨팅 재단(Cloud Native Computing Foundation) 하위 프로젝트이다.
광범위한 커뮤니티의 일부이며 공급업체에 종속되지 않는다.
gangway
쿠버네티스 클러스터에 대해 OIDC를 통해 인증 흐름을 쉽게 사용하도록 설정하는 데 사용할 수 있는 애플리케이션이다. Kubernetes는 클러스터에 액세스하는 사용자를 식별하기 위한 방법으로 OpenID Connect Token을 지원한다. Gangway를 통해 사용자는 몇 가지 짧은 단계로 kubectl 구성을 직접 구성할 수 있다.
Grafana
Grafana를 사용하면 메트릭이 저장된 위치에 관계없이 메트릭스를 쿼리, 시각화, 경고 및 이해할 수 있다. 팀원들과 대시보드를 만들고, 탐색하고, 공유하고, 데이터 중심 문화를 조성한다.
지역사회의 신뢰와 사랑을 받고 있습니다.
Harbor
하버는 정책 및 역할 기반 액세스 제어로 아티팩트를 보호하고, 이미지를 스캔하고 취약점이 없도록 보장하며, 이미지를 신뢰할 수 있는 것으로 서명하는 오픈 소스 레지스트리다. CNCF 졸업 프로젝트인 Harbor는 컴플라이언스, 성능 및 상호 운용성을 제공하여 Kubernetes 및 Docker와 같은 클라우드 네이티브 컴퓨팅 플랫폼에서 아티팩트를 일관되고 안전하게 관리할 수 있도록 지원한다.
cert-manager
cert-manager는 클라우드 네이티브 환경에서 머신 아이덴티티를 자동화하는 선도적인 오픈 소스 소프트웨어다. 이를 통해 개발자는 Kubernetes 및 OpenShift 플랫폼에서 애플리케이션을 쉽게 보호할 수 있으며, 선택한 인증서 공급업체로부터 X.509 인증서 발급 및 갱신을 자동화할 수 있다.
k8s-sidecar
현재(2018년 4월) 콘피그 맵의 파일을 서비스에 전달하고 런타임 동안 파일을 업데이트하는 간단한 방법이 없다.
k8s-sidecar는 지정된 레이블이 있는 콘피그 맵을 수집하고, 포함된 파일을 로컬 폴더에 저장하기 위해 쿠버네티스 클러스터 내에서 실행되도록 설계된 도커 컨테이너다. 콘피그 맵 변경 후 지정된 URL로 HTTP 요청을 보낼 수도 있다. 주요 타깃은 사이드카 컨테이너로 실행되어 클러스터에서 정보를 애플리케이션에 제공하는 것이다. 포함된 Python 스크립트는 Kubernetes API 1.10에서 작동 중이다.
kapp
kapp(kap로 발음) CLI는 Kubernetes 사용자가 “Kubernetes 애플리케이션”(동일한 레이블을 가진 리소스 집합)과 함께 작업하여 리소스를 대량으로 관리하도록 권장한다. 리소스 분산, 레이블 지정, 배포 및 삭제에 초점을 맞춥니다. 헬름과 같은 도구와는 달리, Kapp은 Kubernetes 구성을 생성하는 툴에서 잘 작동하지만, YAML 템플릿과 패키지의 관리 범위를 벗어난 것을 고려한다.
kube-state-metrics
Kube-state-metrics는 Kubernetes API 서버를 청취하고 개체의 상태에 대한 메트릭을 생성하는 간단한 서비스다. 개별 Kubernetes 구성 요소의 상태가 아니라 배포, 노드, 포드 등 내부의 다양한 개체의 상태에 초점을 맞추고 있다.
Kube-state-metrics는 수정 없이 Kubernetes API 개체에서 메트릭을 생성하는 것이다. 이를 통해 kube-state-metrics에 의해 제공되는 기능이 쿠베르네츠 API 객체 자체와 동일한 수준의 안정성을 가질 수 있다. 반대로, 이것은 kubectl이 이해할 수 있는 메시지를 표시하기 위해 특정 휴리스틱을 적용하므로 특정 상황에서kube-state-metrics가 kubectl과 정확히 동일한 값을 보여주지 않을 수 있다는 것을 의미한다. Kube-state-metrics는 Kubernetes API에서 수정되지 않은 원시 데이터를 노출하며, 이러한 방식으로 사용자는 필요한 모든 데이터를 갖고 적합한 것으로 보이는 휴리스틱을 수행한다.
kube-vip
Kube-vip 프로젝트는 Kubernetes 클러스터 내외부에 고가용성 및 로드 밸런싱을 제공한다.
kube_rbac_proxy
kube-rbac-proxy는 단일 업스트림에 대한 작은 HTTP 프록시로, SubjectAccessReview를 사용하여 Kubernetes API에 대해 RBAC 인증을 수행할 수 있다.
네트워크 정책이 없는 Kubernetes 클러스터에서는 모든 Pod가 클러스터의 다른 모든 Pod에 요청을 수행할 수 있다. 이 프록시는 유효한 RBAC 인증 토큰 또는 클라이언트 TLS 인증서를 제공하는 Pods로만 요청을 제한하기 위해 개발되었다.
Kubernetes Autoscaler
다음 요소들로 구성되어 있습니다.
- Cluster Autoscaler – 모든 포드가 실행 장소를 가지며 불필요한 노드가 없도록 Kubernetes 클러스터의 크기를 자동으로 조정하는 구성 요소다. GCP, AWS 및 Azure와 함께 작동한다. 버전 1.0(GA)은 쿠버네츠 1.8과 함께 출시되었다.
- Vertical Pod Autoscaler – Kubernetes 클러스터에서 실행 중인 포드에서 요청한 CPU 및 메모리의 양을 자동으로 조정하는 구성 요소 집합이다. 현재 상태 – 베타.
- Addon Resizer – Kubernetes 클러스터의 노드 수에 따라 배포의 리소스 요청을 수정하는 Vertical Pod Autoscaler의 단순 버전입니다. 현재 상태 – 베타.
- Charts – 위의 구성 요소에 대해 Helam 차트 지원.
kind
kind는 도커 컨테이너 “node”를 사용하여 로컬 Kubernetes 클러스터를 실행하기 위한 도구다.
kind는 주로 Kubernetes 자체를 테스트하기 위해 설계되었지만, 지역 개발이나 CI를 위해 사용될 수 있다.
Prometheus
Prometheus는 원래 SoundCloud에서 제작된 오픈 소스 시스템 모니터링 및 알림 툴킷이다. 2012년에 시작된 이래, 많은 기업들과 조직들이 Prometheus를 채택하고 있으며, 이 프로젝트는 매우 활발한 개발자 및 사용자 커뮤니티를 가지고 있다. 이 제품은 이제 독립 실행형 오픈 소스 프로젝트로, 어떤 회사에서도 독립적으로 유지된다. 이를 강조하고 프로젝트의 거버넌스 구조를 명확히 하기 위해 프로메테우스는 2016년 쿠버네티스에 이어 두 번째 호스팅 프로젝트로 Cloud Native Computing Foundation에 가입했다.
Prometheus Pushgateway
Prometheus Pushgateway는 임시 및 배치 작업이 해당 메트릭을 Prometheus에 노출할 수 있도록 한다. 이러한 종류의 작업은 스크랩(scraped)될 만큼 충분히 오래 존재하지 않을 수 있으므로, 대신 측정 기준을 푸시 게이트웨이로 밀어넣을 수 있다. 그런 다음 Pushgateway는 이러한 메트릭을 Prometheus에 노출시킨다.
sonobuoy
Sonobuoy는 액세스 가능하고 비파괴적인 방식으로 구성 테스트를 실행하여 Kubernetes 클러스터의 상태를 보다 쉽게 이해할 수 있는 진단 도구다.
velero
Velero는 안전하게 백업 및 복원하고, 재해 복구를 수행하고, Kubernetes 클러스터 리소스 및 영구 볼륨을 마이그레이션하는 오픈 소스 도구다.