K8s学习八(配置与存储_配置)

news2024/11/26 22:48:45

配置与存储

配置管理

ConfigMap
ConfigMap的创建
  • 一般用于去存储 Pod 中应用所需的一些配置信息,或者环境变量,将配置于 Pod 分开,避免应为修改配置导致还需要重新构建 镜像与容器。
  • configmap缩写为cm
  • kubectl create cm -h来查看创建命令
  1. 指定目录去创建
  • 比如我在config目录中创建test目录,在里面简单配置两个配置文件,db.properties , redis.properties
  • 在config目录执行命令kubectl create configmap test-dir-config --from-file=test/
  1. 基于指定的文件去创建(用的最多)
  • 在test目录下面创建application.yaml,然后下面进行操作
  • 执行kubectl create cm spring-test-yaml --from-file=/root/k8s/config/test/application.yaml
  • 这样描述cm之后里面信息的文件名就是application.yaml,要是想改变文件名可以执行kubectl create cm spring-test-yaml --from-file=app.yaml=/root/k8s/config/test/application.yaml,就变成了app.yaml
  • 参数比较少时,可以自己指定参数,执行kubectl create cm spring-test-yaml --from-literal=username=root --from-literal=password=admin
cm环境变量加载与配置文件加载
cm环境变量加载
  • 配置文件如下所示:
apiVersion: v1
kind: Pod
metadata:
  name: test-env-cm
spec:
  containers:
  - name: env-test
    image: alpine
    command: ["/bin/bash", "-c", "env;sleep 3600"]
    imagePullPolicy: IfNotPresent
    env:
    - name: JAVA_VM_OPTS
      valueFrom:
        configMapKeyRef:
          name: test-env-config # config的名字
          key: JAVA_OPTS_TEST # 表示从上面name的cm中获取名字为key的value,将其赋值给本地环境变
量 JAVA_VM_OPTS,也就是name为JAVA_VM_OPTS的值是从test-env-config这个cm的JAVA_OPTS_TEST这个key取
到的值给他
    - name: APP
      valueFrom:
        configMapKeyRef:
          name: test-env-config # config的名字
          key: APP_NAME
  restartPolicy: Never

# 下面是用到的config:
root@master:~/k8s/config# kubectl describe cm test-env-config
Name:         test-env-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
APP_NAME:
----
springboot_env-test
JAVA_OPTS_TEST:
----
-Xms512m -Xmx512m

BinaryData
====

Events:  <none>

cm配置文件加载
  • 配置文件如下所示:
apiVersion: v1
kind: Pod
metadata:
  name: test-configfile-pod
spec:
  containers:
  - name: config-test
    image: alpine
    command: ["/bin/sh", "-c", "env;sleep 3600"]
    imagePullPolicy: IfNotPresent
    env:
    - name: JAVA_VM_OPTS
      valueFrom:
        configMapKeyRef:
          name: test-env-config # config的名字
          key: JAVA_OPTS_TEST # 表示从上面name的cm中获取名字为key的value,将其赋值给本地环境变
量 JAVA_VM_OPTS,也就是name为JAVA_VM_OPTS的值是从test-env-config这个cm的JAVA_OPTS_TEST这个key取
到的值给他
    - name: APP
      valueFrom:
        configMapKeyRef:
          name: test-env-config # config的名字
          key: APP_NAME
    volumeMounts: # 加载数据卷
    - name: db-config # 表示加载volume属性中的哪个数据卷
      mountPath: "/usr/local/mysql/conf" # 将想要的数据卷中的文件加载到哪个目录下
      readOnly: true # 是否只读
  volumes: # 数据卷挂载,可以是configmap和secret
    - name: db-config # 数据卷的名字,随意设置
      configMap: # 数据卷的类型为configmap
        name: test-dir-config  # configmap的名字,必须跟想要加载的cm名字相同
        items: # 对configmap中的key进行映射,如果不指定的话,会默认将configmap中所有的key全部>转换为一个个同名的文件,这里指定的话可以将path的命名和key不一样
        - key: "db.properties" # configmap中的key
          path: "db.properties" # 将该key的值转换为文件
  restartPolicy: Never

#  对configmap中的key进行映射,如果不指定的话,会默认将configmap中所有的key全部>转换为一个个同名的文件,这里指定的话可以将path的命名和key不一样
# 也就是原来的key为db.xxx,可以将path写为db.properties

# 上面就实现了cm的配置文件加载
  • 进入容器之后查看
    在这里插入图片描述

  • 发现只有db.properties,也就是定义了items之后只会加载path上的那个文件,如果不定义则会有所有文件。

