Kubernetes-monitoring
Kubernetes-監視
監視は、大規模なクラスターを管理するための重要なコンポーネントの1つです。 このために、多くのツールがあります。
Prometheusを使用した監視
これは、監視および警告システムです。 SoundCloudで構築され、2012年にオープンソース化されました。 多次元データを非常にうまく処理します。
プロメテウスには、監視に参加するための複数のコンポーネントがあります-
- プロメテウス-データをスクラップして保存するコアコンポーネントです。
- Prometheusノードexplore -ホストレベルのマトリックスを取得し、それらをPrometheusに公開します。
- Ranch-eye - haproxy であり、 cAdvisor 統計をPrometheusに公開します。
- Grafana -データの視覚化。
- InfuxDB -牧場主からのデータを保存するために特に使用される時系列データベース。
- Prom-ranch-exporter -これは単純なnode.jsアプリケーションであり、Rancherサーバーにサービスのスタックのステータスを照会するのに役立ちます。
セマテキスト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にはデータがありません(データをプッシュしていないため、これは予想されます)。