k8s-configmap 和 secrets

简介: configmap 使用场景configmap的定义configmap的使用secrets的使用场景secrets的定义secrets的使用


Configmap


使用场景


用来存储配置文件的 kubernetes 资源对象,配置内容都存储在 etcd 中


定义方法


  1. 通过直接在命令行中指定 configmap 参数创建,即--from-literal


  1. 通过指定文件创建,即将一个配置文件创建为一个 ConfigMap --from-file=<文件>


  1. 通过指定目录创建,即将一个目录下的所有配置文件创建为一个 ConfigMap,--from-file=< 目录>


1 通过命令行参数创建 cm

kubectl create configmap test-config1 --from-literal=db.host=10.5.10.116 --from-literal=db.port='3306’



2.指定文件创建 cm


vi configs
db.host 10.5.10.116 
db.port 3306
kubectl create configmap test-config4 --from-env-file=./configs


3 指定目录创建


kubectl create configmap test-config4 --from-file=./configs


4 yaml 文件创建 cm



apiVersion: v1
data:  lsec1: ltop1
  lsec2: ltop2
  lsec3: ltop3
kind: ConfigMap
metadata:  creationTimestamp: null
  name: cm8




如何使用



第一种是通过环境变量的方式,直接传递给 pod  使用 configmap 中指定的 key,并 使用 configmap 中所有的 key



第二种是通过在 pod 的命令行下运行的方式(启动命令中)



第三种是作为 volume 的方式挂载到 pod 内

好处:

configmap 的热更新 更新 ConfigMap 后: 使用该 ConfigMap 挂载的 Env 不会同步更新 使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间(实测大概 10 秒)才能同步更 新



参考: https://blog.csdn.net/liukuan73/article/details/79492374


通过环境变量使用


使用 valueFrom、configMapKeyRef、name、key 指定要用的 key:


apiVersion: v1
kind: Pod
metadata:  name: dapi-test-pod
spec:  containers:    - name: test-container
      image: busybox
      command: ["/bin/sh","-c","echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)"]      env:        - name: SPECIAL_LEVEL_KEY
          valueFrom:            configMapKeyRef:              name: special_level
              key: xx
        - name: SPECIAL_TYPE_KEY
          valueFrom:            configMapKeyRef:              name: special-type
              key: xx
  restartPolicy: Never



在启动命令中引用


apiVersion: v1
kind: Pod
metadata:  name: dapi-test-pod
spec:  containers:    - name: test-container
      image: busybox
      command: ["/bin/sh","-c","echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)"]      env:        - name: SPECIAL_LEVEL_KEY
          valueFrom:            configMapKeyRef:              name: special-config
              key: SPECIAL_LEVEL      # 启动参数动态设置        - name: SPECIAL_TYPE_KEY
          valueFrom:            configMapKeyRef:              name: special-config
              key: SPECIAL_TYPE      # 启动参数动态设置  restartPolicy: Never


作为 volume 挂载使用



apiVersion: v1
kind: Pod
metadata:  name: secret-test-pod
  labels:    name: secret-test
spec:  volumes:  - name: secret-volume
    secret:      secretName: ssh-key-secret
  - name: cm-volume
    configMap:      name: mycm
  containers:  - name: ssh-test-container
    image: busybox
    command: ["/bin/sh","-c","sleep 7000"]    volumeMounts:    - name: secret-volume
      mountPath: /etc/secret-volume
    - name: cm-volume
      mountPath: /etc/cm-volume




Secrets


使用场景:


Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到 镜像或者 Pod Spec 中。


Secret 可以以 Volume 或者环境变量的方式使用。



secrets的三种类型




  1. Opaque:base64 编码格式的 Secret,用来存储密码、密钥等;但数据也通过 base64 –decode 解码得到原始数据


  1. kubernetes.io/dockerconfigjson:用来存储私有 docker registry 的认证信息。


  1. kubernetes.io/service-account-token: 用于被 serviceaccount 引用。



secrets创建



yaml 文件创建 secret


对用户名和密码base64编码


echo -n 'admin' | base64  YWRtaW4=  
echo -n '1f2d1e2e67df' | base64  MWYyZDFlMmU2N2Rm




secret.yaml文件配置

apiVersion: v1
kind: Secret
metadata:  name: mysecret
type: Opaque
data:  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm


kubectl create -f ./secret.yaml


对base64的字符串,解码

echo 'MWYyZDFlMmU2N2Rm' | base64 --decode
1f2d1e2e67df


命令行创建 secret


kubectl create secret generic test --from-literal=username=admin --from-literal=password=1f2d1e2e67df




查看命令以及验证




kubectl get cm 
kubectl describe cm test-config1
kubectl get secrets
kubectl describe secrets test-config1





configmap和secrets使用


通过 envFrom 使用 CM 和 Secret

apiVersion: v1
kind: Pod
metadata:  name: secret-env-pod
spec:  containers:  - name: mycontainer
    image: nginx
    env:    - name: SECRET_USERNAME
      valueFrom:        configMapKeyRef:          name: mycm
          key: username
    - name: SECRET_password
      valueFrom:        secretKeyRef:           name: mysecret
           key: password




通过 Volume 使用 CM 和 Secrets

apiVersion: v1
kind: Pod
metadata:  name: secret-test-pod
  labels:    name: secret-test
spec:  volumes:  - name: secret-volume
    secret:      secretName: ssh-key-secret
  - name: cm-volume
    configMap:      name: mycm
  containers:  - name: ssh-test-container
    image: busybox
    command: ["/bin/sh","-c","sleep 7000"]    volumeMounts:    - name: secret-volume
      mountPath: /etc/secret-volume
    - name: cm-volume
      mountPath: /etc/cm-volume







相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
5月前
|
存储 JSON Kubernetes
KubeConfig
KubeConfig 是一个用于存储和管理 Kubernetes 集群配置文件的 JSON 格式文件。它包含了集群的详细信息,如 API 服务器地址、认证信息、命名空间等。KubeConfig 文件的主要作用是让用户能够轻松地在不同的 Kuberne
36 1
|
7月前
|
存储 Kubernetes 网络协议
kubernetes ConfigMap存储卷
kubernetes ConfigMap存储卷
|
29天前
|
存储 Kubernetes 数据安全/隐私保护
Kubernetes的ConfigMap和Secret
Kubernetes的ConfigMap和Secret
42 0
|
3月前
secrets.randbelow(n)
secrets.randbelow(n):
16 0
|
5月前
|
JSON Kubernetes 数据安全/隐私保护
Kubectl
Kubectl 是一个命令行工具,用于管理 Kubernetes 集群。它可以用来创建、删除、更新和查询 Kubernetes 资源,例如部署、服务、副本集等。Kubectl 提供了丰富的命令和选项,可以满足各种管理需求。
36 3
|
10月前
|
存储 JSON Kubernetes
kubernetes为何需要默认的serviceaccount?
在 Kubernetes 中,ServiceAccount 是一种用于身份验证和授权的对象。它为 Pod 提供了一种身份,以便它们可以与 Kubernetes API 交互,并且可以通过 Role 和 RoleBinding 为它们分配特定的权限。
268 0
|
9月前
|
Kubernetes 数据安全/隐私保护 Perl
ConfigMap、Secret
ConfigMap、Secret
50 1
|
10月前
|
存储 Kubernetes NoSQL
kubernetes之volumes使用
kubernetes之volumes使用
76 0
|
存储 Kubernetes Devops
kustomize (八)生成secret
kustomize (八)生成secret
|
Kubernetes Shell API
kubernetes secret使用详解(1)
kubernetes secret使用详解(1)
kubernetes secret使用详解(1)