kubectl apply
kubectlと静的マニフェストを使用してcert-managerをインストールする方法を学習します。
前提条件
-
kubectl
バージョン>= v1.19.0
をインストールしてください。 (そうでない場合、CRDの更新に問題が発生します - v0.16 アップグレードノートを参照してください) - サポートされているバージョンのKubernetesまたはOpenShiftをインストールします。サポートされているKubernetes/OpenShiftのバージョン
- クラウドプラットフォームでKubernetesを使用している場合は、Kubernetesプラットフォームプロバイダーとの互換性をお読みください。
手順
1. cert-managerリリースマニフェストからのインストール
すべてのリソース(CustomResourceDefinitionsとcert-manager、cainjector、webhookコンポーネント)は、単一のYAMLマニフェストファイルに含まれています。
すべてのcert-managerコンポーネントをインストールします。
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.1/cert-manager.yaml
デフォルトでは、cert-managerはcert-manager
名前空間にインストールされます。異なる名前空間でcert-managerを実行することもできますが、デプロイマニフェストを変更する必要があります。
cert-managerをインストールしたら、cert-manager
名前空間で実行中のポッドを確認して、正しくデプロイされていることを確認できます。
$ kubectl get pods --namespace cert-managerNAME READY STATUS RESTARTS AGEcert-manager-5c6866597-zw7kh 1/1 Running 0 2mcert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2mcert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m
cert-manager
、cert-manager-cainjector
、およびcert-manager-webhook
ポッドが実行中
状態になっているはずです。webhookは、他のコンポーネントよりもプロビジョニングに少し時間がかかる場合があります。
問題が発生した場合は、まずFAQを確認してください。
2. (オプション) cert-manager webhookの準備完了を待つ
webhookコンポーネントの起動には時間がかかる場合があり、Kubernetes APIサーバーがwebhookの証明書を信頼するようになります。
まず、cmctlがインストールされていることを確認してください。
cmctlは、Kubernetesクラスタに対してドライランの証明書作成チェックを実行します。成功すると、The cert-manager API is ready
というメッセージが表示されます。
$ cmctl check apiThe cert-manager API is ready
このコマンドを使用して、チェックが成功するまで待機することもできます。cert-managerのインストールと同時にコマンドを実行した際の出力例を次に示します。
$ cmctl check api --wait=2mNot ready: the cert-manager CRDs are not yet installed on the Kubernetes API serverNot ready: the cert-manager CRDs are not yet installed on the Kubernetes API serverNot ready: the cert-manager webhook deployment is not ready yetNot ready: the cert-manager webhook deployment is not ready yetNot ready: the cert-manager webhook deployment is not ready yetNot ready: the cert-manager webhook deployment is not ready yetThe cert-manager API is ready
2. (オプション) インストールのエンドツーエンド検証
インストールを完全に検証する最良の方法は、テスト証明書を発行することです。そのため、テスト名前空間に自己署名発行者と証明書リソースを作成します。
cat <<EOF > test-resources.yamlapiVersion: v1kind: Namespacemetadata:name: cert-manager-test---apiVersion: cert-manager.io/v1kind: Issuermetadata:name: test-selfsignednamespace: cert-manager-testspec:selfSigned: {}---apiVersion: cert-manager.io/v1kind: Certificatemetadata:name: selfsigned-certnamespace: cert-manager-testspec:dnsNames:- example.comsecretName: selfsigned-cert-tlsissuerRef:name: test-selfsignedEOF
テストリソースを作成します。
kubectl apply -f test-resources.yaml
新しく作成された証明書のステータスを確認します。cert-managerが証明書要求を処理するまで、数秒待つ必要がある場合があります。
$ kubectl describe certificate -n cert-manager-test...Spec:Common Name: example.comIssuer Ref:Name: test-selfsignedSecret Name: selfsigned-cert-tlsStatus:Conditions:Last Transition Time: 2019-01-29T17:34:30ZMessage: Certificate is up to date and has not expiredReason: ReadyStatus: TrueType: ReadyNot After: 2019-04-29T17:34:29ZEvents:Type Reason Age From Message---- ------ ---- ---- -------Normal CertIssued 4s cert-manager Certificate issued successfully
テストリソースをクリーンアップします。
kubectl delete -f test-resources.yaml
上記のすべてのステップがエラーなく完了した場合、準備完了です!
アンインストール
警告: cert-managerをアンインストールするには、常にインストールと同じプロセスを逆順で使用してください。cert-managerが静的マニフェストまたはHelmからインストールされているかにかかわらず、次のプロセスから逸脱すると、問題が発生し、状態が壊れる可能性があります。これを防ぐために、アンインストールする際には以下の手順に従ってください。
続行する前に、ユーザーによって作成された不要なcert-managerリソースが削除されていることを確認してください。次のコマンドを使用して、既存のリソースを確認できます。
kubectl get Issuers,ClusterIssuers,Certificates,CertificateRequests,Orders,Challenges --all-namespaces
cert-managerをアンインストールする前に、これらのすべてのリソースを削除することをお勧めします。後で再インストールする予定で、カスタムリソースを失いたくない場合は、それらを保持できます。ただし、これにより、ファイナライザーに問題が発生する可能性があります。Challenges
などのリソースは、保留状態になるのを防ぐために削除する必要があります。
不要なリソースが削除されたら、インストール方法によって決まる手順を使用してcert-managerをアンインストールできます。
警告: cert-managerをアンインストールしたり、
Certificate
リソースを単純に削除すると、metadata.ownerReferences
がcert-managerによって設定されている場合、TLSSecret
が削除される可能性があります。Secret
にオーナー参照を追加するかどうかは、--enable-certificate-owner-ref
コントローラーフラグを使用して制御できます。デフォルトでは、このフラグはfalseに設定されているため、オーナー参照は追加されません。ただし、cert-manager v1.8以前では、フラグの値をtrueからfalseに変更しても、既存のオーナー参照は削除されませんでした。この動作はcert-manager v1.8で修正されました。オーナー参照を確認して、実際に削除されていることを確認してください。
通常のマニフェストを使用したアンインストール
通常のマニフェストによるインストールからのアンインストールは、kubectl
の削除コマンドを使用して、インストールプロセスを逆順に実行することです。
現在実行中のバージョンvX.Y.Z
へのリンクを使用して、インストールマニフェストを削除します。
警告: このコマンドは、インストール済みのcert-manager CRDも削除します。すべてのcert-managerリソース(例:
certificates.cert-manager.io
リソース)は、Kubernetesのガベージコレクタによって削除されます。CustomResourceDefinition
を削除すると、カスタムリソースを保持することはできません。リソースを保持する場合は、CustomResourceDefinition
を個別に管理する必要があります。
kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/vX.Y.Z/cert-manager.yaml
名前空間が終了状態のままになる
cert-managerのインストールを最初に削除せずに名前空間が削除用にマークされている場合、名前空間は終了状態のままになる可能性があります。これは通常、APIService
リソースはまだ存在するが、webhookは実行されていないため、到達不能になっているという事実が原因です。これを解決するには、上記のコマンドを正しく実行していることを確認し、それでも問題が発生する場合は、次のコマンドを実行します。
kubectl delete apiservice v1beta1.webhook.cert-manager.io
保留中のチャレンジの削除
Challenge
は、ファイナライザーが完了できず、Kubernetesがcert-managerコントローラーの終了を待機している場合、保留状態のままになる可能性があります。これは、コントローラーがフラグを削除するために実行されなくなり、リソースが待機する必要があると定義されている場合に発生します。コントローラーが実行する操作を手動で実行することで、この問題を解決できます。
最初に、既存のcert-manager webhook構成(存在する場合)を削除します。
kubectl delete mutatingwebhookconfigurations cert-manager-webhookkubectl delete validatingwebhookconfigurations cert-manager-webhook
次に、チャレンジリソースを編集して、.metadata.finalizers
フィールドを空のリストに変更します。
kubectl edit challenge <the-challenge>