k8s 之 configMap

configMap 是一种快捷的修改容器内 变量的方式,由k-v组成,当修改configmap时 容器中的变量也会相应修改。
查看帮助文档

[[email protected] ~]# kubectl explain pod.spec.containers.env.valueFrom.configMapKeyRef

[[email protected] ~]# kubectl explain configmap

configmap 可以直接用命令创建也可以把value保存到文件中,此时文件名为key ,文件中的内容为value.
直接用命令:

[[email protected] ~]# kubectl create configmap --help
 kubectl create configmap nginx-nc --from-literal=nginx_port=80 --from-literal=nginx_server=erick.com
 查看创建的cm
[[email protected] ~]# kubectl get cm
NAME       DATA   AGE
nginx-nc   2      60s
[[email protected] cm]# kubectl get cm nginx-nc -o yaml
apiVersion: v1
data:
  nginx_port: "80"
  nginx_server: erick.com
kind: ConfigMap
metadata:
  creationTimestamp: "2019-06-20T22:34:44Z"
  name: nginx-nc
  namespace: default
  resourceVersion: "432545"
  selfLink: /api/v1/namespaces/default/configmaps/nginx-nc
  uid: 9a180b6e-93ab-11e9-b0ae-080027edb92f
[[email protected] cm]# 

把value以文件的方式存放

[[email protected] cm]# cat www.conf
server {
        server_name myapp.com;
        port 80;
        root /data/web/html;

}
[[email protected] cm]# kubectl create configmap nginx-cm-from-file --from-file=./www.conf
configmap/nginx-cm-from-file created
[[email protected] cm]# kubectl get cm
NAME                 DATA   AGE
nginx-cm-from-file   1      7s
nginx-nc             2      9m7s
[[email protected] cm]# kubectl get cm nginx-cm-from-file -o yaml
apiVersion: v1
data:
  www.conf: "server {\n\tserver_name myapp.com;\n\tport 80;\n\troot /data/web/html;\n\n}\n"
kind: ConfigMap
metadata:
  creationTimestamp: "2019-06-20T22:43:44Z"
  name: nginx-cm-from-file
  namespace: default
  resourceVersion: "433432"
  selfLink: /api/v1/namespaces/default/configmaps/nginx-cm-from-file
  uid: dbd2aa33-93ac-11e9-b0ae-080027edb92f
[[email protected] cm]#
也可以用describe 看
[[email protected] cm]# kubectl describe cm nginx-nc
Name:         nginx-nc
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
nginx_port:
----
80
nginx_server:
----
erick.com
Events:  <none>
[[email protected] cm]# kubectl describe cm nginx-cm-from-file
Name:         nginx-cm-from-file
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
www.conf:
----
server {
  server_name myapp.com;
  port 80;
  root /data/web/html;

}

Events:  <none>

可以看到用这种方式创建,key为文件名, key 为文件中的内容.

创建一个pod 关联刚刚创建的cm
[[email protected] cm]# cat cm-1.yml
apiVersion: v1
kind: Pod
metadata:
name: myapp-cm-1
namespace: default
annotations:
erick: "by erick"
spec:
containers:

  • name: myapp-cm-1
    image: ikubernetes/myapp:v1
    ports:

    • name: http
      containerPort: 80
      env:
    • name: nginx_port
      valueFrom:
      configMapKeyRef:
      name: nginx-nc
      key: nginx_port
    • name: nginx_server
      valueFrom:
      configMapKeyRef:
      name: nginx-nc
      key: nginx_server

[[email protected] cm]#

进入容器并查看环境变量
[[email protected] cm]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-cm-1 1/1 Running 0 2m16s
[[email protected] cm]# kubectl exec -it myapp-cm-1 -- /bin/sh
/ # env|grep nginx_port
nginx_port=80
/ # env|grep nginx_server
nginx_server=erick.com
/ #

我们把cm 的环境变量修改下

[[email protected] cm]# kubectl edit  configmap  nginx-nc
# Please edit the object below. Lines beginning with a ‘#‘ will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
  nginx_port: "8080"
  nginx_server: erick.com
