首页 > 其他分享 >Kubernetes--管理Pod对象的容器(2)

Kubernetes--管理Pod对象的容器(2)

时间:2022-10-19 15:22:36浏览次数:60  
标签:容器 name Kubernetes -- 应用程序 v1 镜像 Pod 环境变量

自定义运行的容器化应用

由Docker镜像启动容器时运行的应用程序在相应的Dockerfile中由ENTRYPOINT指令进行定义,传递给程序的参数则通过CMD指令指定,ENTRYPOINT指令不存在时,CMD可用于同时指定程序及其参数。例如,在某工作节点上运行下面的命令获取ikubernetes/myapp:v1镜像中定义的CMD和ENTRYPOINT,命令如下:

docker inspect ikubernetes/myapp:v1@ -f {{.Config.Cmd}}
[nginx -g deamon off;]
docker inspect ikubernetes/myapp:v1 -f {{.Config.Entrypoint}}
[]

  

容器的command字段能够指定不同于镜像默认运行的应用程序,并且可以同时使用args字段进行参数传递,它们将覆盖镜像中的默认定义。不过,如果仅为容器定义了args字段,那么它将作为参数传递给镜像中默认指定运行的应用程序;如果仅为容器定义了command宇字段,那么它将覆盖镜像中定义的程序及参数,并以无参数方式运行应用程序。例如下面的资源清单文件将镜像 ikubernetes/myapp:v1的默认应用程序修改为了“/bin/sh”,传递应用的参数修改为了 “-c while true; do sleep 30; done”:
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-custom-command
spec:
  containers:
  - name: myapp
    image: alpine:latest
    command: ["/bin/sh"]
    args: ["-c","while true; do sleep 30; done"]

  

自定义args,也是向容器中的应用程序传递配置信息的常用方式之一,对于非云原生(cloud native)的应用程序,这几乎也是最简单的配置方式。另一个常用的方式是使用环境变量。

环境变量

非容器化的传统管理方式中,复杂应用程序的配置信息多数由配置文件进行指定,用户可借助于简单的文本编辑器完成配置管理。然而,对于容器隔离出的环境中的应用程序,用户就不得不穿透容器边界在容器内进行配置编辑并进行重载,这种方式复杂且低效。于是,由环境变量在容器启动时传递配置信息就成为一种备受青睐的方式。

注意:这种方式依赖于应用程序支持通过环境变量进行配置的能力,否则,用户在制作Docker镜像时需要通过entrypoint脚本完成环境变量到程序配置文件的同步。

向Pod对象中的容器环境变量传递数据的方法有两种:env和envFrom,这里重点介绍第一种方式。第二种方式大家可自行查阅哦~

通过环境变量配置容器化应用时,需要在容器配置段中嵌套使用env字段,它的值是一个由环境变量构成的列表。环境变量通常由name和value字段构成。

  • name: 环境变量的名称,必选字段。
  • value< string>:传递给环境变量的值,通过$(VAR_NAME)引用,逃逸格式为“$$(VAR_NAME)”,默认值为空。

下面配置清单中定义的Pod对象为其容器filebeat传递了两个环境变量,REDIS_HOST定义了filebeat收集的日志信息要发往的Redis主机地址,LOG_LEVEL则定义了filebeat的日志级别:

apiVersion: v1
kind: Pod
metadata:
  name: pod-with-env
spec:
  containers:
  - name: filebeat
    image: ikubernetes/filebeat:5.6.5-alpine
    env:
    - name: REDIS_HOST
      value: db.ilinux.io:6379
    - name: LOG_LEVEL
      value: info

  这些环境变量可直接注入容器的shell环境中,无论它们是否真正被用到,使用printenv一类的命令都能在容器中获取到所有环境变量的列表。


标签:容器,name,Kubernetes,--,应用程序,v1,镜像,Pod,环境变量
From: https://www.cnblogs.com/zhangxin9/p/16806356.html

相关文章

  • helm安装EFK
    添加efk提供的repo仓库helmrepoaddelastichttps://helm.elastic.cohelmreposearchelastic安装helminstallelasticsearch-nops--setvolumeClaimTemplate.......
  • JAVA开发笔记之svn: E205007: 没有设置 SVN_EDITOR,VISUAL 或 EDITOR 环境变量,运行时的
    开发环境为mac;svn:E205007:没有设置SVN_EDITOR,VISUAL或EDITOR 环境变量,运行时的配置参数中也没有“editor-cmd”选项 在用户环境变量中添加SVN_EDITOR$vim......
  • nginx+vite 项目打包及部署到服务器二级路由
    项目打包及部署到服务器二级路由例如:我希望将打包的项目部署到http://localhost:8088/web/上一.项目配置及打包项目部署到服务器二级路由需要配置基础路径base,即需要......
  • Istio常用命令
    Istio使用帮助#istioctl--helpIstioconfigurationcommandlineutilityforserviceoperatorstodebuganddiagnosetheirIstiomesh.Usage:istioctl[comm......
  • GVK和GVR
    GVK从上一篇中的CRD定义中,可以发现在Kubernetes中要想完成一个CRD,需要指定group/kind和version,这个在Kubernetes的APIServer中简称为GVK。GVK是定位一种类......
  • drf-save()更新操作
    当序列化的时候如果只有data调用save()会走create()操作有instanct和data调用updata()操作 view.pyfromrest_framework.viewsimportAPIViewfromsers.modelsi......
  • (Linux服务器)git添加SSH公钥后本地验证失败
    环境:腾讯云Ubuntux86_64问题说明:在配置了公钥后,一直提示我[email protected]:Permissiondenied(publickey).解决办法:先查看root/.ssh目录下的文件再在该目录下执行......
  • Vue学习笔记之el-date-picker组建时间格式化方式
    <el-date-pickersize="small"v-model="editData.startTime"type="datetime"placeholder="选择日期时间"value-format="yyyy-MM-ddHH:mm:ss"format="yyyy-MM-ddHH:......
  • ARM 笔记(1019)-- STM32部分--15 通用定时器的输出比较
    12.7通用定时器的输出比较我们不用滴答时钟,不用延时法,能不能实现呼吸灯?在工业控制中,很多场合需要产生PWM信号,那PWM信号如何产生?我们可以用定时器的输出比较功能实现上述......
  • 概念介绍-软件架构、资源分类
    概念介绍-软件架构web概念概述使用java语言开发基于互联网的项目软件架构:C/S:Client/Server客户端/服务器端在用户本地有一个客户端程序,在远程有一个......