掌握 Dowanward API 的妙用,轻松拿捏 kubernetes 环境变量

5c3d877fad9bcec3fbb0259200971d91.gif

作者 | 江小南

来源 | 江小南和他的小伙伴们

引言

前两天,公司有个新同事愁眉苦脸,看起来心事重重,我去问他怎么回事,原来是有个需求犯了难:一次部署起四个pod,每个pod名称还不一样,怎么判断是哪个pod产生的日志呢?听到这,我微微一笑,给他讲解了Dowanward API的妙用,他一听,紧缩的眉头缓缓舒展开来,眼看着他将日志名称写成$MY_POD_NAME.log,我轻轻点头表示满意。答应的周末请客吃饭把我也乐了。今天就将Dowanward API的功能介绍给大家。

总体思路

通过配置环境变量或者挂载Dowanward API卷的形式来暴露pod的元数据,使pod能够获得相应的信息。

环境准备

  1. 准备三台服务器搭建kubernetes集群。

40be1ca4b59f1ddf441484a9e7b89915.png

节点名称IP
k8s-master172.31.0.2
k8s-worker1172.31.0.3
k8s-worker2172.31.0.4
[root@k8s-master ~]# kubectl get nodes
NAME          STATUS   ROLES                  AGE    VERSION
k8s-master    Ready    control-plane,master   5d4h   v1.20.9
k8s-worker1   Ready    <none>                 5d4h   v1.20.9
k8s-worker2   Ready    <none>                 5d4h   v1.20.9
[root@k8s-master ~]#
  1. 准备yaml来部署应用。

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploynamespace: defaultlabels:app: nginx-deploy
spec:selector:matchLabels:app: nginx-deployreplicas: 4template:metadata:labels:app: nginx-deployspec:containers:- name: mynginximage: nginximagePullPolicy: IfNotPresentcommand: [ "/bin/bash", "-ce", "tail -f /dev/null" ]

测试

通过上面deployment.yaml部署的应用是不能获取到pod名称的,但是使用Dowanward API就可以轻松搞定。有两种方式供大家参考。

一、配置环境变量

将上面的yaml进行改造。

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploynamespace: defaultlabels:app: nginx-deploy
spec:selector:matchLabels:app: nginx-deployreplicas: 4template:metadata:labels:app: nginx-deployspec:containers:- name: mynginximage: nginximagePullPolicy: IfNotPresentcommand: [ "/bin/bash", "-ce", "tail -f /dev/null" ]env:- name: MY_POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: MY_POD_IPvalueFrom:fieldRef:fieldPath: status.podIP- name: HOST_IPvalueFrom:fieldRef:fieldPath: status.hostIP- name: LIMITS_MEMORYvalueFrom:resourceFieldRef:resource: limits.memory

我们添加了环境变量env,分别取pod名称和ip。

[root@k8s-master test]# kubectl apply -f deployment.yaml 
deployment.apps/nginx-deploy created
[root@k8s-master test]# kubectl get pod
NAME                            READY   STATUS    RESTARTS   AGE
nginx-deploy-6f4c989cff-2mcm5   1/1     Running   0          55s
nginx-deploy-6f4c989cff-mjx9n   1/1     Running   0          55s
nginx-deploy-6f4c989cff-vhncx   1/1     Running   0          56s
nginx-deploy-6f4c989cff-wtjzd   1/1     Running   0          57s
[root@k8s-master test]#

通过改造的yaml成功部署了4个pod,进入到容器内部一探究竟。

[root@k8s-master test]# kubectl exec -it nginx-deploy-6f4c989cff-2mcm5 -c mynginx -- /bin/bash
root@nginx-deploy-6f4c989cff-2mcm5:/# echo $MY_POD_NAME
nginx-deploy-6f4c989cff-2mcm5
root@nginx-deploy-6f4c989cff-2mcm5:/# echo $MY_POD_IP
192.168.126.42
root@nginx-deploy-6f4c989cff-2mcm5:/# echo $HOST_IP
172.31.0.4
root@nginx-deploy-6f4c989cff-2mcm5:/#

