K8s: 在Pod里面配置容器启动的命令参数及容器间依赖的环境变量

k8s学习笔记(三):pod的启动流程和实践案例 启动一个pod背后会发生什么?如何去创建一个pod呢?一文教你搞懂! 阅读详情

在Pod里面配置容器启动的命令参数


1 ) 概述

  • 创建 Pod 时,可以为其下的容器设置启动时要执行的命令及其参数
  • 如果要设置命令,就填写在配置文件的 command 字段下
  • 如果要设置命令的参数,就填写在配置文件的 args 字段下
  • 一旦 Pod 创建完成,该命令及其参数就无法再进行更改了
  • 如果在配置文件中设置了容器启动时要执行的命令及其参数
  • 那么容器镜像中自带的命令与参数将会被覆盖而不再执行
  • 如果配置文件中只是设置了参数,却没有设置其对应的命令
  • 那么容器镜像中自带的命令会使用该新参数作为其执行时的参数
  • 说明: 在有些容器运行时中, command 字段对应 entrypoint

2 )示例

2.1 基本配置

  • 现在,创建一个只包含单个容器的 Pod

  • 在 Pod 配置文件中设置了一个命令与两个参数

  • 创建 args.yaml

    apiVersion: v1
    kind: Pod
    metadata:
     name: command-demo
     labels:
     purpose: demonstrate-command
    spec:
     containers:
     - name: command-demo-container
     image: nginx # 这里正常来说替换成 centos
     command: ["printenv"]
     args: ["HOSTNAME", "KUBERNETES_PORT"]
     restartPolicy: OnFailure
    
  • $ kubectl apply -f args.yaml

    pod/args-demo created
    
  • $ kubectl get po | grep args

    args-demo        0/1     Completed          0              34s
    
  • $ kubectl logs args-demo

    args-demo
    tcp://10.1.0.1:443
    
  • 以上是打印出来了几个环境变量

2.2 将环境变量作为命令参数

  • 在上面的示例中,直接将一串字符作为命令的参数
  • 除此之外,我们还可以将环境变量作为命令的参数
  • 现在,我们想要自己定义一些环境变量,修改 yaml 文件
  • 关键修改如下
    spec:
      containers:
      - name: args-demo-container
        image: nginx # 这里正常来说替换成 centos
        env:
        - name: MSG
          value: 'hello world'
        resources:
          limits:
            memory: "64Mi"
            cpu: "200m"
        ports:
        - containerPort: 80
        command: ["/bin/echo"]
        args: ["$(MSG)"]
      restartPolicy: OnFailure
    
  • 重新 delete pod 后,重新 apply 之后查看日志
  • $ kubectl logs args-demo
    hello world
    
  • 以上,可见输出了定义的环境变量

Pod容器间依赖的环境变量

  • 当创建一个 Pod 时,可以为运行在 Pod 中的容器设置相互依赖的环境变量
  • 设置相互依赖的环境变量,你就可以在配置清单文件的 env 的 value 中使用 $(VAR_NAME)
  • 现在创建一个单容器的 Pod, 此 Pod 的配置文件定义了一个已定义常用用法的相互依赖的环境变量
  • 创建 env-dep.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: env-dep-demo
      labels:
        name: env-dep-demo
    spec:
      containers:
      - name: env-dep-demo
        image: busybox
        resources:
          limits:
            memory: "64Mi"
            cpu: "200m"
        command:
        - sh
        - -c
        args:
        - printf SERVICE_ADDRESS=$SERVICE_ADDRESS'\n'; printf ESCAPED_REFERENCE=$ESCAPED_REFERENCE'\n'; sleep 120
        env:
        - name: SERVICE_IP
          value: "172.17.0.1"
        - name: SERVICE_PORT
          value: "80"
        - name: SERVICE_ADDRESS
          value: "$(PROTOCOL)://$(SERVICE_IP):$(SERVICE_PORT)"
        - name: PROTOCOL
          value: "https"
        - name: ESCAPED_REFERENCE
          value: "$(PROTOCOL)://$(SERVICE_IP):$(SERVICE_PORT)"
    
  • 注意,上述配置中,args 中要加上 sleep, 否则就会退出
  • $ kubectl apply -f env-dep.yaml 创建 pod
