【项目实战20】k8s(6)—configmap服务(利用configmap进行热更新)_configmap热更新_运维技术-陈工的博客-程序员信息网

技术标签: kubernetes  项目实战  

一、configmap简介

    configmap用于保存配置数据,以键值对形式存储。
    configmap 资源提供了向 Pod 注入配置数据的方法。
    旨在让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。
    典型的使用场景:
       1.填充环境变量的值
       2.设置容器内的命令行参数
       3.填充卷的配置文件

二、创建configmap

一、使用字面值创建

kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
kubectl get cm
kubectl describe cm my-config

在这里插入图片描述

二、使用文件创建

key的名称是文件名称,value的值是这个文件的内容

kubectl create configmap my-config-2 --from-file=/etc/resolv.conf
kubectl get cm
kubectl describe cm my-config-2

在这里插入图片描述

三、使用目录创建

目录中的文件名为key,文件内容是value

mkdir -p configmap/test
cd configmap/
cp /etc/passwd test/
cp /etc/fstab test/
kubectl create configmap my-config-3 --from-file=test
kubectl get cm
kubectl describe cm my-config-3

在这里插入图片描述
在这里插入图片描述

四、编写configmap的yaml文件

vim cm1.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm1-config
data:                                                                                   此部分是configmap的内容
  db_host: "172.25.36.250"                                            
  db_port: "3306"

kubectl apply -f cm1.yaml
kubectl get cm cm1-config
kubectl describe cm cm1-config

在这里插入图片描述在这里插入图片描述

三、configmap的使用

一、使用configmap设置环境变量

这里使用的是第四种yaml文件编写的configmap。

vim pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
    - name: pod1
      image: busyboxplus
      command: ["/bin/sh", "-c", "env"]
      env:                                                                            指定环境
        - name: key1
          valueFrom:
            configMapKeyRef:
              name: cm1-config                                             之前的cm1-config文件
              key: db_host                                                      key指定之前的db_host
        - name: key2
          valueFrom:
            configMapKeyRef:
              name: cm1-config
              key: db_port                                                      key指定之前的db_port
  restartPolicy: Never

在这里插入图片描述运行清单查看日志

kubectl apply -f pod.yaml
kubectl logs pod1

这样就可以在pod1里加入之前我们写入configmap里面的内容
在这里插入图片描述

二、通过在pod的命令行下运行的方式

vim pod2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
    - name: pod2
      image: busyboxplus
      command: ["/bin/sh", "-c", "env"]
      envFrom:
        - configMapRef:
            name: cm1-config
  restartPolicy: Never

在这里插入图片描述
运行清单,查看日志

kubectl apply -f pod2.yaml
kubectl get pod pod2
kubectl logs pod2

同样能获取到db_port和db_host
在这里插入图片描述

三、使用conigmap设置命令行参数

vim pod2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
    - name: pod2
      image: busyboxplus
      command: ["/bin/sh", "-c", "echo $(db_host) $(db_port)"]      输出给定的db_host和db_port
      envFrom:
        - configMapRef:
            name: cm1-config
  restartPolicy: Never

在这里插入图片描述运行清单,查看输出结果

kubectl delete -f pod2.yaml
kubectl apply -f pod2.yaml
kubectl logs pod2

能成功查看到输出的db_host和db_port结果
在这里插入图片描述

四、通过数据卷使用configmap

将configmap的信息挂载到卷上,容器

vim pod2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:                                                       容器
    - name: pod2
      image: busyboxplus
      command: ["/bin/sh", "-c", "cat /config/db_host"]     查看db_host
      volumeMounts:
      - name: config-volume                                 容器指定挂载卷为下面新建的config-volume卷
        mountPath: /config                                       
  volumes:                                                      将configMap的内容加入volumes里面
    - name: config-volume
      configMap:
        name: cm1-config
  restartPolicy: Never

在这里插入图片描述运行清单,查看输出结果

kubectl delete -f pod2.yaml
kubectl apply -f pod2.yaml
kubectl logs pod2

在这里插入图片描述

四、configmap热更新

1、编辑nginx的配置文件,修改端口为8000

vim nginx.conf

