Personal learning records
K8S中Secret,ConfigMap,DownwardAPI三大组件
K8S中Secret,ConfigMap,DownwardAPI三大组件

K8S中Secret,ConfigMap,DownwardAPI三大组件

Secret

secret用来保存小片敏感数据的k8s资源,例如密码,token,或者秘钥。这类数据当然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险。
用户可以创建自己的secret,系统也会有自己的secret。
Pod需要先引用才能使用某个secret,且Secret 要求数据必须是经过 Base64 转码的,以免出现明文密码显示的安全隐患。
[root@k8s]# vim secret.yml
---
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

以上为一个简单的secret.yml文件,记录了用户名为admin,密码为MWYyZDFlMmU2N2Rm的一组凭证。查看发现成功创建。之后就是使用,下面用redis测试一下:

以上的yml创建了一个redis容器,

apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod
spec:
  containers:
  - name: mysql-container
    image: mysql:5.7.44
    env:


    - name: MYSQL_ROOT_PASSWORD
      valueFrom:
        secretKeyRef:
          name: mysecret
          key: password

这样就在mysql中,root用户使用了刚才的secret,直接进入pod中,输入env,查到了对应变量

再登录试试,成功进入

ConfigMap

ConfigMap与 Secret 类似,用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在etcd中。ConfigMap 保存的是不需要加密的、应用所需的配置信息。ConfigMap 的用法几乎与 Secret 完全相同:可以使用 kubectl create configmap 从文件或者目录创建 ConfigMap,也可以直接编写 ConfigMap 对象的 YAML 文件。由于ConfigMap中存的是很多的配置文件内容,不适用于yml创建,使用指定目录的方法创建。先在本地创一个conf文件,

[root@k8s]# vim server.conf
server {
listen 80;
server_name localhost;
location / {
root /var/www/html;
index index.html index.htm;
}
}

再通过“kubectl create configmap test-config2 –from-file=server.conf”,创建configmap。看看这个新创建的configmap

创建成功,尝试使用一下

使用volumes挂载到pod中,

[root@master]# vim volupod.yml
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx-configmap
spec:
  containers:
  - name: nginx-configmap
    image: nginx:1.25.0
    volumeMounts:
    - name: config-volume4
      mountPath: "/tmp/config4"
  volumes:
  - name: config-volume4
    configMap:
      name: test-config2

进入新建的这个nginx的pod中,cd到tmp目录,查看

成功挂载进来了,configmap可以用来把各种配置文件放到配置文件目录中。

Downward API

downwardAPI存储卷类型,从严格意义上来说,downwardAPI不是存储卷,它自身就存在,原因在于,它引用的是Pod自身的运行环境信息,这些信息在Pod启动手就存在。

  • spec.nodeName – 宿主机名字
  • status.hostIP – 宿主机 IP
  • metadata.name – Pod 的名字
  • metadata.namespace – Pod 的 Namespace
  • status.podIP – Pod 的 IP
  • spec.serviceAccountName – Pod 的 Service Account 的名字
  • metadata.uid – Pod 的 UID
  • metadata.labels[”] – 指定 的 Label 值
  • metadata.annotations[”] – 指定 的 Annotation 值
  • metadata.labels – Pod 的所有 Label
  • metadata.annotations – Pod 的所有 Annotation

这个不需要提前创建什么,这是k8s自己自带的一些参数,直接使用就行,创建对应pod的yml来测一下。

[root@master]# vim test-env-pod.yml
---
apiVersion: v1
kind: Pod
metadata:
    name: test-env-pod
    namespace: kube-system
spec:
    containers:
    - name: test-env-pod
      image: daocloud.io/library/nginx
      env:
      - name: POD_NAME   #第一个环境变量的名字
        valueFrom:      #使用valueFrom方式设置
          fieldRef:    #关联一个字段metadata.name
            fieldPath: metadata.name  #这个字段从当前运行的pod详细信息查看
      - name: POD_NAMESPACE
        valueFrom:
          fieldRef:
            fieldPath: metadata.namespace
      - name: POD_IP
        valueFrom:
          fieldRef:
            fieldPath: status.podIP

创建完成后,创建pod,exec进入后查看,downwardapi成功在pod中显示出来

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注