使用 kubectl 升级¶
如果您使用 YAML 安装了 Knative,您可以使用本主题中的 kubectl apply 命令来升级您的 Knative 组件和插件。如果您是使用 Operator 安装的,请参阅 使用 Knative Operator 升级安装。
准备工作¶
在升级之前,您必须执行一些步骤以确保升级过程成功。
识别破坏性变更¶
您应该了解当前版本和目标版本的 Knative 之间可能存在的任何破坏性变更。Knative 版本之间的破坏性变更记录在 Knative 的发行说明中。在升级之前,请查阅目标版本的发行说明,了解您可能需要对 Knative 应用程序进行的任何更改。
发行说明与每个版本一起发布在其各自 GitHub 仓库的“Releases”页面上。
查看当前的 Pod 状态¶
在升级之前,请查看您计划升级的命名空间中 Pod 的状态。这可以帮助您比较命名空间升级前后的状态。例如,如果您正在升级 Knative Serving 和 Eventing,请输入以下命令查看每个命名空间当前的状态:
kubectl get pods -n knative-serving
kubectl get pods -n knative-eventing
升级插件¶
如果您安装了插件,请确保在升级 Knative 组件的同时升级它。
在升级前运行预安装工具¶
对于某些升级,必须在实际升级之前完成一些步骤。如果适用,这些步骤会在发行说明中明确指出。
将现有资源升级到最新的存储版本¶
Knative 自定义资源存储在 Kubernetes 中,使用的是特定的版本。随着我们引入更新的版本并移除旧的支持版本,您必须将资源迁移到指定的存储版本。这可以确保在升级时移除旧版本成功。
对于各个子项目,都有一个 K8s Job 来帮助操作员执行此迁移。每个版本的发行说明都会明确说明是否需要进行迁移。
执行升级¶
要进行升级,请对所有已安装的 Knative 组件和特性的后续次要版本应用 YAML 文件,请记住一次只能升级一个次要版本。
在升级之前,请检查您的 Knative 版本。
对于运行 Knative Serving 和 Knative Eventing 组件 1.1 版本的集群,以下命令将安装升级到 1.2 版本:
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.2.0/serving-core.yaml \
-f https://github.com/knative/eventing/releases/download/knative-v1.2.0/eventing.yaml \
在必要时运行后安装作业¶
当发行说明指出某个 Knative 自定义资源已过渡到新版本时,例如:
DomainMapping/v1alpha1 已弃用 - 请使用 v1beta1 API
您需要运行后安装作业(参阅此处了解详情)
# Serving
kubectl create -f https://github.com/knative/serving/releases/download/knative-v1.21.0/serving-post-install-jobs.yaml
# Eventing
kubectl create -f https://github.com/knative/eventing/releases/download/knative-v1.21.0/eventing-post-install.yaml
确保作业成功完成后再继续
# Serving
kubectl get job -n knative-serving
# Eventing
kubectl get job -n knative-eventing
注意
如果将自定义资源 YAML 文件外部存储(例如通过 GitOps 存储在 git 中),您还必须转换这些文件中的版本。
验证升级¶
要确认您的组件和插件已成功升级,请查看相关命名空间中其 Pod 的状态。所有 Pod 在升级期间都会重启,并且它们的“年龄”将重置。如果您升级了 Knative Serving 和 Eventing,请输入以下命令以获取每个命名空间中 Pod 的信息:
kubectl get pods -n knative-serving
kubectl get pods -n knative-eventing
这些命令将返回类似以下内容的结果:
NAME READY STATUS RESTARTS AGE
activator-79f674fb7b-dgvss 2/2 Running 0 43s
autoscaler-96dc49858-b24bm 2/2 Running 1 43s
autoscaler-hpa-d887d4895-njtrb 1/1 Running 0 43s
controller-6bcdd87fd6-zz9fx 1/1 Running 0 41s
net-istio-controller-7fcdf7-z2xmr 1/1 Running 0 40s
webhook-747b799559-4sj6q 1/1 Running 0 41s
NAME READY STATUS RESTARTS AGE
eventing-controller-69ffcc6f7d-5l7th 1/1 Running 0 83s
eventing-webhook-6c56fcd86c-42dr8 1/1 Running 0 81s
imc-controller-6bcf5957b5-6ccp2 1/1 Running 0 80s
imc-dispatcher-f59b7c57-q9xcl 1/1 Running 0 80s
sources-controller-8596684d7b-jxkmd 1/1 Running 0 83s
如果所有 Pod 的年龄都已重置并且所有 Pod 都在运行中,则升级已成功完成。您可能会注意到旧的 Pod 处于 Terminating 状态,因为它们正在被清理。
如有必要,请重复升级过程,直到达到所需的小版本号。