Kubernetes
From John Freier
Configurations YAML File
Deployment
- kind: Deployment
apiVersion: apps/v1
metadata:
name: app-deployment
namespace: app-ns
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
volumes:
- name: app-secrets-volume
secret:
secretName: my-secret
containers:
- image: ${CONTAINER_REGISTRY_URL}/${IMAGE_NAME}:${IMAGE_TAG}
name: my-app
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: app-config
- secretRef:
name: my-secrets
env:
- name: CUSTOM_ENV_VAR
value: "soon_to_come"
volumeMounts:
- name: app-secrets-volume
mountPath: /opt/my-app/secrets-volume
readOnly: true
restartPolicy: Always
terminationGracePeriodSeconds: 30
Service
- kind: Service
apiVersion: v1
metadata:
name: app-service
namespace: app-ns
spec:
ports:
- port: 8080
targetPort: 8080
selector:
app: my-app
Use the following option to make the service Headless, this is good when each of the pods has state and the state could be different between them. This exposes each pods ip through a DNS lookup.
Service.spec.clusterIP: None
ConfigMap
# ConfigMap Configuration
- kind: ConfigMap
apiVersion: v1
metadata:
name: app-config
namespace: app-ns
data:
CONFIG_TEMP: soon-to-come
Templates
To use templates, allows for values to be injected.
kind: Template
apiVersion: template.openshift.io/v1
metadata:
name: my-project
annotations:
description: "This is my project"
tags: "java,project,other"
objects: ...
# Template Parameters
parameters:
- description: "This param is an example"
required: true
name: PARAM_1
- description: "To use the param use the dollar sign followed by braces."
required: true
name: IMAGE_NAME
Then to use the params inline, use
${PARAM_1}