[蚂蚁金服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已经出现在环境变量中了