如何在Kubectl部署中传递环境变量?

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/


P E*_*ram 7

请按照以下步骤操作

创建测试部署.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)


Pra*_*dha 6

这不是使用部署的正确方法,您不能在 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


Max*_*bur 5

我为此使用了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)