从 Helm stable/cert-manager 升级到 jetstack/cert-manager

Posted

技术标签:

【中文标题】从 Helm stable/cert-manager 升级到 jetstack/cert-manager【英文标题】:Upgrading from Helm stable/cert-manager to jetstack/cert-manager 【发布时间】:2019-12-21 16:57:05 【问题描述】:

我们有一个生产 AKS 集群,该集群安装了 stable/cert-manager helm 图表以允许使用 Let's Encrypt 证书。当前安装的版本是cert-manager-v0.6.0,位于kube-system 命名空间中。

Let's Encrypt 将从 2019 年 11 月 1 日起停止支持来自 cert-manager pre 8.0 版本的流量。

我想升级,但最新可用的stable 图表版本是v0.6.7。似乎要走的路是切换到jetstack/cert-manager

如何最好地解决这个问题?我应该卸载当前的stable/cert-manager 图表并使用jetstack/cert-manager 从头开始​​安装吗?任何有关如何在不停机的情况下解决此问题的资源都将不胜感激。如果我可以提供更多详细信息,请告诉我。

【问题讨论】:

看来您无法在不停机的情况下通过 helm 将 stable/cert-manager 升级到 jetstack/cert-manager。您需要卸载旧的并安装新的。看一下helm upgrade的例子。 【参考方案1】:

我可以确认上述方法有效。 (@RVid 回答)

不过,我已将 0.5.0 升级到 0.9.1,并且必须创建一个单独的命名空间才能进行“无停机”升级。

#1 delete old CRDs
kubectl delete crd \
    certificates.certmanager.k8s.io \
    issuers.certmanager.k8s.io \
    clusterissuers.certmanager.k8s.io

#2 create SEPARATE namespace
$ kubectl create namespace cert-manager-new

#3 install new CRDs that corresponds to the new version of cert-manager

$ kubectl apply \
    -f https://raw.githubusercontent.com/jetstack/cert-manager/<VERSION>/deploy/manifests/00-crds.yaml


#4 ensure the NEW namespace has an additional label on it in order for the deployment to succeed
$ kubectl label namespace cert-manager-new certmanager.k8s.io/disable-validation="true"

#5 copy secrets to cert-manager-new namespace (For DNS, HTTP and Let's Encrypt account)

## Install the cert-manager helm chart
#  jetstack/cert-manager
$ helm install --name cert-manager-new --namespace cert-manager-new jetstack/cert-manager --values <your values file>

#6 apply ClusterIssuer with kubectl apply -f <file.yaml> 
Use config from: https://docs.cert-manager.io/en/latest/reference/issuers.html

证书管理器的新实例将开始同步您拥有的所有证书,而不会破坏机密。 最终,所有证书都将使用新的证书管理器进行更新。

干杯。

【讨论】:

感谢您的概述!我只是想知道是否有必要这样做?我想知道就地升级(让发行人正常运行)。这是否会导致我们的服务中断? 还有!是不是刚刚删除了旧的helm部署,同步需要多长时间?谢谢! 请注意,我采用了这种方法,它对我来说没问题!【参考方案2】:

对于任何提出相同问题的人,我都尝试在我的测试集群上执行全新安装,这似乎工作得相当顺利。我通过运行helm list 找到了我的掌舵版本的名称

然后我执行了以下步骤:

1.备份

kubectl get -o yaml \
   --all-namespaces \
   issuer,clusterissuer,certificates,orders,challenges > cert-manager-backup.yaml

Source

2.删除

# Uninstall the Helm chart
helm delete --purge <your release name here>

# Ensure the cert-manager CustomResourceDefinition resources do not exist:
kubectl delete crd \
    certificates.certmanager.k8s.io \
    issuers.certmanager.k8s.io \
    clusterissuers.certmanager.k8s.io

在步骤 2 中描述here

3.安装新的 jetstack 版本

# Install the CustomResourceDefinition resources separately
kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.9/deploy/manifests/00-crds.yaml

# Create the namespace for cert-manager
kubectl create namespace cert-manager

# Label the cert-manager namespace to disable resource validation
kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true

# Add the Jetstack Helm repository
helm repo add jetstack https://charts.jetstack.io

# Update your local Helm chart repository cache
helm repo update

# Install the cert-manager Helm chart
helm install --name <your release name here> --namespace cert-manager --version v0.9.1 jetstack/cert-manager

描述here

4.恢复

我试过跑步

kubectl apply -f cert-manager-backup.yaml

如here 所述,但这一步实际上并没有完全适合我。发行人已创建(自签名和 CA),但我无法重新创建 CertificatesClusterIssuer。这些是我收到的错误:

Error from server (InternalError): Internal error occurred: failed calling webhook "clusterissuers.admission.certmanager.k8s.io": the server is currently unable to handle the request
Error from server (InternalError): Internal error occurred: failed calling webhook "certificates.admission.certmanager.k8s.io": the server is currently unable to handle the request

我有我原来的 yaml 文件,并且能够通过应用它们来创建 ClusterIssuerCertificate

【讨论】:

关注那些为您工作的instructions?或者你还有什么其他问题。此外,问题是升级到 0.7.0 jetstack/cert-manager 比以下升级部分更好吗? @Hanx 我描述的步骤是我唯一的一次。由于第 2 步删除了证书管理器,我想我不妨直接进入 0.9 版

以上是关于从 Helm stable/cert-manager 升级到 jetstack/cert-manager的主要内容,如果未能解决你的问题,请参考以下文章

我怎么能通过 |作为从 Ansible 库存到 Helm values.yml 的文本

Helm2和Helm3的安装卸载常用命令

Helm 从 pod 内部使用“x509:由未知机构签名的证书”获取错误

k8s 安装helm

harbor helm仓库使用

从 terraform helm_release 资源获取 redis 主机 url