新消息:在TwitterMastodon上取得專案更新

Operator Lifecycle Manager (OLM, 運算元生命週期管理器)

由 OLM 管理的安裝

先決條件

選項 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 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

發佈通道

無論您選擇哪種安裝方法,現在都會有一個追蹤「stable」發佈通道的 cert-manager OLM 訂閱資源。例如:

$ 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。請閱讀透過訂閱手動核准升級,以了解自動和手動升級的相關資訊。

注意:有一個名為「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.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 (第一個 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 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,您應該始終使用與安裝相同的流程,但反向執行。偏離以下流程可能會導致問題和潛在的損壞狀態。請務必在解除安裝時遵循以下步驟,以防止發生這種情況。