加密数据配置Secret
  • Secret 的应用,kubectl create secret -h查看命令,有三种形式如下。用第一种比较多
    在这里插入图片描述

  • 有一个问题是,如果有特殊字符的话,创建后的可能和创建时输入的不一样:

  • 比如kubectl create secret generic orig-secret --from-literal=username=admin --from-literal=password=ds@!30,这里password有特殊字符,所以创建后的可能不一样
    在这里插入图片描述

  • 当创建好之后,可以直接输入名称来查看,发现显示的是字节数
    在这里插入图片描述

Docker仓库Secret配置
  • 这里听了个大概,没有实操

  • 可以看帮助,了解一下大概使用方法kubectl create secret docker-registry -h
    在这里插入图片描述

  • 常用场景就是配置一个secret,里面有用户名和密码,然后配置文件,里面用到刚才这个secret,如果拉取镜像没有登陆的话,会使用配置文件给出的这个secret里的信息去登陆然后拉取镜像

  • 这里直接上配置文件

apiVersion: v1
kind: Pod
metadata:
  name: private-image-pull-pod
spec:
  imagePullSecrets:
  - name: harbor-secret # 意思就是当拉取镜像的时候,如果没有登陆,则会去找到harbor-secret这个Secret配置文件的用户名和密码去登陆。
  containers:
  - name: nginx
    image: 192.168.113.122:8858/opensource/nginx:1.9.1
    command: ["/bin/sh", "-c", "env;sleep 3600"]
    imagePullPolicy: IfNotPresent
    env:
    - name: JAVA_VM_OPTS
      valueFrom:
        configMapKeyRef:
          name: test-env-config # config的名字
          key: JAVA_OPTS_TEST # 表示从上面name的cm中获取名字为key的value,将其赋值给本地环境变
量 JAVA_VM_OPTS,也就是name为JAVA_VM_OPTS的值是从test-env-config这个cm的JAVA_OPTS_TEST这个key取
到的值给他
    - name: APP
      valueFrom:
        configMapKeyRef:
          name: test-env-config # config的名字
          key: APP_NAME
    volumeMounts: # 加载数据卷
    - name: db-config # 表示加载volume属性中的哪个数据卷
      mountPath: "/usr/local/mysql/conf" # 将想要的数据卷中的文件加载到哪个目录下
      readOnly: true # 是否只读
  volumes: # 数据卷挂载,可以是configmap和secret
    - name: db-config # 数据卷的名字,随意设置
      configMap: # 数据卷的类型为configmap
        name: test-dir-config  # configmap的名字,必须跟想要加载的cm名字相同
        items: # 对configmap中的key进行映射,如果不指定的话,会默认将configmap中所有的key全部>转换为一个个同名的文件,这里指定的话可以将path的命名和key不一样
        - key: "db.properties" # configmap中的key
          path: "db.properties" # 将该key的值转换为文件
  restartPolicy: Never

SubPath的使用

使用 ConfigMap 或 Secret 挂载到目录的时候,会将容器中源目录给覆盖掉,此时我们可能只想覆盖目录中的某一个文件,但是这样的操作会覆盖整个文件,因此需要使用到 SubPath

配置方式:
定义 volumes 时需要增加 items 属性,配置 key 和 path,且 path 的值不能从 / 开始
在容器内的 volumeMounts 中增加 subPath 属性,该值与 volumes 中 items.path 的值相同
containers:
  ......
  volumeMounts:
  - mountPath: /etc/nginx/nginx.conf # 挂载到容器哪里
    name: config-volume # 使用哪个 configmap 或 secret
    subPath: etc/nginx/nginx.conf # 与 volumes.[0].items.path 相同
volumes:
- configMap:
  name: nginx-conf # configMap 名字
  items: # subPath 配置
    key: nginx.conf # configMap 中的文件名
    path: etc/nginx/nginx.conf # subPath 路径


subpath后面跟的是volume的路径,这个路径是相对于 Volume 的根路径的,而不是绝对路径。
这样也就是将volume中的etc/nginx/nginx.conf文件挂载到容器里的/etc/nginx/nginx.conf下

ComfigMap的热更新
  • 我们通常会将项目的配置文件作为 configmap 然后挂载到 pod,那么如果更新 configmap 中的配置,会不会更新到 pod 中呢?

  • 这得分成几种情况:

    • 默认方式:会更新,更新周期是更新时间 + 缓存时间
    • subPath:不会更新
    • 变量形式:如果 pod 中的一个变量是从 configmap 或 secret 中得到,同样也是不会更新的(这里说的是pod将cm里的值当作变量,而不是当作volume挂载到pod中,后者容器中的应用程序可以直接读取这些文件来获取配置信息。)
  • 对于 subPath 的方式,我们可以取消 subPath 的使用,将配置文件挂载到一个不存在的目录,避免目录的覆盖,然后再利用软连接的形式,将该文件链接到目标位置,

  • 如下图,新创建一个文件夹目录之后,将subpath指到新目录,然后新目录创建一个软连接指到开始的那个目录,也能实现更改。

