k8s教程(pod篇)-配置管理

这篇具有很好参考价值的文章主要介绍了k8s教程(pod篇)-配置管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

01 引言

应用部署的一个最佳实践是将应用所需的配置信息与程序分类,就像是微服务Nacos配置中心一样。因此,kubernetes从1.2版本开始就提供了一种统一的应用配置管理方案,也就是本文要讲的ConfigMap

02 ConfigMap

2.1 ConfigMap概述

ConfigMap以一个或多个key:value的形式保存在Kubenetes系统中供应用使用,它既可以表示一个变量的值(例如: apploglevel=info),也可以用于表示一个完整的配置文件内容(例如:server.xml=<?xml...>...)。

典型用法如下:

  • 生成容器的环境变量
  • 设置容器启动命令的启动参数(需要设置为环境变量)
  • 以Volume的形式挂载为容器内部的文件或目录

2.2 创建ConfigMap资源对象

2.2.1 通过YAML文件方式创建

2.2.1.1 变量

cm-appvars.yaml展示了将几个应用所需的变量定义为ConfigMap的用法:

apiVersion: v1
kind: ConfigMap
metadata:
	name: cm-appvars
data:
	apploglevel: info
	appdatadir: /var/data

运行kubectl create命令创建ConfigMap

$ kubectl create -f cm-appvars.yarml

查看创建好的ConfigMap

k8s教程(pod篇)-配置管理

2.2.1.2 配置文件

接下来,展示将两个配置文件(server.xmllogging.properties)定义为ConfigMap的用法,设置key为配置文件的别名,value则是配置文件的全部文本内容:
k8s教程(pod篇)-配置管理k8s教程(pod篇)-配置管理k8s教程(pod篇)-配置管理


运行kubectl create 命令创建该ConfigMap
k8s教程(pod篇)-配置管理


查看创建好的ConfigMap
k8s教程(pod篇)-配置管理


查看已创建的ConfigMap的详细内容,可以看到两个配置文件的全文:
k8s教程(pod篇)-配置管理

2.2.2 通过kubectl命令行方式创建

2.2.2.1 from-file / from-literal

不使用YAML文件,直接通过 kubectl create configmap也可以创建ConfigMap,可以使用参数--from-file--from-literal指定的内容,并且可以在一行命令中指定多个参数。

① 通过--from-file参数从文件中进行创建,可以指定key的名称,也可以在一个命令行中创建包含多个key的ConfigMap,语法如下:

kubectl create configmap NAME --from-file=[key=]source --from-file=[key=]source

② 通过--from-file参数在目录下进行创建,该目录下的每个配置文件名都被设置为key,文件内容被设置为value,语法如下:

kubectl create configmap NAME --from-file=config-files-dir

③使用--from-literal时会从文本中进行创建,直接将指定的key#=value#创建为ConfigMap的内容,语法如下:

kubectl create configmap NAME --from-literal=key1=value1 --from-literal=key2=value2
2.2.2.2 举例

在当前目录下含有配置文件server.xml,可以创建一个包含该文件内容的ConfigMap:
k8s教程(pod篇)-配置管理


假设在configfiles目录下包含两个配置文件server.xmllogging.properties,创建一个包含这两个文件内容的ConfigMap
k8s教程(pod篇)-配置管理k8s教程(pod篇)-配置管理


使用--from-literal来创建:
k8s教程(pod篇)-配置管理

03 Pod使用ConfigMap

容器应用对ConfigMap的使用有以下两种方法:

  • 通过环境变量获取ConfigMap中的内容
  • 通过Volume挂载的方式将ConfigMap中的内容挂载为容器内部的文件或目录

3.1 通过环境变量的方式使用ConfigMap

以前面创建的ConfigMap"cm-appvars"为例:
k8s教程(pod篇)-配置管理
在Pod “cm-test-pod”的定义中,将ConfigMap “cm-appvars”中的内容以环境变量(APPLOGLEVEL和APPDATADIR)方式设置为容器内部的环境变量,容器的启动命令将显示这两个环境变量的值(“env|grep APP”):

