K8S---Projected Volume
Projected Volume将一个或多个上述资源对象(ConfigMap、Secret、Downward API)一次性挂载到容器内的同一个目录下Projected Volume的一些常见应用场景通过Pod的标签生成不同的配置文件,需要使用配置文件,以及用户名和密码,这时需要使用3种资源:ConfigMap、Secrets、Downward API。在自动化运维应用中使用配置文件和账号信息时,
·
Projected Volume
将一个或多个上述资源对象(ConfigMap、Secret、Downward API)一次性挂载到容器内的同一个目录下
Projected Volume的一些常见应用场景
- 通过Pod的标签生成不同的配置文件,需要使用配置文件,以及用户名和密码,这时需要使用3种资源:ConfigMap、Secrets、Downward API。
- 在自动化运维应用中使用配置文件和账号信息时,需要使用ConfigMap、Secrets。
- 在配置文件内使用Pod名称(metadata.name)记录日志时,需要使用ConfigMap、Downward API。
- 使用某个Secret对Pod所在命名空间(metadata.namespace)进行加密时,需要使用Secret、Downward API。
需要首先创建configmap,secret,用于下列测试使用
# projected-volume-file-test.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfigmap
data:
apploglevel: info
appdatadir: /var/data
config: 54ddd88cc
---
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: KK345WWWWNNN
username: KK345WWWWNNN
---
apiVersion: v1
kind: Secret
metadata:
name: mysecret2
type: Opaque
data:
password: KK345UUUUHHH
username: KK345UUUUHHH
# 创建
# kubectl create -f projected-volume-file-test.yaml
# 查看
# kubectl describe configmap myconfigmap
# kubectl describe secret mysecret
# kubectl describe secret mysecret2
使用 Projected Volume 挂载 ConfigMap、Secret、Downward API共3种资源的示例
apiVersion: v1
kind: Pod
metadata:
name: volume-test-all
spec:
containers:
- name: container-test
image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
volumeMounts:
- name: all-in-one-all
mountPath: "/projected-volume"
readOnly: true
volumes:
- name: all-in-one-all
projected:
sources:
- secret:
name: mysecret
items:
- key: username
path: my-group/my-username
- downwardAPI:
items:
- path: "labels"
fieldRef:
fieldPath: metadata.labels
- path: "cpu_limit"
resourceFieldRef:
containerName: container-test
resource: limits.cpu
- configMap:
name: myconfigmap
items:
- key: config
path: my-group/my-config
# 创建
# kubectl create -f volume-test-all.yaml
# 查看
# kubectl exec -it volume-test-all -- ls -lh /projected-volume/
# kubectl exec -it volume-test-all -- ls -lh /projected-volume/my-group/
# kubectl exec -it volume-test-all -- cat /projected-volume/cpu_limit
# kubectl exec -it volume-test-all -- cat /projected-volume/labels
# kubectl exec -it volume-test-all -- cat /projected-volume/my-group/my-config
# kubectl exec -it volume-test-all -- cat /projected-volume/my-group/my-username
使用Projected Volume挂载两个Secret资源,其中一个设置了非默认挂载模式(mode)的示例
apiVersion: v1
kind: Pod
metadata:
name: volume-test-secret2
spec:
containers:
- name: container-test
image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
volumeMounts:
- name: all-in-one
mountPath: "/projected-volume"
readOnly: true
volumes:
- name: all-in-one
projected:
sources:
- secret:
name: mysecret
items:
- key: username
path: my-group/my-username
- secret:
name: mysecret2
items:
- key: password
path: my-group/my-password
mode: 511
# 创建
# kubectl create -f volume-test-secret2.yaml
# 查看
# kubectl exec -it volume-test-secret2 -- ls /projected-volume
# kubectl exec -it volume-test-secret2 -- ls -lh /projected-volume/my-group/
# kubectl exec -it volume-test-secret2 -- cat /projected-volume/my-group/my-username
# kubectl exec -it volume-test-secret2 -- cat /projected-volume/my-group/my-password
使用Projected Volume挂载ServiceAccountToken的示例
ServiceAccountToken通常用于容器内应用访问API Server鉴权的场景中
apiVersion: v1
kind: Pod
metadata:
name: sa-token-test
spec:
containers:
- name: container-test
image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
volumeMounts:
- name: token-vol
mountPath: "/service-account"
readOnly: true
volumes:
- name: token-vol
projected:
sources:
- serviceAccountToken:
audience: api
expirationSeconds: 3600
path: token
# audience:预期受众的名称。Token的接收者必须使用其中的audience标识符来标识自己,
# 否则应该拒绝该Token。该字段是可选的,默认为API Server的标识符“api”。
# expirationSeconds:Service Account Token的过期时间,默认为1h,至少为10min(600s)。
# 管理员可以通过kube-apiserver的启动参--service-account-max-token-expiration限制Token的最长有效时间
# path:挂载目录下的相对路径。
# 创建
# kubectl create -f sa-token-test.yaml
# 查看挂载目录
# kubectl exec -it sa-token-test -- ls /service-account
# 查看挂载内容
# kubectl exec -it sa-token-test -- cat /service-account/token
更多推荐
已为社区贡献25条内容
所有评论(0)