操作生命周期管理器
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 文档中进行了描述。
⚠️ 在 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
发布通道
无论您选择哪种安装方法,现在都将有一个用于 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。阅读 通过订阅手动批准升级,了解有关自动和手动升级的信息。
注意:只有一个名为“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 部署的 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]...
卸载
以下是卸载 OpenShift 上 cert-manager 的过程。
⚠️ 要卸载 cert-manager,您应始终使用与安装相同的过程,但方向相反。偏离以下过程会导致问题,并可能导致状态错误。请确保在卸载时按照以下步骤操作,以防止这种情况发生。