跳到主要内容

FAQ

本文档罗列了 KubeBlocks 升级中常见的问题及解决方法。

手动标记引擎

KubeBlocks 早期版本在 Helm chart 中预装了一些引擎,但在新版本中,部分预装引擎可能被移除。此时,如果基于早期版本直接升级至最新版本,这些被移除引擎的 CR 也会被 Helm 移除,这些引擎创建的数据库集群也将受到影响。因此,升级 KubeBlocks 时,可通过为引擎添加 "helm.sh/resource-policy": "keep" 注解,确保相关引擎在升级过程中不会被移除。

查看引擎注解

执行以下命令,查看引擎注解。

kubectl get addon -o json | jq '.items[] | {name: .metadata.name, resource_policy: .metadata.annotations["helm.sh/resource-policy"]}'

手动为引擎添加注解

可以将以下命令中的 -l app.kubernetes.io/name=kubeblocks 替换为所需的筛选项。

kubectl annotate addons.extensions.kubeblocks.io -l app.kubernetes.io/name=kubeblocks helm.sh/resource-policy=keep

如果想为某个引擎单独添加注解,可执行以下命令,替换 {addonName} 为需要的引擎。

kubectl annotate addons.extensions.kubeblocks.io {addonName} helm.sh/resource-policy=keep

如果想查看某个引擎是否成功添加了注解,可以执行以下命令,将 {addonName} 替换为需要的引擎。

kubectl get addon {addonName} -o json | jq '{name: .metadata.name, resource_policy: .metadata.annotations["helm.sh/resource-policy"]}'

解决 "cannot patch 'kubeblocks-dataprotection' with kind Deployment" 问题

升级到 KubeBlocks v0.8.x/v0.9.0时,可能会出现以下报错:

Error: UPGRADE FAILED: cannot patch "kubeblocks-dataprotection" with kind Deployment: Deployment.apps "kubeblocks-dataprotection" is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app.kubernetes.io/component":"dataprotection", "app.kubernetes.io/instance":"kubeblocks", "app.kubernetes.io/name":"kubeblocks"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable && cannot patch "kubeblocks" with kind Deployment: Deployment.apps "kubeblocks" is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app.kubernetes.io/component":"apps", "app.kubernetes.io/instance":"kubeblocks", "app.kubernetes.io/name":"kubeblocks"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable

这是因为 KubeBlocks v0.9.1 修改了 KubeBlocks 和 KubeBlocks-Dataprotection 的标签。

如果出现这种错误,可以先手动删除 kubeblockskubeblocks-dataprotection 这两个 deployment,然后再执行 helm upgrade 升级到 KubeBlocks v0.9.1。

# Scale to 0 replica
kubectl -n kb-system scale deployment kubeblocks --replicas 0
kubectl -n kb-system scale deployment kubeblocks-dataprotection --replicas 0

# Delete deployments
kubectl delete -n kb-system deployments.apps kubeblocks kubeblocks-dataprotection

升级时如何指定镜像仓库

KubeBlocks v0.8.x 使用的镜像仓库为 infracreate-registry.cn-zhangjiakou.cr.aliyuncs.comdocker.io,KubeBlocks 从 v0.9.0 之后使用的镜像仓库为 apecloud-registry.cn-zhangjiakou.cr.aliyuncs.comdocker.io

升级 KubeBlocks 时,可以通过以下参数指定修改默认镜像。

kbcli kb upgrade --version 0.9.1 \ 
--set admissionWebhooks.enabled=true \
--set admissionWebhooks.ignoreReplicasCheck=true \
--set image.registry=docker.io \
--set dataProtection.image.registry=docker.io \
--set addonChartsImage.registry=docker.io

以下为上述命令的参数说明:

  • --set image.registry=docker.io 设置KubeBlocks 镜像仓库。
  • --set dataProtection.image.registry=docker.io 设置 KubeBlocks-Dataprotection 镜像仓库。
  • --set addonChartsImage.registry=docker.io 设置 addon Charts 镜像仓库。