第七章、Kubernetes(v1.21)配置和存储——第二章配置
第二章:配置
2.1 配置最佳实践
- 云原生应用的 12 要素中,提出了配置分离。
- 在推送到集群之前,配置文件应该存储在版本控制系统中。这将允许我们在必要的时候快速回滚配置更改,它有助于集群重新创建和恢复。
- 使用 YAML 而不是 JSON 编写配置文件,虽然这些格式几乎可以在所有场景中互换使用,但是 YAML 往往更加用户友好。
- 建议相关对象分组到一个文件,一个文件通常比几个文件更容易管理。请参阅 guestbook-all-in-one.yaml 文件作为此语法的示例。
- 除非必要,否则不指定默认值(简单的最小配置会降低错误的可能性)。
- 将对象描述放在注释中,以便更好的内省。
2.2 Secret
2.2.1 概述
- Secret 对象类型用来保存敏感信息,如:密码、OAuth2 令牌以及 SSH 密钥等。将这些信息放到 Secret 中比放在 Pod 的定义或者容器镜像中更加安全和灵活。
- 由于创建 Secret 可以独立于使用它们的 Pod, 因此在创建、查看和编辑 Pod 的工作流程中暴露 Secret(及其数据)的风险较小。 Kubernetes 和在集群中运行的应用程序也可以对 Secret 采取额外的预防措施,如:避免将机密数据写入非易失性存储。
- Secret 类似于 ConfigMap 但专门用于保存机密数据。
-
注意:Secret 和 ConfigMap 是保存在 etcd 中。
2.2.2 Secret 的种类
命令行:kubectl create secret --help
2.2.3 pod如何引用
- 要使用 Secret,Pod 需要引用 Secret。 Pod 可以用三种方式之一来使用 Secret :
- 作为容器的环境变量(envFrom字段引用)
- 由 kubelet 在为 Pod 拉取镜像时使用(此时Secret是docker-registry类型的)
- Secret 对象的名称必须是合法的 DNS 子域名。 在为创建 Secret 编写配置文件时,你可以设置
data与/或stringData字段。data和stringData字段都是可选的。data字段中所有键值都必须是 base64 编码的字符串。如果不希望执行这种 base64 字符串的转换操作,你可以选择设置stringData字段,其中可以使用任何字符串作为其取值。
2.2.4 创建Secret
- 命令行创建 Secret :
kubectl create secret generic secret-1 \
--from-literal=username=admin \
--from-literal=password=123456
- 使用 base64 对数据进行编码:
# 准备username YWRtaW4=
echo -n "admin" | base64
# MTIzNDU2
echo -n "123456" | base64
使用 yaml 格式创建 Secret :
vi k8s-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: k8s-secret
namespace: default
type: Opaque
data:
username: YWRtaW4=
password: MTIzNDU2
kubectl apply -f k8s-secret.yaml
- 有的时候,觉得手动将数据编码,再配置到 yaml 文件的方式太繁琐,那么也可以将数据编码交给 Kubernetes :
apiVersion: v1
kind: Secret
metadata:
name: k8s-secret-string-data
namespace: default
type: Opaque
stringData:
username: admin
password: "123456"
kubectl apply -f k8s-secret.yaml
注意:如果同时使用 data 和 stringData ,那么 data 会被忽略。

浙公网安备 33010602011771号