配置集,抽取应用配置。
ConfigMap保存在kubernetes的etcd中。
ConfigMap可以将文件直接挂载到Pod内,区别于上篇文章中的PV&PVC挂载目录。
[root@k8s-master ~]# vi redis.conf
[root@k8s-master ~]# cat redis.conf
appendonly yes
[root@k8s-master ~]# kubectl create cm redis-conf --from-file=redis.conf
configmap/redis.conf created
[root@k8s-master ~]#
首先有redis.conf文件,然后将文件做成ConfigMap。
apiVersion: v1
data:
redis.conf: |
appendonly yes
kind: ConfigMap
metadata:
name: redis-conf
namespace: default
data是所有真正的数据,key:默认是文件名,value:配置文件的内容
[root@k8s-master ~]# kubectl apply -f redis-conf.yml
configmap/redis-conf created
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl get cm
NAME DATA AGE
kube-root-ca.crt 1 2d1h
redis-conf 1 53s
[root@k8s-master ~]#
扩展: 查看redis-conf的yaml文件
kubectl get cm redis-conf -oyaml
redis.yml
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
command:
- redis-server
- "/redis-master/redis.conf" #指的是redis容器内部的位置
ports:
- containerPort: 6379
volumeMounts:
- mountPath: /data
name: data
- mountPath: /redis-master
name: config
volumes:
- name: data
emptyDir: {}
- name: config
configMap:
name: redis-conf
items:
- key: redis.conf
path: redis.conf
说明:一个ConfigMap文件可能有多个配置,items会遍历每个配置,key中定义这里要取哪个配置,path表示将取出来的配置文件内容放到容器内的哪个文件中。
关系图参考如下:
[root@k8s-master ~]# kubectl apply -f redis.yml
pod/redis created
[root@k8s-master ~]#
# 进入到容器内部验证
[root@k8s-master ~]# kubectl exec -it redis -c redis -- /bin/bash
root@redis:/data# cd /redis-master/
root@redis:/redis-master# ls
redis.conf
root@redis:/redis-master# cat redis.conf
appendonly yes
root@redis:/redis-master#
[root@k8s-master ~]# kubectl edit cm redis-conf
configmap/redis-conf edited
[root@k8s-master ~]#
添加了一行配置requirepass 123456
。
[root@k8s-master ~]# kubectl exec -it redis -c redis -- /bin/bash
root@redis:/data# cd /redis-master/
root@redis:/redis-master# ls
redis.conf
root@redis:/redis-master# cat redis.conf
appendonly yes
requirepass 123456
root@redis:/redis-master#
ConfigMap被自动更新了。
重点说明:这里的自动更新只是容器内部的文件跟随ConfigMap的改变而改变,但是并不一定真正生效,主要看应用有没有热部署能力,没有热部署能力的应用需要重启才能生效。
kubectl delete cm redis-conf
Secret保存在kubernetes的etcd中。
Secret对象类型用来保存敏感信息,例如密码、OAuth令牌和SSH密钥。将这些信息放在secret中比放在Pod的定义或者容器镜像中来说更加安全和灵活。
# 命令格式
kubectl create secret docker-registry jiangnan \
--docker-server=<你的镜像仓库服务器> \
--docker-username=<你的用户名> \
--docker-password=<你的密码> \
--docker-email=<你的邮箱地址>
[root@k8s-master ~]# kubectl get secret
NAME TYPE DATA AGE
default-token-ssmvn kubernetes.io/service-account-token 3 2d2h
jiangnan kubernetes.io/dockerconfigjson 1 2m6s
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl delete secret jiangnan
secret "jiangnan" deleted
[root@k8s-master ~]#
本文由 mdnice 多平台发布