`
m635674608
  • 浏览: 5027507 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Kubernetes的ConfigMap说明

 
阅读更多

这篇博文,我们来说一说,关于在kubernetes的pod中自定义配置的问题。

  我们知道,在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库,缓存甚至是队列等等。而我们的一个应用程序从写第一行代码开始,要经历开发环境、测试环境、预发布环境只到最终的线上环境。而每一个环境都要定义其独立的各种配置。如果我们不能很好的管理这些配置文件,你的运维工作将顿时变的无比的繁琐。为此业内的一些大公司专门开发了自己的一套配置管理中心,如360的Qcon,百度的disconf等。kubernetes也提供了自己的一套方案,即ConfigMap。kubernetes通过ConfigMap来实现对容器中应用的配置管理。

 

创建ConfigMap

创建ConfigMap的方式有两种,一种是通过yaml文件来创建,另一种是通过kubectl直接在命令行下创建。

我们先来看第一种,在yaml文件中,配置文件以key-value键值对的形式保存,当然也可以直接放一个完整的配置文件,在下面的示例中,cache_hst、cache_port、cache_prefix即是key-value键值对,而app.properties和my.cnf都是配置文件:

复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: test-cfg
  namespace: default
data:
  cache_host: memcached-gcxt
  cache_port: "11211"
  cache_prefix: gcxt
  my.cnf: |
    [mysqld]
    log-bin = mysql-bin
  app.properties: |
    property.1 = value-1
 property.2 = value-2
 property.3 = value-3
复制代码

创建ConfigMap:

kubectl create -f test-cfg.yml

 

第二种方式是直接使用kubectl在命令行下创建

 

直接将一个目录下的所有配置文件创建为一个ConfigMap:

kubectl create configmap test-config --from-file=./configs

直接将一个配置文件创建为一个ConfigMap:

kubectl create configmap test-config2 --from-file=./configs/db.conf --from-file=./configs/cache.conf

在使用kubectl创建的时候,通过在命令行直接传递键值对创建:

kubectl create configmap test-config3 --from-literal=db.host=10.5.10.116 --from-listeral=db.port='3306'

我们可以通过如下方式查看创建的ConfigMap:

kubectl get configmaps
kubectl get configmap test-config -o yaml
kubectl describe configmap test-config

 

使用ConfigMap

使用ConfigMap有三种方式,一种是通过环境变量的方式,直接传递pod,另一种是通过在pod的命令行下运行的方式,第三种是使用volume的方式挂载入到pod内

第一种方式示例:

ConfigMap文件:

复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm
复制代码

第一个pod示例:

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: gcr.io/google_containers/busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: special.how
        - name: SPECIAL_TYPE_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: special.type
  restartPolicy: Never
复制代码

第二个pod示例:

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: gcr.io/google_containers/busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: CACHE_HOST
          valueFrom:
            configMapKeyRef:
              name: test-cfg
              key: cache_host
              optional: true
  restartPolicy: Never
复制代码

 

第二种方式在命令行下引用时,需要先设置为环境变量,之后 可以通过$(VAR_NAME)设置容器启动命令的启动参数,示例:

ConfigMap文件示例:

复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm
复制代码

Pod示例:

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: gcr.io/google_containers/busybox
      command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: special.how
        - name: SPECIAL_TYPE_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: special.type
  restartPolicy: Never
复制代码

 

第三种方式,使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容,下面是一个示例:

ConfigMap示例:

复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm
复制代码

第一个pod示例,简单的将上面创建的ConfigMap直接挂载至pod的/etc/config目录下:

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: gcr.io/google_containers/busybox
      command: [ "/bin/sh", "-c", "cat /etc/config/special.how" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: special-config
  restartPolicy: Never
复制代码

第二个pod示例,只将ConfigMap的special.how这个key挂载到/etc/config目录下的一个相对路径path/to/special-key,如果存在同名文件,直接覆盖。其他的key不挂载:

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: gcr.io/google_containers/busybox
      command: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: special-config
        items:
        - key: special.how
          path: path/to/special-key
  restartPolicy: Never
复制代码

 http://www.cnblogs.com/breezey/p/6582082.html

最后需要说明两点:

1、ConfigMap必须在Pod之前创建

2、只有与当前ConfigMap在同一个namespace内的pod才能使用这个ConfigMap,换句话说,ConfigMap不能跨命名空间调用。

 

分享到:
评论

相关推荐

    kube-configmap-secret-update:Kubernetes滚动更新ConfigMap和秘密更改

    Kubernetes滚动更新ConfigMap和秘密更改 的了使用此存储库的详细说明。 通过运行./nginx-config-example.sh部署nginx-config-example.yml 在以下URL上查看两个网站: 前端网站: 后端网站: 用户名: admin ...

    Kubernetes的云数据库建设实践

    - **资源管理**:Kubernetes支持对Pod、Service、ConfigMap、Secret等多种资源的管理,提供了一套完整的容器化服务管理框架。 ### 云数据库建设实践背景 在云计算环境下,用户对数据库服务的需求呈现出多样化和...

    kubernetes中文文档

    - **ConfigMap**: 用于存储非机密性的配置数据。 - **CronJob**: 定期执行任务。 - **CustomResourceDefinition**: 扩展 Kubernetes API 的方法。 - **DaemonSet**: 确保所有(或某些)节点上运行一个 Pod 的拷贝。 ...

    kubernetes手册2018最新版_强烈推荐_书签版

    ConfigMap用于将配置信息与容器分离,使得应用更易管理和维护。 2.15 Label Label允许用户为资源对象打标签,这些标签可以用于选择资源和组织资源。 2.16 垃圾收集 垃圾收集用于自动清理不再需要的资源对象。 ...

    阿里云 专有云企业版 V3.9.0 容器服务Kubernetes版 运维指南 20191017.pdf

    1. **Kubernetes基本概念**:Kubernetes的核心组件,如Pod(应用实例)、Service(服务发现)、Deployment(应用部署)、ReplicaSet(副本集)、ConfigMap(配置映射)和Secret(安全密钥)等。 2. **阿里云...

    kubernetes.core:Ansible的Kubernetes收藏

    这包括创建、修改、删除Pod、Service、Deployment、ConfigMap、Secret等资源,以及执行复杂的集群管理和应用部署工作流。 【标签】: 1. **kubernetes** - 指的是开源容器编排系统,用于自动化容器化应用程序的部署...

    kubernetes-challenge:Kubernetes挑战

    分叉仓库编写有关部署,服务,入口和configmap以及您认为需要的其他任何东西的k8s规范提供脚本以运行部署确保使用有关如何构建,部署和测试的说明来更新此准备好后提交PR成功因素可以通过在普通Kubernetes中调用...

    examples:“ Kubernetes模式-用于设计云原生应用程序的可重用元素”的示例

    我们的样本随机生成器处理对ConfigMap和PersistentVolumeClaims的严格要求以及资源限制。 从1.0版到2.0版的滚动生成器的滚动更新和固定更新。 随机生成器的活动性和就绪性探针。 postStart和preStop挂

    spring-cloud-kubernetes-ecosystem:Spring-cloudkubernetes生态系统

    Spring Cloud Config Server可以与Kubernetes ConfigMap和Secrets资源进行集成,使得应用的配置可以在运行时动态更新。这样,开发者可以在不重启应用的情况下更新配置,提高了系统的灵活性和可维护性。 3. **发现...

    openailab-k8s-yaml.tar.gz

    在Kubernetes中,YAML文件用于描述各种资源对象,如Deployment、Service、Pod、ConfigMap等。这些文件通常以`.yaml`或`.yml`为扩展名,而在这个压缩包中,我们看到的文件名为"openailab-k8s-yaml",这很可能是一个...

    Forecastle:Forecastle是一个控制面板,可以动态发现并提供启动板来访问Kubernetes上部署的应用程序-如果您正在使用它,则可以使用[✩Star]!

    预告片 问题) 我们希望有一个中心位置,可以轻松查找和访问在Kubernetes上... 在Forecastle configmap中,使用您希望Forecastle监视的命名空间列表来修改namespaceSelector键。 请参阅说明。 享受! 舵图 如果在集

    k8s dashboard v2.7.0离线镜像包

    1. **资源管理**:用户可以通过 Dashboard 创建、编辑、查看和删除各种 Kubernetes 资源,如 Deployment、Service、Pod、ConfigMap 和 Secret 等。 2. **监控与日志**:Dashboard 可以展示 Pod 的状态、资源使用...

    learn-kubernetes:学习Kubernetes

    5. **ConfigMap** 和 **Secret**:用来存储和管理应用的非结构化配置数据和敏感信息。 6. **Volume**:Pod内跨容器共享的持久化存储,可以是本地存储、网络存储或云存储。 7. **Helm**:Kubernetes的包管理工具,...

    kubernetes对象Volume用法详解

    2. **configMap**:configMap用于将配置信息以Volume的形式传递给Pod内的容器,而不是用来持久化数据。它允许你将配置数据保存在Kubernetes的etcd数据库中,并在需要时挂载到Volume。 3. **downwardAPI**:类似于...

    pihole-kubernetes:在Kubernetes上使用PiHole

    3. `templates/`:包含Kubernetes YAML模板,如`deployment.yaml`(PiHole的Pod部署),`service.yaml`(定义PiHole服务),可能还有`configmap.yaml`(存储配置数据)等。 4. `README.md`:项目说明和部署指南。 5....

    5-k8s部署之Dashboard1

    用户可以在 Dashboard 中创建、更新和删除 Pod、Deployment、Service、ConfigMap 等 Kubernetes 资源。此外,它还允许用户监控应用的运行状态,进行故障排查,以及执行如滚动更新、扩缩容等操作。 2. **部署 ...

    cka考试环境部署脚本 - 参数传递.zip

    参数传递可能涉及到环境变量、命令行参数或者通过Kubernetes的ConfigMap或Secret来实现,具体方式取决于脚本的设计。 在实际的cka考试环境中,考生需要理解并能熟练操作这些组件,包括如何创建和管理Ingress、部署...

    搭建k8s所需的软件(全)

    YAML或JSON格式的文件,定义了Kubernetes对象,如Deployment、Service、ConfigMap等。 13. **网络策略**: Kubernetes Network Policy定义了Pod间的网络访问规则,提供了更细粒度的安全控制。 在安装和配置这些...

    terraform-kubernetes-gocd:用于通过预配置的弹性代理部署GoCD的Terraform模块

    通过HCL,用户可以定义Kubernetes资源,如Deployment、Service、ConfigMap等,以实现GoCD服务器和代理的部署。 在“terraform-kubernetes-gocd-master”这个压缩包中,我们可以期待找到以下内容: 1. `main.tf` - ...

    dashboard.zip

    5. **ConfigMap** 或 **Secret**:可能包含 Dashboard 的配置参数或敏感信息,如认证凭据。 部署 Dashboard 的一般步骤包括: 1. 解压 "dashboard.zip",获取 YAML 文件。 2. 使用 `kubectl apply -f <yaml_file>` ...

Global site tag (gtag.js) - Google Analytics