前言
总结常规报错,以及相应的解决办法,涉及K8S、HELM、Shell等。
1. Helm模板中,关于command和args
本次部署容器环境流程:使用Helm或K8S原生的apply方式部署环境。部署时,会调用指定的shell脚本。
在shell脚本执行时,获取yml中的变量参数有两种方式:第一,yml中将k8s参数以环境变量env的形式注入到docker,第二,k8s参数作为脚本的参数传入。
- 第一种方式:env形式传入,脚本执行时直接${a}获取,且可以重复使用。
env: # 容器运行前需设置的环境变量列表
- name: a # 环境变量名称
value: b # 环境变量的值
在容器中执行export指令可以查看到设置的环境变量参数。
- 第二种方式:k8s参数作为脚本的参数传入,即在yml中指定args参数,如果参数较多,可以使用shell的getopts函数解析,但是这些参数无法在容器内使用。
关于command和args的使用场景:
- 如果command和args均没有指定,那么则使用Dockerfile的配置。
- 如果command没有指定,但指定了args,那么Dockerfile中配置的ENTRYPOINT的命令行会被执行,并且将args中填写的参数追加到ENTRYPOINT中。
- 如果command指定了,但args没有写,那么Dockerfile默认的配置会被忽略,执行输入的command(不带任何参数,当然command中可自带参数)。
- 如果command和args都指定了,那么Dockerfile的配置被忽略,执行command并追加上args参数。
截取deployment.yaml中示例如下:(args解析可以使用2中的函数)
env:
- name: a
value: b
args:
- -a key=value #添加key=value至默认配置文件
- -a k