kind: ConfigMap
metadata:
  creationTimestamp: "2019-06-20T22:34:44Z"
  name: nginx-nc
  namespace: default
  resourceVersion: "436267"
  selfLink: /api/v1/namespaces/default/configmaps/nginx-nc
  uid: 9a180b6e-93ab-11e9-b0ae-080027edb92f
~
把port修改成8080

再次查看环境变量是否更改
[[email protected] cm]# kubectl exec -it myapp-cm-1 -- /bin/sh
/ # env|grep nginx_port
nginx_port=80
/ # 

结论: pod中的环境变量只会在第一次创建时生效,即使 重启pod也不会生效,后期修改不会生效。

2。基于存储卷的的 pod 引用环境变量。

apiVersion: v1
kind: Pod
metadata:
name: myappcmwww
namespace: default
annotations:
erick: "by erick"
spec:
containers:

  • name: myappcmwww
    image: ikubernetes/myapp:v1
    ports:

    • name: http
      containerPort: 80
      volumeMounts:
    • name: nginx-conf
      mountPath: /etc/nginx/conf.d/
      volumes:
  • name: nginx-conf
    configMap:
    name: nginx-cm-from-file
    [[email protected] cm]#

进入容器查看 环境变量
[[email protected] cm]# kubectl exec -it myappcmwww -- /bin/sh
/ # cat /etc/nginx/conf.d/
..2019_06_22_09_11_04.278015527/ ..data/ www.conf
/ # cat /etc/nginx/conf.d/www.conf
server {
server_name myapp.com;
listen 80;
root /data/web/html;

}
/ #

修改configmap 的端口为8080

[[email protected] ~]# kubectl edit cm nginx-cm-from-file
# Please edit the object below. Lines beginning with a ‘#‘ will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
  www.conf: "server {\n\tserver_name myapp.com;\n\tlisten 8080;\n\troot /data/web/html;\n\n}\n"
kind: ConfigMap
metadata:
  creationTimestamp: "2019-06-20T22:43:44Z"
  name: nginx-cm-from-file
  namespace: default
  resourceVersion: "494403"
  selfLink: /api/v1/namespaces/default/configmaps/nginx-cm-from-file
  uid: dbd2aa33-93ac-11e9-b0ae-080027edb92f

在容器内查看环境变量是否更改。
/ # cat /etc/nginx/conf.d/www.conf
server {
        server_name myapp.com;
        listen 8080;
        root /data/web/html;

}
/ # 

已经动态的发生了改变。

secret
secret 是用base64 进行编码的格式

[[email protected] cm]# kubectl create secret --help
[[email protected] cm]# kubectl create secret --help
Create a secret using specified subcommand.

Available Commands:
  docker-registry Create a secret for use with a Docker registry ## 链接私有镜像时
  generic         Create a secret from a local file, directory or literal value  ## 储存密码时
  tls             Create a TLS secret ## 放入证书时

Usage:
  kubectl create secret [flags] [options]

Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).
[[email protected] cm]#

secrete 是 用bash64 加密的, 可以被反向解密。

原文地址:https://blog.51cto.com/shyln/2415948

时间: 2024-10-14 04:27:36

k8s 之 configMap的相关文章

k8s通过configmap管理应用配置信息

Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap. ConfigMap 的创建和使用方式与 Secret 非常类似,主要的不同是数据以明文的形式存放. 1.configMap的创建 与 Secret 一样,ConfigMap 也支持四种创建方式: 1.1通过 --from-literal: kubectl create configmap myconfigmap --from-literal=config1=

k8s的configMap基本概念及案例

pod中两种特殊类型的存储卷:secret,configMap  pod.spec.volumes.secret  pod.spec.volumes.configMap多数情况下,这两个存储卷不是给pod做存储空间来用的,而是给我们的管理员或者用户提供了从集群外部向pod内部的应用注入配置信息的方式. configMap里放的是配置信息configMap的主要作用是:让配置信息与镜像文件结藕,配置信息可以通过configMap注入.简单来讲,一个configMap就是一系列配置数据的集合,而这些

