pulumi-kubernetesx
pulumi-kubernetesx copied to clipboard
general Volume class for multiple mounts and VolumeClaimTemplates
Proposed general Volume
class to represent and manage other pod volume types. It can be mounted in multiple containers in a pod and will only show up once in the pod spec volumes
. It can also be used to create mounted volumeClaimTemplates
for StatefulSet
s.
For example the following contrived code:
const kafkaCerts = new kx.Volume({
name: 'kafka-certs',
emptyDir: {}
})
const kafkaData = new kx.Volume({
name: 'kafka-data',
// persistentVolumeClaim not specified when used as VolumeClaimTemplate below
})
const kafkaPB = new kx.PodBuilder({
initContainers: [{
name: 'init',
image: "bitnami/kafka:3.2",
command: ["/init.sh"],
volumeMounts: [
kafkaCerts.mount('/opt/bitnami/kafka/config/certs')
]
}],
containers: [{
name: 'kafka',
image: "bitnami/kafka:3.2",
volumeMounts: [
kafkaCerts.mount('/opt/bitnami/kafka/config/certs'),
kafkaData.mount('/bitnami/kafka')
]
}]
})
new kx.StatefulSet('kafka', {
spec: kafkaPB.asStatefulSetSpec({
replicas: 3,
volumeClaimTemplates: [kafkaData.asVolumeClaimTemplate({
spec: {
storageClassName: 'local-storage',
accessModes: ['ReadWriteOnce'],
resources: { requests: { storage: '10Gi' }},
}
})]
})
}, { provider: k3s })
Will produce the following simplified StatefulSet
:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: kafka-0961cc46
spec:
replicas: 3
selector:
matchLabels:
app: kafka
serviceName: kafka-service
template:
metadata:
labels:
app: kafka
spec:
initContainers:
- image: bitnami/kafka:3.2
name: init
command:
- /init.sh
volumeMounts:
- mountPath: /opt/bitnami/kafka/config/certs
name: kafka-certs
containers:
- image: bitnami/kafka:3.2
name: kafka
volumeMounts:
- mountPath: /opt/bitnami/kafka/config/certs
name: kafka-certs
- mountPath: /bitnami/kafka
name: kafka-data
volumes:
- name: kafka-certs
emptyDir: {}
volumeClaimTemplates:
- metadata:
name: kafka-data
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Also fixes #69
Due to lack of tests in this repo and the age, we're not in a good position to move this PR forward so closing for now.