pod/env-dep-demo created
  • $ kubectl get po | grep env 获取 pod 状态
    env-dep-demo     1/1     Running            0               21s
    
  • $ kubectl logs env-dep-demo 查看 pod 日志
    SERVICE_ADDRESS=$(PROTOCOL)://172.17.0.1:80
    ESCAPED_REFERENCE=https://172.17.0.1:80
    
  • 以上可以看到,因为 PROTOCOL 的定义位置
  • 导致了第一个没有正确打印出来,但是第二个正常
  • 修改yaml文件的最后一行,这里多加了 $, 也就是 $$
    	    - name: ESCAPED_REFERENCE
    	      value: "$$(PROTOCOL)://$(SERVICE_IP):$(SERVICE_PORT)"
    
  • 重新 apply 等待运行后,执行 $ kubectl logs env-dep-demo
    SERVICE_ADDRESS=$(PROTOCOL)://172.17.0.1:80
    ESCAPED_REFERENCE=$(PROTOCOL)://172.17.0.1:80
    
  • 可见,多加了一个 $, 就无法正常显示了
  • 总结,以下几点需要特别注意:
    • 定义env的位置和引用的位置
    • 不能多加 $
    • 还有,解析不正确的环境变量通常不会阻止容器启动
大白话 K8S(03):从 Pause 容器理解 Pod 的本质 本篇是《大白话 K8S》第三篇,本系列文章目录可以点此链接:《大白话 K8S》 在 K8S 中,Pod 是最核心、最基础的资源对象,它是 Kubernetes 中调度最小单元,学习 K8S 很多时候,我们都是在跟 Pod 打交道,它的内容是最多的,需要分好多的章节才能将它讲透。 本篇作为 Pod 的首篇,打算先从咱们熟悉的 Docker 容器入手,介绍 Pod 的组成及其工作原理。 主要解决几个关键问题: Pod 是什么?它与容器是什么关系? 为什么 K8S 不直接管理容器呢? 1. Pod 与 容器 阅读详情

相关推荐

Kubernetes(k8s)之认识Pod

摘要:本文介绍了Kubernetes中的基本单元Pod的概念与使用方法。Pod是Kubernetes最小部署单位,封装一个或多个容器及其共享资源,包括存储、网络IP等。文章详细解析了Pod的两种使用模式(单容器和多容器)、结构定义、资源清单配置,并重点说明了镜像拉取策略(IfNotPresent/Always/Never)和容器启动命令设置规则。通过示例展示了如何通过command和args参数覆盖容器默认启动命令,为Kubernetes初学者提供了Pod基础知识的系统讲解。

m0_60889254的博客 773

k8s常用命令

查看运行pod、deployment等状态。上面命令查不到可以用pod运行日志。

weixin_43205308的博客 4403

【K8S问题系列】Kubernetes Pod节点CrashLoopBackOff 状态【已解决】

在 Kubernetes 中,Pod 的状态为 **`CrashLoopBackOff`** 表示某个容器在启动后崩溃,Kubernetes 尝试重启该容器,但由于持续崩溃,重启的间隔时间逐渐增加。下面将详细介绍 `CrashLoopBackOff`状态的原因、解决方案及相关命令的输出解释。

颜淡慕潇 1万+

K8s常用命令操作

1 kubectl rolling-update redis-master -f redis-master-controller-v2.yaml #配置文件滚动升级。3 kubectl rolling-update redis-master --image=redis-master:1.0 --rollback #pod版本回滚。2 kubectl rolling-update redis-master --image=redis-master:2.0 #命令升级。

happy_king_zi的博客 2273

【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】

在 Kubernetes 中,Pod 的状态为 **`CrashLoopBackOff`** 表示某个容器在启动后崩溃,Kubernetes > 尝试重启该容器,但由于持续崩溃,重启的间隔时间逐渐增加。下面将详细介绍 `CrashLoopBackOff > `状态的原因、解决方案及相关命令的输出解释。

颜淡慕潇 8381

Kubernetes Pod资源初始化容器概念及配置(十)

pod资源初始化容器概念及配置 1.初始化容器应用场景 初始化容器是在pod的主容器启动之前要运行的容器,主要是做一些容器的前置工作 初始化容器必须运行完成直至结束,如果初始化容器运行失败,那么kubernetes会一直重启它直到成功完成 初始化容器必须按照定义的顺序运行,当前一个成功之后,后一个才能运行 初始化容器启动失败,主容器也无法启动 初始化容器应用常用: 提供主容器镜像中不具备的工具程序或自定义代码 初始化容器要先于主应用容器串行启动并运行完成,因此可以用于延后应用容器的启动直至其依赖条件得到满

江晓龙的博客 1万+

k8s学习之路 | Day16 k8s 中的容器初探

k8s 集群中最小的管理单元就是一个Pod,而Pod里面才是容器,但是容器里面到底应该怎么写yaml呢?这个就是我今天学习的目标Pod。

小鲸鱼大梦想 1584

Kubernetes集群Pod资源结构定义及常用配置参数(五)

Pod资源介绍及定义 1.Pod资源的结构 一个Pod中会运行一个或多个容器,实际上每一个pod都至少有两个容器,一个是pod根容器,一个是应用容器,应用容器都是建立在根容器之上,根容器上会绑定ip地址,应用容器里面只是提供了业务和开放了端口,如果一个pod中有多个容器,他们其实都是共享的根容器的地址,至于每个容器开放的端口是谁先占用谁就先得到这个端口 pod根容器也就引出了k8s的一个重要概念,之前容器运行在docker上,无法提供自愈这种机制,有了k8s,容器建立在根容器之上,k8s集群对pod根容器进