k8s 使用configMap

需求:制作镜像的时候有些配置信息,需要单独保存. 1. 建立configMap 1.1 由配置文件创建 比如说配置信息保存在一个文件里my.cnf,里面存了key=value一行一个的键值对. 创建命令: kubectl create configMap   myMap  --from-file=my.cnf (多个配置文件后面接多个--from-file 或者后面跟my.cnf所在的目录) 1.2  由yaml文件创建 test.yaml内容如下: apiVersion: v1 kind: C

k8s用 ConfigMap 管理配置(13)

一.ConfigMap介绍 Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap ConfigMap 的创建和使用方式与 Secret 非常类似,主要的不同是数据以明文的形式存放. 与 Secret 一样,ConfigMap 也支持四种创建方式: 1. 通过 --from-literal: kubectl create configmap myconfigmap --from-literal=config1=xx

k8s使用ConfigMap配置mysql和nginx (13)

configmap:是实现给容器内应用程序传递参数.原因:就是为了让镜像 和 配置文件解耦,以便实现镜像的可移植性和可复用性举个例子,比如我有一个pod,既要运行在正式环境,又要运行在测试环境,还有预发三个环境,但是当中的配置,是不一样的,那么我们需要准备三个不同的pod进行测试使用.configmap就是解决这个问题的,我们只需要准备不同的configmap即可,然后把不同的configmap挂载到同一个pod当中,就可以实现不同环境的pod运行,减少pod的复杂度,实现程序和pod的分离.

k8s中helm安装部署,升级和回滚(chart,helm,tiller,StorageClass)

一.Helm介绍 helm是基于kubernetes 的包管理器.它之于 kubernetes 就如 yum 之于 centos,pip 之于 python,npm 之于 javascript 那 helm 的引入对于管理集群有哪些帮助呢? 更方便地部署基础设施,如 gitlab,postgres,prometheus,grafana 等 更方便地部署自己的应用,为公司内部的项目配置 Chart,使用 helm 结合 CI,在 k8s 中部署应用一行命令般简单 1.Helm用途 Helm把Kub

再次升级!阿里云Kubernetes日志解决方案

摘要: 今天阿里云Kubernetes日志解决方案再次升级,为您带来以下改进: 1.极致部署体验:只需一条命令一个参数即可完成整个K8S集群的日志解决方案部署. 2.支持更多配置方式:除原生控制台.SDK配置方式外,支持通过CRD方式进行配置(kubectl.控制台.K8S openapi). 背景 针对K8S日志采集存在的采集目标多.弹性伸缩难.运维成本大.侵入性高.采集性能低等问题,在18年2月份日志服务和容器服务团队一起发布了阿里云Kubernetes日志解决方案.1分钟内即可完成整个集群

中小团队落地配置中心详解

不知道配置文件上次什么时候修改的.修改了什么内容?改了配置文件还要重新发布项目或者手动触发重启服务?无缘无故发现配置文件错了影响到线上正常部署?你是否正在因为这些问题而困扰?50+线上项目,数百+配置文件,我们经常被这些配置文件虐的生无可恋,是时候作出改变了!本文将带你解决这些问题,喝着咖啡轻松运维 配置中心选型 选型的原则:简单,易落地,不挑平台,不挑语言,尽量少的依赖. 对比了Disconf.Apollo等方案,最终选择了Etcd+Confd的方案,基本符合上边的原则,且Etcd我们在部署K

现代&ldquo;十二要素应用&rdquo;与 Kubernetes

"十二要素应用"为开发SaaS应用提供了方法上的指导,而Docker能够提供打包依赖,解耦后端服务等特性,使得两者非常吻合.这篇文章介绍了Docker特性怎样满足了开发"十二要素应用"的对应要点. "十二要素应用"为构建SaaS应用提供了方法论,是由知名PaaS云计算平台Heroku的创始人Adam Wiggins提出的.请参考这篇 Heroku 创始人 Adam Wiggins 发布十二要素应用宣言. Dockerfile 与k8s/helm