Operator Lifecycle Manager (OLM, 運算元生命週期管理器)
由 OLM 管理的安裝
先決條件
- 安裝支援的 Kubernetes 或 OpenShift 版本。
- 如果您在雲端平台上使用 Kubernetes,請閱讀與 Kubernetes 平台供應商的相容性。
選項 1:從 OpenShift 上的 OperatorHub Web 主控台安裝
cert-manager 位於名為「community-operators」的Red Hat 提供的運算元目錄中。在 OpenShift 4 上,您可以從OperatorHub Web 主控台或從命令列安裝 cert-manager。Red Hat 的將運算元新增至叢集文件中描述了這些安裝方法。
⚠️ 在 cert-manager 1.10 中,所有 Pod 的安全運算 (seccomp) 設定檔都設為
RuntimeDefault
。在某些版本的 OpenShift 和組態中,這可能會導致 Pod 被安全性內容限制許可 Webhook拒絕。📖 在從舊版本升級至 1.10 或更新版本之前,請閱讀1.10 版本資訊中的重大變更章節。
選項 2:從 OperatorHub.io 安裝
瀏覽至OperatorHub.io 上的 cert-manager 頁面,按一下「安裝」按鈕,並依照安裝指示操作。
選項 3:透過 kubectl operator
外掛程式手動安裝
安裝 OLM 並從Krew Kubectl 外掛程式索引安裝 kubectl operator
外掛程式,然後使用它來安裝 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
發佈通道
無論您選擇哪種安裝方法,現在都會有一個追蹤「stable」發佈通道的 cert-manager OLM 訂閱資源。例如:
$ 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。請閱讀透過訂閱手動核准升級,以了解自動和手動升級的相關資訊。
注意:有一個名為「stable」的單一發佈通道,其中包含所有 cert-manager 版本,這些版本會在發佈後不久納入。未來,我們可能會根據OLM 的建議通道命名,推出其他具有替代發佈時間表的發佈通道。
偵錯安裝問題
如果您在安裝時遇到任何問題,請參閱常見問題。
組態
當您使用 OLM 安裝 cert-manager 時,組態選項相當有限。有一些部署設定可以在訂閱中永久覆寫,而 cert-manager 資訊清單的大部分其他元素可以透過編輯 ClusterServiceVersion 來變更,但是對 ClusterServiceVersion 的變更都是暫時性的,如果 OLM 升級 cert-manager,這些變更將會遺失,因為升級會產生新的 ClusterServiceVersion 資源。
透過訂閱進行組態
當您建立 OLM 訂閱時,您可以覆寫 cert-manager 部署設定的部分設定,但選項相當有限。您新增至訂閱的組態會立即套用至目前的 cert-manager 部署。如果 OLM 升級 cert-manager,它也會重新套用。
🔰 閱讀 OLM 儲存庫中的設定 OLM 部署的運算元設計文件。
🔰 請參閱訂閱 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 (第一個 Deployment 的第一個容器) 的命令列參數。
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,您應該始終使用與安裝相同的流程,但反向執行。偏離以下流程可能會導致問題和潛在的損壞狀態。請務必在解除安裝時遵循以下步驟,以防止發生這種情況。