在这里插入图片描述

  • 但是如果目标位置原本就有文件,可能无法创建软链接,此时可以基于前面讲过的 postStart 操作执行删除命令,将默认的文件删除即可

第一种可以直接通过edit命令直接修改configmap

第二种通过replace替换

  • 由于 configmap 我们创建通常都是基于文件创建,并不会编写 yaml 配置文件,因此修改时我们也是直接修改配置文件,而 replace 是没有 --from-file参数的,因此无法实现基于源配置文件的替换,此时我们可以利用下方的命令实现

  • 该命令的重点在于 --dry-run参数,该参数的意思打印 yaml 文件,但不会将该文件发送给 apiserver,再结合 -o yaml输出 yaml 文件就可以得到一个配置好但是没有发给 apiserver 的文件,然后再结合 replace 监听控制台输出得到 yaml 数据即可实现替换.kubectl create cm test-dir-config --from-file=./test/ --dry-run -o yaml | kubectl replace -f-,输出的yaml文件作为输出当作后面管道符后面命令-f的输入。 也就是更改test文件夹里面的东西之后,然后管道符之前的是将修改后的保存成一个yaml文件,传到后面去进行修改

  • 这里不传给apiserver也就是不会生效,由于 --dry-run 参数,这个更新操作也是模拟的,不会真正应用到集群中的资源。

配置文件不可变
  • 跟上面的有出入,上面是更新,这里是不能改变。
  • 对于一些敏感服务的配置文件,在线上有时是不允许修改的,此时在pod中配置 configmap 时可以设置 immutable: true 来禁止修改,这个命令是与最外层的命令是同级的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1578367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java+mysql图书管理系统制作教程v1.0.0完整版

本人QQ&#xff1a;2711138299&#xff0c;需要源码的可以加我,附带数据库备份文件&#xff0c;以及建立数据库表 下面是我写在有道云笔记里面的教程&#xff0c;由于复制粘贴后&#xff0c;代码都混乱在一起了&#xff0c;不建议大家观看&#xff0c;所以想看详细教程的也可以…

拥有自己的云环境-域名及备案

序 唠叨两句 之前的文章&#xff0c;讲了如何购买一台云服务器&#xff0c;然后购买之后&#xff0c;如何操作云服务器。当买完云服务器之后&#xff0c;我们就可以使用云服务器提供的公网ip&#xff0c;访问到我们的服务器上。但是&#xff0c;这样怎么能体现我们一个老程序…

Hybrid混合开发 和 Android平台JSBridge的原理

书接上篇&#xff1a;移动端研发技术的进化历程 纯原生开发主要面临动态化和开发成本两个问题&#xff0c;而针对这两个问题&#xff0c;诞生了一些跨平台的动态化框架。 针对原生开发面临的问题&#xff0c;业界一直都在努力寻找好的解决方案&#xff0c;而时至今日&#xf…

【深度学习】图像风格混合——StyleGAN原理解析

1、前言 上一篇&#xff0c;我们讲了PGGAN的模型原理&#xff0c;本章我们就来讲解一下StyleGAN&#xff0c;这个模型能够自由控制图像的风格&#xff0c;细节变化等等&#xff0c;生成用户想要的图像&#xff0c;甚至从某种程度上说&#xff0c;其可以实现AI换脸。 PS&#…

[StartingPoint][Tier1]Pennyworth

Important Jenkins是一个用于自动化构建、测试和部署软件项目的开源持续集成和持续部署&#xff08;CI/CD&#xff09;工具。它允许开发团队自动执行和监控在软件开发过程中的重复性任务&#xff0c;例如构建代码、运行测试、部署应用程序等。Jenkins提供了一个易于使用的Web界…

ST表的解释

介绍 ST表&#xff1a;一种用于高效处理区间查询的数据结构。它可以在O(1)的时间复杂度内回答某一区间的最值查询&#xff08;最小值、最大值等&#xff09;。ST表使用动态规划的思想&#xff0c;通过预处理的方式来快速计算出各个区间的最值。 st算法的主要思想就是将所求的…

为什么 MySQL 采用 B+ 树作为索引?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 「为什么 MySQL 采用 B 树作为索引&#xff1f;」这句话&#xff0c;是不是在面试时经常出现。 要解释这个问题&#xff0c;其实不单单要从数据结构的角度出发&#xff0c;还要考虑磁盘 I/O 操作次数&am…

