Kubernetes中,pod的环境变量

本文探讨了Kubernetes中Pod间的交互方式,包括通过DNS解析服务名和环境变量注入。详细介绍了如何在Pod的YAML配置中指定自定义环境变量,并展示了实际应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[蚂蚁金服kubernetes方向招聘](https://blog.csdn.net/weiyuanke/article/details/107400816)

 

kubernetes中包含各种pod,pod之间的交互目前了解到的有两种方式:

(1)dns

(2)环境变量

dns下,kubernetes可以把一个service的name解析到对应的服务端点,这个高版本的kubernetes目前都有内建服务支持。

比如,redis的主从部署中,从redis的启动脚本如下:

#!/bin/bash

if [[ ${GET_HOSTS_FROM:-dns} == "env" ]]; then

  redis-server --slaveof ${REDIS_MASTER_SERVICE_HOST} 6379

else

  redis-server --slaveof redis-master 6379  #这块儿走的就是dns解析,kubernetes会将redis-master解析到争取的ip地址上

fi

 

环境变量下,kubernetes会在生成pod的时候,将kubernetes中相关的环境变量注入到容器中。通过以下步骤可以查看一个pod当前的环境变量列表:

(1)

$kubectl get pods

NAME                            READY   STATUS    RESTARTS   AGE

redis-master-6fbbc44567-nkpt6   1/1     Running   0          27m

redis-slave-5486d55b4f-6hw5f    1/1     Running   0          22m

redis-slave-5486d55b4f-qrrh6    1/1     Running   0          22m

 

$kubectl exec redis-slave-5486d55b4f-6hw5f env

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

HOSTNAME=redis-slave-5486d55b4f-6hw5f

GET_HOSTS_FROM=env

KUBERNETES_SERVICE_PORT=443

KUBERNETES_PORT=tcp://10.96.0.1:443

KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443

KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1

REDIS_MASTER_PORT_6379_TCP=tcp://10.98.193.44:6379

REDIS_MASTER_PORT_6379_TCP_PORT=6379

KUBERNETES_PORT_443_TCP_PROTO=tcp

REDIS_MASTER_SERVICE_PORT=6379

REDIS_MASTER_PORT=tcp://10.98.193.44:6379

REDIS_MASTER_PORT_6379_TCP_PROTO=tcp

KUBERNETES_SERVICE_HOST=10.96.0.1

REDIS_MASTER_SERVICE_HOST=10.98.193.44

REDIS_MASTER_PORT_6379_TCP_ADDR=10.98.193.44

KUBERNETES_SERVICE_PORT_HTTPS=443

KUBERNETES_PORT_443_TCP_PORT=443

REDIS_VERSION=3.0.3

REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-3.0.3.tar.gz

REDIS_DOWNLOAD_SHA1=0e2d7707327986ae652df717059354b358b83358

HOME=/root

 

其中

REDIS_MASTER_SERVICE_HOST=10.98.193.44

就是kubernetes注入的环境变量。

 

那么如何注入我们想要的一些环境变量尼,可以在yaml文件在配置,举例如下:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: redis-slave
  labels:
    app: redis
spec:
  selector:
    matchLabels:
      app: redis
      role: slave
      tier: backend
  replicas: 2
  template:
    metadata:
      labels:
        app: redis
        role: slave
        tier: backend
    spec:
      containers:
      - name: slave
        image: gcr.io/google_samples/gb-redisslave:v1
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        env:
            - name: TEST_ENV
              value: testvalue
        ports:
        - containerPort: 6379

启动pod

kubectl apply -f redis-slave-deployment.yaml

 

查看当前环境变量:

$kubectl exec redis-slave-746754d699-vrvkg env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=redis-slave-746754d699-vrvkg
GET_HOSTS_FROM=env
TEST_ENV=tesvalue
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
REDIS_MASTER_PORT_6379_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
REDIS_MASTER_SERVICE_PORT=6379
REDIS_MASTER_PORT=tcp://10.98.193.44:6379
REDIS_MASTER_PORT_6379_TCP_PORT=6379
REDIS_MASTER_PORT_6379_TCP_ADDR=10.98.193.44
KUBERNETES_PORT=tcp://10.96.0.1:443
REDIS_MASTER_SERVICE_HOST=10.98.193.44
REDIS_MASTER_PORT_6379_TCP=tcp://10.98.193.44:6379
KUBERNETES_SERVICE_PORT=443
REDIS_VERSION=3.0.3
REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-3.0.3.tar.gz
REDIS_DOWNLOAD_SHA1=0e2d7707327986ae652df717059354b358b83358
HOME=/root

可以看到TEST_ENV已经出现在环境变量中了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值