江晓龙的博客 1万+

k8s 容器启动时传递镜像运行时参数

背景 我们使用springboot 打成的jar构建docker镜像上传到barbor镜像库之后,如果镜像中的参数发生了变化(springboot application.properties中的启动参数变更),比如mysql的地址变更了。不必修改配置文件,重新打包上传,修改k8s容器启动配置文件,重新启动容器即可 Docker file如下: FROM harbor.ht.com/micro-service/openjdk:8-jre MAINTAINER xxx xxx@imooc.com C

fantasticqiang的博客 8636

Kubernetes集群Pod资源启动命令command和args(七)

2.pod资源配置容器启动命令 在1.2、1.3中,busybox容器一直没有启动成功,是由于busybox只是一个操作系统,相当于一个工具的集合,busybox启动后,没有程序夯住该容器,他就会自动关闭 像这种没有程序一直夯住容器,解决办法其实也很简单,只需要想办法让一个命令一直运行,就能将容器一直运行下去了 pod资源中containers.command就可以实现让容器一直运行一个命令 pod资源中containers.command和containers.args都可以设置容器的启动命令,comm

江晓龙的博客 1万+

Camera(5)metadata

Metadata 是整个 Android camera 中类似于高楼大厦中的管道系统一样,贯穿了整个 Camera 的 Framework 和 vendor HAL。Metadata 里面包含了所有的控制、参数、返回值等等。Metadata分为Android原生的Metadata和芯片商或者用户自定义的Metadata,即Android Tag和Vendor Tag。Vendor Tag在Hal中定义,并在camx和chi目录中使用。

qq_55893245的博客 3056

Kubernetes最小单元Pod介绍及配置

Pod是Kubernetes中的一个基本构建块,它是一个逻辑主机,用于托管一个或多个容器。Pod中的容器共享网络和存储资源,并且通常作为一个单元一起调度和管理。Pod为容器提供了一个共享的环境,使得容器之间可以方便地通信和共享数据。Pod还可以配置资源限制、健康检查、重启策略等,以满足不同的应用需求。Pod是Kubernetes中创建和管理容器的最小和最简单的单位,是实现容器编排和自动化部署的基础。

weixin_72583321的博客 1398

用python将dycom .dcm格式图像转换为nifti .nii

因为发现目前搜索到的多数中文教程并不能正确将FMRI图像正确转换,例如很多用simpleITk的seriesreader的,所以写了一下自己正确转换的方法。因为FMRI是一个4D数据,有时间轴,所以用seriesreader读写出来的图像把时间轴维度给降维了。当然你用SPM12工具的dycom import也是能正确转换的,但是我还是喜欢python这样的,代码直接简单。

qq_41103479的博客 3609

k8s 启动命令cmd_Kubernetes(k8s)为容器设置启动时要执行的命令和参数

创建 Pod 时设置命令及参数创建 Pod 时,可以为其下的容器设置启动时要执行的命令及其参数。如果要设置命令,就填写在配置文件的 command 字段下,如果要设置命令的参数,就填写在配置文件的 args 字段下。一旦 Pod 创建完成,该命令及其参数就无法再进行更改了。如果在配置文件中设置了容器启动时要执行的命令及其参数,那么容器镜像中自带的命令与参数将会被覆盖而不再执行。如果配置文件中只是设...

weixin_28703451的博客 2977

Microduck机器鸭开源AI项目:本地部署与模型微调实战指南

开源AI模型的本地化部署与定制化训练正成为开发者关注的技术趋势。与依赖云端API的在线服务不同,本地部署允许用户将模型权重下载至自有GPU环境,通过命令行或WebUI完成推理、批量任务处理及API集成,在数据隐私、离线使用和接口稳定性方面具备天然优势。模型微调则基于预训练权重,利用领域数据训练特定任务,从而提升生成质量与业务适配度。这一技术路径广泛应用于内容生成、智能对话、自动标注等场景,尤其适合消费级显卡开发者、数据敏感型团队及二次开发研究者。Microduck(机器鸭)作为近期预售火爆的开源项目,围绕“

weixin_29082143的博客 415

Vue路由守卫实战:利用token实现跨项目免登录跳转(最新版)

本文详细介绍了如何利用Vue路由守卫和Token验证实现跨项目免登录跳转方案。通过核心架构设计、路由守卫精细化控制及Token交换安全实践,有效解决了多系统跳转中的认证问题,提升用户体验和系统连贯性。

n7o8p的博客 139

【Kubernetes实战】四、Pod详解①——Pod的结构、定义和配置