成功获取到了pod名称和ip,而且宿主机的ip也能获取到,在编写代码的时候就可以使用$MY_POD_NAME来获取到相应的值了,非常灵活方便。

二、挂载Dowanward API卷

还是将我们初始的deployment.yaml进行改造。

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploynamespace: defaultlabels:app: nginx-deploy
spec:selector:matchLabels:app: nginx-deployreplicas: 4template:metadata:labels:app: nginx-deployspec:containers:- image: nginximagePullPolicy: IfNotPresentcommand: [ "/bin/bash", "-ce", "tail -f /dev/null" ]name: mynginxvolumeMounts:- name: podinfomountPath: /etc/podinforeadOnly: falsevolumes:- name: podinfodownwardAPI:items:- path: namefieldRef:fieldPath: metadata.name- path: namespacefieldRef:fieldPath: metadata.namespace
[root@k8s-master test]# kubectl apply -f deployment.yaml 
deployment.apps/nginx-deploy configured
[root@k8s-master test]# kubectl get pod
NAME                           READY   STATUS    RESTARTS   AGE
nginx-deploy-d5fc6886d-c7fvh   1/1     Running   0          4m8s
nginx-deploy-d5fc6886d-wgzvs   1/1     Running   0          4m6s
nginx-deploy-d5fc6886d-xc699   1/1     Running   0          4m6s
nginx-deploy-d5fc6886d-xvgj7   1/1     Running   0          4m8s
[root@k8s-master test]#

同样创建了4个pod,我们进入到容器内部。

[root@k8s-master test]# kubectl exec -it nginx-deploy-d5fc6886d-c7fvh -c mynginx -- /bin/bash
root@nginx-deploy-d5fc6886d-c7fvh:/# cd /etc/podinfo/
root@nginx-deploy-d5fc6886d-c7fvh:/etc/podinfo# ls
name  namespace
root@nginx-deploy-d5fc6886d-c7fvh:/etc/podinfo# cat name
nginx-deploy-d5fc6886d-c7fvh
root@nginx-deploy-d5fc6886d-c7fvh:/etc/podinfo# cat namespace 
default
root@nginx-deploy-d5fc6886d-c7fvh:/etc/podinfo#

同样获取到了pod名称,但是这种方式不是环境变量,在编写代码时使用到的话需要做一些处理。

推荐使用配置环境变量的形式

梳理总结

Dowanward API常用的字段如下:

  1. 使用fieldRef可以声明使用的字段:

字段含义
spec.nodeName宿主机名称
status.hostIP宿主机IP
metadata.namePod的名称
metadata.namespacePod所属的Namespace
status.podIPPod的IP
spec.serviceAccountNamePod的Service Account的名称
metadata.uidPod的UID
metadata.labels['<KEY>']指定<KEY>的Label值
metadata.annotations['<KEY>']指定<KEY>的Annotation值
metadata.labelsPod的所有Label
metadata.annotationsPod的所有Annotation
  1. 使用resourceFieldRef可以声明使用的字段:

字段含义
limits.cpu容器的CPU limit
requests.cpu容器的CPU request
limits.memory容器的memory limit
requests.memory容器的memory request

be965d86e9fa6e674cbe013f29ce3cec.gif

往期推荐

Docker 那些事儿:如何安全地停止、删除容器?

使用 nginx 轻松管理 kubernetes 资源文件

Redis 内存满了怎么办?这样置才正确!

实战 Kubectl 创建 Deployment 部署应用

90565f4889bed5960620635d1823a046.gif

点分享

4972e514d58d4da423f9f9cb94b3582e.gif

点收藏

5d14f4ee82498a885a911855efd856c1.gif

点点赞

3c90fa5ac1c78ffd95ff3d16b23b32d4.gif

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一撕得:全员参与低代码开发,全面实现企业数字化管理

简介&#xff1a;借助钉钉宜搭&#xff0c;一撕得全面实现数字化管理&#xff0c;持续推动业务和企业进步。 北京一撕得物流技术有限公司 201-500人 / 互联网 / 中国-北京 / 数字化管理平台 “通过钉钉宜搭低代码技术&#xff0c;推进一撕得数字化转型。将日常办公及业务管理…

