一  downwardAPI的应用

  1.1  前面我们介绍了如何通过configmap以及secret将配置传入到pod的容器中,但是传递的这些都是预先能够安排和只晓得,对于那些只有当pod创建起来之后才由其他一些资源创建的配置,上面说到的那些都没用,我们需要另外一种kubernets资源来提供这些配置的渲染,这种方式主要是通过将pod定义和状态中取得的数据作为环境变量和文件值

  1.2  介绍pod一些常见的元数据

    • pod的名称
    • pod的IP
    • pod所在的命名空间
    • pod所在的运行节点
    • pod的标签
    • pod的注解
    • pod运行所归属的服务账号名称
    • 每个容器请求的CPU和内存的使用量
    • 每个容器可以使用的CPU以及内存的限制

二 通过环境变量的形式暴露元数据

  2.1  创建一个pod然后将以上pod的元数据暴露到容器的环境变量里面

apiVersion: v1
kind: Pod
metadata:
name: downward
spec:
containers:
- name: main
image: busybox
command: ["sleep", "999999"]
resources:
requests:
cpu: 15m
memory: 10M
limits:
cpu: 100m
memory: 50M
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: SERVICE_ACCOUNT
valueFrom:
fieldRef:
fieldPath: spec.serviceAccountName
- name: CONTAINER_CPU_REQUEST_MILLICORES
valueFrom:
resourceFieldRef:
resource: requests.cpu
divisor: 1m
- name: CONTAINER_MEMORY_LIMIT_KIBIBYTES
valueFrom:
resourceFieldRef:
resource: limits.memory
divisor: 1M
  • 通过该文件创建了一个pod,并定义了POD_NAME,POD_IP等的环境变量
  • 注意一下resource的单位要定义准确,否则有可能会卡在ContainerCreating上面

  2.2  查看一下该创建的容器里面所渲染出来的环境变量

[root@node01 Chapter08]# k exec downward -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=downward
POD_NAME=downward
POD_NAMESPACE=default
NODE_NAME=node01
POD_IP=10.244.2.65
SERVICE_ACCOUNT=default
CONTAINER_CPU_REQUEST_MILLICORES=15
CONTAINER_MEMORY_LIMIT_KIBIBYTES=50
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
HOME=/root
  • 可以看到上面定义的所有内容都成功的渲染到了容器的环境变量里面了

  2.3 创建一个pod,然后通过downwardapi卷的形式将pod的元数据以文件的形式挂载到pod的容器里面

apiVersion: v1
kind: Pod
metadata:
name: downward-volume
labels:
name: wxm
annotations:
key1: value1
key2: |
multi
line
value
spec:
containers:
- name: main
image: busybox
command: ["sleep", "999999"]
resources:
requests:
cpu: 15m
memory: 10M
limits:
cpu: 100m
memory: 50M
volumeMounts:
- name: downward
mountPath: /etc/downward volumes:
- name: downward
downwardAPI:
items:
- path: "podName"
fieldRef:
fieldPath: metadata.name
- path: "podNamespace"
fieldRef:
fieldPath: metadata.namespace
- path: "annotations"
fieldRef:
fieldPath: metadata.annotations
- path: "containerCpuRequestMilliCores"
resourceFieldRef:
containerName: main
resource: requests.cpu
divisor: 1m
- path: "containerMemoryLimitBytes"
resourceFieldRef:
containerName: main
resource: limits.memory
divisor: 1M

  2.4  之后查看该容器是否渲染成配置文件了

[root@node01 Chapter08]# k exec downward-volume -- ls -Alrt /etc/downward
total 0
lrwxrwxrwx 1 root root 19 Jan 5 12:43 podNamespace -> ..data/podNamespace
lrwxrwxrwx 1 root root 14 Jan 5 12:43 podName -> ..data/podName
lrwxrwxrwx 1 root root 32 Jan 5 12:43 containerMemoryLimitBytes -> ..data/containerMemoryLimitBytes
lrwxrwxrwx 1 root root 36 Jan 5 12:43 containerCpuRequestMilliCores -> ..data/containerCpuRequestMilliCores
lrwxrwxrwx 1 root root 18 Jan 5 12:43 annotations -> ..data/annotations
lrwxrwxrwx 1 root root 31 Jan 5 12:43 ..data -> ..2021_01_05_12_43_26.673712213
drwxr-xr-x 2 root root 140 Jan 5 12:43 ..2021_01_05_12_43_26.673712213
  • 可以看到数据成功的挂载到了pod的目录上面了
  • 我们如愿以偿的将标签和注解也成功的以文件的形式挂载到了容器上面
  • 当暴露的内容是容器级别的时候需要指定容器名称如图中红色所示