k8s教程(pod篇)-配置管理
运行kubectl create -f命令创建该Pod,由于是测试Pod,所以该Pod在运行完启动命令后将会退出,并且不会被系统自动重启(restartPolicy=Never):
k8s教程(pod篇)-配置管理
运行kubectl get pods --show-all 命令查看已经停止的Pod
k8s教程(pod篇)-配置管理
查看该Pod的日志,可以看到启动命令env|grep APP的运行结果如下:
k8s教程(pod篇)-配置管理

这说明容器内部的环境变量使用ConfigMap cm-appvars中的值进行了正确设置。

Kubenetes从1.6版本开始引入了一个新的字段envFrom,实现了在Pod环境中将ConfigMap(也可用于Secret资源对象)中所定义的key=value自动生成为环境变量:
k8s教程(pod篇)-配置管理
通过这个定义,在容器内生成如下环境变量:
k8s教程(pod篇)-配置管理

3.2 通过volumeMount使用ConfigMap

在如下所示的cm-appconfigfiles.yaml例子中包含两个配置文件的定义(server.xmllogging.properties):
k8s教程(pod篇)-配置管理k8s教程(pod篇)-配置管理k8s教程(pod篇)-配置管理
在Pod "cm-test-app"的定义中,将ConfigMap “cm-appconfigfiles”中的内容以文件的形式挂载到容器内部的/configfiles目录下。Pod配置文件cm-test-app.yaml的内容如下:
k8s教程(pod篇)-配置管理k8s教程(pod篇)-配置管理
创建该pod:
k8s教程(pod篇)-配置管理
登录容器,查看到在/configfiles目录下存在server.xmllogging.properties文件,他们的内容就是ConigMap“cm-appconfigfiles”中两个key定义的内容:
k8s教程(pod篇)-配置管理

如果在引用ConfigMap是不指定items,则使用volumeMount方式在容器内的目录下为每个item都生成一个文件名为key的文件。

Pod配置文件cm-test-app.yaml的内容如下:
k8s教程(pod篇)-配置管理k8s教程(pod篇)-配置管理

创建该Pod:
k8s教程(pod篇)-配置管理

登录容器,查看到在/configfiles目录下存在key-loggingpropertieskey-serverxml文件,文件的名称来自在ConfigMap cm-appconfigfiles中定义的两个key的名称,文件的内容则为value的内容:

k8s教程(pod篇)-配置管理

04 使用ConfigMap的限制条件

限制条件如下:文章来源地址https://www.toymoban.com/news/detail-444606.html

  • ConfigMap必须在Pod之前创建,Pod才能引用它
  • 如果Pod使用envFrom基于ConfigMap定义环境变量,则无效的环境变量名称(例如名称以数字开头)将被忽略,并在事件记录中被记录为InvalidVariableNames
  • ConfigMap受命名空间限制,只有处于相同命名空间中的Pod才可以引用它
  • ConfigMap无法用于静态Pod

