- Kubernetesオペレータ・ユーザーズ・ガイド
- TimesTen KubernetesオペレータによるTimesTenメトリックの公開
- TimesTenメトリックの自動公開
TimesTenメトリックの自動公開
TimesTenオペレータがTimesTenメトリックを自動的にエクスポートおよび公開する方法を示す例を順を追って説明します。この例では、TimesTenClassicオブジェクトを作成し、TimesTenオペレータが、TimesTenメトリックをPrometheusに自動的にエクスポートして公開するために必要なオブジェクトを自動的に作成する方法を確認します。
PrometheusオペレータがKubernetesクラスタにインストールされており、ネームスペースでPrometheusサーバーが実行されているとします。また、「TimesTenオペレータの概要」のステップに従ってTimesTenオペレータが起動しており、ネームスペースにTimesTenClassicまたはTimesTenScaleoutオブジェクトがデプロイされていないとします。
- TimesTenClassicオブジェクトを作成します。
vi samplepublish.yaml apiVersion: timesten.oracle.com/v2 kind: TimesTenClassic metadata: name: samplepublish spec: ttspec: storageClassName: oci storageSize: 250G image: container-registry.oracle.com/timesten/timesten:22.1.1.27.0 imagePullSecret: sekret prometheus: port: 6666
この例では、TimesTenエクスポータがリスニングするポートは
6666
です。 - TimesTenClassicオブジェクトをデプロイします。
kubectl create -f samplepublish.yaml
出力は次のようになります。timestenclassic.timesten.oracle.com/samplepublish created
- 数分待ってから、TimesTenClassicオブジェクトが
Normal
状態であることを確認します。kubectl get ttc samplepublish
出力は、次のようになります。
NAME STATE ACTIVE AGE samplepublish Normal samplepublish-0 3m56s
- TimesTenオペレータが各TimesTenポッドに
exporter
コンテナをプロビジョニングしたことを確認しますkubectl get pods
出力は、次のようになります。NAME READY STATUS RESTARTS AGE ... samplepublish-0 3/3 Running 0 7m33s samplepublish-1 3/3 Running 0 7m33s ...
TimesTenオペレータは、TimesTenポッドごとに
3
つのコンテナをプロビジョニングしました。これらのコンテナの1つは、TimesTenエクスポータを実行しているexporter
コンテナです。 - TimesTenオペレータが適切なKubernetes Secretを自動的に作成したことを確認します。
kubectl get secrets
出力は、次のようになります。
NAME TYPE DATA AGE ... samplepublish-metrics Opaque 1 15m samplepublish-metrics-client Opaque 3 15m
デフォルトでは、TimesTenメトリックはhttpsを使用して処理されます。その結果、TimesTenオペレータは、httpsに必要なOracleウォレット、証明書およびKubernetes Secretを自動的に作成しました。詳細は、「TimesTenメトリックのトランスポート・レイヤー・セキュリティ(相互TLS)証明書について」を参照してください。
- 適切なファイルが
samplepublish-metrics-client
Kubernetes Secretにあることを確認します。kubectl describe secret samplepublish-metrics-client
出力は、次のようになります。
Name: samplepublish-metrics-client Namespace: mynamespace Labels: <none> Annotations: <none> Type: Opaque Data ==== ca.crt: 1461 bytes client.crt: 1273 bytes client.key: 1675 bytes
TimesTenオペレータにより、
ca.crt
、client.crt
およびclient.key
ファイルが自動的に作成されました。samplepublish-metrics-client
Kubernetes Secretには、これらのファイルが保持されます。「TimesTenメトリックのトランスポート・レイヤー・セキュリティ(相互TLS)証明書について」を参照してください。 - TimesTenオペレータによって
samplepublish
PodMonitorオブジェクトが自動的に作成されたことを確認します。kubectl describe podmonitor samplepublish
出力は、次のようになります。
Name: samplepublish Namespace: mynamespace Labels: app=samplepublish database.timesten.oracle.com=samplepublish Annotations: <none> API Version: monitoring.coreos.com/v1 Kind: PodMonitor Metadata: Creation Timestamp: 2024-01-25T15:36:08Z Generation: 1 Owner References: API Version: timesten.oracle.com/v2 Block Owner Deletion: true Controller: true Kind: TimesTenClassic Name: samplepublish UID: d0f46bf7-b1d8-4499-876c-51410a469772 Resource Version: 284346942 UID: 5a61ec9e-df7d-4a98-be47-dce1e7c3d217 Spec: Namespace Selector: Pod Metrics Endpoints: Bearer Token Secret: Key: Interval: 15s Path: /metrics Port: exporter Scheme: https Tls Config: Ca: Secret: Key: ca.crt Name: samplepublish-metrics-client Cert: Secret: Key: client.crt Name: samplepublish-metrics-client Key Secret: Key: client.key Name: samplepublish-metrics-client Server Name: samplepublish.samplepublish.mynamespace.svc.cluster.local Selector: Match Labels: database.timesten.oracle.com: samplepublish Events: <none>
このPodMonitorオブジェクトの重要な情報を見てみましょう。
-
app=samplepublish
ラベルがあります。app=samplepublish
に一致するラベルの付いたポッドがある場合、Prometheusはそこからメトリックをスクレイプします。TimesTenポッドには、app=samplepublish
ラベルが含まれます。したがって、Prometheusはこれらのポッドからメトリックをスクレイプします。後で説明します。 - Prometheusは、
/metrics
エンドポイントからメトリックをスクレイプします。 - メトリックは、httpsを使用して公開されます。
- TimesTenオペレータは、
samplepublish-metrics
およびsamplepublish-metrics-client
Kubernetes SecretをPodMonitorオブジェクトに配置しました。これらのシークレットとその内容はPrometheusオペレータによって使用されます。
Prometheusオペレータは、このPodMonitorオブジェクトの情報に基づいてPrometheusサーバー構成ファイルを編集します。
-
- TimesTenオペレータが適切なKubernetesサービスを自動的に作成したことを確認します。
kubectl describe service samplepublish
出力は、次のようになります。
Name: samplepublish Namespace: mynamespace Labels: app=samplepublish Annotations: <none> Selector: app=samplepublish Type: ClusterIP IP Family Policy: SingleStack IP Families: IPv4 IP: None IPs: None Port: cs 6625/TCP TargetPort: 6625/TCP Endpoints: 10.244.0.120:6625,10.244.1.144:6625 Port: exporter 6666/TCP TargetPort: 6666/TCP Endpoints: 10.244.0.120:6666,10.244.1.144:6666 Session Affinity: None Events: <none>
TimesTenエクスポータは、ポート
6666
でリスニングします。 - ネームスペースでPrometheusサーバーが実行されていることを確認します。
kubectl get pods
出力は、次のようになります。
NAME READY STATUS RESTARTS AGE prometheus-sampleprometheusserver-0 2/2 Running 2 18d ...
prometheus-sampleprometheusserver-0
Prometheusサーバーがネームスペースで実行されています。 - Prometheusオペレータが
samplepublish
PodMonitorオブジェクトの情報に基づいてPrometheusサーバー構成ファイルを編集したことを確認します。kubectl exec prometheus-sampleprometheusserver-0 -c prometheus -- cat /etc/prometheus/config_out/prometheus.env.yaml
出力は、次のようになります。global: evaluation_interval: 30s scrape_interval: 30s external_labels: prometheus: mynamespace/sampleprometheusserver prometheus_replica: prometheus-sampleprometheusserver-0 scrape_configs: - job_name: podMonitor/mynamespace/samplepublish/0 honor_labels: false kubernetes_sd_configs: - role: pod namespaces: names: - mynamespace scrape_interval: 15s metrics_path: /metrics scheme: https tls_config: insecure_skip_verify: false ca_file: /etc/prometheus/certs/secret_mynamespace_samplepublish-metrics-client_ca.crt cert_file: /etc/prometheus/certs/secret_mynamespace_samplepublish-metrics-client_client.crt key_file: /etc/prometheus/certs/secret_mynamespace_samplepublish-metrics-client_client.key server_name: samplepublish.samplepublish.mynamespace.svc.cluster.local relabel_configs: - source_labels: - job target_label: __tmp_prometheus_job_name - action: drop source_labels: - __meta_kubernetes_pod_phase regex: (Failed|Succeeded) - action: keep source_labels: - __meta_kubernetes_pod_label_database_timesten_oracle_com - __meta_kubernetes_pod_labelpresent_database_timesten_oracle_com regex: (samplepublish);true - action: keep source_labels: - __meta_kubernetes_pod_container_port_name regex: exporter - source_labels: - __meta_kubernetes_namespace target_label: namespace - source_labels: - __meta_kubernetes_pod_container_name target_label: container - source_labels: - __meta_kubernetes_pod_name target_label: pod - target_label: job replacement: mynamespace/samplepublish - target_label: endpoint replacement: exporter - source_labels: - __address__ target_label: __tmp_hash modulus: 1 action: hashmod - source_labels: - __tmp_hash regex: 0 action: keep metric_relabel_configs: []
Prometheusには、TimesTenメトリックをスクレイプするために必要な情報があります。
- TimesTenメトリックの一部を確認します。ブラウザで、Prometheusサーバーに移動します。
- Prometheusサーバー検索バーに、TimesTenメトリックを入力します。たとえば、timesten_databasesです。次に、「Execute」をクリックします。
出力は、次のようになります。
timesten_databases{container="exporter", endpoint="exporter", instance="10.244.0.120:6666", instancename="instance1", job="mynamespace/samplepublish", namespace="mynamespace", pod="samplepublish-0"} 1 timesten_databases{container="exporter", endpoint="exporter", instance="10.244.1.144:6666", instancename="instance1", job="mynamespace/samplepublish", namespace="mynamespace", pod="samplepublish-1"} 1
メトリックの値1が示すとおり、
samplepublish-0
ポッドに1つのTimesTenデータベース、samplepublish-1
ポッドに1つのTimesTenデータベースがあります。 - Prometheusサーバー検索バーに、2番目のTimesTenメトリックを入力します。たとえば、timesten_database_loadedです。次に、「Execute」をクリックします。
出力は、次のようになります。
timesten_database_loaded{container="exporter", dsn="samplepublish", endpoint="exporter", instance="10.244.0.120:6666", instancename="instance1", job="mynamespace/samplepublish", namespace="mynamespace", pod="samplepublish-0"} 1 timesten_database_loaded{container="exporter", dsn="samplepublish", endpoint="exporter", instance="10.244.1.144:6666", instancename="instance1", job="mynamespace/samplepublish", namespace="mynamespace", pod="samplepublish-1"} 1
samplepublish-0
ポッドのsamplepublish
データベースとsamplepublish-1
ポッドのsamplepublish
データベースはどちらも、メトリックの値1が示すとおり、メモリーにロードされます。
- Prometheusサーバー検索バーに、TimesTenメトリックを入力します。たとえば、timesten_databasesです。次に、「Execute」をクリックします。
おめでとうございます。Prometheusによってメトリックが収集されるTimesTenデータベースが正常に作成されました。