Kubernetes 配置
配置最佳实战:
在推送到集群之前,配置文件应存储在版本控制中。 这允许您在必要时快速回滚配置更改。 它还有助于集群重新创建和恢复。
使用 YAML 而不是 JSON 编写配置文件。虽然这些格式几乎可以在所有场景中互换使用,但 YAML 往往更加用户友好。
建议相关对象分组到一个文件。比如 guestbook-all-in-one.yaml
除非必要,否则不指定默认值:简单的最小配置会降低错误的可能性。
将对象描述放在注释中,以便更好地进行内省。
一、Secret
1、Secret 种类
2、Pod 如何引用
要使用 Secret,Pod 需要引用 Secret。 Pod 可以用三种方式之一来使用 Secret:
Secret 对象的名称必须是合法的 DNS 子域名 。 在为创建 Secret 编写配置文件时,你可以设置 data 与/或 stringData 字段。 data 和 stringData 字段都是可选的。data 字段中所有键值都必须是 base64 编码的字符串。如果不希望执行这种 base64 字符串的转换操作,你可以选择设置 stringData 字段,其中可以使用任何字符串作为其取值。
3、实验
3.1、创建 Secret
generic 类型
## 命令行#### 1、使用基本字符串kubectl create secret generic dev-db-secret \ --from-literal=username=devuser \ --from-literal=password='S!B\*d$zDsb=' ## 参照以下yamlapiVersion: v1kind: Secretmetadata: name: dev-db-secret data: password: UyFCXCpkJHpEc2I9 ## base64编码了一下 username: ZGV2dXNlcg==
#### 2、使用文件内容echo -n 'admin' > ./username.txtecho -n '1f2d1e2e67df' > ./password.txt
kubectl create secret generic db-user-pass \ --from-file=./username.txt \ --from-file=./password.txt
# 默认密钥名称是文件名。 你可以选择使用 --from-file=[key=]source 来设置密钥名称。如下kubectl create secret generic db-user-pass-02 \ --from-file=un=./username.txt \ --from-file=pd=./password.txt
复制代码
使用 yaml dev-db-secret yaml 内容如下
kubectl get secret dev-db-secret -o jsonpath='{.data}'
复制代码
3.2、使用 Secret
环境变量引用
apiVersion: v1kind: Podmetadata: name: secret-env-podspec: containers: - name: mycontainer image: redis env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password restartPolicy: Never
复制代码
环境变量引用的方式不会被自动更新
卷挂载
apiVersion: v1kind: Podmetadata: name: mypodspec: containers: - name: mypod image: redis volumeMounts: - name: foo mountPath: "/etc/foo" readOnly: true volumes: - name: foo secret: secretName: mysecret
复制代码
挂载方式的 secret 在 secret 变化的时候会自动更新(子路径引用除外)
二、ConfigMap
apiVersion: v1kind: ConfigMapmetadata: name: game-demodata: # 类属性键;每一个键都映射到一个简单的值 player_initial_lives: "3" ui_properties_file_name: "user-interface.properties"
# 类文件键 game.properties: | enemy.types=aliens,monsters player.maximum-lives=5 user-interface.properties: | color.good=purple color.bad=yellow allow.textmode=true
复制代码
你可以使用四种方式来使用 ConfigMap 配置 Pod 中的容器:
apiVersion: v1kind: Podmetadata: name: configmap-demo-podspec: containers: - name: demo image: alpine command: ["sleep", "3600"] env: # 定义环境变量 - name: PLAYER_INITIAL_LIVES # 请注意这里和 ConfigMap 中的键名是不一样的 valueFrom: configMapKeyRef: name: game-demo # 这个值来自 ConfigMap key: player_initial_lives # 需要取值的键 - name: UI_PROPERTIES_FILE_NAME valueFrom: configMapKeyRef: name: game-demo key: ui_properties_file_name volumeMounts: - name: config mountPath: "/config" readOnly: true volumes: # 你可以在 Pod 级别设置卷,然后将其挂载到 Pod 内的容器中 - name: config configMap: # 提供你想要挂载的 ConfigMap 的名字 name: game-demo # 来自 ConfigMap 的一组键,将被创建为文件 items: - key: "game.properties" path: "game.properties" - key: "user-interface.properties" path: "user-interface.properties"
复制代码
1、使用挂载 ConfigMap
apiVersion: v1kind: Podmetadata: name: mypodspec: containers: - name: mypod image: redis volumeMounts: - name: foo mountPath: "/etc/foo" readOnly: true volumes: - name: foo configMap: name: myconfigmap
复制代码
ConfigMap 的修改,可以触发挂载文件的自动更新
评论