简介:
<1> Configmap用于保存配置数据,以键值对形式存储。
<2> configMap 资源提供了向 Pod 注入配置数据的方法。
<3> 旨在让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。
<4> 典型的使用场景:
(1)填充环境变量的值
(2)设置容器内的命令行参数
(3)填充卷的配置文件
configmap的创建:
创建ConfigMap的方式有4种:
<1> 使用字面值创建
<2> 使用文件创建
<3> 使用目录创建
<4> 编写configmap的yaml文件创建
下面来一 一介绍这几种方式:
(1)使用字面值创建
kubectl create configmap my-config --from-literal=key1=config1 --from- literal=key2=config2 ##直接使用键值队来创建名为my-config的configmap
kubectl create configmap my-config2 --from-file=/etc/resolv.conf ##key的名称是文件名称,value的值是这个文件的内容
kubectl get cm ##查看一下
kubectl describe cm my-config2 ##查看my-config2的详细内容
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
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设置环境变量
vim cm1.yml ##在原有的基础上再编辑
Kubectl apply -f cm1.config
kubectl get pod
kubectl logs pod1
前面咱们设置env时新建的key,我们也可以不用新创建key
vim cm1.yml
vim cm1.yml
vim cm1.yml
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文件
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"}}}}}'
简介:
<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
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=[email protected] ##创建docker认证信息到myregistrykey
vim pod.yml ##创建一个yml文件