Init containers can be used to perform initialization logic before the main containers run, these might include
- Waiting for a service to become available
- Run database migrations
- Copying files to a shared location
- Configuration set-up
Init containers must run sequentially and complete successfully.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
initContainers:
- name: wait-for-db
image: busybox
command: ['sh', '-c', 'until nc -z db-service 5432; do echo waiting; sleep 2; done']
containers:
- name: app
image: my-app-image
ports:
- containerPort: 8080
This waits for a PostgreSQL service to become available before our application can start.