加码对象存储,XSKY星辰天合发布下一代对象存储XEOS V6

XSKY发布下一代对象存储XEOS V6&#xff0c;全新架构设计&#xff0c;具备“无限扩展”、“智能流动”、“多重保护”、“开放共赢”四大特性&#xff0c;进一步向主存储进军。 软件定义存储市场&#xff0c;即有传统存储大厂&#xff0c;也有更多优秀的国内存储厂商参与其中。…

引领新媒体时代的潮水方向—世相科技

漫步云端&#xff0c;世相科技正在引领新媒体时代的潮水方向。阿里云正在携手越来越多的新媒体客户&#xff0c;一道致力于简化基础设施与架构&#xff0c;提升更优的行业竞争力。 客户故事 新媒体的飞速发展&#xff0c;为各种创意传播带来了崭新机遇。世相科技子公司研发的中…

推文科技:AI解决方案助力内容出海

2017年&#xff0c;推文科技成立&#xff0c;推出业内针对网络文学的AI系统&#xff0c;助推网文批量出海。2018年&#xff0c;阿里云上线海外可用区&#xff0c;推文科技开始与阿里云合作。 创业宣言 创业是一件用行动去实践相信的事情&#xff0c;也许有一天&#xff0c;我…

多线程一定能优化程序性能吗?

作者 | 陆小风来源 | 码农的荒岛求生问&#xff1a;如果一个和尚挑水喝&#xff0c;两个和尚抬水喝&#xff0c;三个和尚没水喝&#xff0c;那么众人拾柴一定火焰高吗&#xff1f;多线程一定能提高程序性能吗&#xff1f;在计算机科学中&#xff0c;这个问题的标准答案是“it d…

4种常见分支模式解析及优劣对比

简介&#xff1a;团队研发的本质并不是团队规模越大&#xff0c;研发的效率就越高。我们以为团队规模越大&#xff0c;研发效率就会越高&#xff0c;可以做越多的东西&#xff0c;但是我们发现团队规模大到一定程度&#xff0c;整个研发效率是会下降的&#xff0c;甚至降得非常…

重构知识的供给模式 ——《数据平台》从思考到落地

简介&#xff1a;如何去建立一套 “高度自动化&体系化的知识管理系统&#xff0c;重构知识的供给模式”。是不是看不懂&#xff1f;而且有点冲&#xff1f;是不是谜语人附体&#xff1f;别急&#xff0c;本文作者将会做详细的说明。 作者 | 七惜 来源 | 阿里技术公众号 一…

PolarDB for PostgreSQL 内核解读 :HTAP架构介绍

简介&#xff1a;在 PolarDB 存储计算分离的架构基础上我们研发了基于共享存储的MPP架构步具备了 HTAP 的能力&#xff0c;对一套 TP的数据支持两套执行引擎&#xff1a;单机执行引擎用于处理高并发的 OLTP&#xff1b;MPP跨机分布式执行引擎用于复杂的 OLAP 查询&#xff0c;发…

kubernetes 的这几种存储卷,别再傻傻分不清了

作者 | 江小南来源 | 江小南和他的小伙伴们存储卷类型Kubernetes提供的存储卷&#xff08;volume&#xff09;属于Pod资源&#xff0c;共享于Pod内的所有容器&#xff0c;存储卷可在容器的文件系统之外存储相关的数据&#xff0c;也可以独立于Pod的生命周期实现数据持久化存储。…

这群人,用8年讲述体育能有多迷人

望尘科技&#xff1a;专注体育娱乐在线体验的自主研发&#xff0c;致力于让体育迷获得高品质的沉浸式体验。用科技致敬体育&#xff0c;是他们坚持的信仰。 客户故事 望尘科技一心专注深耕体育游戏。他们把自己的计算中心搬到了云上&#xff0c;借助阿里云数字基础设施为程序…

成中集团线下IDC迁移上云

