Kubernetes - monitoramento
O monitoramento é um dos principais componentes para o gerenciamento de grandes clusters. Para isso, temos uma série de ferramentas.
Monitorando com Prometheus
É um sistema de monitoramento e alerta. Ele foi construído no SoundCloud e teve o código aberto em 2012. Ele lida muito bem com os dados multidimensionais.
O Prometheus tem vários componentes para participar do monitoramento -
Prometheus - É o componente principal que retira e armazena dados.
Prometheus node explore - Obtém as matrizes de nível de host e as expõe ao Prometheus.
Ranch-eye - é um haproxy e expõe cAdvisor estatísticas para Prometheus.
Grafana - Visualização de dados.
InfuxDB - Banco de dados de série temporal usado especificamente para armazenar dados do fazendeiro.
Prom-ranch-exporter - É um aplicativo node.js simples, que ajuda a consultar o servidor Rancher sobre o status da pilha de serviço.
Agente Docker Sematext
É um agente moderno de métricas, eventos e coleta de logs que reconhece o Docker. Ele é executado como um pequeno contêiner em cada host Docker e coleta logs, métricas e eventos para todos os nós e contêineres do cluster. Ele descobre todos os contêineres (um pod pode conter vários contêineres), incluindo contêineres para serviços principais do Kubernetes, se os serviços principais forem implantados em contêineres Docker. Após sua implantação, todos os logs e métricas estão imediatamente disponíveis para uso.
Implantando agentes para nós
O Kubernetes fornece DeamonSets, o que garante que os pods sejam adicionados ao cluster.
Configurando o SemaText Docker Agent
Ele é configurado por meio de variáveis de ambiente.
Obtenha uma conta gratuita em apps.sematext.com , se ainda não tiver uma.
Crie um aplicativo SPM do tipo “Docker” para obter o token de aplicativo SPM. O aplicativo SPM manterá suas métricas e eventos de desempenho do Kubernetes.
Crie um aplicativo Logsene para obter o token de aplicativo Logsene. O aplicativo Logsene manterá seus registros do Kubernetes.
Edite os valores de LOGSENE_TOKEN e SPM_TOKEN na definição do DaemonSet conforme mostrado abaixo.
Pegue o último template sematext-agent-daemonset.yml (texto puro bruto) (também mostrado abaixo).
Guarde-o em algum lugar do disco.
Substitua os espaços reservados SPM_TOKEN e LOGSENE_TOKEN por seus tokens de aplicativo SPM e Logsene.
Criar objeto 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
Executando o Sematext Agent Docker com kubectl
$ kubectl create -f sematext-agent-daemonset.yml
daemonset "sematext-agent-daemonset" created
Registro do Kubernetes
Os registros de contêineres do Kubernetes não são muito diferentes dos registros de contêineres do Docker. No entanto, os usuários do Kubernetes precisam visualizar os registros dos pods implantados. Portanto, é muito útil ter informações específicas do Kubernetes disponíveis para pesquisa de registro, como -
- Namespace Kubernetes
- Nome do pod Kubernetes
- Nome do contêiner Kubernetes
- Nome da imagem do Docker
- UID do Kubernetes
Usando ELK Stack e LogSpout
A pilha ELK inclui Elasticsearch, Logstash e Kibana. Para coletar e encaminhar os logs para a plataforma de registro, usaremos o LogSpout (embora haja outras opções, como FluentD).
O código a seguir mostra como configurar o cluster ELK no Kubernetes e criar serviço para 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
Criando Controlador de Replicação
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: {}
URL Kibana
Para Kibana, fornecemos a URL Elasticsearch como uma variável de ambiente.
- name: KIBANA_ES_URL
value: "http://elasticsearch.elk.svc.cluster.local:9200"
- name: KUBERNETES_TRUST_CERT
value: "true"
A IU do Kibana estará acessível na porta do contêiner 5601 e na combinação de host / porta de nó correspondente. Quando você começar, não haverá nenhum dado no Kibana (o que é esperado, pois você não enviou nenhum dado).