rak*_*h92 1 kubernetes kubectl
我正在为django webapp设置kubernetes设置。
我在创建部署时传递环境变量,如下所示
kubectl create -f deployment.yml -l key1=value1
Run Code Online (Sandbox Code Playgroud)
我收到如下错误
error: no objects passed to create
Run Code Online (Sandbox Code Playgroud)
能够成功创建部署,如果在创建部署时删除了环境变量-l key1 = value1。
如下所示的deployment.yaml
#Deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
service: sigma-service
name: $key1
Run Code Online (Sandbox Code Playgroud)
创建部署时导致上述错误的原因是什么?
Vas*_*pov 16
您无法将变量传递给“kubectl create -f”。YAML 文件应该是没有变量的完整清单。此外,您不能使用“-l”标志来“kubectl create -f”。
如果你想将环境变量传递给 pod,你应该这样做:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
env:
- name: MY_VAT
value: MY_VALUE
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
在这里阅读更多信息: https: //kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/
请按照以下步骤操作
创建测试部署.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: MYAPP
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
使用 sed 命令,您可以在部署时更新部署名称
sed -e 's|MYAPP|my-nginx|g' test-deploy.yaml | kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)
这不是使用部署的正确方法,您不能在 yaml 中提供一半详细信息,在 kubectl 命令中提供一半详细信息。如果要在部署中传递环境变量,则应在以下内容中添加这些详细信息deployment spec.template.spec:
您应该将以下块添加到您的 deployment.yaml
spec:
containers:
- env:
- name: var1
value: val1
Run Code Online (Sandbox Code Playgroud)
这将导出容器内的环境变量。
另一种导出环境变量的方法是使用 kubectl run(不推荐),因为它很快就会贬值。您可以使用以下命令:
kubectl run nginx --image=nginx --restart=Always --replicas=1 --env=var1=val1
Run Code Online (Sandbox Code Playgroud)
上面的命令将创建一个具有副本 1 和环境变量的部署 nginx var1=val1
我为此使用了envsubst(https://www.gnu.org/software/gettext/manual/html_node/envsubst-Invocation.html)。创建一个deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: $NAME
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
然后:
export NAME=my-test-nginx
envsubst < deployment.yaml | kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)
不知道您使用什么操作系统来运行它。在macOS上,envsubst的安装方式如下:
brew install gettext
brew link --force gettext
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3267 次 |
| 最近记录: |