I would like to deploy an application cluster by managing my deployment via k8s Deployment object. The documentation has me extremely confused. My basic layout has the following components that scale independently:
Technically, all 4 above belong in separate pods that are scaled independently.
My questions are:
pod.yml
files and then somehow reference them in deployment.yml
file or can a deployment file also embed pod definitions?spec
portion of Deployment
is equivalent to defining one pod. Is that correct? What if I want to declaratively describe multi-pod deployments? Do I do need multiple deployment.yml files?Pagids answer has most of the basics. You should create 4 Deployments
for your scenario. Each deployment will create a ReplicaSet
that schedules and supervises the collection of PODs
for the Deployment
.
Each Deployment
will most likely also require a Service
in front of it for access. I usually create a single yaml file that has a Deployment
and the corresponding Service
in it. Here is an example for an nginx.yaml
that I use:
apiVersion: v1
kind: Service
metadata:
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
name: nginx
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 80
name: nginx
targetPort: 80
nodePort: 32756
selector:
app: nginx
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginxdeployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginxcontainer
image: nginx:latest
imagePullPolicy: Always
ports:
- containerPort: 80
Here some additional information for clarification:
POD
is not a scalable unit. A Deployment
that schedules PODs is.Deployment
is meant to represent a single group of PODs fulfilling a single purpose together.Deployments
work together in the virtual network of the cluster.Deployment
that may consist of many PODs
running on different nodes you have to create a Service.StatefulSet
instead (e.g. for a database service).