ConfigMap 和 Secret 是 Kubernetes 系统上两种特殊类型的存储卷,前者用于为容器中的应用提供配置数据以定制程序的行为,而敏感的配置信息,例如密钥、证书等则通常由后者来配置。ConfigMap 和 Secret 将相应的配置信息保存于资源对象中,而后在 Pod 对象上以存储卷的形式将其挂载并加载相关的配置,降低了配置与镜像文件的耦合关系。


Dockerfile 中的 ENTRYPOINT 和 CMD 指令用于指定容器启动时要运行的程序及其相关的参数。其中,CMD 指令以列表形式指定要运行的程序及其相关的参数,若同时存在 ENTRYPOINT 指令,则 CMD 指令中的列表所有元素均被视作由 ENTRYPOINT 指定程序的命令行参数。另外,在基于某镜像创建容器时,可以通过向 ENTRYPOINT 中的程序传递额外的自定义参数,甚至还可以修改要运行的应用程序本向。


配置文件嵌入镜像文件,是指用户在 Dockerfile 中使用 COPY 指令把定义好的配置文件复制到镜像文件系统上的目标位置,或者使用 RUN 指令调用 sed 或 echo 一类的命令修改配置文件,从而达到为容器化应用提供自定义配置文件之目的。


Docker 存储卷能够将宿主机之上的任何文件或目录映射进容器文件系统上,因此,可以事先将配置文件放置于宿主机之上的某特定路径中,而后在启动容器时进行加载。这种方式灵活易用,但也依赖于用户事先将配置数据提供在宿主机上的特定路径


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

name :环境变量的名称,必选字段。

value :环境变量的值,通过 $(VAR_NAME)引用,逃逸格式为 $$(VAR_NAME)默认值为空。valueFrom :环境变量值的引用源,例如当前 Pod 资源的名称、名称空间、标签等,不能与非空值的 value 字段同时使用,即环境变量的值要么源于 value 字段,要么源于 valueFrom 字段,二者不可同时提供数据。


ConfigMap 资源用于在运行时将配置文件、命令行参数、环境变量、端口号以及其他配置工件绑定至 Pod 的容器和系统组件。Kubernetes 借助于 ConfigMap 对象实现了将配置文件从容器镜像中解耦,从而增强了工作负载的可移植性,使配置更易于更改和管理,并防止将配置数据硬编码到 Pod 配置清单中。但 ConfigMap 资源用于存储和共享非敏感、未加密的配置信息,若要在集群中使用敏感信息,则必须使用 Secret 资源。


一个 ConfigMap 对象就是一系列配置数据的集合,这些数据可注入到 Pod 的容器当中为容器应用所使用,注入的途径有直接挂载存储卷和传递为环境变量两种。ConfigMap 支持存储诸如单个属性一类的细粒度的信息,也可用于存储粗粒度的信息,例如将整个配置文件保存在 ConfigMap 对象之中。


ConfigMap 是 Kubernetes 标准的 API 资源类型,它隶属名称空间级别,支持命令式命令命令式对象配置声明式对象配置 3 种管理接口。命令式命令的创建操作可通过 kubectl create configmap 进行,它支持基于目录、文件或字面量(literal)值获取配置数据完成 ConfigMap 对象的创建。


Pod 资源配置清单中,除了使用 value 字段直接给定变量值之外,容器环境变量的赋值还支持通过在 valueFrom 字段中嵌套 configMapKeyRef 来引用 ConfigMap 对象的键值。


以存储卷方式引用的 ConfigMap 对象必须先于 Pod 对象存在,除非在 Pod 对象中把它们统统标记为 optional,否则将会导致 Pod 无法正常启动;同样,即使 ConfigMap 对象存在,但引用的键名不存在时,也会导致同样的错误。


以环境变量方式引用的 ConfigMap 对象的键不存在时会被忽略,Pod 对象可以正常启动,但错误引用的信息会以 InvalidVariableNames 事件记录于日志中。


ConfigMap 对象是名称空间级的资源,能够引用它的 Pod 对象必须位于同一名称空间


Kubelet 仅支持那些由 API Server 管理的 Pod 资源来引用 ConfigMap 对象,因而那些由 kubelet 在节点上通过--manifest-url 或--config 选项加载配置清单创建的静态 Pod,以及由用户直接通过 kubelet 的 RESTful API 创建的 Pod 对象。


ConfigMap 无法替代配置文件,它仅在 Kubernetes 系统上代表对应用程序配置文件的引用,我们可以将它类比为在 Linux 主机上表示/etc 目录及内部文件的一种方法

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/124393.html

相关文章

  • #yyds干货盘点#K8S Secret 资源配置

    摘要:对象存储数据的机制及使用方式都类似于对象,它们以键值方式存储数据,在资源中通过环境变量或存储卷进行数据访问。资源主要有两种用途一是作为存储卷注入对象上,供容器应用程序使用二是用于为里的容器拉取镜像时向私有仓库提供认证信息。 出于增强可移植性的需求,我们应该从容器镜像中解耦的不仅有配置数据,还有默认口令(例如 Redis 或...

    mcterry 评论0 收藏0
  • #yyds干货盘点# k8s cgroup详解

    摘要:是其中的一个子系统,它是用来限制进程的使用的。 CPU:​ CPU Cgroup 是 Cgroups 其中的一个 Cgroups 子系统,它是用来限制进程的 CPU 使用的。 限制的是用户态的CPU us和ni,对内核态不限制sy、wa、hi、si 目录:/sys/fs/cgroup/cpu 重要参数:k8s资源限...

    alaege 评论0 收藏0
  • #yyds干货盘点# k8s namespace详解

    摘要:常见查看容器的容器进入安装进入容器 常见nsmnt uts ipc pid lsns:查看容器的ns [root@182 ~]# lsns NS TYPE NPROCS PID USER COMMAND4026531836 pid 2...

    cooxer 评论0 收藏0
  • #yyds干货盘点#k8s Service 资源及其模型

    摘要:每个工作节点的组件通过持续监控着各及其关联的对象,并将对象的创建或变动实时反映至当前工作节点上相应的或规则上。资源都可统一根据其工作逻辑分为和这种类型。 Service 是 Kubernetes 的核心资源类型之一,通常被看作微服务的一种实现。它事实上是一种抽象:通过规则定义出由多个 Pod 对象组合而成的逻辑集合,以及访...

    silencezwm 评论0 收藏0
  • #yyds干货盘点#Nginx的核心配置

    摘要:全局配置内核的绑定添加核的个数开启个核同时安排自动排序重启客服端发送请求服务端查看是哪些的核在发生变化情况错误日志最多打开这么多默认是关闭以后就只有一个主进程,性能很差开启以后都只有一个主进程了配置详解 1.全局配置1.1 CPU内核的绑定[root@c7-147 ~]# lscpu |grep -i cpuC...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

Karuru

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<