新機能: プロジェクトの最新情報については、TwitterMastodonでご確認いただけます。

Operator Lifecycle Manager (OLM)

OLM によるインストール管理

前提条件

オプション 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 install
kubectl krew install operator
kubectl create ns cert-manager
kubectl 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: stable
installPlanApproval: Automatic
name: cert-manager
...
status:
currentCSV: cert-manager.v1.16.1
state: 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.yaml
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: my-cert-manager
namespace: operators
spec:
channel: stable
name: cert-manager
source: operatorhubio-catalog
sourceNamespace: olm
kubectl create -f https://operatorhub.io/install/cert-manager.yaml

リソースリクエストとリミットの変更

サブスクリプションにconfig スタンザを追加することで、リソースリクエストとリミットを変更できます。

# resources-patch.yaml
spec:
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 mem
cert-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.yaml
spec:
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 nodeselector
cert-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 args
cert-manager-797979cbdb-g444r [-v=2 --cluster-resource-namespace=$(POD_NAMESPACE) --leader-election-namespace=kube-system -v=6]
...

🔰 ClusterServiceVersion API ドキュメントを参照してください。

アンインストール

以下は、OpenShift で cert-manager をアンインストールする手順です。

⚠️ cert-manager をアンインストールするには、常にインストールと同じ手順を逆順で使用してください。以下の手順から逸脱すると、問題が発生し、状態が壊れる可能性があります。この事態を防ぐために、アンインストール時には必ず以下の手順に従ってください。