The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.
このページを編集

Dev Services for Kubernetes

Dev Services for Kubernetes は、開発モードとテスト実行時にKubernetes APIサーバー(と必要なetcd)を自動的に起動します。そのため、手動で起動する必要はありません。アプリケーションは自動的に設定されます。

以下の testcontainers がサポートされています: kindk3s 、または api only(デフォルト)

Dev Services for Kubernetes の有効化/無効化

Kubernetes Dev Service を使用するには、quarkus-kubernetes-client エクステンションをプロジェクトに追加するだけです。

コマンドラインインタフェース
quarkus extension add kubernetes-client
Maven
./mvnw quarkus:add-extension -Dextensions='kubernetes-client'
Gradle
./gradlew addExtension --extensions='kubernetes-client'

プロジェクトに quarkus-kubernetes-client エクステンションが設定されている場合、開発モードまたはテストモードで Kubernetes API サーバーが自動的に起動されます。しかし、潜在的な混乱を避けるため、dev service がいくつかのケースで無効になることがあります。

  • dev service が quarkus.kubernetes-client.devservices.enabledfalse に設定することで明示的に無効になっている場合

  • クライアントが quarkus.kubernetes-client.api-server-url を介して特定の API サーバーにアクセスするように明示的に設定されている場合

  • 有効な Kube config ファイルが見つかり、その設定がクライアントによって使用される場合。ただし、既存の設定を無視するために quarkus.kubernetes-client.devservices.override-kubeconfigtrue に設定することで、dev service を強制的に起動させることも可能です。

  • quarkus-test-kubernetes-client 依存関係を含める場合。おそらくそのケースでは、Fabric8 モックサーバーに依存するテストがあり、クラスターを起動する必要がないためです。

Dev Services for Kubernetes は、サーバーを起動するためにコンテナエンジン(Docker または Podman)に依存しています。お使いの環境がそのようなコンテナエンジンをサポートしていない場合は、VM、クラウドなどで実行されている Kubernetes クラスターを起動する必要があります。この場合、Kube config ファイルを使用するか、Kubernetes client configuration guide で指定されている利用可能な様々なプロパティーを使用して Kubernetes クラスターアクセスを設定できます。

共有クラスター

アプリケーションは、同じクラスターへのアクセスを共有する必要があることがよくあります。その目的のために、Dev Services for Kubernetes は、開発モードで実行されている複数の Quarkus アプリケーションが単一のクラスターを共有するための サービス検出 メカニズムを実装しています。

Dev Services for Kubernetes は、API サーバーコンテナーを quarkus-dev-service-kubernetes というラベルで起動し、これにより識別されます。

複数の(共有)クラスターが必要な場合は、quarkus.kubernetes-client.devservices.service-name 設定プロパティーに値を指定して、選択したアプリケーション間で共有されるクラスターの名前を指定できます。dev service サポートは、指定された名前の既存のコンテナーを探し、見つからない場合は新しいコンテナーを起動します。デフォルトのサービス名は kubernetes です。

共有は、開発モードではデフォルトで有効ですが、テストモードでは無効です。quarkus.kubernetes-client.devservices.shared=false で共有を無効にできます。

クラスターの設定

Dev Services for Kubernetes は、3 つの異なるフレーバーの Kubernetes クラスターを提供します。各フレーバーは異なる Kubernetes API バージョンをサポートしています。quarkus.kubernetes-client.devservices.flavor および quarkus.kubernetes-client.devservices.api-version プロパティーを使用して、フレーバーとバージョンを設定できます。

quarkus.kubernetes-client.devservices.flavor=api-only # k3s or kind
quarkus.kubernetes-client.devservices.api-version=1.22

quarkus.kubernetes-client.devservices.image-name プロパティーを使用すると、標準イメージ(kind、k3s、api-server)と互換性のあるカスタムイメージを設定することもできます。ただし、これはフレーバーおよび api-version プロパティーと一致している必要があります。

quarkus.kubernetes-client.devservices.flavor=api-only # k3s or kind
quarkus.kubernetes-client.devservices.api-version=1.24.1
quarkus.kubernetes-client.devservices.image-name=quay.io/giantswarm/kube-apiserver:v1.24.1

api-only は Kubernetes API サーバー(と必要な etcd)のみを起動します。Pod を起動できるフル機能の Kubernetes クラスターが必要な場合は、k3s または kind を使用できます。k3s は、コンテナーを privileged mode で起動する必要があります。kind テストコンテナーは、Podman のルートレスモードの使用もサポートするようになりました。

