Red Hat で Java Platform Advocate として OpenJDK を担当している伊藤ちひろ(@chiroito)です。
この記事は、Red Hat Developerのブログ記事、Install the Cryostat Operator on Kubernetes from OperatorHub.io | Red Hat Developer の翻訳記事です。
Cryostat はコンテナネイティブのJVM アプリケーションで、JDK Flight Recorder(JFR) を使ってコンテナのプロファイリングと監視を行うためのセキュアな API を提供します。Cryostat 2.0では、他の機能として、OperatorHub.ioカタログの一部として提供されているCryostat Operatorが導入されました。Cryostat Operator を使用すると、既存のKubernetes環境に Cryostat を簡単にインストールできます。この記事では、インストール手順を説明します。
前提条件
開始するには、cert-managerがインストールされた実行中のKubernetesクラスタが必要です。この記事で説明する手順は、ローカルのMinikubeクラスターを想定しています。
ステップ1.Cryostat Operatorのインストール
まず、OperatorHub.io の Cryostat Operator ページに移動することから始めましょう。このページには、簡単な概要、前提条件、Kubernetesカスタムリソース定義(CRD)、Cryostatに関する詳細情報へのリンクなど、Cryostat Operatorに関する有用な情報が記載されています。install をクリックすると、クラスタに Operator をインストールするために必要な手順を示すポップアップウィンドウが表示されます。
指示に従って、OLM(Operator Lifecycle Manager)をインストールすることから始めます。
curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.19.1/install.sh | bash -s v0.19.1
コマンドが終了したら、インストールが正常に行われたことを確認します。
kubectl get pods -n olm
このような感じで出力されるはずです。
NAME READY STATUS RESTARTS AGE catalog-operator-84976fd7df-9w7ds 1/1 Running 0 44s olm-operator-844b4b88f8-pvrtn 1/1 Running 0 44s operatorhubio-catalog-5p87x 1/1 Running 0 43s packageserver-5b7c7b9c65-7nfwc 1/1 Running 0 42s packageserver-5b7c7b9c65-stvq8 1/1 Running 0 42s
次に、Cryostat Operator をインストールします。以下のコマンドで、my-cryostat-operator
名前空間にOperator が展開されます。
kubectl create -f https://operatorhub.io/install/cryostat-operator.yaml
注: このコマンドが何をするかについての詳細については、OperatorHub.ioを参照してください。
Cryostat Operatorが展開されるまで、20〜30秒かかります。以下のコマンドでその様子を確認できます。
kubectl get csv -n my-cryostat-operator -w
operator フェーズでSucceeded
と表示されたら、Cryostat のデプロイメントを作成する準備はほぼ完了です。しかし、最初にいくつかのネットワーク設定に取り組む必要があります。
ステップ2.Ingressルーティングを設定
Kubernetesでは、Cryostat Operatorがクラスタ外で利用できるようにするために、各サービスにIngressの設定が必要です。より詳細な説明は、Cryostat OperatorのドキュメントのNetwork Optionsのセクションを参照してください。(ドキュメントには、さまざまなニーズに対応するための他のCryostat設定オプションに関する情報も含まれています)。
必要なIngressの設定を行うには、クラスタ上でIngress Controllerが動作している必要があります。Kubernetesには様々なIngress Controllerがありますが、今回のデモではNGINX Ingress Controllerを使用します。
Kubernetesのドキュメントには、NGINX Ingress Controllerを使用してMinikube上でIngressをセットアップする方法についての有益な情報が記載されています。まず、Ingress Controllerを有効化します。
minikube addons enable ingress
次に、NGINX Ingress Controllerが期待通りに動作していることを確認します。
kubectl get pods -n ingress-nginx
以下のような出力になり、コントローラのPodがREADY
になったら、次のステップに進みます。
NAME READY STATUS RESTARTS AGE ingress-nginx-admission-create--1-9x9s4 0/1 Completed 0 37s ingress-nginx-admission-patch--1-76m8b 0/1 Completed 1 37s ingress-nginx-controller-5f66978484-ntw6f 1/1 Running 0 37s
ステップ3.Cryostatのデプロイメントを作成
Cryostat インスタンスをデプロイするには、Cryostat CRD を表す YAML ファイルを使用して、Cryostat オブジェクトを作成します。Cryostat Operator のドキュメントのNetwork Options セクションには、いくつかの小さな変更を行った後にこのデモで動作する Ingress の仕様の例があります。
まず、spec
の下にあるminimal
フィールドは、Cryostat CRD の必須フィールドなので追加し、false
に設定します。これにより、最小値でないCryostatのデプロイが確保されます。
次に、3つのIngress設定のannotations
フィールドで、proxy-read-timeout
と proxy-send-timeout
の値をデフォルトの60秒から3600秒に増やします。こうすることで、Cryostatが依存するウェブソケット接続が閉じられるのを防げます。
この例を修正すると、次のようになります。
<200b>apiVersion: operator.cryostat.io/v1beta1 kind: Cryostat metadata: name: cryostat-sample spec: minimal: false networkOptions: coreConfig: annotations: nginx.ingress.kubernetes.io/backend-protocol : HTTPS nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" ingressSpec: tls: - {} rules: - host: testing.cryostat http: paths: - path: / pathType: Prefix backend: service: name: cryostat-sample port: number: 8181 commandConfig: annotations: nginx.ingress.kubernetes.io/backend-protocol : HTTPS nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" ingressSpec: tls: - {} rules: - host: testing.cryostat-command http: paths: - path: / pathType: Prefix backend: service: name: cryostat-sample-command port: number: 9090 grafanaConfig: annotations: nginx.ingress.kubernetes.io/backend-protocol : HTTPS nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" ingressSpec: tls: - {} rules: - host: testing.cryostat-grafana http: paths: - path: / pathType: Prefix backend: service: name: cryostat-sample-grafana port: number: 3000
このコードをcryostat-sample.yaml
という名前のファイルにコピーしてください。このファイルの準備ができたら、それを使ってmy-cryostat-operator
ネームスペースに Cryostat のデプロイメントを作成できます。
kubectl apply -f cryostat-sample.yaml -n my-cryostat-operator
次に、デプロイの健全性を確認します。
kubectl get pods -n my-cryostat-operator -w
cryostat-sample
podを構成する3つのコンテナが全てREADY
になったら、次に進みます。
NAME READY STATUS RESTARTS AGE cryostat-operator-controller-manager-6f7fdb5c68-cwgc5 1/1 Running 0 85s cryostat-sample-d57dd74bb-5bqj9 0/3 Pending 0 0s cryostat-sample-d57dd74bb-5bqj9 0/3 Pending 0 0s cryostat-sample-d57dd74bb-5bqj9 0/3 ContainerCreating 0 0s cryostat-sample-d57dd74bb-5bqj9 2/3 Running 0 2s cryostat-sample-d57dd74bb-5bqj9 2/3 Running 0 11s cryostat-sample-d57dd74bb-5bqj9 3/3 Running 0 11s
ステップ4.CryostatのサービスURLをMinikubeにルーティング
次に、Ingressのコンフィギュレーションを入手します。
kubectl get ingress -n my-cryostat-operator
ここまでの設定が正しければ、このコマンドの出力は次のようになります。
NAME CLASS HOSTS ADDRESS PORTS AGE cryostat-sample nginx testing.cryostat localhost 80, 443 5m4s cryostat-sample-command nginx testing.cryostat-command localhost 80, 443 5m4s cryostat-sample-grafana nginx testing.cryostat-grafana localhost 80, 443 5m4s
Minikubeはローカルで動作しているため、ADDRESS
列のIPv4アドレスは実際には3つのサービスの内部アドレスとなります。クラスタ内のサービスが公開される外部アドレスを取得するには、次のコマンドを実行します。
minikube ip
注: この記事では、IP_ADDRESS
はこのコマンドが返すアドレスの代わりに使用します。
次のステップでは、コンピュータの/etc/hosts
ファイルを編集します。(このファイルのパスは、LinuxとmacOSの両方で有効です。Windowsの場合、パスはC: \Windows\System32\Drivers\hosts
です)このファイルを編集するには、管理者権限が必要です。
SUDO_EDITOR=gedit sudoedit /etc/hosts
ファイルの一番下に次の行を追加します。
{IP_ADDRESS} testing.cryostat testing.cryostat-command testing.cryostat-grafana
{IP_ADDRESS}
は、上記のminikube ip
コマンドを実行したときの結果であることを忘れないでください。
この追加により、Webブラウザは上記3つのホストのいずれかを含むHTTPS URLへのリクエストをMinikubeにルーティングするようになります。testing.cryostat-grafana
ホストは、現在の Cryostat インスタンスにリンクされている Grafana ダッシュボードにアクセスするためのものです。testing.cryostat-command
ホストは、非推奨のコマンドチャンネルから残されたものです。
hosts
ファイルを変更すると、https://testing.cryostatでCryostatのウェブクライアントUIにアクセスできるようになります。
結論
この記事で説明した手順でCryostat Operatorをインストールした後、次にできることがいくつかあります。Cryostat で動作するように Java アプリケーションを構成して、Web クライアントを使用して監視できます。また、Java アプリケーションを監視するためのカスタムターゲットを設定できます。Cryostat 2.0 のその他の便利な新機能については、Cryostat 2.0を発表:コンテナ用JDK Flight Recorder - 赤帽エンジニアブログ を参照してください。Cryostat で何ができるかについては、ContainerJFR入門: コンテナのためのJDK Flight Recorder - 赤帽エンジニアブログをご覧ください。