Operator Lifecycle Manager (OLM)
OLM によるインストール管理
前提条件
- サポートされているバージョンの Kubernetes または OpenShift をインストールしてください。サポートされているバージョン
- クラウドプラットフォームで Kubernetes を使用している場合は、Kubernetes プラットフォームプロバイダーとの互換性をご覧ください。
オプション 1:OpenShift の OperatorHub Web コンソールからのインストール
cert-manager は、「community-operators」と呼ばれるRed Hat 提供の Operator カタログに含まれています。OpenShift 4 では、OperatorHub Web コンソールまたはコマンドラインから cert-manager をインストールできます。これらのインストール方法は、Red Hat のクラスタへの Operator の追加ドキュメントで説明されています。Red Hat 提供の Operator カタログ
⚠️ cert-manager 1.10 では、すべての Pod のセキュアコンピューティング (seccomp) プロファイルが
RuntimeDefault
に設定されています。OpenShift の一部のバージョンと構成では、これにより、Pod がSecurity Context Constraints アドミッション Webhookによって拒否される可能性があります。📖 1.10 以前のバージョンから 1.10 以降にインストールまたはアップグレードする前に、1.10 リリースノートの Breaking Changes セクションをお読みください。
オプション 2:OperatorHub.io からのインストール
OperatorHub.io の cert-manager ページにアクセスし、「インストール」ボタンをクリックして、インストール手順に従ってください。
オプション 3:kubectl operator
プラグインによる手動インストール
OLM をインストールし、kubectl operator
プラグインをKrew Kubectl プラグインインデックスからインストールし、以下の手順で cert-manager をインストールします。
operator-sdk olm installkubectl krew install operatorkubectl create ns cert-managerkubectl operator install cert-manager -n cert-manager --channel stable --approval Automatic --create-operator-group
インストールの進捗状況は、以下の手順で監視できます。
kubectl get events -w -n operators
インストールの状態は以下のコマンドで確認できます。
kubectl operator list
リリースチャネル
いずれのインストール方法を選択した場合でも、cert-manager のOLM サブスクリプションリソースが作成され、「stable」リリースチャネルが追跡されます。例:
$ kubectl get subscription cert-manager -n operators -o yaml...spec:channel: stableinstallPlanApproval: Automaticname: cert-manager...status:currentCSV: cert-manager.v1.16.1state: AtLatestKnown...
つまり、OLM は stable チャネルで新しい cert-manager リリースを検出し、サブスクリプションの設定に応じて、新しいリリースが利用可能になると cert-manager を自動的にアップグレードします。サブスクリプションによるアップグレードの手動承認で、自動アップグレードと手動アップグレードに関する情報を確認してください。
注記:リリースされた直後にすべての cert-manager リリースを含む「stable」と呼ばれる単一のリリースチャネルがあります。将来的には、OLM の推奨チャネル命名に従って、代替リリーススケジュールを持つ他のリリースチャネルを導入する可能性があります。
インストールの問題のデバッグ
インストールに問題がある場合は、FAQを参照してください。
設定
OLM を使用して cert-manager をインストールする場合、設定オプションは非常に限られています。サブスクリプションで永続的に上書きできる展開設定がいくつかあり、cert-manager マニフェストの他のほとんどの要素は ClusterServiceVersion を編集することで変更できますが、ClusterServiceVersion への変更は一時的なものであり、OLM が cert-manager をアップグレードすると新しい ClusterServiceVersion リソースが作成されるため失われます。
サブスクリプションによる設定
OLM サブスクリプションを作成すると、cert-manager の展開設定の一部を上書きできますが、オプションは非常に限られています。サブスクリプションに追加した設定は、現在の cert-manager 展開にすぐに適用されます。また、OLM が cert-manager をアップグレードした場合にも再適用されます。
🔰 OLM リポジトリのOLM によって展開された Operator の設定設計ドキュメントをお読みください。
🔰 サブスクリプション API ドキュメントを参照してください。
以下は、サブスクリプションリソースを変更することで実現できる設定の例です。各例では、OperatorHub.io のデフォルトのサブスクリプションから開始することを前提としています。
# cert-manager.yamlapiVersion: operators.coreos.com/v1alpha1kind: Subscriptionmetadata:name: my-cert-managernamespace: operatorsspec:channel: stablename: cert-managersource: operatorhubio-catalogsourceNamespace: olm
kubectl create -f https://operatorhub.io/install/cert-manager.yaml
リソースリクエストとリミットの変更
サブスクリプションにconfig
スタンザを追加することで、リソースリクエストとリミットを変更できます。
# resources-patch.yamlspec:config:resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"
kubectl -n operators patch subscription my-cert-manager --type merge --patch-file resources-patch.yaml
すべての cert-manager Pod が新しいリソースで再起動されます。
$ kubectl -n operators get pods -o "custom-columns=name:.metadata.name,mem:.spec.containers[*].resources"name memcert-manager-669867589c-n8dcn map[limits:map[cpu:500m memory:128Mi] requests:map[cpu:250m memory:100Mi]]cert-manager-cainjector-7b7fff8b9c-dxw6b map[limits:map[cpu:500m memory:128Mi] requests:map[cpu:250m memory:100Mi]]cert-manager-webhook-975bc87b5-tqdj4 map[limits:map[cpu:500m memory:128Mi] requests:map[cpu:250m memory:100Mi]]
⚠️ この設定は、すべての cert-manager 展開に適用されます。これは、個々の展開の設定をサポートしていないOLM の既知の制限です。
NodeSelector の変更
サブスクリプションに次のスタンザを追加することで、cert-manager Pod のnodeSelector
を変更できます。
# nodeselector-patch.yamlspec:config:nodeSelector:kubernetes.io/arch: amd64
kubectl -n operators patch subscription my-cert-manager --type merge --patch-file nodeselector-patch.yaml
すべての cert-manager Pod が新しいnodeSelector
で再起動されます。
$ kubectl -n operators get pods -o "custom-columns=name:.metadata.name,nodeselector:.spec.nodeSelector"name nodeselectorcert-manager-5b6b8f7d74-k7l94 map[kubernetes.io/arch:amd64 kubernetes.io/os:linux]cert-manager-cainjector-b89cd6f46-kdkk2 map[kubernetes.io/arch:amd64 kubernetes.io/os:linux]cert-manager-webhook-8464bc7cc8-64b4w map[kubernetes.io/arch:amd64 kubernetes.io/os:linux]
⚠️ この設定は、すべての cert-manager 展開に適用されます。これは、個々の展開の設定をサポートしていないOLM の既知の制限です。
ClusterServiceVersion (CSV) による設定
ClusterServiceVersion (CSV) リソースには、すべての cert-manager 展開のテンプレートが含まれています。これらのテンプレートをパッチすると、OLM は変更を展開にすぐにロールアウトします。
⚠️ OLM が cert-manager をアップグレードすると、デフォルトの展開テンプレートを含む新しい CSV が作成されるため、変更内容は失われます。
それにもかかわらず、CSV を編集(パッチ)することは、特定の cert-manager 設定を上書きするのに役立つ方法です。例:
cert-manager コンポーネントのログレベルの変更
次の JSON パッチは、-v=6
を cert-manager controller-manager(最初の展開の最初のコンテナ)のコマンドライン引数に追加します。
kubectl patch csv cert-manager.v1.16.1 \--type json \-p '[{"op": "add", "path": "/spec/install/spec/deployments/0/spec/template/spec/containers/0/args/-", "value": "-v=6" }]'
controller-manager Pod が新しい引数で再起動されます。
$ kubectl -n operators get pods -o "custom-columns=name:.metadata.name,args:.spec.containers[0].args"name argscert-manager-797979cbdb-g444r [-v=2 --cluster-resource-namespace=$(POD_NAMESPACE) --leader-election-namespace=kube-system -v=6]...
🔰 ClusterServiceVersion API ドキュメントを参照してください。
アンインストール
以下は、OpenShift で cert-manager をアンインストールする手順です。
⚠️ cert-manager をアンインストールするには、常にインストールと同じ手順を逆順で使用してください。以下の手順から逸脱すると、問題が発生し、状態が壊れる可能性があります。この事態を防ぐために、アンインストール時には必ず以下の手順に従ってください。