Dev Services for Kubernetes
Dev Services for Kubernetesは、開発モードとテスト実行時にKubernetes APIサーバ(と必要なetcd)を自動的に起動します。そのため、手動で起動する必要はありません。アプリケーションは自動的に設定されます。
以下の testcontainers がサポートされています: kind 、 k3s 、apiのみ(デフォルト)
Dev Services for Kubernetesの有効化/無効化
Dev Services for Kubernetesは、以下の場合を除き、自動的に有効化されます。
-
quarkus.kubernetes-client.devservices.enabled
がfalse
に設定されている場合 -
api-server-url
が設定されている場合 -
有効な Kube 設定ファイルが見つかり、
quarkus.kubernetes-client.devservices.override-kubeconfig
がtrue
に設定されていない場合 -
quarkus-test-kubernetes-client
の依存関係を含めている場合
Dev Services for Kubernetesはコンテナエンジンに依存しています:サーバを起動するにはDockerまたはPodmanを使用します。 お使いの環境がそのようなコンテナエンジンをサポートしていない場合は、VMやクラウドなどで実行されているKubernetesクラスタを起動する必要があります。この場合、Kube configファイルまたは KubernetesClientBuildConfig クラスで利用可能なさまざまなプロパティを使用して、Kubernetesクラスタへのアクセスを設定できます。 |
共有クラスター
ほとんどの場合、アプリケーション間でクラスターを共有する必要があります。Dev Services for Kubernetesは、開発モードで実行されている複数のQuarkusアプリケーションが1つのクラスターを共有するための サービス検出 メカニズムを実装しています。
Dev Services for Kubernetesは、コンテナの識別に使用される quarkus-dev-service-kubernetes ラベルを付与してコンテナを起動します。
|
複数の(共有)クラスターが必要な場合は、 quarkus.kubernetes-client.devservices.service-name
設定プロパティを構成して、クラスター名を指定します。定義された名前のコンテナを検索し、見つからない場合は新しいコンテナを起動します。デフォルトのサービス名は kubernetes
です。
共有は、devモードではデフォルトで有効ですが、testモードでは無効です。共有は quarkus.kubernetes-client.devservices.shared=false
で無効にできます。
その他開発者向け情報
kubernetesクラスタ上でテストケースを開発したい場合(Dev Serviceによってテストコンテナとして起動)、以下の依存関係をpomファイルに追加します。
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-kubernetes-client</artifactId>
</dependency>
そして、Quarkusプロパティを設定してフレーバー、つまりkubeバージョンを選択します。
その後、この チートシート の詳細部分にあるように、多くのkubeタスクを実行できるFabric8 Kubernetes Clientオブジェクトを作成できるようになります。
package org.acme;
import org.junit.jupiter.api.Test;
import io.fabric8.kubernetes.api.model.*;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.quarkus.test.junit.QuarkusTest;
@QuarkusTest
public class ArgocdExtensionDevModeTest {
@Inject
private KubernetesClient client;
@Test
public void testCreatePod() {
client.resource(new PodBuilder()
.withMetadata(<METADATA_OBJECT>)
.withSpec(<SPEC_OBJECT>)
.build())
.inNamespace(<USER_NAMESPACE>)
.create();
}
クラスタの設定
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
api-only
は Kubernetes API サーバー (および必要な etcd) のみを起動します。Pod を起動できるフル機能の Kubernetes クラスターが必要な場合は、 k3s
または kind
を使用できます。
k3s
では、コンテナを privileged mode
で起動する必要があります。 kind
テスト コンテナは、podman rootless または rootfull の使用をサポートするようになりました。
api-version
が設定されていない場合は、与えられた flavor の最新版が使用されます。それ以外の場合は、 定められた flavor がサポート するバージョンと一致しなければなりません。
設定リファレンス
ビルド時に固定される設定プロパティ - その他の設定プロパティは実行時にオーバーライド可能です。
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: Show more |
ブーリアン |
|
The kubernetes api server version to use. If not set, Dev Services for Kubernetes will use the latest supported version of the given flavor. see https://github.com/dajudge/kindcontainer/blob/master/k8s-versions.json Environment variable: 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: Show more |
|
|
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: Show more |
ブーリアン |
|
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 Container sharing is only used in dev mode. Environment variable: Show more |
ブーリアン |
|
The value of the This property is used when you need multiple shared Kubernetes clusters. Environment variable: Show more |
string |
|
Environment variables that are passed to the container. Environment variable: Show more |
Map<String,String> |