Kubernetes 课程笔记系列五之配置ConfigMap&Secret

第六章 配置 ConfigMap & Secret

  • ConfigMap
  • Secret

1 ConfigMap

1.1 定义

ConfigMap 是 Kubernetes 中的一种 API 对象,用于存储非机密的配置数据,采用键值对的形式。它允许你将配置与容器化应用程序分离,使应用程序更加便携。使用时, Pod 可以将其用作环境变量命令行参数或者存储卷中的配置文件

1.2 用途
  1. 存储应用程序配置:例如数据库连接字符串、API 密钥等。
  2. 存储环境变量:可以将环境变量传递给 Pod。
  3. 存储配置文件:可以将配置文件内容直接存储在 ConfigMap 中。
1.3 优点
  1. 配置与代码解耦
  2. 支持多种数据格式,包括命令行,环境变量,文件等
  3. 动态更新配置
  4. 易于版本控制
  5. 支持配置重用,同一份配置可以被多个pod使用
  6. 使用 Helm 等工具,可以将 ConfigMap 模板化和参数化,从而更方便地管理不同环境(如开发、测试、生产)下的配置
  7. 方便动态查看配置,方便调试与排错
1.4 操作 ConfigMap
# 查看 ConfigMap
$ kubectl get cm
# 查看特定ConfigMap的详细信息
$ kubectl get cm my-config(config的名称) -o yaml
# 查看 ConfigMap 的键值对
$ kubectl describe cm my-config(config的名称)
# 删除 ConfigMap
$ kubectl delete cm my-config(config的名称)
1.5 创建 ConfigMap
1.5.1 通过文件创建
database.url=jdbc:mysql://db.example.com:3306/mydatabase
database.user=root
database.password=secret

创建

$ kubectl create cm my-config --from-file=config.properties
1.5.2 通过命令行参数创建
$ kubectl create cm my-config --from-literal=database.url=jdbc:mysql://db.example.com:3306/mydatabase --from-literal=database.user=root --from-literal=database.password=secret
1.5.3 通过yaml文件创建
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  database.url: "jdbc:mysql://db.example.com:3306/mydatabase"
  database.user: "root"
  database.password: "secret"

创建

$ kubectl apply -f configmap.yaml
1.5.4 通过目录创建ConfigMap

假设有一个目录 config-dir,其中包含多个配置文件:

app.properties
database.properties
logging.properties

创建

$ kubectl create configmap my-config --from-file=config-dir/
1.6 使用 ConfigMap

先通过上述案例选一种方式先创建出ConfigMap

1.6.1 环境变量中使用
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-env
spec:
  containers:
  - name: my-container
    image: busybox
    command: [ "/bin/sh", "-c", "env; sleep 3600" ]
    envFrom:
    - configMapRef:
        name: my-config

创建并验证

# 验证
$ kubectl logs my-pod-env
1.6.2 通过挂载文件使用
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-volume
spec:
  containers:
  - name: my-container
    image: busybox
    command: [ "/bin/sh", "-c", "sleep 3600" ]
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
  volumes:
  - name: config-volume
    configMap:
      name: my-config

创建并验证

# 进入容器
$ kubectl exec -it my-pod-volume -- sh
# 进入挂载目录查看
$ cd etc/config/
# 查看配置
$ cat database.url
jdbc:mysql://db.example.com:3306/mydatabase/etc/config

2 Secret

2.1 定义

Secret 是一种 API 对象,用于存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。Secret 可以在 Pod 中作为环境变量或文件挂载使用,类似于 ConfigMap,但具有更高的安全性。ConfigMap有的优点Secret也有,本质上两者是一致的。区别在于一个用于存储和管理非敏感信息,一个用于存储和管理敏感信息。

2.2 操作 Secret
# 查看 Secret
$ kubectl get secret
# 查看特定 Secret 的详细信息
$ 
(secret 的名称) -o yaml
# 查看 Secret 的键值对
$ kubectl describe secret my-secret(secret 的名称)
# 查看 Secret 的键值对(解码后)
$ kubectl get secret my-secret -o jsonpath='{.data}' | jq -r 'to_entries|map("\(.key)=\(.value|@base64d)")|.[]'
# 删除 Secret
$ kubectl delete secret my-secret(secret 的名称)
2.3 创建 Secret
2.3.1 通过命令行
$ kubectl create secret generic my-secret --from-literal=username=myuser --from-literal=password=mypassword
2.3.2 通过yaml文件创建
apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: bXl1c2Vy # 要使用base64编码后的
  password: bXlwYXNzd29yZA==
2.3.3 通过文件创建
$ echo -n root >./username
$ echo -n 123456 > ./password
$ kubectl create secret generic my-secret --from-file=./username --from-file=./password
2.4 使用Secret
2.4.1 作为环境变量使用
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-env-secret
spec:
  containers:
  - name: my-container
    image: busybox
    command: [ "/bin/sh", "-c", "echo $USERNAME; echo $PASSWORD; sleep 3600" ]
    env:
    - name: USERNAME
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: username
    - name: PASSWORD
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: password

创建并验证

$ kubectl apply -f pod-env-secret.yaml
# 验证 输出配置值
$ kubectl logs my-pod-env-secret
2.4.2 使用文件挂载
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-volume-secret
spec:
  containers:
  - name: my-container
    image: busybox
    command: [ "/bin/sh", "-c", "sleep 3600" ]
    volumeMounts:
    - name: secret-volume
      mountPath: /etc/secret
      readOnly: true
  volumes:
  - name: secret-volume
    secret:
      secretName: my-secret

创建并验证

# 进入容器
$ kubectl exec -it my-pod-volume-secret -- sh
# 进入挂载目录查看
$ cd etc/secret
# 查看配置
$ cat username | cat password

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值