api-version が設定されていない場合は、与えられた flavor の最新バージョンが使用されます。それ以外の場合は、バージョンは 与えられた flavor がサポートするバージョン と一致する必要があります。

クラスターが設定されたら、通常通り簡単にアクセスできます。たとえば、テストでクライアントインスタンスを注入するなどです。

クラスターへのマニフェストの適用

Quarkus では、起動時に Kubernetes マニフェストをクラスター dev service に適用することが可能です。これは、アプリケーションがクラスター内に特定の名前空間や、アプリケーションが対話する特定のカスタムリソース定義などの特定のリソースが存在することを期待する場合に特に役立ちます。

quarkus.kubernetes-client.devservices.manifests プロパティーを使用して、適用するマニフェストを設定できます。このプロパティーは、アプリケーションの resources ディレクトリー内のファイルリストを受け入れます。

例として、example-namespace 名前空間が dev service に存在することを確認するには、/src/main/resources/kubernetes/namespace.yml ファイルを作成します。

apiVersion: v1
kind: Namespace
metadata:
  name: example-namespace

次に、application.properties に以下のプロパティーを追加します。

quarkus.kubernetes-client.devservices.manifests=kubernetes/namespace.yaml

複数のプロパティーを適用する場合、次のように適用できます。

quarkus.kubernetes-client.devservices.manifests=kubernetes/first_manifest.yaml,kubernetes/second_manifest.yaml

URL からマニフェストを適用することも可能です。したがって、以下の構文も利用できます。

quarkus.kubernetes-client.devservices.manifests=https://example.com/kubernetes/namespace.yaml
Quarkus は、リストで指定された順序でマニフェストを適用します。
Quarkus は、次のマニフェストに進む前に、デプロイメントなどのリソースが準備完了になるのを待ちます。すべての適用されたリソースは、アプリケーションが起動を完了するまでに準備が整っていることが保証されます。

Helm チャートのデプロイ

quarkus.kubernetes-client.devservices.manifests はマニフェストのみをサポートします。Helm チャートをデプロイしたい場合は、k3s flavor を使用して HelmChart マニフェストをデプロイできます。k3s で Helm チャートを使用する方法の詳細については、 こちら を参照してください。

設定リファレンス

ビルド時に固定される設定プロパティ - その他の設定プロパティは実行時にオーバーライド可能です。

Configuration property

タイプ

デフォルト

If Dev Services for Kubernetes should be used. (default to true)

If this is true and kubernetes client is not configured then a kubernetes cluster will be started and will be used.

Environment variable: QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_ENABLED

Show more

ブーリアン

true

The kubernetes api server version to use.

If not set, Dev Services for Kubernetes will use the latest supported version of the given flavor.

Environment variable: QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_API_VERSION

Show more

string

The kubernetes image to use.

If not set, Dev Services for Kubernetes will use default image for the specified api-version() for the given flavor().

Environment variable: QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_IMAGE_NAME

Show more

string

The flavor to use (kind, k3s or api-only).

If not set, Dev Services for Kubernetes will set it to: api-only.

Environment variable: QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_FLAVOR

Show more

kindkind (needs privileged docker), k3sk3s (needs privileged docker), api-onlyapi only

By default, if a kubeconfig is found, Dev Services for Kubernetes will not start. Set this to true to override the kubeconfig config.

Environment variable: QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_OVERRIDE_KUBECONFIG

Show more

ブーリアン

false

A list of manifest file paths that should be applied to the Kubernetes cluster Dev Service on startup. If not set, no manifests are applied.

Environment variable: QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_MANIFESTS

Show more

list of string

Indicates if the Kubernetes cluster managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Kubernetes starts a new container.

The discovery uses the quarkus-dev-service-kubernetes label. The value is configured using the service-name property.

Container sharing is only used in dev mode.

Environment variable: QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_SHARED

Show more

ブーリアン

true

The value of the quarkus-dev-service-kubernetes label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Kubernetes looks for a container with the quarkus-dev-service-kubernetes label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-kubernetes label set to the specified value.

This property is used when you need multiple shared Kubernetes clusters.

Environment variable: QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_SERVICE_NAME

Show more

string

kubernetes

Environment variables that are passed to the container.

Environment variable: QUARKUS_KUBERNETES_CLIENT_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_

Show more

Map<String,String>

関連コンテンツ