このページでは、Connect Agent の指標を、GKE on VMware、GKE on AWS、その他の登録済み Kubernetes クラスタから、Cloud Monitoring にエクスポートする方法について説明します。
概要
GKE on VMware または GKE on AWS クラスタでは、Prometheus は指標を収集し、それらをクラスタ内でローカルに保存します。Google Cloud コンソールにクラスタを登録すると、クラスタ内に Connect Agent という Deployment が作成されます。Prometheus は、Google への接続エラーや開いている接続数など、Connect Agent から有用な指標を収集します。Cloud Monitoring でこれらの指標を利用できるようにするには、次のことを行う必要があります。
- Service を使用して Connect Agent を公開します。
prometheus-to-sd
をデプロイします。これは、Prometheus 指標を収集して Cloud Monitoring にエクスポートするシンプルなコンポーネントです。
その後、Google Cloud コンソールで Monitoring を使用するか、Service をポート転送して curl
を使用し、指標を表示します。
Connect Agent の名前空間用の変数を作成する
Connect Agent は通常、名前空間 gke-connect
で実行されます。
Connect Agent には hub.gke.io/project
というラベルがあります。HTTP サーバーはポート 8080 でリッスンします。
名前空間用の変数 AGENT_NS
を作成します。
AGENT_NS=$(kubectl get ns --kubeconfig KUBECONFIG -o jsonpath={.items..metadata.name} -l hub.gke.io/project=PROJECT_ID)
以下を置き換えます。
KUBECONFIG
: クラスタの kubeconfig ファイルPROJECT_ID
: プロジェクト ID
Connect Agent Deployment を公開する
次の構成を
gke-connect-agent.yaml
という名前の YAML ファイルにコピーします。この構成により、Connect Agent Deployment を公開する Servicegke-connect-agent
が作成されます。apiVersion: v1 kind: Service metadata: labels: app: gke-connect-agent name: gke-connect-agent spec: ports: - port: 8080 protocol: TCP targetPort: 8080 selector: app: gke-connect-agent type: ClusterIP
YAML ファイルをクラスタ内の Connect Agent の名前空間に適用します。
KUBECONFIG
はクラスタの kubeconfig ファイルのパスです。kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f gke-connect-agent.yaml
roles/monitoring.metricWriter
IAM ロールをフリートの Google サービス アカウントにバインドします。gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"
prometheus-to-sd
のデプロイ
次の構成を
prometheus-to-sd.yaml
という名前の YAML ファイルにコピーします。PROJECT_ID
はユーザーの Google Cloud プロジェクト ID です。この値の確認方法をご覧ください。CLUSTER_NAME
は、Connect Agent が稼働する Kubernetes クラスタです。REGION
は、クラスタが稼働する場所に地理的に近いロケーションです。クラスタが物理的に配置されている場所に地理的に近い Google Cloud ゾーンを選択します。ZONE
は、オンプレミスのデータセンターに近いロケーションです。トラフィック フローの場所に地理的に近い Google Cloud ゾーンを選択します。
この構成により、次の 2 つのリソースが作成されます。
- ConfigMap
prom-to-sd-user-config
。Deployment が使用するいくつかの変数を宣言します。 - Deployment
prometheus-to-monitoring
。単一の Pod でprometheus-to-sd
を実行します。
apiVersion: v1 kind: ConfigMap metadata: name: prom-to-sd-user-config data: # The project that the Connect Agent uses. Accepts ID or number. project: PROJECT_ID # A name for the cluster, which shows up in Cloud Monitoring. cluster_name: CLUSTER_NAME # cluster_location must be valid (e.g. us-west1-a); shows up in Cloud Monitoring. cluster_location: REGION # A zone name to report (e.g. us-central1-a). zone: ZONE --- apiVersion: apps/v1 kind: Deployment metadata: name: prometheus-to-monitoring spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 2 selector: matchLabels: run: prometheus-to-monitoring template: metadata: labels: run: prometheus-to-monitoring spec: containers: - args: - /monitor # 'gke-connect-agent' is the text that will show up in the Cloud Monitoring metric name. - --source=gke-connect-agent:http://gke-connect-agent:8080 - --monitored-resource-types=k8s - --stackdriver-prefix=custom.googleapis.com - --project-id=$(PROM_PROJECT) - --cluster-name=$(PROM_CLUSTER_NAME) - --cluster-location=$(PROM_CLUSTER_LOCATION) - --zone-override=$(PROM_ZONE) # A node name to report. This is a dummy value. - --node-name=MyGkeConnectAgent env: - name: GOOGLE_APPLICATION_CREDENTIALS value: /etc/creds/creds-gcp.json - name: PROM_PROJECT valueFrom: configMapKeyRef: name: prom-to-sd-user-config key: project - name: PROM_CLUSTER_NAME valueFrom: configMapKeyRef: name: prom-to-sd-user-config key: cluster_name - name: PROM_CLUSTER_LOCATION valueFrom: configMapKeyRef: name: prom-to-sd-user-config key: cluster_location - name: PROM_ZONE valueFrom: configMapKeyRef: name: prom-to-sd-user-config key: zone image: gcr.io/google-containers/prometheus-to-sd:v0.7.1 imagePullPolicy: IfNotPresent name: prometheus-to-monitoring resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /etc/creds name: creds-gcp readOnly: true restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 volumes: - name: creds-gcp secret: defaultMode: 420 # This secret is already set up for the Connect Agent. secretName: creds-gcp
YAML ファイルをクラスタ内の Connect Agent の名前空間に適用します。
KUBECONFIG
はクラスタの kubeconfig ファイルのパスです。kubectl apply -n ${AGENT_NS} --kubeconfig KUBECONFIG -f prometheus-to-sd.yaml
指標の表示
コンソール
Google Cloud コンソールの [Monitoring] ページに移動します。
左側のメニューで、[Metrics Explorer] をクリックします。
Connect Agent の指標には接頭辞
custom.googleapis.com/gke-connect-agent/
が付加されます。gke-connect-agent
は--source
引数で指定された文字列です。たとえば、custom.googleapis.com/gke-connect-agent/gkeconnect_dialer_connection_errors_total
となります。
cURL
シェルで、
kubectl
を使用してgke-connect-monitoring
Service をポート転送します。kubectl -n ${AGENT_NS} port-forward svc/gke-connect-monitoring 8080
別のシェルを開いて、次のコマンドを実行します。
curl localhost:8080/metrics
クリーンアップ
このトピックで作成したリソースを削除するには:
AGENT_NS=$(kubectl get ns --kubeconfig KUBECONFIG -o jsonpath={.items..metadata.name} -l hub.gke.io/project) kubectl delete configmap prom-to-sd-user-config --kubeconfig KUBECONFIG -n ${AGENT_NS} kubectl delete service gke-connect-agent --kubeconfig KUBECONFIG -n ${AGENT_NS} kubectl delete deployment prometheus-to-monitoring --kubeconfig KUBECONFIG -n ${AGENT_NS}