kubernetes 流程部署相关的坑
-
容器镜像名称只允许用小写,tag 大小写均可
kubernetes 的 namespace 和 deployments name 也是都用小写 -
代码和发布的自动对应关系解决方案:
git 项目的 GroupName/ProjeceName ==> 容器镜像全部小写的 groupname/projectname
git 项目的 GroupName ==> kubernetes 下全部小写的 groupname 作为 namespace
git 项目的 ProjeceName ==> kubernetes 下全部小写的 projectname 作为 deployment name
如此通过自动化的映射,可以极大的减少管理成本,提高发布效率。 -
项目发布的的 yaml 文件中,是否写创建 namespace ?
最好不要。
如果把创建 namespace 写到项目发布的yaml中,当删除这个项目时,
namespace 连同该命名空间下其他的部署项目也一并删除,这个结果不一定是我们需要的。 -
java 项目建议由 war 包改为 jar 包部署
war 包项目的运行,需要依赖 tomcat jetty 等容器,经常会有一些个性化的要求,比如 URIEncoding
第三方包依赖,等等,增加工程化部署的复杂程度。
因此建议将war包的项目改造成 springboot 或者内嵌tomcat 的方式来部署。 -
helm 生成的 chart 模板把里面没有 namespace
解决办法: 在模板中适当位置加入namespace: {{ .Release.Namespace }}
-
app容器的操作系统的选择
一句话概括:在企业部署环境中,基础镜像尽量不选择 alipine,尽管他看起来小而美。
原因:
- 代码兼容性:php nodejs python golang 遇到的兼容性问题都不好解决
- 性能: musl 的性能比 glibc 还是有明显的差异
因此建议尽量选择 ubuntu、debian、centos 这些常规系统作为基础镜像。
-
flannel 0.11 部署在 k8s 1.17 起不来
原因: 需要在 yaml 中指定"cniVersion": "0.2.0",
, 添加后才可正常启动
https://github.com/coreos/flannel/pull/1174/commits/701c2e8749714022758d5360fbe627005901349c -
calico 3.11 部署在 k8s 1.17 起不来
报错:error=listen tcp a.b.c.d:9098: bind: cannot assign requested address
原因:在宿主机上,使用 nslookup localhost 解析到了不存在该主机的地址上了。
解决:使用 nslookup localhost 解析到了 localhost.domain.com 的内部域名上了,
增加了该内部域名的解析,解析到 127.0.0.1。
或者在 yaml 文件中,添加环境变量 TYPHA_HEALTHHOST=127.0.0.1
https://github.com/projectcalico/typha/issues/334