夏雯 發表於 2025-5-5 15:26:00

K8s新手系列之为Pod容器设置环境变量

<h2 id="概述">概述</h2>
<p>官网:https://kubernetes.io/zh-cn/docs/tasks/inject-data-application/define-environment-variable-container/</p>
<p>创建 Pod 时,可以为其下的容器设置环境变量。通过配置文件的 <code>env</code> 或者 <code>envFrom</code> 字段来设置环境变量。</p>
<ul>
<li>env:为每一个变量指定一个值,类似key=value的形式</li>
<li>envFrom:通过引用 ConfigMap 或 Secret 来设置容器的环境变量。 使用 envFrom 时,引用的 ConfigMap 或 Secret 中的所有键值对都被设置为容器的环境变量</li>
</ul>
<h2 id="env设置环境变量">env设置环境变量</h2>
<h3 id="简单设置方式">简单设置方式</h3>
<p>示例:</p>
<pre><code>apiVersion: v1
kind: Pod
metadata:
name: env-configmap-pod
spec:
containers:
    - name: app
      # 打印环境变量
      command: ["/bin/sh", "-c", "printenv"]
      image: busybox:latest
      # 设置环境变量
      env:
      - name: USERNAME
      value: root
      - name: PASSWORD
      value: huangsir
</code></pre>
<h3 id="通过configmap设置环境变量">通过ConfigMap设置环境变量</h3>
<blockquote>
<p>学习ConfigMap查看这篇文章:K8s新手系列之ConfigMap资源</p>
</blockquote>
<p>创建ConfigMap</p>
<pre><code>kind: ConfigMap
metadata:
name: special-config
data:
USER_NAME: huangsir
APP: haha
COLOR: red
</code></pre>
<p>创建Pod引用ConfigMap</p>
<pre><code>apiVersion: v1
kind: Pod
metadata:
name: env-configmap-pod
spec:
containers:
    - name: app
      # 打印环境变量
      command: ["/bin/sh", "-c", "printenv"]
      image: busybox:latest
      # 设置环境变量
      env:
      - name: USERNAME
      # 指定value值从哪里来
      valueFrom:
          # 指定值从configMap引用
          configMapKeyRef:
            # configMap的名称
            name: special-config
            # configMap中Data的Key
            key: USER_NAME
</code></pre>
<h3 id="通过secret设置环境变量">通过Secret设置环境变量</h3>
<blockquote>
<p>学习Secret请查看这篇文章:K8s新手系列之Secret资源</p>
</blockquote>
<p>创建secret</p>
<pre><code>apiVersion: v1
kind: Secret
metadata:
name: db-secret
data:
# base64编码后的,源内容为root
username: cm9vdAo=
password: cm9vdAo=
type: Opaque
</code></pre>
<p>创建Pod引用Secret</p>
<pre><code>apiVersion: v1
kind: Pod
metadata:
name: env-configmap-pod
spec:
containers:
    - name: app
      # 打印环境变量
      command: ["/bin/sh", "-c", "printenv"]
      image: busybox:latest
      # 设置环境变量
      env:
      - name: USERNAME
      # 指定value值从哪里来
      valueFrom:
          # 指定值从Secret引用
          secretKeyRef:
            # Secret的名称
            name: db-secret
            # Secret中Data的Key
            key: username
</code></pre>
<h2 id="envfrom设置环境变量">envFrom设置环境变量</h2>
<h3 id="引用configmap">引用ConfigMap</h3>
<p>envFrom会将ConfigMap中所有的键值对都设置为环境变量</p>
<pre><code>apiVersion: v1
kind: Pod
metadata:
name: env-configmap-pod
spec:
containers:
    - name: app
      # 打印环境变量
      command: ["/bin/sh", "-c", "printenv"]
      image: busybox:latest
      # 设置环境变量
      envFrom:
      configMapRef:
          # 设置configMap的名称
          name: special-config
</code></pre>
<h3 id="引用secret">引用Secret</h3>
<p>envFrom会将Secret中所有的键值对都设置为环境变量</p>
<pre><code>apiVersion: v1
kind: Pod
metadata:
name: env-configmap-pod
spec:
containers:
    - name: app
      # 打印环境变量
      command: ["/bin/sh", "-c", "printenv"]
      image: busybox:latest
      # 设置环境变量
      envFrom:
      secretRef:
          # 设置Secret的名称
          name: db-Secret
</code></pre>
<h2 id="在配置中使用环境变量">在配置中使用环境变量</h2>
<p>在资源文件中配置的环境变量可以在文件中的其他地方使用,例如可用在为 Pod 的容器设置的命令和参数中。</p>
<p>使用<code>$(env-name)</code>来引用设置的环境变量</p>
<p>示例:</p>
<pre><code>apiVersion: v1
kind: Pod
metadata:
name: print-greeting
spec:
containers:
- name: env-print-demo
    image: bash
    env:
    - name: GREETING
      value: "Warm greetings to"
    - name: HONORIFIC
      value: "The Most Honorable"
    - name: NAME
      value: "Kubernetes"
    command: ["echo"]
    args: ["$(GREETING) $(HONORIFIC) $(NAME)"]
</code></pre>


</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:huangSir-devops,转载请注明原文链接:https://www.cnblogs.com/huangSir-devops/p/18859107,微信Vac6666666,欢迎交流</p><br><br>
来源:https://www.cnblogs.com/huangSir-devops/p/18859107
頁: [1]
查看完整版本: K8s新手系列之为Pod容器设置环境变量