简介:
<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"}}}}}'
简介:
<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文件