【K8S】Kubernetes 中用于配置的资源对象——ConfigMap/Secret

一、存在背景

  • 配置的必要性。在软件世界里,基本上所有的应用或者服务都需要配置文件来管理服务的一些关键配置,方便应用的维护和管理。不管是我们的前端、后端,还是缓存、数据库、消息队列等。
  • Kubernetes 中将所有要管理的目标都为其创建了相应的 API 资源对象。服务配置对应的资源对象就是 ConfigMap/Secret。这两种资源对象分别是为了管理明文配置和加密配置。
  • ConfigMap/Secret 资源对象的必要性。我们虽然可以通过直接将配置文件打包进镜像的方式使用配置文件,但是对于配置的修改和管理很不方便,也违背一切资源对象化的设计理念。

二、明文配置对象 ConfigMap

2.1 创建 ConfigMap 资源对象文件模版

在linux 终端中执行以下命令获取 ConfigMap 资源对象文件模版:

kubectl create cm test-cm --from-literal=k=v --dry-run=client -o  yaml

然后可以在当前目录下得到了一个configMap 资源对象在 yaml 文件中的定义。

–from-literal 选项表示在资源对象模版文件的生成要包含具体数据

2.2 ConfigMap 资源对象定义

apiVersion: v1		# ConfigMap资源对象版本
kind: ConfigMap
metadata:
  name: test-cm

data:		# 开始定义具体的配置数据
  port: '8080'
  database: 'mysql'
  path: '/opt/source/api'
  saying: |
    hello, code slave.

2.3 创建、观察 ConfigMap 资源对象

使用以下命令创建、观察ConfigMap 资源对象:

kubectl apply -f test-cm.yaml # 创建该yaml文件中定义的configmap
kubectl get cm test-cm	# 获取configmap配置信息
kubectl describe cm test-cm		# 获取configmap详细状态信息

三、加密配置对象 Secret

Secret 资源对象包含了下面4个更精细的子类别,我们先来看一般类型机密信息。

  • 用于私有镜像仓库的认证信息;
  • 身份认证的凭证信息;
  • HTTPS协议需要的证书和私钥;
  • 一般类型的机密信息,如账号密码等;

3.1 创建Secret 资源对象模版文件

kubectl create secret generic test-secret --from-literal=key=value --dry-run=client -o  yaml

然后可以在当前目录下得到了一个secret 资源对象在 yaml 文件中的定义。

3.2 Secret 资源对象定义

除了在创建模版文件时指定的配置外,自己又额外的添加了2个配置项;

apiVersion: v1
kind: Secret
metadata:
  name: test-secret

data:
  key: dmFsdWU=  # value
  port: ODA4MA== # 8080
  pwd: MTIzNDU2   # 123456

同时我们要注意,我们传入的的key-value对中的 value 被以 base64 编码的形式保存在文件中。所以,我们在手动编写是也可以直接使用 echo -n {encode_content} | base64 命令编码后复制到文件。

3.3 创建、观察Secret 资源对象

使用如下命令创建、观察Secret 资源对象:

kubectl apply -f test-Secret.yaml # 创建该yaml文件中定义的configmap
kubectl get Secret test-Secret	# 获取configmap配置信息
kubectl describe Secret test-Secret		# 获取configmap详细状态信息

四、如何使用ConfigMapSecret

我们使用ConfigMapSecret的场景一般有2种,一种是在创建环境变量时,引用他们其中的值;一种是在创建数据卷时,在数据卷中引用他们。

4.1 在创建环境变量时引用

apiVersion: v1
kind: Pod
metadata:
  name: test-pod

spec:
  containers:
  - env:
      - name: PORT
        valueFrom: #指定环境变量值的来源,可以是configMapKeyRef或secretKeyRef
          configMapKeyRef:	#表示环境变量值来自configmap
            name: test-cm	# 指定使用哪一个configmap对象
            key: port	# 指定该configmap对象下哪个key对应的值
      - name: PASSWORD
        valueFrom:
          secretKeyRef:	#表示环境变量值来自secret
            name: test-secret	# 指定使用哪一个secret对象
            key: pwd	# 指定该secret对象下哪个key对应的值

    image: busybox
    name: busy
    imagePullPolicy: IfNotPresent
    command: ["/bin/sleep", "1000"]

在将该pod运行起来后,我们可以进入该Pod 查看环境变量是否生效:
进入pod:
kubectl exec -it test-pod -- sh
查看环境变量:
echo $PORT

4.2 在创建的数据卷中引用

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume

spec:
  volumes:	# 在该Pod中定义2个数据卷
  - name: cm-vol	#定义一个名为cm-vol的数据卷
    configMap:	# 该数据卷引用了一个configMap
      name: test-cm	#引用的configMap名为test-cm
  - name: secret-vol	#定义一个名为secret-vol的数据卷
    secret:	# 该数据卷引用了一个secret
      secretName: test-secret	#引用的configMap名为test-secret

  containers:
  - volumeMounts:	#该Pod绑定了2个数据卷
    - mountPath: /home/app/cm-conf	#第一个数据卷的绑定路径
      name: cm-vol	# 引用的数据卷
    - mountPath: /home/app/sec-conf
      name: sec-vol

    image: busybox
    name: busy
    imagePullPolicy: IfNotPresent
    command: ["/bin/sleep", "1000"]

在该Pod 运行起来之后,我们可以进入该Pod 内部,在数据卷的绑定目录下,查看数据卷的具体情况。

kubectl apply -f pod-volume.yaml   # 运行文件中定义的Pod
kubectl exec -it pod-volume -- sh	# 使用该命令进入Pod
cd /home/app/cm-conf	#到数据卷cm-vol挂载的目录下

我们可以看到,在数据卷下,每一项配置都变成一个文件。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值