BK-CI 在 k8s 上部署的踩坑记录
BK-CI 在 k8s 上部署的踩坑记录
蓝鲸 BK-CI(腾讯开源的持续集成系统)在 k8s 上部署时遇到的一些问题。分开源版和社区版两套,测试都用的 minikube 集群。
开源版(2.1.1)
官方文档:bk-ci/docs/install/kubernetes.md。
gateway init 容器报错,sysctl 找不到文件
bk-ci-bk-ci-gateway 的 init 容器报 sysctl 找不到文件。删掉配置里对应的两行 sysctl 设置即可。
gateway 工作容器报 nginx 命令格式不对
在 Kuboard 里点开 gateway 容器保存后,启动命令的引号会被改坏,容器报 nginx 命令格式不对。原本 yaml 里是对的,是 Kuboard 编辑导致的。把启动命令改回:
nginx -g "daemon off;"
再保存。
kubernetes-manager 起不来,Unknown database
报错:
init mysql error 无法连接 Mysql 数据库: Error 1049: Unknown database 'devops_ci_kubernetes_manager'
原因是 init-sql job 导入数据库时报错——mysql 健康检测失败导致初始化数据库时 mysql 突然重启,数据库初始化失败。
解决:解压 helm tgz,在 bk-ci/charts/mysql/values.yaml 里关掉 mysql 的健康检测,再重新压缩成 tgz。
服务全起来了,但页面打不开返回 302
服务全部启动成功后,访问 http://devops.example.com:30xxx 打不开,请求返回 302。
原因:gateway 的 nginx 配置会把 / 重定向到 /console,重定向后端口被改成了默认的 80。
解决:重启 minikube,加上启动参数把 node port 范围放开到从 80 开始,让 ingress-nginx controller 的 service 能映射到宿主机 80 端口(默认起始端口是三万多):
minikube start --extra-config=apiserver.service-node-port-range=80-32767
社区版(蓝鲸 7.1)
安装文档:install-bkce.md。
部署持续集成套餐要先部署基础套餐。系统必须用 CentOS 7.9 64 位,换别的各种起不来。
minikube 启动命令:
minikube start --driver=none --container-runtime=docker --v=5 \
--kubernetes-version=v1.23.0 \
--extra-config=apiserver.service-node-port-range=80-32767 \
--extra-config=kubelet.max-pods=300
安装基础套餐:ingress webhook connection refused
报错:
Error: UPGRADE FAILED: failed to create resource: Internal error occurred:
failed calling webhook "validate.nginx.ingress.kubernetes.io":
failed to call webhook: Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s":
dial tcp 10.105.193.205:443: connect: connection refused
解决:删掉这个 validate webhook 资源:
# 查看 ValidatingWebhookConfiguration 资源,确认资源名
kubectl get ValidatingWebhookConfiguration
# 删除 validate 资源
kubectl delete ValidatingWebhookConfiguration ingress-nginx-admission
PodDisruptionBudget 版本不匹配
报错:
Error: unable to build kubernetes objects from release manifest:
unable to recognize "": no matches for kind "PodDisruptionBudget" in version "policy/v1beta1"
原因:k8s 从 1.25 起弃用了 policy/v1beta1,PodDisruptionBudget 移到了 policy/v1。解决办法是把 k8s 降到 1.23 版本。