server {
    listen       8000;
    server_name  _;

    location / {
        root /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

2、通过文件创建configmap
创建的名为nginxconf 的configmap,将刚才创建的nginx.conf作为其内容

kubectl create configmap nginxconf --from-file=nginx.conf
kubectl describe cm nginxconf

在这里插入图片描述
3、编辑nginx.yaml文件,使其包含刚修改的nginx的配置文件

vim nginx.yaml

apiVersion: apps/v1
kind: Deployment                                                    新建控制器
metadata:
  name: my-nginx
spec:
  replicas: 1                                                            新建副本数量为1                    
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
          volumeMounts:                                          容器指定卷为下面兴建的卷
          - name: config-volume
            mountPath: /etc/nginx/conf.d                   指定挂载路径
      volumes:                                                     新建的卷包括nginxconf文件
        - name: config-volume
          configMap:
            name: nginxconf

在这里插入图片描述
4、查看清单,访问8000端口
访问8000端口,发现成功

kubectl apply -f nginx.yaml
kubectl get pod -o wide | grep nginx
curl 10.244.2.13:8000

在这里插入图片描述

4、更改nginxconf的cm内容
为和前面实验做对比,改变端口为8080

kubectl edit cm nginxconf

apiVersion: v1
data:
  nginx.conf: |
    server {
        listen       8080;
        server_name  _;

        location / {
            root /usr/share/nginx/html;
            index  index.html index.htm;
        }
    }
kind: ConfigMap
metadata:
  creationTimestamp: "2021-07-30T17:56:46Z"
  name: nginxconf
  namespace: default
  resourceVersion: "37497"
  uid: fc838be5-db02-4738-91ad-4cb39ceb3e6d

在这里插入图片描述6、对8080端口进行访问
访问是8080端口发现失败,但从pod中查询nginx的配置文件,发现已经更改为8080。

curl 10.244.2.13:8080
kubectl exec my-nginx-b9b58dbdf-9skrz cat /etc/nginx/conf.d/nginx.conf

在这里插入图片描述7、上面现象说明configmap热更新已生效,但访问Pod的8080端口是无效的
这时就需要手动触发Pod滚动更新, 这样才能再次加载nginx的配置文件

kubectl patch deployments.apps my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20210731"}}}}}'

8、重新访问8080,发现成功

kubectl get pod -o wide | grep nginx
curl 10.244.2.16:8080

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_48819467/article/details/119483168

智能推荐

定位与布局(示例导航菜单)_ant menu 固定_想要飞的pig的博客-程序员信息网

定位与布局(示例导航菜单)流体布局行内元素仅仅占据其中内容需要的空间块级元素则撑满整个父元素,除非指定宽度这就是当元素不指定position属性时,文档流对元素布局的默认规则...

蓝桥杯试题基础练习之杨辉三角形-Python满分解答_Mr.郑先生_的博客-程序员信息网

杨辉三角形问题描述输入格式输出格式样例输入样例输出数据规模与约定实现思路具体代码问题描述杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。下面给出了杨辉三角形的前4行:11 11 2 11 3 3 1给出n,输出它的前n行。输入格式输入包含一个数n。输出格式输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。样例输入4样例输出

【Python开发】关于使用PyCharm导入本地module报No Module Named xxx错误的解决方案)_Blue_Keroro的博客-程序员信息网

本文中的代码来自https://github.com/wangshub/wechat_jump_game问题描述使用PyCharm运行时提示找不到该模块,但从左边的项目结构上看,该模块确实存在解决方法猜测可能是由于路径原因,解析器找不到这个模块。需要从项目的根目录开始引入。修改:# from common.auto_adb import auto_adbfrom wechat_jum...

第五次作业——团队项目——需求规格说明书_weixin_30555753的博客-程序员信息网

1.团队项目整体计划安排2.工作流程真实用户的访谈交流,确定用户需求,讨论功能模块,用户场景设计,设计类图,撰写文档3.组员分工及所占工作量比例洪腾飞: 确定用户需求,讨论功能模块,真实用户的访谈交流(25%)黄志鹏: 确定用户需求,讨论功能模块,撰写文档(25%)黄志雄: 确定用户需求,讨论功能模块,用户场景设计(25%)柯晓鸿: 确定用户需求,讨论功能模块,设计类图(25%)...

微信小程序安装npm包_西瓜奶奶_的博客-程序员信息网

最近更新了微信小程序开发工具,正好练手准备重新搭建一个项目,结果报大概是因为这个官方文档里写的这个:在创建了n个项目之后,终于算是理通了首先npm install XX安装各种你需要用到的包然后npm init初始化项目这里要注意,如果先敲了npm init,package.json是这样的,那同样也会报上面的错误这里我安装了一个crypto-js作为例子npm instal...

随便推点

深度学习学习记录(一.概论)_学习日记(一深度学习历史概览书)_CountryTractor的博客-程序员信息网

本博客记录学习龙书的学习历程:gtitub :https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book向开源大神致敬!第一章绪论主要讲的是机器学习和深度学习的历史。1.人工智能发展阶段:他们的包含关系是:2.机器学习3.人工智能发展简史4.深度学习的特点和运用5.深度学习框架6.环境安装由于tensorflow2.0目前只支持cuda 10.0的安装,...

动态内存管理与智能指针_时光若止-Dale的博客-程序员信息网

C、 C++中编译内存分配://一个 C、 C++程序编译时内存分为 4大存储区:栈区、堆区、数据段、程序代码段。代码段: 又称为常量区,储存常量和编译之后的代码指令数据段: 又称为静态区,存放全局变量和static 修饰的变量堆区: 即动态内存分配。程序在运行的时候用 malloc 或 new 申请任意大小的内存,程序员自己负责在何时用 free 或 delete 释放

用python写一个记账小程序_python实现日常记账本小程序_weixin_39960503的博客-程序员信息网

python实现收支的自动计算,能够查询每笔账款的消费详情,具体内容如下1、函数需要两个文件:一个类似钱包功能,存放钱;另一个用于记录每笔花销的用途#!/usr/bin/env pythonimport cPickle as pwith open('wallet.data','w') as f:p.dump(10000,f)with open('record.txt','w') as f:pass...

python绘制表格界面_Python数据可视化----------利用matlibplot做出漂亮的图表(入门篇)..._weixin_39958138的博客-程序员信息网

众所周知,知乎是一个专业的学习网站。时间不等人,开始今天的学习。今天我们讲python能和matlab媲美的绘图工具包-------Matlibplot。什么?你没学过python?那你点个赞赶紧走吧。首先我们先了解一下,一张美丽的图表(Figure)包括了哪些东西,最基本的是坐标轴,图例,曲线,标题(如下图)。如何利用matlibplot创建一个Figure呢?在你的python编译器里面输入下...

食堂报餐点餐公司订餐微信小程序源码开发使用_报餐小程序源码_模拟koko的博客-程序员信息网

食堂报餐点餐公司订餐微信小程序源码开发使用现在很多公司或者厂家都有自己的食堂,每天都要做饭,但是每天上班的人数不固定,食堂做饭的分量也不好把握这样就会出现浪费的现象。最近因为科室需要每天给员工订餐,为了方便统计员工用餐情况开发了这个报餐微信小程序。食堂报餐统计小程序 ,只要扫二维码预约第二天吃饭和扫二维码领餐 ,方便后厨统计预约人数做饭并统计就餐人数看看谁不来, 没预约就不让吃饭。首先大概说下这个报餐小程序的功能有哪些技术交流Q-Q:1379174464食堂统计用餐人数 食堂报餐统计人数系统:

单元测试之旅:预见优秀之②——寻求优秀_汇智动力IT学院的博客-程序员信息网

2. 单元测试进阶——寻求优秀2.1 使用测试替身在现代开发者测试的上下文中,除了允许在某些依赖缺失的情况下编译执行代码以外,崇尚测试的程序员还创建了一套“仅供测试”的工具,用于隔离被测试的代码、加速执行测试、使得随机行为变得确定、模拟特殊情况以及能够使测试访问隐藏信息等。满足这些目的的各种对象具有相似之处,但又有所区别,我们统称为测试替身(test double)。这一节我们先探讨开...

推荐文章

热门文章

相关标签