Kubernetes-모니터링
모니터링은 대규모 클러스터 관리를위한 핵심 구성 요소 중 하나입니다. 이를 위해 많은 도구가 있습니다.
Prometheus로 모니터링
모니터링 및 경고 시스템입니다. SoundCloud에서 구축되었으며 2012 년에 오픈 소스되었습니다. 다차원 데이터를 매우 잘 처리합니다.
Prometheus는 모니터링에 참여할 여러 구성 요소를 가지고 있습니다.
Prometheus − 데이터를 스크랩하고 저장하는 핵심 구성 요소입니다.
Prometheus node explore − 호스트 수준 매트릭스를 가져 와서 Prometheus에 노출합니다.
Ranch-eye −는 haproxy 및 노출 cAdvisor Prometheus에 대한 통계.
Grafana − 데이터 시각화.
InfuxDB − 목장주로부터 데이터를 저장하는 데 특별히 사용되는 시계열 데이터베이스.
Prom-ranch-exporter − 서비스 스택 상태를 Rancher 서버에 쿼리하는 데 도움이되는 간단한 node.js 애플리케이션입니다.
Sematext Docker 에이전트
최신 Docker 인식 메트릭, 이벤트 및 로그 수집 에이전트입니다. 모든 Docker 호스트에서 작은 컨테이너로 실행되며 모든 클러스터 노드 및 컨테이너에 대한 로그, 메트릭 및 이벤트를 수집합니다. 핵심 서비스가 Docker 컨테이너에 배포 된 경우 Kubernetes 핵심 서비스 용 컨테이너를 포함하여 모든 컨테이너 (하나의 포드에 여러 컨테이너가 포함될 수 있음)를 검색합니다. 배포 후 모든 로그와 지표를 즉시 사용할 수 있습니다.
노드에 에이전트 배포
Kubernetes는 클러스터에 포드가 추가되도록하는 DeamonSets를 제공합니다.
SemaText Docker 에이전트 구성
환경 변수를 통해 구성됩니다.
아직 계정이 없다면 apps.sematext.com 에서 무료 계정을 만드 십시오 .
"Docker"유형의 SPM 앱을 만들어 SPM 앱 토큰을 얻습니다. SPM 앱은 Kubernetes 성능 메트릭 및 이벤트를 보유합니다.
Logsene 앱을 생성하여 Logsene 앱 토큰을 얻습니다. Logsene 앱은 Kubernetes 로그를 보유합니다.
아래와 같이 DaemonSet 정의에서 LOGSENE_TOKEN 및 SPM_TOKEN의 값을 편집합니다.
최신 sematext-agent-daemonset.yml (원시 일반 텍스트) 템플릿 (아래에도 표시됨)을 가져옵니다.
디스크 어딘가에 저장하십시오.
SPM_TOKEN 및 LOGSENE_TOKEN 자리 표시자를 SPM 및 Logsene 앱 토큰으로 바꿉니다.
DaemonSet 개체 만들기
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: sematext-agent
spec:
template:
metadata:
labels:
app: sematext-agent
spec:
selector: {}
dnsPolicy: "ClusterFirst"
restartPolicy: "Always"
containers:
- name: sematext-agent
image: sematext/sematext-agent-docker:latest
imagePullPolicy: "Always"
env:
- name: SPM_TOKEN
value: "REPLACE THIS WITH YOUR SPM TOKEN"
- name: LOGSENE_TOKEN
value: "REPLACE THIS WITH YOUR LOGSENE TOKEN"
- name: KUBERNETES
value: "1"
volumeMounts:
- mountPath: /var/run/docker.sock
name: docker-sock
- mountPath: /etc/localtime
name: localtime
volumes:
- name: docker-sock
hostPath:
path: /var/run/docker.sock
- name: localtime
hostPath:
path: /etc/localtime
kubectl을 사용하여 Sematext 에이전트 Docker 실행
$ kubectl create -f sematext-agent-daemonset.yml
daemonset "sematext-agent-daemonset" created
Kubernetes 로그
Kubernetes 컨테이너의 로그는 Docker 컨테이너 로그와 크게 다르지 않습니다. 그러나 Kubernetes 사용자는 배치 된 팟 (Pod)에 대한 로그를 확인해야합니다. 따라서 다음과 같은 로그 검색에 사용할 수있는 Kubernetes 관련 정보를 갖는 것이 매우 유용합니다.
- Kubernetes 네임 스페이스
- Kubernetes 포드 이름
- Kubernetes 컨테이너 이름
- Docker 이미지 이름
- Kubernetes UID
ELK Stack 및 LogSpout 사용
ELK 스택에는 Elasticsearch, Logstash 및 Kibana가 포함됩니다. 로그를 수집하고 로깅 플랫폼으로 전달하기 위해 LogSpout을 사용합니다 (FluentD와 같은 다른 옵션도 있음).
다음 코드는 Kubernetes에서 ELK 클러스터를 설정하고 ElasticSearch를위한 서비스를 생성하는 방법을 보여줍니다.
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
namespace: elk
labels:
component: elasticsearch
spec:
type: LoadBalancer
selector:
component: elasticsearch
ports:
- name: http
port: 9200
protocol: TCP
- name: transport
port: 9300
protocol: TCP
복제 컨트롤러 생성
apiVersion: v1
kind: ReplicationController
metadata:
name: es
namespace: elk
labels:
component: elasticsearch
spec:
replicas: 1
template:
metadata:
labels:
component: elasticsearch
spec:
serviceAccount: elasticsearch
containers:
- name: es
securityContext:
capabilities:
add:
- IPC_LOCK
image: quay.io/pires/docker-elasticsearch-kubernetes:1.7.1-4
env:
- name: KUBERNETES_CA_CERTIFICATE_FILE
value: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: "CLUSTER_NAME"
value: "myesdb"
- name: "DISCOVERY_SERVICE"
value: "elasticsearch"
- name: NODE_MASTER
value: "true"
- name: NODE_DATA
value: "true"
- name: HTTP_ENABLE
value: "true"
ports:
- containerPort: 9200
name: http
protocol: TCP
- containerPort: 9300
volumeMounts:
- mountPath: /data
name: storage
volumes:
- name: storage
emptyDir: {}
Kibana URL
Kibana의 경우 Elasticsearch URL을 환경 변수로 제공합니다.
- name: KIBANA_ES_URL
value: "http://elasticsearch.elk.svc.cluster.local:9200"
- name: KUBERNETES_TRUST_CERT
value: "true"
Kibana UI는 컨테이너 포트 5601 및 해당 호스트 / 노드 포트 조합에서 도달 할 수 있습니다. 시작할 때 Kibana에는 데이터가 없습니다 (데이터를 푸시하지 않았으므로 예상 됨).