【操作系统】python实现银行家算法

银行家算法是最具有代表性的避免死锁的算法。 1、算法原理 银行家算法&#xff1a;当一个新进程进入系统时&#xff0c;该进程必须申明在运行过程中所需要的每种资源的最大数目&#xff0c;且该数目不能超过系统拥有的资源总量。当进程请求某组资源时&#xff0c;系统必须先确…

Enzo Life Sciences--17β-Estradiol high sensitivity ELISA kit

高灵敏ELISA试剂盒&#xff0c;可检测到低至14 pg/ml的17β-雌二醇 雌二醇(estradiol) 是由卵巢内卵泡的颗粒细胞分泌的类固醇激素&#xff0c;是主要的雌激素&#xff0c;负责调节女性特征、附属性器官的成熟和月经-排卵周期&#xff0c;促进乳腺导管系统的产生&#xff0c;有…

机器人客户端如何配置同步消息至多个群中

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 由于微信群的人数&#xff0c;最多是500人&#xff0c;如果有人的业务做的大&#xff0c;可能会同步创建好多个群&#xff0c;但是资料的不想多个群一起发&#xff0c;发给某个群&a…

产品经理和项目经理的区别

1. 前言 本文深入探讨了产品经理与项目经理在职责、关注点以及所需技能方面的显著区别。产品经理主要负责产品的规划、设计和市场定位,强调对用户需求的深刻理解和产品创新的推动;而项目经理则侧重于项目的执行、进度控制和资源管理,确保项目按时、按质、按预算完成。两者在…

[大模型]大语言模型量化方法对比:GPTQ、GGUF、AWQ

在过去的一年里&#xff0c;大型语言模型(llm)有了飞速的发展&#xff0c;在本文中&#xff0c;我们将探讨几种(量化)的方式&#xff0c;除此以外&#xff0c;还会介绍分片及不同的保存和压缩策略。 说明&#xff1a;每次加载LLM示例后&#xff0c;建议清除缓存&#xff0c;以…

[BT]BUUCTF刷题第13天(4.1)

第13天 Upload-Labs-Linux (Basic) Pass-01 根据题目提示&#xff0c;该题为绕过js验证。 一句话木马&#xff1a; <?php eval(system($_POST["cmd"]));?> // 符号 表示后面的语句即使执行错误&#xff0c;也不报错。 // eval() 把括号内的字符串全部…

「每日跟读」英语常用句型公式 第6篇

「每日跟读」英语常用句型公式 第6篇 1. As ___ as possible 越 ___ 越好 As soon as possible (ASAP)(越快越好) As happy as possible (越快乐越好) As prepared as possible (越有准备越好) As much/many as possible (越多越好 *不可数/可数) As early as possible …

一款轻量、干净的 Laravel 后台管理框架

系统简介 ModStart 是一个基于 Laravel 的模块化快速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 系统特性 …

Chatgpt掘金之旅—有爱AI商业实战篇|内容策展业务|(八)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业内容策展业务有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随着…

017——DS18B20驱动开发(基于I.MX6uLL)

目录 一、 模块介绍 1.1 简介 1.2 主要特点 1.3 存储器介绍 1.4 时序 1.5 命令 1.5.1 命令大全 1.5.2 命令使用 1.5.3 使用示例 1.6 原理图 二、 驱动程序 三、 应用程序 四、 测试 一、 模块介绍 1.1 简介 DS18B20 温度传感器具有线路简单、体积小的特点&…

HarmonyOS 应用开发-边缓存边播放案例

介绍 OhosVideoCache是一个支持边播放边缓存的库&#xff0c;只需要将音视频的url传递给OhosVideoCache处理之后再设置给播放器&#xff0c; OhosVideoCache就可以一边下载音视频数据并保存在本地&#xff0c;一边读取本地缓存返回给播放器&#xff0c;使用者无需进行其他操作…

window环境运行nacos源码

为了研究一下nacos,所以从git上下载了nacos源码并且启动。 1.首先下载源码 git地址&#xff1a;https://github.com/alibaba/nacos.git 2.使用ideal打开源码 nacos的启动通过nacos-console模块执行。 3.修改为单机启动模式 Nacos默认启动是集群模式&#xff0c;单机模式需…

微服务面试题二

1.什么是雪崩 微服务之间相互调用&#xff0c;因为调用链中的一个服务故障&#xff0c;引起整个链路都无法访问的情况。 如何解决雪崩&#xff1f; 超时处理&#xff1a;请求超时就返回错误信息&#xff0c;不会无休止等待仓壁模式&#xff1a;限定每个业务能使用的线程数&a…