Kubernetes-monitoring

提供:Dev Guides
移動先:案内検索

Kubernetes-監視

監視は、大規模なクラスターを管理するための重要なコンポーネントの1つです。 このために、多くのツールがあります。

Prometheusを使用した監視

これは、監視および警告システムです。 SoundCloudで構築され、2012年にオープンソース化されました。 多次元データを非常にうまく処理します。

プロメテウスには、監視に参加するための複数のコンポーネントがあります-

  • プロメテウス-データをスクラップして保存するコアコンポーネントです。
  • Prometheusノードexplore -ホストレベルのマトリックスを取得し、それらをPrometheusに公開します。
  • Ranch-eye - haproxy であり、 cAdvisor 統計をPrometheusに公開します。
  • Grafana -データの視覚化。
  • InfuxDB -牧場主からのデータを保存するために特に使用される時系列データベース。
  • Prom-ranch-exporter -これは単純なnode.jsアプリケーションであり、Rancherサーバーにサービスのスタックのステータスを照会するのに役立ちます。

Prometheusによる監視

セマテキストDockerエージェント

これは、最新のDocker対応メトリック、イベント、およびログ収集エージェントです。 すべてのDockerホストで小さなコンテナーとして実行され、すべてのクラスターノードとコンテナーのログ、メトリック、およびイベントを収集します。 コアサービスがDockerコンテナーに展開されている場合、Kubernetesコアサービスのコンテナーを含むすべてのコンテナー(1つのポッドに複数のコンテナーが含まれる場合があります)を検出します。 展開後、すべてのログとメトリックはすぐに使用できます。

ノードへのエージェントの展開

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 Appトークンに置き換えます。

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 Agent Dockerを実行する

$ kubectl create -f sematext-agent-daemonset.yml
daemonset "sematext-agent-daemonset" created

Kubernetesログ

Kubernetesコンテナーのログは、Dockerコンテナーのログと大差ありません。 ただし、Kubernetesユーザーは、展開されたポッドのログを表示する必要があります。 したがって、次のようにログ検索にKubernetes固有の情報を利用できるようにすることは非常に便利です-

  • Kubernetes名前空間
  • Kubernetesポッド名
  • Kubernetesコンテナー名
  • Dockerイメージ名
  • Kubernetes UID

ELKスタックと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: {}

木花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にはデータがありません(データをプッシュしていないため、これは予想されます)。