====== volumes: projected ======
projected позволяет объединить несколько различных источников в одном volume.
Поддерживается объединение:
* secret
* downwardAPI
* configMap
* serviceAccountToken
Все объединяемые ресурсы должны находится с подом в одном namespace.
Пример secret:
apiVersion: v1
kind: Secret
metadata:
name: user-password-secret
namespace: volumes-sample
type: Opaque
data:
user: YWRtaW51c2VyCg==
password: YWRtaW5wYXNzd29yZAo=
Пример configMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: example-txt
namespace: volumes-sample
data:
example.txt: |-
configMap
config.yaml: |-
any_body:
params:
param1: value1
param2: value2
Пример использования projected:
apiVersion: apps/v1
kind: Deployment
metadata:
name: openresty
namespace: volumes-sample
labels:
app: openresty
spec:
replicas: 1
selector:
matchLabels:
app: openresty
template:
metadata:
labels:
app: openresty
spec:
containers:
- name: openresty
image: openresty/openresty:centos-rpm
env:
- name: NGINX_HOST
valueFrom:
fieldRef:
fieldPath: metadata.name
resources:
limits:
cpu: "0.2"
memory: "300Mi"
requests:
cpu: "0.1"
memory: "100Mi"
ports:
- containerPort: 80
name: http
protocol: TCP
volumeMounts:
- mountPath: "/etc/pod-data"
name: all-values
readOnly: true
volumes:
- name: all-values
projected:
sources:
- downwardAPI:
items:
- path: limits/cpu-millicore
resourceFieldRef:
containerName: openresty
resource: limits.cpu
divisor: 1m
- path: limits/memory-kibibytes
resourceFieldRef:
containerName: openresty
resource: limits.memory
divisor: 1Ki
- path: labels
fieldRef:
fieldPath: metadata.labels
- secret:
name: user-password-secret
items:
- key: user
path: secret/user
- key: password
path: secret/password
- configMap:
name: example-txt
items:
- key: example.txt
path: configs/example.txt
- key: config.yaml
path: configs/config.yaml
В примере (выделено синим цветом) в один volume объединяются: downwardAPI, secret и configMap.
При помощи параметра path определяется путь к ресурсу в подключенном volume.
Volume подключаются к точку монтирования /etc/pod-data в режиме только для чтения.
Посмотреть содержимое директории можно подключившись к контейнеру, указав правильное имя пода:
kubectl -n volumes-sample exec openresty-7cd79cfd94-5zjgl \
-i -t -- ls -R /etc/pod-data