ConfigMap

什么是configmap

  • kubernetes集群可以使用ConfigMap来实现对容器中应用的配置管理

  • 可以把ConfigMap看作是一个挂载到pod中的存储卷

创建

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm4
data:
  host: 127.0.0.1
  port: "3306"

使用方式

通过环境变量

apiVersion: v1
kind: Pod
metadata:
  name: pod-cm1
spec:
  containers:
  - name: busybox
    image: busybox
    args: [ "/bin/sh", "-c", "sleep 10000" ]
    envFrom:                            # env方式
    - configMapRef:
        name: cm1                        # configmap名称

通过volume

apiVersion: v1
kind: Pod
metadata:
  name: pod-cm2
spec:
  containers:
  - name: busybox
    image: busybox
    args: [ "/bin/sh", "-c", "sleep 10000" ]
    volumeMounts:                               # 用volume挂载方式
    - name: vol-cm                              # 对应下面的volume名
      mountPath: "/etc/mysql"                   # 挂载到容器内部的路径
      readOnly: true                            # 只读

  volumes:
  - name: vol-cm                                # 卷名称
    configMap:
      name: cm2                                 # configmap的名称

ConfigMap的热更新

  • 通过环境变量的方式传递给pod。这种方式不会热更新
  • 通过volume的方式挂载到pod内。这种方式会热更新,大概需要半分钟左右。

Secret

什么是secret

  • Secret与ConfigMap类似,主要的区别是ConfigMap存储的是明文,而Secret存储的是密文。

  • ConfigMap可以用配置文件管理,而Secret可用于密码、密钥、token等敏感数据的配置管理。

secret类型

Secret有4种类型:

  • Opaque: base64编码格式的Secret,用来存储密码、密钥、信息、证书等,类型标识符为generic

  • Service Account: 用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的/var/run/secrets/kubernetes.io/serviceaccount目录中

  • kubernetes.io/dockerconfigjson: 用来存储私有docker registry的认证信息,类型标识为docker-registry。

  • kubernetes.io/tls: 用于为SSL通信模式存储证书和私钥文件,命令式创建类型标识为tls。

Secret应用案例

echo -n 123 |base64

apiVersion: v1
kind: Secret
metadata:
  name: secret-mysql
data:
  password: MTIz

使用方式

通过环境变量

apiVersion: v1
kind: Pod
metadata:
  name: pod-mysql-secret1
spec:
  containers:
  - name: mysql
    image: mysql:5.7
    env:
      - name: MYSQL_ROOT_PASSWORD
        valueFrom:
          secretKeyRef:
            name: secret-mysql                # 对应创建的secret名字
            key: password

通过volume

apiVersion: v1
kind: Pod
metadata:
  name: pod-mysql-secret2
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - /bin/sh
    - -c
    - sleep 100000
    volumeMounts:
    - name: vol-secret                  # 定义挂载的卷,对应下面定义的卷名
      mountPath: "/opt/passwd"    # 挂载目录(支持热更新),也可以使用subPath挂载文件(但不支持热更新)
      readOnly: true                    # 只读
  volumes:
  - name: vol-secret                    # 定义卷名
    secret:                             # 使用secret
      secretName: secret-mysql              # 对应创建好的secret名

results matching ""

    No results matching ""