kubernets之从应用访问pod元数据以及其他资源的更多相关文章

  1. Kubernetes学习笔记(七):访问Pod元数据与Kubernetes API

    Downward API 我们已经了解到,使用ConfigMap和Secret向应用传递配置数据,这对于运行前预设的数据是可行的.但是对于那些不能预先知道的,就需要使用Downward API. Do ...

  2. 从应用访问Pod元数据-DownwardApi的应用

    对于某些需要调度之后才能知道的数据,比如 pod 的 ip,主机名,或者 pod 自身的名称等等,k8s 依旧很贴心的提供了 Downward API 的方式来获取此类数据,并且可以通过环境变量或者文 ...

  3. [原]CentOS7安装Rancher2.1并部署kubernetes (三)---解决登录kubernets超时和部署测试Pod和Containter[nginx为例]

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...

  4. spark on yarn模式下配置spark-sql访问hive元数据

    spark on yarn模式下配置spark-sql访问hive元数据 目的:在spark on yarn模式下,执行spark-sql访问hive的元数据.并对比一下spark-sql 和hive ...

  5. 第六章 通过Service访问Pod(中)

    6.2 Cluster IP 底层实现 Cluster IP 是一个虚拟IP,是由K8s节点上的iptables规则管理的. 使用类似轮询的方法访问Pod. 6.3 DNS 访问Service 在Cl ...

  6. 第六章 通过Service访问Pod(上)

    不应该直接使用Pod的ID地址作为对外提供服务的接口,应为一旦Pod重启,IP地址就变化了,解决方案是使用Service. 6.1 创建Service K8s service从逻辑上代表了一组Pod, ...

  7. k8s如何访问pod

    1. 通过 Service 访问 Pod 我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 control ...

  8. 如何访问Pod

    本章看点: 理清Deployment,ReplicaSet和Pod的关系,以及三者之间的网络关系,ip地址和端口号 通过Pod进入docker容器修改里面的内容 外部网络访问Pod里面的应用 一.通过 ...

  9. 如何访问pod(6)

    一.通过 Service 访问 Pod: 我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 control ...

随机推荐

  1. 双端口RAM和多模块存储器

    目录 双端口RAM 存取周期 双端口RAM 多模块存储器 普通存储器 单体多字存储器 多体并行的存储器 高位交叉编址的多体存储器 低位交叉编址的多提存储器 为什么要这么弄? 高位 低位 流水线(考试常 ...

  2. mysqldump: [ERROR] unknown variable 'database=test'.

    背景: 导出数据库test库的test表数据出现报错信息:mysqldump: [ERROR] unknown variable 'database=test'. 原来是my.cnf参数文件配置了以下 ...

  3. PHP代码审计学习-PHP-Audit-Labs-day2

    filter_var()函数 filter_var() 函数通过指定的过滤器过滤一个变量.如果成功,则返回被过滤的数据.如果失败,则返回 FALSE. filter_var(variable, fil ...

  4. Consul的使用

    Consul的使用 ​ 生产部署中,Consul安装在要注册服务的每个节点上.Consul有两种运行模式:客户端和服务器端,每个Consul数据中心必须至少有一个服务器,负责维护Consul状态,为了 ...

  5. django配置-mysql数据库相关配置

    Django3版本之前的配置 1. Django默认配置的数据库是sqlite 2. 使用mysql数据库需要下载的包 pip3 install PyMySQL 3. Django配置PyMySQL ...

  6. XML外部实体注入

    文章参考链接: 参考视频: https://www.bilibili.com/video/BV1tW411o7Fd?from=search&seid=13868972487110648015 ...

  7. 附029.Kubernetes安全之网络策略

    目录 环境构建 基础环境构建 网络测试 安全策略 策略配置 策略测试 ingress方向测试 egress方向测试 to和from行为 默认策略 环境构建 基础环境构建 [root@master01 ...

  8. jquery 局部刷新load 某个div或者某个表格

    在使用 ajax 进行删除用户操作的时候,可以在 success 里写一个 window.location.reload(); 让页面刷新. 但是,我不想那样,我只想局部刷新 比如,我删除几个用户后, ...

  9. html怎么在网页标题栏上添加图标

    需要先把图片格式转换为.ico类型在这个网址在线转换很方便:https://www.easyicon.net/covert/在<head></head>加一行来显示图标(注意, ...

  10. Java Int类型与字符,汉字之间的转换

    /** * java 中的流主要是分为字节流和字符流 * 再一个角度分析的话可以分为输入流和输出流 * 输入和输出是一个相对的概念 相对的分别是jvm虚拟机的内存大小 * 从另一个角度讲Java或者用 ...