**
ConfigMap,Secret
**
secret
**
用来保存一些敏感信息,数据是比较少量的。比如数据库的用户名密码或者密钥
一条命令只能保存一条信息
创建secret的四种方式
例举:保存数据库的用户名和密码
用户名是root
密码是123.com
1.通过–from-literal:文字的方式
[root@master secret]# kubectl create secret generic(通用的,一般的) mysecret1 --from-literal=username=root --from-literal=password=123.com
2.通过–from-file:文件的方式
[root@master secret]# echo root > username
[root@master secret]# echo 123.com > password
[root@master secret]# kubectl create secret generic mysecret2 --from-file=username --from-file=password
3.通过–from-env-file:
[root@master secret]# vim env.txt
username=root
password=123.com
[root@master secret]# kubectl create secret generic mysecret3 --from-env-file=env.txt
4.通过yaml文件
把需要保存的数据加密
[root@master secret]# echo root | base64
cm9vdAo=
[root@master secret]# echo 123.com | base64
MTIzLmNvbQo=
[root@master secret]# vim secret4.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysecret4
data:
username: cm9vdAo=
password: MTIzLmNvbQo=
[root@master secret]# kubectl apply -f secret4.yaml
解码:
[root@master secret]# echo -n cm9vdAo= | base64 --decode
去使用secret也有两种方法一个是volumes挂载的方式一个是环境变量的方式
1.以volume挂载的方式
apiVersion: v1
kind: Pod
metadata:
name: pod-secret1
spec:
containers:
- name: pod-secret1
image: busybox
args:- /bin/sh
- -c
- sleep 300000
volumeMounts: - name: secret-test
mountPath: “/etc/secret-test”
readOnly: true
volumes:
- name: secret-test
secret:
secretName: mysecret1
还可以自定义存放数据的文件名
apiVersion: v1
kind: Pod
metadata:
name: pod-secret2
spec:
containers: - name: pod-secret2
image: busybox
args:- /bin/sh
- -c
- sleep 300000
volumeMounts: - name: secret-test
mountPath: “/etc/secret-test”
readOnly: true
volumes:
- name: secret-test
secret:
secretName: mysecret1
items:- key: username
path: my-group/my-class - key: password
path: my-group/my-password
如果想要更新文件的话可使用kubectl edit命令来修改
2.以环境变量的方式
apiVersion: v1
kind: Pod
metadata:
name: pod-secret1
spec:
containers:
- key: username
- name: pod-secret1
image: busybox
args:- /bin/sh
- -c
- sleep 300000
env: - name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret1
key: class - name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret1
key: password
如果引用secret数据的应用,要求会随着secret资源对象内保存的数据的更新,而实时更新,那么应该使用volumes挂载的方式引用资源。因为用环境变量的方式引用不会实时更新数据**
**
ConfigMap
和secret资源类似,不同之处在于,secret资源保存的是敏感信息,而configMap保存的是以明文方式存放的数据
创建的4种方式(configmap和secret的创建方式几乎一样)
举例:
Username:adam
Age:18
1.通过–from-literal:文字的方式
[root@master secret]# kubectl create configmap myconfigmap1 --from-literal=username=adam --from-literal=age=18
2.通过–from-file:文件的方式
[root@master secret]# echo adam > username
[root@master secret]# echo 18 > age
[root@master secret]# kubectl create configmap myconfigmap2 --from-file=username --from-file=age
3.通过–from-env-file:
[root@master secret]# vim env1.txt
username=adam
age=18
[root@master secret]# kubectl create configmap myconfigmap3 --from-env-file=env1.txt
4.通过yaml文件
[root@master secret]# vim configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfigmap4
data:
username: adam
age: “18”
去使用configmap也有两种方法一个是volumes挂载的方式一个是环境变量的方式
使用vloumes的方式
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: mypod
image: busybox
args:- /bin/sh
- -c
- sleep 300000
volumeMounts: - name: cmp-test
mountPath: “/etc/cmp-test”
readOnly: true
volumes:
- name: cmp-test
configMap:
name: myconfigmap1
以环境变量的方式引用
apiVersion: v1
kind: Pod
metadata:
name: pod2
spec:
containers:
- name: mypod
image: busybox
args:- /bin/sh
- -c
- sleep 300000
env: - name: CONFIGMAP_NAME
valueFrom:
configMapKeyRef:
name: myconfigmap2
key: username - name: CONFIGMAP_PASSWORD
valueFrom:
configMapKeyRef:
name: myconfigmap2
key: age
**
1)总结configmap、与secret资源有什么相同和不同之处。
相同处:configmap和secret的创建方式方式几乎相同
不同处:configmap是明文而secret是密文(敏感信息)
2)总结以volumes挂载、和环境变量方式引用资源的相同和不同之处。
相同处:都是secret和configmap的数据持久化方式
不同处:在于volumes挂载的方式引用资源会实时更新而环境变量的方式引用资源不会实时更新
来源:CSDN
作者:hm_blw
链接:https://blog.csdn.net/hm_blw/article/details/104388763