可以以它为依据,评估整个Pod的健康状态(Pod的寿命与Pause相同,而与用户容器无关);可以在根容器上设置IP地址,其它容器都此IP(Pod IP),以实现Pod内部的网络通信(Pod的之间的通信采用虚拟二层网络技术来实现,当前环境用的是Flannel)。summary:知道pod里有1根容器(Pause)+n个用户容器,可通过Pause容器判断健康状态、可以做IP共享。apiVersion: v1 #必选,版本号,例如v1kind: Pod #必选,资源类型,例如 Pod。

Cherry0030的博客 1917

从CD4051到现代模拟开关:40年芯片演进史与选型避坑指南

本文回顾了从CD4051到现代模拟开关的40年技术演进,详细对比了导通电阻、带宽等关键参数的显著提升。通过实际案例和选型矩阵,揭示现代模拟开关在精度、功耗和集成度方面的优势,并提供高精度测量、电池供电等场景的选型策略与避坑指南,帮助工程师优化设计。

weixin_42543046的博客 154

k8s的Pod内容器互相访问——容器内使用python操作同Pod的mysql容器

目录 一、容器外部访问容器内部服务 1. 使用hostNetwork参数(容器内部服务与宿主机同一网段) 2. 使用hostPort参数(将容器内端口暴露出来) 3. 使用NodePort参数 4. 使用LoadBalancer参数 二、容器内部服务访问外部服务 1. 使用hostNetwork参数(Pod与宿主机在同一网段) 2. 使用endpoints组件 序言 研究k8s...

Briwisdom的博客 1万+

基于STM32设计的万能红外遥控器(学习型)

当前介绍了一种基于STM32微控制器设计的红外遥控器,支持接收解码功能和发送功能,可以将接收的码原样发送出去。 红外遥控器作为智能设备控制方式之一,在一定程度上满足了人们对于快速方便控制的需求。 当前设计的红外遥控器支持学习模式和发送模式。通过矩阵键盘上的数字键选择发送对应的控制码。 一共支持学习10个控制码,对应矩阵键盘上的数字。0~9。

6559

innovus:streamOut gds中pg text带有冒号(:)解决办法

streamOut后查看layout,发现部分PG text后面加了冒号,比如VDD: / VSS:。当然,这个问题还有另一种解决办法,就是通过脚本给terminal打text再streamOut。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1192

K8s Pod详解

apiVersion: v1 #必选,版本号,例如v1kind: Pod   #必选,资源类型,例如 Podmetadata:   #必选,元数据name: string #必选,Pod名称namespace: string #Pod所属的命名空间,默认为"default"labels:    #自定义标签列表spec: #必选,Pod中容器的详细定义containers: #必选,Pod中容器列表- name: string #必选,容器名称。

qq_53374893的博客 1680

NX二次开发常用函数——从一个坐标系到另一个坐标系的转换(UF_MTX4_csys_to_csys )相同体坐标转化

本文介绍了在项目开发中实现坐标转换的方法,重点解析了两个关键函数UF_MTX4_csys_to_csys和UF_MTX4_vec3_multiply的使用。通过4个变换矩阵(transform1-4)实现工作坐标系与绝对坐标系之间的相互转换,并以圆柱体为例详细说明了坐标转换的具体实现过程,包括原点、X/Y轴方向的转换处理。相比之前采用的if-else判断方法,这种矩阵转换方式在代码复杂度和运行效率上都更具优势。

weixin_47753171的博客 600

K8S基础-Pod

K8S基础-基本概念一,Pod1.1 创建一个pod1.2更改Pod的启动命令和参数。1.3 Pod状态及Pod故障排查命令1.4 Pod镜像拉取策略1.5 Pod 重启策略1.6 Pod的三种探针1.7 Pod探针的实现方式1.8 livenessProbe和readinessProbe1.9 配置StartupProbe1.10 gRPC 探针。

do_not_disturb的博客 1933

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

k8s基础5——Pod常用命令、资源共享机制、重启策略和健康检查、环境变量、初始化容器、静态pod

1、pod基础概念、常用命令、创建pod的工作流程。 2、共享存储、共享网络。 3、pod的生命周期、重启策略和健康检查。 4、挂载环境变量。 5、初始化容器。 6、静态pod

百慕卿君博客 4975

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

K8s Pod Command 与容器镜像 Cmd 启动优先级详解

前言创建 Pod 时,可以为其下的容器设置启动时要执行的命令及其参数。如果要设置命令,就填写在配置文件的command字段下,如果要设置命令的参数,就填写在配置文件的args字段...

qq_24794401的博客 1810

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: K8s: 在Pod里面创建init容器与健康检查
下一篇: K8s: 在Pod里面对容器进行配额管理和相关原理
Wang's Blog
博客等级 码龄12年 7433粉丝 2420原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值