kubernetes存储—Configmap配置管理介绍、建立、如何使用configmap、configmap热更新、Secret配置管理的简介、类型、如何使用secret

1.configmap配置管理

简介:
<1> Configmap用于保存配置数据,以键值对形式存储。
<2> configMap 资源提供了向 Pod 注入配置数据的方法。
<3> 旨在让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。
<4> 典型的使用场景:nginx

(1)填充环境变量的值 
(2)设置容器内的命令行参数 
(3)填充卷的配置文件

configmap的建立:
建立ConfigMap的方式有4种:
<1> 使用字面值建立
<2> 使用文件建立
<3> 使用目录建立
<4> 编写configmap的yaml文件建立
下面来一 一介绍这几种方式:
(1)使用字面值建立web

kubectl create configmap my-config --from-literal=key1=config1 --from- literal=key2=config2  ##直接使用键值队来建立名为my-config的configmap

在这里插入图片描述
(2)使用文件建立docker

kubectl create configmap my-config2 --from-file=/etc/resolv.conf ##key的名称是文件名称,value的值是这个文件的内容
kubectl get cm  ##查看一下
kubectl describe cm my-config2 ##查看my-config2的详细内容

在这里插入图片描述
在这里插入图片描述
(3)使用目录建立json

mkdir test  ##创建test目录
cp /etc/resolv.conf  test/  ##将文件复制到test目录下面
cp /etc/fstab  test/   
kubectl create configmap my-config3 --from-file=test ##使用目录来建立,其中目录中的文件名为key,文件内容是value

在这里插入图片描述

kubectl describe cm my-config3

在这里插入图片描述
(4)编写configmap的yaml文件来建立vim

mkdir cm   ##创建一个目录
cd cm   ##进入目录中
vim cm1.yml  ##编写configmap的yml文件

在这里插入图片描述

kubectl apply -f cm1.yml
kubectl get cm
kubectl describe cm cm1-config

在这里插入图片描述
如何使用configmap?
<1> 经过环境变量的方式直接传递给pod
<2> 经过在pod的命令行下运行的方式
<3> 做为volume的方式挂载到pod内安全

下面来详细介绍这几种用法:
(1)使用configmap设置环境变量bash

vim cm1.yml  ##在原有的基础上再编辑

在这里插入图片描述

Kubectl apply -f cm1.config
kubectl get pod
kubectl logs pod1

在这里插入图片描述
前面我们设置env时新建的key,咱们也能够不用新建立keyapp

vim cm1.yml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)使用configmap设置命令行参数ssh

vim cm1.yml

在这里插入图片描述
在这里插入图片描述
(3)经过数据卷使用configmapsvg

vim cm1.yml

在这里插入图片描述
在这里插入图片描述
configmap热更新

kubectl delete pod pod1  ##先将原来的pod1给删除掉
vim cm1.yml  ##再来编辑这个文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
咱们也能够不进入容器中来查看容器里面文件的内容:

kubectl exec pod1 -- cat /config/db_host  ##查看/config/db_host文件里的内容
kubectl exec pod1 -- cat /config/db_port

在这里插入图片描述
其中挂载的过程和使用文件建立configmap是想对应的,挂载是将configmap中的key转化为文件名,value值转换为文件里面的内容。

上面cm1.yml文件里面的内容,咱们将cm1-config文件挂载到/config目录下,可是这个目录对nginx服务的运行,并无什么影响,因此挂载上也没多大的意义,如今咱们再来设置一下cm1.yml文件。

vim cm1.yml

在这里插入图片描述
在这里插入图片描述

vim server.conf   ##编写一个server.conf文件

在这里插入图片描述
接着使用文件的方式来建立nginx-config
在这里插入图片描述
在这里插入图片描述

kubectl edit cm nginx-config  ##编辑一下nginx-config

在这里插入图片描述
因为修改了nginx-config文件,他又被挂载到容器里的目录下,因此pod也会更新,但Pod数据并不会实时更新,须要等待几秒。
在这里插入图片描述
这时咱们来访问一下pod
能够看出configmap热更新以生效,但访问Pod的8080端口是无效的。
在这里插入图片描述
configmap热更新后,并不会触发相关Pod的滚动更新,须要手动触发,这样才能再次加载nginx.conf配置文件。咱们每次经过修改“version/config”来触发Pod滚动更新。【注】:使用configmap挂载的env环境变量是不会更新的。

kubectl patch deployments.apps my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20200219"}}}}}'

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. Secret配置管理

简介:
<1> Secret 对象类型用来保存敏感信息,例如密码、OAuth 令牌和 ssh key。
<2> 敏感信息放在 secret 中比放在 Pod 的定义或者容器镜像中来讲更加安全和灵活。
<3> Pod 能够用两种方式使用 secret:

(1)做为 volume 中的文件被挂载到 pod 中的一个或者多个容器里。
(2)当 kubelet 为 pod 拉取镜像时使用。

<4> Secret的类型:

(1)Service Account:Kubernetes 自动建立包含访问 API 凭据的 secret,并自动修改 pod 以使用此类型的 secret。 
(2)Opaque:使用base64编码存储信息,能够经过base64 --decode解码得到原始数据,所以安全性弱。
(3)kubernetes.io/dockerconfigjson:用于存储docker registry的认证信息。

Secret的类型
(1)Service Account
serviceaccout 建立时 Kubernetes 会默认建立对应的 secret。对应的 secret 会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
每一个namespace下有一个名为default的默认的ServiceAccount对象
在这里插入图片描述
ServiceAccount里有一个名为Tokens的能够做为Volume同样被Mount到Pod里的Secret, 当Pod启动时这个Secret会被自动Mount到Pod的指定目录下,用来协助完成Pod中的进程 访问API Server时的身份鉴权过程。

**(2)Opaque Secret **
其value为base64编码后的值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用yml文件来建立Opaque 类型的Secret

cd cm  
vim cm2.yml

在这里插入图片描述

kubectl apply -f cm2.yml
kubectl get secret
kubectl describe secret mysecret

在这里插入图片描述
在这里插入图片描述
Pod 能够用两种方式使用 secret以下
(1)做为 volume 中的文件被挂载到 pod 中的一个或者多个容器里。

vim cm2.yml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
前面咱们将mysecret蜜月直接挂载到容器的/secret目录下的,咱们也能够向指定路径映射mysecret 密钥:

vim cm2.yml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将Secret设置为环境变量:

vim cm2.yml

在这里插入图片描述
在这里插入图片描述

kubectl apply -f cm2.yml

在这里插入图片描述
环境变量读取Secret很方便,但没法支撑Secret动态更新。

(2)当 kubelet 为 pod 拉取镜像时使用。
kubernetes.io/dockerconfigjson用于存储docker registry的认证信息。
当一个仓库是私有的,咱们拉取镜像须要docker认证。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

kubectl create secret docker-registry myregistrykey --docker- server=reg.westos.org --docker-username=admin --docker-password=xiaoyan123 -- docker-email=pika@westos.org ##建立docker认证信息到myregistrykey 

在这里插入图片描述

vim pod.yml  ##建立一个yml文件

在这里插入图片描述
在这里插入图片描述