【kubernetes】配置资源管理

本文详细介绍了如何在 Kubernetes 中管理和使用 Secret 和 ConfigMap。Secret 主要用于存储敏感信息如密码、token,有多种类型,如 Opaque、kubernetes.io/service-account-token 等。Pod 可以通过挂载 Secret 到 Volume 或将其作为环境变量来使用。ConfigMap 用于存储不敏感的配置信息,可以通过目录、文件或字面量创建。Pod 可以使用 ConfigMap 替代环境变量,设置命令行参数或通过数据卷插件。ConfigMap 的热更新通常需要几秒钟才会同步到 Volume 中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

Secret

创建 Secret

1、用kubectl create secret命令创建Secret

2、内容用 base64 编码,创建Secret

使用方式 

1、将 Secret 挂载到 Volume 中,以 Volume 的形式挂载到 Pod 的某个目录下

2、将 Secret 导出到环境变量中

ConfigMap

创建 ConfigMap

1、使用目录创建

2、使用文件创建 

3、使用字面值创建 

Pod 中使用 ConfigMap 

1、使用 ConfigMap 来替代环境变量

Pod的创建

2、用 ConfigMap 设置命令行参数 

3、通过数据卷插件使用ConfigMap 

ConfigMap 的热更新 

ConfigMap 更新后滚动更新 Pod


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/

创建 Secret

1、用kubectl create secret命令创建Secret

echo -n 'zhangsan' > username.txt
echo -n 'abc1234' > password.txt
kubectl create secret generic mysecret --from-file=username.txt --from-file=password.txt
kubectl get secret
NAME                                 TYPE                                  DATA   AGE
default-token-xtqxc                  kubernetes.io/service-account-token   3      8d
mysecret                             Opaque                                2      16s
nfs-client-provisioner-token-rcmnm   kubernetes.io/service-account-token   3      3d2h
kubectl describe secret mysecret
Name:         mysecret
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password.txt:  6 bytes
username.txt:  3 bytes

get或describe指令都不会展示secret的实际内容,这是出于对数据的保护的考虑

2、内容用 base64 编码,创建Secret

echo -n ggl | base64
Z2ds

echo -n abc123 | base64
YWJjMTIz
vim secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret1
type: Opaque
data:
  username: Z2ds
  password: YWJjMTIz
kubectl create -f secret.yaml 
kubectl get secret
NAME                                 TYPE                                  DATA   AGE
default-token-xtqxc                  kubernetes.io/service-account-token   3      8d
mysecret                             Opaque                                2      14m
mysecret1                            Opaque                                2      24s
nfs-client-provisioner-token-rcmnm   kubernetes.io/service-account-token   3      3d2h
 kubectl get secret mysecret1 -o yaml
apiVersion: v1
data:
  password: YWJjMTIz
  username: Z2ds
kind: Secret
metadata:
  creationTimestamp: "2023-08-17T10:44:46Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:password: {}
        f:username: {}
      f:type: {}
    manager: kubectl-create
    operation: Update
    time: "2023-08-17T10:44:46Z"
  name: mysecret1
  namespace: default
  resourceVersion: "170478"
  selfLink: /api/v1/namespaces/default/secrets/mysecret1
  uid: ce798087-b395-482b-a907-239f79aadbdb
type: Opaque

使用方式 

1、将 Secret 挂载到 Volume 中,以 Volume 的形式挂载到 Pod 的某个目录下

vim secret-test.yaml
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: mysecret1
kubectl create -f secret-test.yaml
kubectl get pods
NAME                                      READY   STATUS              RESTARTS   AGE
busybox-0                                 0/1     ContainerCreating   0          24h
my-nginx-74f49bdcf5-rfmgf                 1/1     Running             1          22h
mypod                                     0/1     ContainerCreating   0          41s
nfs-client-provisioner-5fc8d4f6fd-kx9qv   0/1     ContainerCreating   0          24h
test-pod                                  0/1     Completed           0          23h
test-pod2                                 0/1     Completed           0          23h
test-pod3                                 1/1     Running             0          23h
kubectl exec -it mypod bash
 # cd /et
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值