Kubernetes中有一些特殊的Volume,其作用是为容器提供预先定义好的数据,就像被投射(Project)到容器中一样。这种Volume被称为Projected Volume。
Projected Volume共有四种:
- Secret
- ConfigMap
- Downward API
- ServiceAccountToken
配置分为两种:明文配置(可以公开的,比如端口、运行参数等)和机密配置(比如密码),ConfigMap用于管理明文配置,Secret用于管理机密配置
另一方面,各个程序的配置文件,比如数据库的配置、nginx的配置等,将配置单独集体放在一边一起配置会非常方便。
ConfigMap是一种用来将非机密性的数据保存到键值对中的API对象。可以将环境配置信息与容器镜像解耦。
1
2
3
4
5
6
7
8
9
10
|
apiVersion: v1
kind: ConfigMap
metadata:
name: info
data:
count: '10'
debug: 'on'
path: '/etc/systemd'
greeting: |
say hello to kubernetes.
|
ConfigMap的数据会存到k8s的etcd数据库
1
2
|
$ kubectl get cm
$ kubectl describe cm info
|
1
2
3
4
5
6
7
8
|
apiVersion: v1
kind: Secret
metadata:
name: user
data:
name: cm9vdA== # root
pwd: MTIzNDU2 # 123456
db: bXlzcWw= # mysql
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
$ kubectl apply -f secret.yaml
secret/user created
$ kubectl get secret
NAME TYPE DATA AGE
user Opaque 3 7s
$ kubectl describe secret user
Name: user
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
name: 4 bytes
pwd: 6 bytes
db: 5 bytes
|
看不到具体的数据了。