到了这里,关于k8s教程(pod篇)-配置管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • k8s~pod单副本的平滑部署

    k8s~pod单副本的平滑部署

    如果你的服务器资源紧张,pod可能只能是单副本了,这时在进行平滑的滚动部署时,应该如何配置呢?总不能在部署期间503吧,这是不能接受的! 我们可以在spec.strategy.strategy.rollingUpdate中,将不可用数 maxUnavailable 改成0即可实现平滑部署,配置如下: 如果是多个副本,你也可

    2024年04月11日
    浏览(11)
  • 持续集成部署-k8s-深入了解 Pod:探针

    Kubernetes 中的探针是指容器内的进程用于告知 Kubernetes 组件其自身状态的机制; Readiness Probe :就绪探针用于告诉 Kubernetes 该容器是否已准备好处理请求。就绪探针会定期执行一个 HTTP 请求、TCP 套接字连接或命令,如果返回成功,则认为容器已准备好,可以接收流量。如果在

    2024年02月07日
    浏览(15)
  • 持续集成部署-k8s-配置与存储-配置管理:HostPath 的使用

    在 Kubernetes 中, HostPath 是一种用于挂载宿主机上文件或目录到容器中的卷类型。使用 HostPath 卷类型,可以让你在容器内部访问宿主机上的文件或目录。 具体来说,当你在 Pod 中定义了 HostPath 卷类型时, Kubernetes 将会在宿主机上创建指定的目录,并将其挂载到容器中。这个目

    2024年02月01日
    浏览(13)
  • k8s教程(pod篇)-定时任务

    k8s教程(pod篇)-定时任务

    声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记 Kubernetes 从1.5版本开始增加了一种新类型的 Job ,即类似 Linux Cron 的定时任务 Cron Job ,下面看看如何定义和使用这种类型的 Job 。 首先,确保 Kubernetes 的版本为 1.8 及以上。 Cron Job的定时表

    2023年04月20日
    浏览(10)
  • k8s教程(pod篇)-扩缩容

    k8s教程(pod篇)-扩缩容

    声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记 在实际生产系统中,我们经常会遇到某个服务需要扩容的场景,也可能会遇到由于资源紧张或者工作负载降低而需要减少服务实例数量的场景。此时可以利用 Deployment/RC 的 Scale机制 来完成

    2024年02月08日
    浏览(8)
  • K8S应用流程安全(镜像安全 配置管理 访问安全)

    K8S应用流程安全(镜像安全 配置管理 访问安全)

    1.1.1 构建原则 学习目标 这一节,我们从 基础知识、原则解读、小结 三个方面来学习。 基础知识 k8s平台使用业务环境 需求 镜像的使用流程 Docker镜像加载 UnionFS 原则解读 构建样式 构建原则 实践原则 分层效果 功能效果 小结 1.1.2 Dockerfile实践 学习目标 这一节,我们从 基础

    2024年02月13日
    浏览(12)
  • 持续集成部署-k8s-配置与存储-配置管理:ConfigMap 的热更新

    在 Kubernetes 中, ConfigMap 是用于存储非敏感配置数据的 API 对象,它可以被挂载到 Pod 中作为文件或环境变量。 ConfigMap 的热更新指的是在不重启 Pod 的情况下,动态更新 Pod 中使用的配置数据。 首先创建一个 configMap: 配置文件如下: private-image-pull-pod.yaml

    2024年02月05日
    浏览(11)
  • k8s自定义Endpoint实现内部pod访问外部应用

    k8s自定义Endpoint实现内部pod访问外部应用

    endpoint除了可以暴露pod的IP和端口还可以代理到外部的ip和端口 使用场景 公司业务还还没有完成上云, 一部分云原生的,一部分是实体的 业务上云期间逐步实现上云,保证各个模块之间的解耦性 比如使用云数据库或者实体数据库服务器啥的,因为像数据库实现容器化的话在

    2024年01月25日
    浏览(17)
  • k8s主节点部署pod状态一直是pending原因排除,并彻底删除pod技巧

    k8s主节点部署pod状态一直是pending原因排除,并彻底删除pod技巧

    一般来说,master节点是会产生一个污点,不允许部署pod的。 如果其他原因也可以使用这个命令检查状态原因 当出现类似这样问题 问题描述: Warning FailedScheduling 40s (x28 over 28m) default-scheduler 0/1 nodes are available: 1 node(s) had untolerated taint {node-role.kubernetes.io/master: }, that the pod didn’

    2024年01月19日
    浏览(13)
  • 【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

    【Kubernetes 系列】一文带你吃透 K8S 应用pod结点

    作者:半身风雪 上一节:创建K8s集群项目 简介:上一节我们一起学习了,如何去部署一个K8S 的应用程序,这一节,我们主要讲解一下,K8S 应用的框架结构。 本节我将和大家一起学习Kubernetes 应用中的pod结点 了解 Kubernetes Pod。 了解 Kubernetes 工作节点。 对已部署的应用故障排

    2023年04月08日
    浏览(352)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包