configmap

Configmap 是 k8s 中的资源对象,用于保存非机密性的配置的,数据可以用 key/value
键值对的形式保存,也可通过文件的形式保存。通过挂载到容器中使用。
多用于配置文件,将 configMap 做为存储卷,或则是将configMap 通过 env 中 configMapKeyRef 注入到容器中。
缺点:configmap保存的数据大小不能超过1MiB

创建方法

命令创建

# 通过帮助命令查看创建例子
kubectl create configmap --help

# 创建时使用指定文件
 kubectl create configmap my-config --from-file=path/to/bar
# 创建指定键值对
kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt

示例:

  •  创建config文件
  •  使用命令创建cm 指定配置文件位置
  •  生成后data key为count value为123的cm 

也可以通过指定key的名成修改key

 

 资源清单

apiVersion: v1
kind: ConfigMap
metadata:
  name: yaml-cm
data:
  # | 下是配置文件内容
  my.cnf: |
   [mysql]
   log-bin=123.txt
  port: |
   80

 挂载方法:

环境变量

单独导入

apiVersion: v1
kind: Pod
metadata:
  name: pod-cm
spec:
  containers:
  - name: cm-pod
    image: nginx
    #定义环境变量 count
    env:
    - name: count
      valueFrom:
        configMapKeyRef:
        # cm中的键
          key: count
          # cm名称
          name: cm-dome1

 使用 envfrom 直接引入configmap

批量导入

apiVersion: v1
kind: Pod
metadata:
  name: pod-cm
spec:
  containers:
  - name: cm-pod
    image: nginx
    # 指定env来源
    envFrom:
    - configMapRef:
        # 多列表空格增加
        name: cm-dome2

文件挂载

资源清单示例

apiVersion: v1
kind: Pod
metadata:
  name: pod-cm
spec:
  containers:
  - name: cm-pod
    image: nginx
    # 指定挂载点
    volumeMounts:
    - mountPath: /tmpdir
      name: cm-vol
  volumes:
  - name: cm-vol
    # 选择挂载的cm
    configMap:
      name: yaml-cm

 configmap支持热更新

使用edit编辑configmap等待10秒后volumes挂载的pod中的文件也会更新,但挂载成环境变量的值不会更新

secret

创建

用来存放一些敏感数据,如密码、私钥等。secret也可以通过环境变量或volume方式使用

secret 可选参数有三种: 
generic: 通用类型,通常用于存储密码数据。 
tls:此类型仅用于存储私钥和证书。 
docker-registry: 若要保存 docker 仓库的认证信息的话,就必须使用此种类型来创建。 
Secret 类型: 
Service Account:用于被 serviceaccount 引用。serviceaccout 创建时 Kubernetes 会默认创建对应的secret。Pod 如果使用了 serviceaccount,对应的 secret 会自动挂载到 Pod 的/run/secrets/kubernetes.io/serviceaccount 目录中。 
Opaque:base64 编码格式的 Secret,用来存储密码、秘钥等。可以通过 base64 --
decode 解码获得原始数据,因此安全性弱 
kubernetes.io/dockerconfigjson:用来存储私有 docker registry 的认证信息。

创建同congfigmap类似,增加了秘钥类型。

 创建示例:

 资源清单示例:

base64加密: echo -n 'admin' | base64

base64解密: echo YWRtaW4= | base64 -d

apiVersion: v1
kind: Secret
metadata:
  name: secret-1
type: Opaque
data:
  passwd: MTIzLmNvbQ==
  user: YWRtaW4=

挂载

env

apiVersion: v1
kind: Pod
metadata:
  name: pod-cm
spec:
  containers:
  - name: cm-pod
    image: nginx
    # 挂载secret-1中所有key和值,单独挂载参照configmap配置
    envFrom:
    -   secretRef:
          name: secret-1

 

volume

apiVersion: v1
kind: Pod
metadata:
  name: pod-cm
spec:
  containers:
  - name: cm-pod
    image: nginx
    volumeMounts:
    - mountPath: /tmpdir
      name: cm-vol
  volumes:
  - name: cm-vol
# 选择挂载资源
    secret:
      secretName: secret-1

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