kubernetes容器编排之定义环境变量以及通过downwardapi把pod信息作为环境变量传入容器内
在学习docker的时候,大家可能经常看到不少示例在docker run的时候指定环境变量(比如wordpress的docker示例就是通过环境变量传入账户和密码到容器内).这里之所以经常用到环境变量,主要基于以下两点原因
容器内的操作往往都是自动化的,而不像在windows会有图形界面提示输入信息或者像在linux有交互式命令可以输入程序需要的数据.也就是程序运行时需要的参数无法交互式指定,不同程序读取配置的方式又各式各样,这种情况下读取环境变量是比较通用的做法
容器的隔离性,在k8s里,pod是最小的逻辑单元,关于容器运行时的很多信息(pod的ip,节点的ip,申请的cpu资源,内存资源)都存在pod里,但是有些时候pod内的容器想要知道这些信息,然而容器无法直接读取到pod的所有信息,kubernetes本身提供了
download ap(下面交介绍)i来把pod的信息传递给容器,其实就是通过环境变量把pod的信息传递给容器.
为容器定义环境变量
当创建pod的时候,可以在配置文件里使用env字段来定义环境变量,示例如下
apiVersion: v1
kind: Pod
metadata:
name: envar-demo
labels:
purpose: demonstrate-envars
spec:
containers:
- name: envar-demo-container
image: tutum/hello-world
env:
- name: DEMO_GREETING
value: "Hello from the environment"
- name: DEMO_FAREWELL
value: "Such a sweet sorrow"
我们通过kubectl apply -f创建它
通过执行命令kubectl exec -it envar-demo /bin/sh进入交互式命令执行容器
输入printenv来查看环境变量是否正确传入
/ # printenv DEMO_GREETING
Hello from the environment
/ # printenv DEMO_FAREWELL
Such a sweet sorrow
/ #
在配置文件中使用环境变量
以上我们通过交互式容器查看到了我们定义的环境变量,实际上我们在配置文件中定义的环境变量也可以在配置文件中其它位置被引用,比如做为容器初始化执行命令的参数,请看下面示例:
apiVersion: v1
kind: Pod
metadata:
name: print-greeting
spec:
containers:
- name: env-print-demo
image: tutum/hello-world
env:
- name: GREETING
value: "Warm greetings to"
- name: HONORIFIC
value: "The Most Honorable"
- name: NAME
value: "Kubernetes"
command: ["echo"]
args: ["$(GREETING) $(HONORIFIC) $(NAME)"]
与上面不同的是,上面仅仅定义了变量,这里我们引用了定义的变量.
我们通过以上配置创建容器,然后执行kubectl logs查看输出日志
λ kubectl logs print-greeting
Warm greetings to The Most Honorable Kubernetes
可以看到,被引用的环境变量内容输出了.
downwardapi介绍及简单使用
对于一些容器类型,特别是有状态的,它运行的时候可能需要知道外部依附于pod的信息,比如pod的ip,集群ip,pod申请的内存和cpu数量等.这时候可以通过环境变量把这些依附于pod的字段信息传入到容器内容.另一种方式是通过DownwardAPIVolumeFiles把信息传入到容器内容,这两种方式合在一起被称作downward api
使用pod的字段值作为环境变量
apiVersion: v1
kind: Pod
metadata:
name: dapi-envars-fieldref
spec:
containers:
- name: test-container
image: tutum/hello-world
command: [ "sh", "-c"]
args:
- while true; do
echo -en '\n';
printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
sleep 10;
done;
env:
- name: MY_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: MY_POD_SERVICE_ACCOUNT
valueFrom:
fieldRef:
fieldPath: spec.serviceAccountName
restartPolicy: Never
以上配置文件,我们引用了pod的若干属性然后通过printenv打印出来查看.
我们使用kubectl logs pod名称来查看输出信息
docker-for-desktop
dapi-envars-fieldref
default
10.1.0.75
需要注意的是,以上字段是pod的字段,而不是容器的字段.
kubernetes容器编排之定义环境变量以及通过downwardapi把pod信息作为环境变量传入容器内的更多相关文章
- docker容器编排 (4)
容器编排 我们的项目可能会使用了多个容器,容器多了之后管理容器的工作就会变得麻烦.如果要对多个容器进行自动配置使得容器可以相互协作甚至实现复杂的调度,这就需要进行容器编排.Docker原生对容器编排的 ...
- Kubernetes(k8s)通过环境变量将 Pod 信息呈现给容器
Downward API 有两种方式可以将 Pod 和 Container 字段呈现给运行中的容器: 环境变量 卷文件 这两种呈现 Pod 和 Container 字段的方式统称为 Downward ...
- 三小时学会Kubernetes:容器编排详细指南
三小时学会Kubernetes:容器编排详细指南 如果谁都可以在三个小时内学会Kubernetes,银行为何要为这么简单的东西付一大笔钱? 如果你心存疑虑,我建议你不妨跟着我试一试!在完成本文的学习后 ...
- [转载]三小时学会Kubernetes:容器编排详细指南
原翻译by梁晓勇 原英文:Learn Kubernetes in Under 3 Hours: A Detailed Guide to Orchestrating Containers 我很奇怪,为什 ...
- kubernetes容器编排系统介绍
版权声明:本文由turboxu原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/152 来源:腾云阁 https://www. ...
- 一文带你看透kubernetes 容器编排系统
本文由云+社区发表 作者:turboxu Kubernetes作为容器编排生态圈中重要一员,是Google大规模容器管理系统borg的开源版本实现,吸收借鉴了google过去十年间在生产环境上所学到的 ...
- [转帖]Kubernetes及容器编排的总体介绍【译】
Kubernetes及容器编排的总体介绍[译] 翻译自The New Stack<Kubernetes 生态环境>作者:JANAKIRAM MSV和 KRISHNAN SUBRAMANIA ...
- K8S - 容器编排工具Kubernetes简介
1 - Kubernetes Kubernetes(简称K8s,用8代替8个字符"ubernete")是Google开源的一个容器编排引擎. 目前最为广泛且流行的容器编排调度系统, ...
- kubernetes(k8s)容器编排工具基础概念
Kubernetes (K8s): 中文社区:https://www.kubernetes.org.cn/replication-controller-kubernetes 官网:https://ku ...
随机推荐
- 【Luogu】P4363一双木棋(状压爆搜)
题目链接 唉,只有AC了这道题才会感叹考场上没有想出解法的我是多么智障. 我甚至连任何想法都没有. 天啊我当时到底在想些什么. AC这道题我就能进前15了诶. 我们发现只要确定了轮廓线那么此时的状态就 ...
- IE6 IE7下li间距、高度不一致问题(转)
http://www.phpddt.com/dhtml/926.html 问题描述:li的高度在IE6 IE7间距高度和其他浏览器不一致,即便设定了高度,IE6,7中,仍比其他浏览器要高. 解决方法: ...
- input和textarea区别
1. input是单行文本,textarea是多行文本,可以带滚动条2. input的value放在标签里面 <input type="text" value="b ...
- C#递归删除进程及其子进程
/// <summary> /// 结束进程和相关的子进程 /// </summary> /// <param name="pid">需要结束的 ...
- APUE 学习笔记(五) 进程环境
1.main函数 C程序总是从main函数开始执行,当内核执行C程序时,在调用main函数之前先调用exec函数从内核获取命令行参数和环境变量值 2.进程终止 正常终止: (1)在main函数内执 ...
- 洛谷 [P3008] 道路与航线
最短路 因为有负权边,所以不能 dijkstra ,本题数据还卡 SPFA 但是我们发现,有负权的都是有向边,而且如果把无向边连成的联通块看成一个点的话,有向边就连成了一个 DAG,所以我们可以对所有 ...
- 重新实践《轻量级DJANGO》这本书
从手到尾,手写的DJANGO,不借助命令,效果一样的呢. import os import sys import hashlib from django.conf import settings DE ...
- L1-5. A除以B【一种输出格式错了,务必看清楚输入输出】
L1-5. A除以B 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 真的是简单题哈 —— 给定两个绝对值不超过100的整数A和 ...
- SSM框架CRUD小案例
1.数据库准备 部门tbl_dept 员工tbl_emp 建立员工和部门的外键 2.在IDEA创建SSM项目环境 2.1配置Web模块 最上面的图是错误示范,注意!!! 在Tomcat配置了项目路径, ...
- codeforces A. In Search of an Easy Problem
A. In Search of an Easy Problem time limit per test 1 second memory limit per test 256 megabytes inp ...