阿里云根据成中集团业务场景入手&#xff0c;提供了上云方案和迁移建议&#xff0c;利用这套架构&#xff0c;保障了公司数据的安全性并且满足了公司对于备份机制的建立的基本诉求&#xff0c;并且降低了业务出现中断的风险。 公司介绍 成中简介&#xff1a; 我们公司是一家…

什么是hpaPaaS平台?

作者 | Gordon Van Huizen&#xff0c;Mendix公司平台战略高级副总裁 供稿 | Mendix Gartner为两种云端应用开发方法创造了两个名称&#xff1a;高生产力应用程序平台即服务&#xff08;hpaPaaS&#xff09;和高控制应用平台即服务&#xff08;hcaPaaS&#xff09;。本文将对二…

重新认识访问者模式:从实践到本质

简介&#xff1a;访问者模式在设计模式中的知名度虽然不如单例模式&#xff0c;但也是少数几个大家都能叫得上名字的设计模式了。不过因为访问者模式的复杂性&#xff0c;人们很少在应用系统中使用&#xff0c;经过本文的探索&#xff0c;我们一定会产生新的认识&#xff0c;发…

3个案例,详解如何选择合适的研发模式

简介&#xff1a;3个案例&#xff0c;详解如何选择合适的研发模式&#xff0c;研发模式的选择与产品形态、发布方式、团队规模、协作成熟度密切相关。本文我们将根据不同的团队场景&#xff0c;分析如何选择适合团队的研发模式。 策划&编辑&#xff5c;雅纯 上一讲&#x…

如何打造一款极速数据湖分析引擎

简介&#xff1a;本文向读者详细揭秘了数据湖分析引擎的关键技术&#xff0c;并通过 StarRocks 来帮助用户进一步理解系统的架构。 作者&#xff1a; 阿里云 EMR 开源大数据 OLAP 团队 StarRocks 社区数据湖分析团队 前言 随着数字产业化和产业数字化成为经济驱动的重要动…

如何在 Linux 命令行中按大小对文件进行排序

作者 | 刘光录来源 | TIAPls 命令用于显示目录的内容。使用 -l 选项&#xff0c;可以列出文件和目录及其属性。今天我们来分享一下如何根据文件大小对列表进行排序。ls -l 命令可以显示文件大小&#xff0c;但也仅仅是能让我们看到文件的大小&#xff0c;它默认是按照字母顺序显…

福建品品香茶业有限公司业务迁移上云

福建品品香茶业有限公司数据量较大&#xff0c;进行业务迁移上云时阿里云根据其公司需求综合考虑&#xff0c;推荐将原有IOE架构改为分布式架构&#xff0c;使用ECSRDS承载业务&#xff0c;为客户带来极大价值。 企业介绍 福建品品香茶业有限公司是一家集茶叶种植、加工、销售…

璀璨智行:V2X车路协同智慧交通

V2X车用无线通信技术是指车对外界的信息交换&#xff0c;作为未来智能交通运输系统的关键技术&#xff0c;璀璨智行潜心研究V2X技术&#xff0c;致力于V2X车路协同的落地&#xff0c;在智慧交通领域做出了卓越的贡献。 创业机会点 魏军博表示&#xff1a;“面对交通系统效率低…

Databricks 企业版 SparkDelta Lake 引擎助力 Lakehouse 高效访问

简介&#xff1a;本文介绍了Databricks企业版Delta Lake的性能优势&#xff0c;借助这些特性能够大幅提升Spark SQL的查询性能&#xff0c;加快Delta表的查询速度。 作者&#xff1a; 李锦桂&#xff08;锦犀&#xff09; 阿里云开源大数据平台开发工程师 王晓龙&#xff08…

深度解析数据湖存储方案Lakehouse架构

简介&#xff1a;从数据仓库、数据湖的优劣势&#xff0c;湖仓一体架构的应用和优势等多方面深度解析Lakehouse架构。 作者&#xff1a;张泊 Databricks 软件工程师 Lakehouse由lake和house两个词组合而成&#xff0c;其中lake代表Delta Lake&#xff08;数据湖&#xff09;&…