云原生|kubernetes|关于configMap的一些学习(一)

简介: 云原生|kubernetes|关于configMap的一些学习

前言:


configMap顾名思义--配置文件集合。主要作用是:

configmap是k8s中的应用配置管理方案,在configmap中,各个配置项都是以key-value的方式存在的,value的数据可以是一个配置文件的内容,这些配置项被保存在k8s使用的持久化存储etcd中。

这样就形成了一个k8s中的配置中心,可以独立的对configmap中的数据进行修改,然后将configmap挂载到pod中进行使用,可以以env的方式,也可以以配置文件的方式在pod中进行引用。这样配置和pod就实现了解耦,都是k8s中独立的资源对象了。

configMap的引用形式

configMap没有什么特别的类型就一种,主要作用是:

  • 将ConfigMap中的数据设置为环境变量
  • 将ConfigMap中的数据设置为命令行参数
  • 使用Volume将ConfigMap作为文件或目录挂载

(1)将configMap中的数据设置为环境变量


命令行生成configMap文件cm-test1.yaml,其中定义了变量env1(字符串形式),它的值是CSDN。

k create cm cm-test1  --from-literal=env1=CSDN -n dev --dry-run=client -o yaml >cm-test1.yaml
k apply -f cm-test1.yaml

 将此configMap定义的变量挂载到pod内,这个pod是tomcat的:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  namespace: dev
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat-pod
  template:
    metadata:
      labels:
        app: tomcat-pod
    spec:
      containers:
      - name: tomcat
        image: tomcat:8.5-jre10-slim
        env:
          - name: FUCK  #在容器内的变量名称
            valueFrom:
              configMapKeyRef:
                name: cm-test1  #configMap的名称,上面的cm文件定义的名称
                key: env1   #要使用的key的值,上面只定义了这一个key

简单的验证:


部署这个tomcat的pod,等待pod启动正常如下:

[root@k8s-master ~]# k get po -A -owide
NAMESPACE     NAME                                                    READY   STATUS    RESTARTS   AGE     IP               NODE         NOMINATED NODE   READINESS GATES
default       mysql-5.7.23-5f9bd6468c-h4gqn                           1/1     Running   4          3d6h    10.244.169.130   k8s-node2    <none>           <none>
dev           nginx-deployment-b785b4498-s26js                        1/1     Running   0          5h2m    10.244.36.73     k8s-node1    <none>           <none>
dev           tomcat-deployment-789b44ffcd-z7bfx                      1/1     Running   0          15m     10.244.169.142   k8s-node2    <none>           <none>

进入pod,打印变量值,验证无误。

[root@k8s-master ~]# k exec -it tomcat-deployment-789b44ffcd-z7bfx -n dev -- /bin/bash
root@tomcat-deployment-789b44ffcd-z7bfx:/usr/local/tomcat# env |grep CSDN
FUCK=CSDN
root@tomcat-deployment-789b44ffcd-z7bfx:/usr/local/tomcat# echo $FUCK
CSDN

(2)命令行方式通过文件生成configMap,使用Volume将ConfigMap作为文件或目录挂载:


例如,现有一个tomcat,将首页index.jsp 更改后挂载到pod内,实现首页的变更

首页文件模板:

[root@k8s-master ~]# cat index.jsp 
this is a test page!!!!!
this is a test page!!!!!
this is a test page!!!!!
this is a test page!!!!!

生成configMap,这里叫cm-test ,namespace指定的是dev,最后执行此文件。

k create configmap cm-test --from-file=index.jsp -n dev -oyaml  --dry-run=client
[root@k8s-master ~]# cat cm-test.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-test
  namespace: dev
data:
  index.jsp: |
    this is a test page!!!!!
    this is a test page!!!!!
    this is a test page!!!!!
    this is a test page!!!!!
    this is a test page!!!!!
    sfsds this is a test page!!!!!
k apply -f cm-test.yaml

pod引用此configMap:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  namespace: dev
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat-pod
  template:
    metadata:
      labels:
        app: tomcat-pod
    spec:
      containers:
      - name: tomcat
        image: tomcat:8.5-jre10-slim
        volumeMounts:
        - name: conf
          mountPath: /usr/local/tomcat/webapps/ROOT/index.jsp#由于这个版本的tomcat此目录下有其它文件,为防止被覆盖,因此设置subPath
          subPath: index.jsp
        ports:
        - containerPort: 8080
      volumes:
      - name: conf
        configMap:
          name: cm-test
          items:
          - key: index.jsp   #key不能写错,cm文件里定义的就是这个
            path: index.jsp  #挂载在容器后叫什么文件名
      nodeName: k8s-node2

(3)命令行方式,通过文件夹生成configMap清单文件(test文件夹内有三个文件):


echo hello > test/hello.txt
echo world > test/world.txt
cat test/index.jsp 
this is a test page!!!!!
this is a test page!!!!!
this is a test page!!!!!
this is a test page!!!!!
k create cm cm-test3 --from-file=test/  --dry-run=client -o yaml > cm-test3.yaml

查看命令生成的文件的内容:

[root@k8s-master ~]# cat cm-test3.yaml 
apiVersion: v1
data:
  hello.txt: |
    hello
  index.jsp: |
    this is a test page!!!!!
    this is a test page!!!!!
    this is a test page!!!!!
    this is a test page!!!!!
  world.txt: |
    world
kind: ConfigMap
metadata:
  creationTimestamp: null
  name: cm-test3

configMap的调用还是一样的,要么挂载为文件,要么作为环境变量,和它是由文件还是文件夹还是字符串生成没有什么特别的联系,该怎么调用就怎么调用。

例如,集群的coredns使用的configMap:

[root@k8s-master ~]# k get cm -A
NAMESPACE     NAME                                 DATA   AGE
kube-system   calico-config                        4      2d13h
kube-system   coredns                              1      2d21h
kube-system   extension-apiserver-authentication   6      3d2h
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5月前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
ACK One注册集群已正式支持ACS(容器计算服务)算力,为企业的容器化工作负载提供更多选择和更强大的计算能力。
|
5月前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
150 10
|
7月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
328 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
8月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
3月前
|
运维 Cloud Native 测试技术
极氪汽车云原生架构落地实践
随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。
|
2月前
|
人工智能 Cloud Native 容灾
深圳农商银行三代核心系统全面投产 以云原生架构筑牢数字化转型基石
深圳农商银行完成第三代核心系统全面上云,日均交易超3000万笔,峰值处理效率提升2倍以上。扎根深圳70余年,与阿里云共建“两地三中心”分布式云平台,实现高可用体系及全栈护航。此次云原生转型为行业提供可复制样本,未来将深化云计算与AI合作,推动普惠金融服务升级。
260 17
|
2月前
|
存储 Cloud Native 关系型数据库
PolarDB开源:云原生数据库的架构革命
本文围绕开源核心价值、社区运营实践和技术演进路线展开。首先解读存算分离架构的三大突破,包括基于RDMA的分布式存储、计算节点扩展及存储池扩容机制,并强调与MySQL的高兼容性。其次分享阿里巴巴开源治理模式,涵盖技术决策、版本发布和贡献者成长体系,同时展示企业应用案例。最后展望技术路线图,如3.0版本的多写多读架构、智能调优引擎等特性,以及开发者生态建设举措,推荐使用PolarDB-Operator实现高效部署。
181 2
|
7月前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
172 13
|
7月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。

推荐镜像

更多