新着:プロジェクトの最新情報についてはTwitterMastodonでご確認ください。

Helm

Helmによるインストール

cert-managerは、KubernetesとOpenShiftの両方へのインストール方法として、Helmチャートを提供しています。

cert-managerを他のHelmチャートのサブチャートとして埋め込まないでください。cert-managerはクラスタ内の名前空間を持たないリソースを管理するため、正確に一度だけインストールされるように注意する必要があります。

前提条件

cert-managerのインストール

1. Helmリポジトリの追加

このリポジトリは、cert-managerチャートの唯一のサポート対象ソースです。インターネット上には他のミラーやコピーがありますが、それらは完全に非公式であり、セキュリティリスクとなる可能性があります。

特に、「Helm stableリポジトリ」バージョンのcert-managerは非推奨であり、使用しないでください。

helm repo add jetstack https://charts.jetstack.io --force-update

2. cert-managerのインストール

cert-manager Helmチャートをインストールするには、以下に説明されているようにHelm installコマンドを使用します。

helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.16.1 \
--set crds.enabled=true

3. (オプション) インストールの検証

cert-managerをデプロイしたら、インストールを確認できます。

インストールオプション

使用可能なHelm値の完全なリストは、cert-managerのArtifactHubページにあります。

以下の例は、デフォルトのHelm値を上書きすることでcert-managerのインストールを調整する方法を示しています。

helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.16.1 \
--set crds.enabled=true \
--set prometheus.enabled=false \ # Example: disabling prometheus using a Helm parameter
--set webhook.timeoutSeconds=4 # Example: changing the webhook timeout using a Helm parameter

サブチャートとしてのcert-managerのインストール

cert-managerをサブチャートとして設定した場合、cert-managerのすべてのコンポーネントは、インストールしているHelmリリースの名前空間にインストールされます。

cert-managerをインストールする名前空間を、包括的なチャートの名前空間とは異なる空間に指定したい場合があります。

これは、Helmとサブチャートに関する既知の問題であり、サブチャートの名前空間を指定できず、ほとんどの公開チャートでは値ファイルを使用して名前空間を設定することで解決されていますが、メンテナンス担当者によってチャートに追加する必要があります。

この機能は、cert-managerチャートで利用可能になり、値ファイルまたは--setスイッチのいずれかで設定できます。

使用例

以下は、cert-managerをサブチャートとして含むChart.yamlの例です。

apiVersion: v2
name: example_chart
description: A Helm chart with cert-manager as subchart
type: application
version: 0.1.0
appVersion: "0.1.0"
dependencies:
- name: cert-manager
version: v1.16.1
repository: https://charts.jetstack.io
alias: cert-manager
condition: cert-manager.enabled

名前空間は2つの方法で上書きできます。

  1. Values.yamlファイル内
cert-manager: #defined by either the name or alias of your dependency in Chart.yaml
namespace: security
  1. --set を使用したhelmコマンド内
helm install example example_chart \
--namespace example \
--create-namespace \
--set cert-manager.namespace=security

上記の例では、cert-managerはsecurity名前空間にインストールされます。

出力YAML

Helmを使用してcert-managerを直接インストールする代わりに、Helm templateコマンドを使用して静的YAMLマニフェストを作成できます。この静的マニフェストは、デフォルトのHelm値を上書きするフラグを提供することで調整できます。

helm template \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v1.16.1 \
--set crds.enabled=true \
# --set prometheus.enabled=false \ # Example: disabling prometheus using a Helm parameter
> cert-manager.custom.yaml

ℹ️ helm templateコマンドはNamespaceリソースを出力せず、--create-namespaceフラグを無視します。生成されたYAMLをデプロイする名前空間が存在することを確認する必要があります。

アンインストール

警告: cert-managerをアンインストールするには、常にインストールと同じプロセスを逆順で使用してください。静的マニフェストまたはHelmからcert-managerをインストールしたかどうかにかかわらず、以下のプロセスから逸脱すると、問題が発生し、状態が壊れる可能性があります。この発生を防ぐために、アンインストール時には以下の手順に従ってください。

続行する前に、ユーザーによって作成されたすべてのcert-managerリソースが削除されていることを確認してください。次のコマンドを使用して、既存のリソースを確認できます。

kubectl get Issuers,ClusterIssuers,Certificates,CertificateRequests,Orders,Challenges --all-namespaces

これらのすべてのリソースが削除されたら、インストール方法に応じて手順を使用してcert-managerをアンインストールする準備が整います。

Helmによるアンインストール

helmインストールからのcert-managerのアンインストールは、インストールプロセスを逆順に実行し、kubectlhelmの両方で削除コマンドを実行することです。

$ helm uninstall cert-manager -n cert-manager
These resources were kept due to the resource policy:
[CustomResourceDefinition] certificaterequests.cert-manager.io
[CustomResourceDefinition] certificates.cert-manager.io
[CustomResourceDefinition] challenges.acme.cert-manager.io
[CustomResourceDefinition] clusterissuers.cert-manager.io
[CustomResourceDefinition] issuers.cert-manager.io
[CustomResourceDefinition] orders.acme.cert-manager.io
release "cert-manager" uninstalled

出力に示されているように、IssuersClusterIssuersCertificatesCertificateRequestsOrders、およびChallengesCustomResourceDefinitionは、Helmアンインストールコマンドによって削除されません。これは、CustomResourceDefinitionを削除すると、それらのリソースのすべてのインスタンスも削除されるため、データ損失を防ぐためです。

☢️ これにより、クラスタからすべてのIssuersClusterIssuersCertificatesCertificateRequestsOrders、およびChallengesリソースが削除されます。

kubectl delete crd \
issuers.cert-manager.io \
clusterissuers.cert-manager.io \
certificates.cert-manager.io \
certificaterequests.cert-manager.io \
orders.acme.cert-manager.io \
challenges.acme.cert-manager.io

⚠️ v1.15.0 より前の cert-manager バージョンでは、アンインストール時に CustomResourceDefinition が保持されず、すべての IssuerClusterIssuerCertificateCertificateRequestOrder、および Challenge リソースがクラスタから削除されます。v1.15.0 より前のバージョンを使用している場合は、cert-manager のアンインストール前に cert-manager リソースのバックアップを作成してください。v1.15.0 にアップグレードしてからアンインストールすることもできます。

名前空間が終了状態のままになる

cert-manager のインストールを先に削除せずに名前空間の削除がマークされている場合、名前空間は終了状態のままになる可能性があります。これは通常、APIService リソースはまだ存在するが、webhook が実行されていないため到達不能になっていることが原因です。これを解決するには、上記の commands が正しく実行されていることを確認し、問題が解決しない場合は、以下を実行してください。

kubectl delete apiservice v1beta1.webhook.cert-manager.io

Flux Helm コントローラーの使用

cert-manager Helm チャートは、Flux Helm コントローラーによってインストールおよびアップグレードできます。

📖 詳細はこちらをご覧ください。 継続的デプロイメント:Flux Helm コントローラーの使用