- 필수 기능
- 시작하기
- Glossary
- 표준 속성
- Guides
- Agent
- 통합
- 개방형텔레메트리
- 개발자
- API
- Datadog Mobile App
- CoScreen
- Cloudcraft
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- APM
- Continuous Profiler
- 스팬 시각화
- 데이터 스트림 모니터링
- 데이터 작업 모니터링
- 디지털 경험
- 소프트웨어 제공
- 보안
- AI Observability
- 로그 관리
- 관리
이 섹션은 특정 사항을 문서화하고 쿠버네티스 컨트롤 플레인을 모니터링하기 위한 적절한 기본 설정 제공을 목표로 합니다. 이 기본 설정을 사용자에 맞게 변경하여 모든 Datadog 기능에 추가할 수 있습니다.
API 서버, Etcd, 컨트롤러 매니저 및 스케줄러에 대한 Datadog 통합을 통해 쿠버네티스 컨트롤 플레인의 네 가지 구성 요소에서 주요 메트릭을 수집할 수 있습니다.
다음 설정은 쿠버네티스 v1.18+
에서 테스트되었습니다.
API 서버 통합은 자동으로 설정되며 Datadog 에이전트가 이를 자동으로 검색합니다.
호스트에 있는 Etcd 인증서에 대한 읽기 권한을 제공함으로써, Datadog 에이전트 검사는 Etcd와 통신하고 Etcd 메트릭 수집을 시작할 수 있습니다.
사용자 지정 values.yaml
:
datadog:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
clusterName: <CLUSTER_NAME>
kubelet:
tlsVerify: false
ignoreAutoConfig:
- etcd
confd:
etcd.yaml: |-
ad_identifiers:
- etcd
instances:
- prometheus_url: https://%%host%%:2379/metrics
tls_ca_cert: /host/etc/kubernetes/pki/etcd/ca.crt
tls_cert: /host/etc/kubernetes/pki/etcd/server.crt
tls_private_key: /host/etc/kubernetes/pki/etcd/server.key
agents:
volumes:
- hostPath:
path: /etc/kubernetes/pki/etcd
name: etcd-certs
volumeMounts:
- name: etcd-certs
mountPath: /host/etc/kubernetes/pki/etcd
readOnly: true
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
operator: Exists
DatadogAgent 쿠버네티스 리소스:
kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
name: datadog
spec:
global:
credentials:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
clusterName: <CLUSTER_NAME>
kubelet:
tlsVerify: false
override:
clusterAgent:
image:
name: gcr.io/datadoghq/cluster-agent:latest
nodeAgent:
image:
name: gcr.io/datadoghq/agent:latest
extraConfd:
configMap:
name: datadog-checks
containers:
agent:
volumeMounts:
- name: etcd-certs
readOnly: true
mountPath: /host/etc/kubernetes/pki/etcd
- name: disable-etcd-autoconf
mountPath: /etc/datadog-agent/conf.d/etcd.d
volumes:
- name: etcd-certs
hostPath:
path: /etc/kubernetes/pki/etcd
- name: disable-etcd-autoconf
emptyDir: {}
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
---
apiVersion: v1
kind: ConfigMap
metadata:
name: datadog-checks
data:
etcd.yaml: |-
ad_identifiers:
- etcd
init_config:
instances:
- prometheus_url: https://%%host%%:2379/metrics
tls_ca_cert: /host/etc/kubernetes/pki/etcd/ca.crt
tls_cert: /host/etc/kubernetes/pki/etcd/server.crt
tls_private_key: /host/etc/kubernetes/pki/etcd/server.key
컨트롤러 매니저 및 스케줄러 인스턴스의 안전하지 않은 포트가 활성화된 경우, Datadog 에이전트는 추가 설정 없이 통합을 검색하고 메트릭 수집을 시작합니다.
안전한 포트를 사용하면 인증 및 권한 부여를 통해 컨트롤 플레인 구성 요소를 보호할 수 있습니다. Datadog 에이전트는 안전한 포트를 대상으로 컨트롤러 매니저 및 스케줄러 메트릭을 수집할 수 있습니다.
사용자 지정 values.yaml
:
datadog:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
clusterName: <CLUSTER_NAME>
kubelet:
tlsVerify: false
ignoreAutoConfig:
- etcd
- kube_scheduler
- kube_controller_manager
confd:
etcd.yaml: |-
ad_identifiers:
- etcd
instances:
- prometheus_url: https://%%host%%:2379/metrics
tls_ca_cert: /host/etc/kubernetes/pki/etcd/ca.crt
tls_cert: /host/etc/kubernetes/pki/etcd/server.crt
tls_private_key: /host/etc/kubernetes/pki/etcd/server.key
kube_scheduler.yaml: |-
ad_identifiers:
- kube-scheduler
instances:
- prometheus_url: https://%%host%%:10259/metrics
ssl_verify: false
bearer_token_auth: true
kube_controller_manager.yaml: |-
ad_identifiers:
- kube-controller-manager
instances:
- prometheus_url: https://%%host%%:10257/metrics
ssl_verify: false
bearer_token_auth: true
agents:
volumes:
- hostPath:
path: /etc/kubernetes/pki/etcd
name: etcd-certs
volumeMounts:
- name: etcd-certs
mountPath: /host/etc/kubernetes/pki/etcd
readOnly: true
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
operator: Exists
DatadogAgent 쿠버네티스 리소스:
kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
name: datadog
spec:
global:
credentials:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
clusterName: <CLUSTER_NAME>
kubelet:
tlsVerify: false
override:
clusterAgent:
image:
name: gcr.io/datadoghq/cluster-agent:latest
nodeAgent:
image:
name: gcr.io/datadoghq/agent:latest
extraConfd:
configMap:
name: datadog-checks
containers:
agent:
volumeMounts:
- name: etcd-certs
readOnly: true
mountPath: /host/etc/kubernetes/pki/etcd
- name: disable-etcd-autoconf
mountPath: /etc/datadog-agent/conf.d/etcd.d
- name: disable-scheduler-autoconf
mountPath: /etc/datadog-agent/conf.d/kube_scheduler.d
- name: disable-controller-manager-autoconf
mountPath: /etc/datadog-agent/conf.d/kube_controller_manager.d
volumes:
- name: etcd-certs
hostPath:
path: /etc/kubernetes/pki/etcd
- name: disable-etcd-autoconf
emptyDir: {}
- name: disable-scheduler-autoconf
emptyDir: {}
- name: disable-controller-manager-autoconf
emptyDir: {}
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
---
apiVersion: v1
kind: ConfigMap
metadata:
name: datadog-checks
data:
etcd.yaml: |-
ad_identifiers:
- etcd
init_config:
instances:
- prometheus_url: https://%%host%%:2379/metrics
tls_ca_cert: /host/etc/kubernetes/pki/etcd/ca.crt
tls_cert: /host/etc/kubernetes/pki/etcd/server.crt
tls_private_key: /host/etc/kubernetes/pki/etcd/server.key
kube_scheduler.yaml: |-
ad_identifiers:
- kube-scheduler
instances:
- prometheus_url: https://%%host%%:10259/metrics
ssl_verify: false
bearer_token_auth: true
kube_controller_manager.yaml: |-
ad_identifiers:
- kube-controller-manager
instances:
- prometheus_url: https://%%host%%:10257/metrics
ssl_verify: false
bearer_token_auth: true
참조:
kube_controller_manager
및 kube_scheduler
설정에 있는 ssl_verify
필드는 자체 서명 인증서를 사용할 때 false
로 설정해야 합니다.bind-address
옵션에 Datadog 에이전트가 도달할 수 있어야 합니다. 예:apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
controllerManager:
extraArgs:
bind-address: 0.0.0.0
scheduler:
extraArgs:
bind-address: 0.0.0.0
Amazon Elastic Kubernetes Service (EKS)에서는 API 서버 메트릭이 노출됩니다. 이를 통해 Datadog 에이전트는 Kubernetes API 서버 메트릭 검사 설명서에 나와있는 대로 엔드포인트 검사를 사용하여 API 서버 메트릭을 얻을 수 있습니다. 검사를 설정하려면 default/kubernetes
서비스에 다음 어노테이션을 추가하세요:
annotations:
ad.datadoghq.com/endpoints.check_names: '["kube_apiserver_metrics"]'
ad.datadoghq.com/endpoints.init_configs: '[{}]'
ad.datadoghq.com/endpoints.instances:
'[{ "prometheus_url": "https://%%host%%:%%port%%/metrics", "bearer_token_auth": "true" }]'
다른 컨트롤 플레인 구성 요소는 EKS에 노출되지 않으며 모니터링할 수 없습니다.
OpenShift 4에서는 엔드포인트 검사를 사용하여 모든 컨트롤 플레인 구성 요소를 모니터링할 수 있습니다.
API 서버는 default
네임스페이스의 kubernetes
서비스 뒤에서 실행됩니다. kube_apiserver_metrics
설정을 사용하여 서비스에 어노테이션을 추가하세요:
oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.check_names=["kube_apiserver_metrics"]'
oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.init_configs=[{}]'
oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.instances=[{"prometheus_url": "https://%%host%%:%%port%%/metrics", "bearer_token_auth": "true"}]'
oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.resolve=ip'
서비스가 고정된 포드 앞에 있으므로 마지막 어노테이션인 ad.datadoghq.com/endpoints.resolve
가 필요합니다. Datadog 클러스터 에이전트는 검사를 엔드포인트 검사로 예약하고 클러스터 검사 러너로 전송합니다. 실행 중인 노드는 다음과 같이 식별할 수 있습니다:
oc exec -it <datadog cluster agent pod> -n <datadog ns> -- agent clusterchecks
Etcd 서비스와 통신하는데 필요한 인증서는 openshift-monitoring
네임스페이스의 kube-etcd-client-certs
암호에서 찾을 수 있습니다. 인증서에 Datadog 에이전트 액세스 권한을 부여하려면 먼저 Datadog 에이전트가 실행 중인 동일한 네임스페이스에 인증서를 복사합니다:
oc get secret kube-etcd-client-certs -n openshift-monitoring -o yaml | sed 's/namespace: openshift-monitoring/namespace: <datadog agent namespace>/' | oc create -f -
아래와 같이 볼륨 및 볼륨 마운트를 추가하여 인증서를 클러스터 검사 러너 포드에 마운트해야 합니다.
참고: 에이전트와 함께 패키지된 Etcd 검사 자동 설정 파일을 비활성화하기 위한 마운트도 포함되어 있습니다.
...
clusterChecksRunner:
volumes:
- name: etcd-certs
secret:
secretName: kube-etcd-client-certs
- name: disable-etcd-autoconf
emptyDir: {}
volumeMounts:
- name: etcd-certs
mountPath: /host/etc/etcd
readOnly: true
- name: disable-etcd-autoconf
mountPath: /etc/datadog-agent/conf.d/etcd.d
kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
name: datadog
spec:
override:
clusterChecksRunner:
containers:
agent:
volumeMounts:
- name: etcd-certs
readOnly: true
mountPath: /etc/etcd-certs
- name: disable-etcd-autoconf
mountPath: /etc/datadog-agent/conf.d/etcd.d
volumes:
- name: etcd-certs
secret:
secretName: kube-etcd-client-certs
- name: disable-etcd-autoconf
emptyDir: {}
그런 다음 Etcd 앞에서 실행 중인 서비스에 어노테이션을 추가합니다:
oc annotate service etcd -n openshift-etcd 'ad.datadoghq.com/endpoints.check_names=["etcd"]'
oc annotate service etcd -n openshift-etcd 'ad.datadoghq.com/endpoints.init_configs=[{}]'
oc annotate service etcd -n openshift-etcd 'ad.datadoghq.com/endpoints.instances=[{"prometheus_url": "https://%%host%%:%%port%%/metrics", "tls_ca_cert": "/etc/etcd-certs/etcd-client-ca.crt", "tls_cert": "/etc/etcd-certs/etcd-client.crt",
"tls_private_key": "/etc/etcd-certs/etcd-client.key"}]'
oc annotate service etcd -n openshift-etcd 'ad.datadoghq.com/endpoints.resolve=ip'
Datadog 클러스터 에이전트는 검사를 엔드포인트 검사로 예약하고 클러스터 검사 러너로 전송합니다.
컨트롤러 매니저는 openshift-kube-controller-manager
네임스페이스의 kube-controller-manager
서비스 뒤에서 실행됩니다. 다음 설정을 사용하여 서비스에 어노테이션을 추가하세요:
oc annotate service kube-controller-manager -n openshift-kube-controller-manager 'ad.datadoghq.com/endpoints.check_names=["kube_controller_manager"]'
oc annotate service kube-controller-manager -n openshift-kube-controller-manager 'ad.datadoghq.com/endpoints.init_configs=[{}]'
oc annotate service kube-controller-manager -n openshift-kube-controller-manager 'ad.datadoghq.com/endpoints.instances=[{"prometheus_url": "https://%%host%%:%%port%%/metrics", "ssl_verify": "false", "bearer_token_auth": "true"}]'
oc annotate service kube-controller-manager -n openshift-kube-controller-manager 'ad.datadoghq.com/endpoints.resolve=ip'
Datadog 클러스터 에이전트는 검사를 엔드포인트 검사로 예약하고 클러스터 검사 러너로 전송합니다.
스케줄러는 openshift-kube-scheduler
네임스페이스의 scheduler
서비스 뒤에서 실행됩니다. 다음 설정을 사용하여 서비스에 어노테이션을 추가하세요:
oc annotate service scheduler -n openshift-kube-scheduler 'ad.datadoghq.com/endpoints.check_names=["kube_scheduler"]'
oc annotate service scheduler -n openshift-kube-scheduler 'ad.datadoghq.com/endpoints.init_configs=[{}]'
oc annotate service scheduler -n openshift-kube-scheduler 'ad.datadoghq.com/endpoints.instances=[{"prometheus_url": "https://%%host%%:%%port%%/metrics", "ssl_verify": "false", "bearer_token_auth": "true"}]'
oc annotate service scheduler -n openshift-kube-scheduler 'ad.datadoghq.com/endpoints.resolve=ip'
Datadog 클러스터 에이전트는 검사를 엔드포인트 검사로 예약하고 클러스터 검사 러너로 전송합니다.
OpenShift 3에서는 엔드포인트 검사를 사용하여 모든 컨트롤 플레인 구성 요소를 모니터링할 수 있습니다.
API 서버는 default
네임스페이스의 kubernetes
서비스 뒤에서 실행됩니다. kube_apiserver_metrics
설정으로 서비스에 어노테이션을 추가합니다:
oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.check_names=["kube_apiserver_metrics"]'
oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.init_configs=[{}]'
oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.instances=[{"prometheus_url": "https://%%host%%:%%port%%/metrics", "bearer_token_auth": "true"}]'
oc annotate service kubernetes -n default 'ad.datadoghq.com/endpoints.resolve=ip'
서비스가 고정된 포드 앞에 있으므로 마지막 어노테이션인 ad.datadoghq.com/endpoints.resolve
가 필요합니다. Datadog 클러스터 에이전트는 검사를 엔드포인트 검사로 예약하고 클러스터 검사 러너로 전송합니다. 실행 중인 노드는 다음과 같이 식별할 수 있습니다:
oc exec -it <datadog cluster agent pod> -n <datadog ns> -- agent clusterchecks
인증서는 호스트에 있는 Etcd 서비스와 통신하는 데 필요합니다. 아래와 같이 볼륨 및 볼륨 마운트를 추가하여 인증서를 클러스터 검사 러너 포드에 마운트해야 합니다.
참고: 에이전트와 함께 패키지된 Etcd 검사 자동 설정 파일을 비활성화하기 위한 마운트도 포함되어 있습니다.
...
clusterChecksRunner:
volumes:
- hostPath:
path: /etc/etcd
name: etcd-certs
- name: disable-etcd-autoconf
emptyDir: {}
volumeMounts:
- name: etcd-certs
mountPath: /host/etc/etcd
readOnly: true
- name: disable-etcd-autoconf
mountPath: /etc/datadog-agent/conf.d/etcd.d
kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
name: datadog
spec:
override:
clusterChecksRunner:
containers:
agent:
volumeMounts:
- name: etcd-certs
readOnly: true
mountPath: /host/etc/etcd
- name: disable-etcd-autoconf
mountPath: /etc/datadog-agent/conf.d/etcd.d
volumes:
- name: etcd-certs
hostPath:
path: /etc/etcd
- name: disable-etcd-autoconf
emptyDir: {}
이 서비스에서 직접 편집한 내용은 유지되지 않으므로 Etcd 서비스의 복사본을 만듭니다:
oc get service etcd -n kube-system -o yaml | sed 's/name: etcd/name: etcd-copy/' | oc create -f -
다음을 설정하여 복사된 서비스에 어노테이션을 추가할 수 있습니다:
oc annotate service etcd-copy -n openshift-etcd 'ad.datadoghq.com/endpoints.check_names=["etcd"]'
oc annotate service etcd-copy -n openshift-etcd 'ad.datadoghq.com/endpoints.init_configs=[{}]'
oc annotate service etcd-copy -n openshift-etcd 'ad.datadoghq.com/endpoints.instances=[{"prometheus_url": "https://%%host%%:%%port%%/metrics", "tls_ca_cert": "/host/etc/etcd/ca/ca.crt", "tls_cert": "/host/etc/etcd/server.crt",
"tls_private_key": "/host/etc/etcd/server.key"}]'
oc annotate service etcd-copy -n openshift-etcd 'ad.datadoghq.com/endpoints.resolve=ip'
Datadog 클러스터 에이전트는 검사를 엔드포인트 검사로 예약하고 클러스터 검사 러너로 전송합니다.
컨트롤러 매니저와 스케줄러는 kube-system
네임스페이스의 동일한 kube-controllers
서비스 뒤에서 실행됩니다. 서비스에서 직접 편집한 내용은 유지되지 않으므로 서비스의 복사본을 만듭니다:
oc get service kube-controllers -n kube-system -o yaml | sed 's/name: kube-controllers/name: kube-controllers-copy/' | oc create -f -
다음을 설정하여 복사된 서비스에 어노테이션을 추가합니다:
oc annotate service kube-controllers-copy -n kube-system 'ad.datadoghq.com/endpoints.check_names=["kube_controller_manager", "kube_scheduler"]'
oc annotate service kube-controllers-copy -n kube-system 'ad.datadoghq.com/endpoints.init_configs=[{}, {}]'
oc annotate service kube-controllers-copy -n kube-system 'ad.datadoghq.com/endpoints.instances=[{ "prometheus_url": "https://%%host%%:%%port%%/metrics",
"ssl_verify": "false", "bearer_token_auth": "true" }, { "prometheus_url": "https://%%host%%:%%port%%/metrics",
"ssl_verify": "false", "bearer_token_auth": "true" }]'
oc annotate service kube-controllers-copy -n kube-system 'ad.datadoghq.com/endpoints.resolve=ip'
Datadog 클러스터 에이전트는 검사를 엔드포인트 검사로 예약하고 클러스터 검사 러너로 전송합니다.
랜처 v2.5에서는 PushProx를 사용하여 컨트롤 플레인 메트릭 엔드포인트를 표시합니다. 이를 통해 Datadog 에이전트가 컨트롤 플레인 검사를 실행하고 메트릭을 수집할 수 있습니다.
pushprox
데몬셋은 rancher-monitoring
과 함께 배포되고 cattle-monitoring-system
네임스페이스에서 실행됩니다.kube_apiserver_metrics
검사를 설정하려면 default/kubernetes
서비스에 다음 어노테이션을 추가합니다:
annotations:
ad.datadoghq.com/endpoints.check_names: '["kube_apiserver_metrics"]'
ad.datadoghq.com/endpoints.init_configs: '[{}]'
ad.datadoghq.com/endpoints.instances: '[{ "prometheus_url": "https://%%host%%:%%port%%/metrics", "bearer_token_auth": "true" }]'
헤드리스 쿠버네티스 서비스를 추가하여 검사 설정을 정의함으로써 Datadog 에이전트는 pushprox
포드를 목표로 삼고 메트릭을 수집할 수 있습니다.
rancher-control-plane-services.yaml
을 적용합니다:
apiVersion: v1
kind: Service
metadata:
name: pushprox-kube-scheduler-datadog
namespace: cattle-monitoring-system
labels:
component: kube-scheduler
k8s-app: pushprox-kube-scheduler-client
annotations:
ad.datadoghq.com/endpoints.check_names: '["kube_scheduler"]'
ad.datadoghq.com/endpoints.init_configs: '[{}]'
ad.datadoghq.com/endpoints.instances: |
[
{
"prometheus_url": "http://%%host%%:10251/metrics"
}
]
spec:
clusterIP: None
selector:
k8s-app: pushprox-kube-scheduler-client
---
apiVersion: v1
kind: Service
metadata:
name: pushprox-kube-controller-manager-datadog
namespace: cattle-monitoring-system
labels:
component: kube-controller-manager
k8s-app: pushprox-kube-controller-manager-client
annotations:
ad.datadoghq.com/endpoints.check_names: '["kube_controller_manager"]'
ad.datadoghq.com/endpoints.init_configs: '[{}]'
ad.datadoghq.com/endpoints.instances: |
[
{
"prometheus_url": "http://%%host%%:10252/metrics"
}
]
spec:
clusterIP: None
selector:
k8s-app: pushprox-kube-controller-manager-client
---
apiVersion: v1
kind: Service
metadata:
name: pushprox-kube-etcd-datadog
namespace: cattle-monitoring-system
labels:
component: kube-etcd
k8s-app: pushprox-kube-etcd-client
annotations:
ad.datadoghq.com/endpoints.check_names: '["etcd"]'
ad.datadoghq.com/endpoints.init_configs: '[{}]'
ad.datadoghq.com/endpoints.instances: |
[
{
"prometheus_url": "https://%%host%%:2379/metrics",
"tls_ca_cert": "/host/opt/rke/etc/kubernetes/ssl/kube-ca.pem",
"tls_cert": "/host/opt/rke/etc/kubernetes/ssl/kube-etcd-<node-ip>.pem",
"tls_private_key": "/host/opt/rke/etc/kubernetes/ssl/kube-etcd-<node-ip>.pem"
}
]
spec:
clusterIP: None
selector:
k8s-app: pushprox-kube-etcd-client
다음 설정을 기반으로 매니페스트를 사용하여 Datadog 에이전트를 배포합니다:
사용자 지정 values.yaml
:
datadog:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
clusterName: <CLUSTER_NAME>
kubelet:
tlsVerify: false
agents:
volumes:
- hostPath:
path: /opt/rke/etc/kubernetes/ssl
name: etcd-certs
volumeMounts:
- name: etcd-certs
mountPath: /host/opt/rke/etc/kubernetes/ssl
readOnly: true
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/controlplane
operator: Exists
- effect: NoExecute
key: node-role.kubernetes.io/etcd
operator: Exists
DatadogAgent 쿠버네티스 리소스:
kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
name: datadog
spec:
features:
clusterChecks:
enabled: true
global:
credentials:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
clusterName: <CLUSTER_NAME>
kubelet:
tlsVerify: false
override:
nodeAgent:
containers:
agent:
volumeMounts:
- name: etcd-certs
readOnly: true
mountPath: /host/opt/rke/etc/kubernetes/ssl
volumes:
- name: etcd-certs
hostPath:
path: /opt/rke/etc/kubernetes/ssl
tolerations:
- key: node-role.kubernetes.io/controlplane
operator: Exists
effect: NoSchedule
- key: node-role.kubernetes.io/etcd
operator: Exists
effect: NoExecute
랜처-모니터링 차트를 사용하여 Datadog 에이전트를 설치합니다.
컨트롤 플레인 구성 요소는 쿠버네티스 외부의 도커에서 실행됩니다. 쿠버네티스 내에서 default
네임스페이스의 kubernetes
서비스는 컨트롤 플레인 노드 IP를 대상으로 합니다. 이는 $ kubectl describe endpoints kubernetes
를 실행하여 확인할 수 있습니다.
Datadog 클러스터 에이전트에서 관리되는 엔드포인트 검사를 사용하여 서비스에 어노테이션을 추가하고 API 서버, 컨트롤러 매니저 및 스케줄러를 모니터링할 수 있습니다:
kubectl edit service kubernetes
metadata:
annotations:
ad.datadoghq.com/endpoints.check_names: '["kube_apiserver_metrics", "kube_controller_manager", "kube_scheduler"]'
ad.datadoghq.com/endpoints.init_configs: '[{},{},{}]'
ad.datadoghq.com/endpoints.instances: '[{ "prometheus_url": "https://%%host%%:%%port%%/metrics", "bearer_token_auth": "true" },
{"prometheus_url": "http://%%host%%:10252/metrics"},
{"prometheus_url": "http://%%host%%:10251/metrics"}]'
Etcd는 쿠버네티스 외부 도커에서 실행되며, Etcd 서비스와 통신하려면 인증서가 필요합니다. Etcd 모니터링을 설정하려면 Etcd를 실행하는 컨트롤 플레인 노드에 대한 SSH 액세스가 필요합니다.
$ docker ps
를 통해 Etcd가 도커 컨테이너에서 실행 중인지 확인한 다음 $ docker inspect etcd
를 사용하여 실행 명령("Cmd"
)에 사용된 인증서의 위치와 마운트의 호스트 경로를 찾습니다검색할 명령의 세 가지 플래그는 다음과 같습니다:
--trusted-ca-file
--cert-file
--key-file
$ docker inspect etcd
출력에 있는 마운트 정보를 사용하여 Datadog Agent 설정에서 volumes
및 volumeMounts
를 설정합니다. 또한 Datadog 에이전트가 컨트롤 플레인 노드에서 실행될 수 있도록 허용 오차도 포함합니다.다음은 Helm 및 Datadog Operator를 사용하여 Datadog 에이전트를 설정하는 방법의 예입니다:
사용자 지정 values.yaml
:
datadog:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
clusterName: <CLUSTER_NAME>
kubelet:
tlsVerify: false
agents:
volumes:
- hostPath:
path: /opt/rke/etc/kubernetes/ssl
name: etcd-certs
volumeMounts:
- name: etcd-certs
mountPath: /host/opt/rke/etc/kubernetes/ssl
readOnly: true
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/controlplane
operator: Exists
- effect: NoExecute
key: node-role.kubernetes.io/etcd
operator: Exists
DatadogAgent 쿠버네티스 리소스:
kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
name: datadog
spec:
features:
clusterChecks:
enabled: true
global:
credentials:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
clusterName: <CLUSTER_NAME>
kubelet:
tlsVerify: false
override:
nodeAgent:
containers:
agent:
volumeMounts:
- name: etcd-certs
readOnly: true
mountPath: /host/opt/rke/etc/kubernetes/ssl
volumes:
- name: etcd-certs
hostPath:
path: /opt/rke/etc/kubernetes/ssl
tolerations:
- key: node-role.kubernetes.io/controlplane
operator: Exists
effect: NoSchedule
- key: node-role.kubernetes.io/etcd
operator: Exists
effect: NoExecute
<...>
부분을 변경합니다.apiVersion: apps/v1
kind: DaemonSet
metadata:
name: etcd-pause
spec:
selector:
matchLabels:
app: etcd-pause
updateStrategy:
type: RollingUpdate
template:
metadata:
annotations:
ad.datadoghq.com/pause.check_names: '["etcd"]'
ad.datadoghq.com/pause.init_configs: '[{}]'
ad.datadoghq.com/pause.instances: |
[{
"prometheus_url": "https://%%host%%:2379/metrics",
"tls_ca_cert": "/host/etc/kubernetes/ssl/kube-ca.pem",
"tls_cert": "/host/etc/kubernetes/ssl/kube-etcd-<...>.pem",
"tls_private_key": "/host/etc/kubernetes/ssl/kube-etcd-<...>-key.pem"
}]
labels:
app: etcd-pause
name: etcd-pause
spec:
hostNetwork: true
containers:
- name: pause
image: k8s.gcr.io/pause:3.0
tolerations:
- effect: NoExecute
key: node-role.kubernetes.io/etcd
operator: Exists
- effect: NoSchedule
key: node-role.kubernetes.io/controlplane
operator: Exists
데몬셋 및 검사 설정을 배포하려면 다음을 실행합니다.
kubectl apply -f <filename>
Azure Kubernetes Service(AKS) 및 Google Kubernetes Engine(GKE)과 같은 다른 매니지드 서비스에서는 사용자가 컨트롤 플레인 구성 요소에 액세스할 수 없습니다. 따라서 이러한 환경에서는 kube_apiserver
, kube_controller_manager
, kube_scheduler
, 또는 etcd
검사를 실행할 수 없습니다.