配置资源管理
ConfigMap资源(简称给cm)
用于保存配置文件,环境变量等不需要加密的信息。它可以实现将配置信息与应用程序解耦
kubectl run pod-demo --image=soscscs/myapp --port=80 --dry-run=client -o yaml > pod-demo.yaml
kubectl create cm cm-demo1 --from-file=./hanbao.txt --from-file=./index.html --from-literal=myname=hanbao
apiVersion: v1 kind: Pod metadata: labels: run: pod-demo1 name: pod-demo1 spec: volumes: - name: vol-cm configMap: name: cm-demo1 containers: - image: soscscs/myapp:v1 name: pod-demo ports: - containerPort: 80 volumeMounts: - name: vol-cm mountPath: /var/www/html resources: {} dnsPolicy: ClusterFirst restartPolicy: Always status: {}
#实现动态更新(热更新)
Pod 中使用 ConfigMap
apiVersion: v1 kind: ConfigMap metadata: name: special-config namespace: default data: special.how: very special.type: good --- apiVersion: v1 kind: ConfigMap metadata: name: env-config namespace: default data: log_level: INFO
apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: busybox image: busybox:1.28.4 command: [ "/bin/sh", "-c", "env" ] env: - name: SPECIAL_HOW_KEY valueFrom: configMapKeyRef: name: special-config key: special.how - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config key: special.type envFrom: - configMapRef: name: env-config restartPolicy: Never
通过数据卷插件使用ConfigMap
在数据卷里面使用 ConfigMap,就是将文件填入数据卷,在这个文件中,键就是文件名,键值就是文件内容
apiVersion: v1 kind: Pod metadata: name: test-pod3 spec: containers: - name: busybox image: busybox:1.28.4 command: [ "/bin/sh", "-c", "sleep 36000" ] volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: special-config restartPolicy: Never
Secret
Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。 Secret 有四种类型: ●kubernetes.io/service-account-token:由 Kubernetes 自动创建,用来访问 APIServer 的 Secret,Pod 会默认使用这个 Secret 与 APIServer 通信, 并且会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中; ●Opaque :base64 编码格式的 Secret,用来存储用户自定义的密码、密钥等,默认的 Secret 类型; ●kubernetes.io/dockerconfigjson :用来存储私有 docker registry 的认证信息。 ●kubernetes.io/tls :用来存储 TLS 证书和私钥信息。 Pod 需要先引用才能使用某个 secret,Pod 有 3 种方式来使用 secret: ●作为挂载到一个或多个容器上的卷 中的文件。 ●作为容器的环境变量。 ●由 kubelet 在为 Pod 拉取镜像时使用。 应用场景:凭据 https://kubernetes.io/docs/concepts/configuration/secret/
kubectl create secret generic mysecret --from-file=username.txt --from-file=password.txt
kubectl describe secret mysecret
内容用 base64 编码,创建Secret
echo -n zhangsan | base64
echo -n abc1234 | base64
apiVersion: v1 kind: Secret metadata: name: mysecret1 type: Opaque data: username: emhhbmdzYW4= password: YWJjMTIzNA==
使用方式
将 Secret 挂载到 Volume 中,以 Volume 的形式挂载到 Pod 的某个目录下
apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: nginx image: nginx volumeMounts: - name: secrets mountPath: "/etc/secrets" readOnly: true volumes: - name: secrets secret: secretName: mysecret
将 Secret 导出到环境变量中
apiVersion: v1 kind: Pod metadata: name: mypod1 spec: containers: - name: nginx image: nginx env: - name: TEST_USER valueFrom: secretKeyRef: name: mysecret1 key: username - name: TEST_PASSWORD valueFrom: secretKeyRef: name: mysecret1 key: password envFrom: - secretRef: name: mysecret1
总结
ConfigMap资源(简称给cm): #用于保存配置文件,环境变量等不需要加密的信息。它可以实现将配置信息与应用程序解耦 #创建cm资源 kubectl create cm <资源名称> --from-file=文件|目录 --from-literal=<键名>=<键值> #查看cm资源数据 kubectl get -n <命名空间> cm <cm资源名称> -o yaml kubectl describe -n <命名空间> cm <cm资源名称> #使用cm资源 作为存储卷挂载的方式: 在Pod资源配置中spec.volumes字段设置configMap类型的卷 在容器配置中用volumeMounts将卷挂载到容器的指定的目录,cm资源数据的键名会作为文件名,cm资源数据的键值会作为文件内容(支持热更新) 在容器中用volumeMounts.subFath字段指定文件名,实现将卷挂载到容器中指定的文件上(不支持热更新) --以文件形式挂载 作为容器环境变量方式(不支持热更新) 在容器配置中用env.name字段自定义容器的环境变量名,用env.valueFrom.configMapKeyRef.key/name字段指定环境变量的值从哪个cm资源的键获取 在容器配置中用envFrom.configMapRef.name字段指定cm资源的名称,使得cm资源数据的键名和键值直接作为容器的环境变量名和值 -------------------------------------- Secret资源 #用于保存密码文件、ssl证书/私钥文件、token令牌字符串、镜像私有仓库认证信息等需要加密的敏感信息 Secret的主要目的是将民昂数据与应用程序代码分离,提供一种安全的方式来存储和传递这些敏感数据给容器化的应用程序。它们已加密的形式保存,并且只能在需要时才能被解密和使用 #Secret的4种类型: kubernetes.io/service-account-token: 当创建serviceaccount账户资源后K8S会自动创建同名的secert资源,用于Pod访问apiserver时会使用此Secret卷中的token做认证 Opaque: 默认的Secret资源类型,可以通过选项引用文件、目录、键值队的方式创建Secret资源,并且资源数据的键值会被自动转换为base64编码格式加密 kubernetes.io/dockerconfigjson: 用户存储K8S从Harbor等镜像私有仓库拉取镜像时做认证的信息 #创建Secret资源 kubectl create secret generic <资源名称> --from-file=文件|目录 --from-literal=<键名>=<键值> kubectl create secret docker-registry secret-harbor -dockear-server=<私有仓库URL路径> --docker-username=<仓库用户名> --docker-pasword-<用户密码> --docker-email=<邮箱地址> kubectl create secret tls<资源名称> --cert=证书文件 --key=私钥文件 #查看Secret资源(键值会以base64编码格式加密显示) kubectl get -n <命名空间> secret <secret资源名称> -o yaml kubectl describe -n <命名空间> secret <secret资源名称> #使用Secret资源 作为存储卷挂载的方式: 在Pod资源配置中用spec.volumes字段设置secret类型的卷 在容器配置中用volumeMounts将卷挂载到容器的指定的目录,secret资源数据的键名会作为文件名,secret资源数据的键值会作为文件内容 #作为容器环境变量的方式: 在容器配置中用env.name字段自定义容器的环境变量名,用env.volueFrom.secretKeyRef.key/name字段指定环境变量的值从哪个Secret资源的键获取 在容器配置中用envFrom.secretRef.name字段指定secret资源的名称,使得secret资源数据的键名和键值直接作为容器的环境变量名和值 #Pod配置从私有仓库拉取镜像: 在Pod资源配置中用spec,imagePullsecrets.name字段指定kubernetes.io/dockerconfigjson类型的secret资源名称
标签:name,cm,--,配置,secret,Secret,Pod,K8S,资源管理 From: https://www.cnblogs.com/yanrui07/p/18059360