Skip to content

Deployments

Example

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-deployment 
  labels: 
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx 
    spec: 
      containers:
      - name: nginx
        image: darealmc/nginx-k8s:v1
        ports:
        - containerPort: 80

Node affinity

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: pref
spec:
  replicas: 5
  template:
    metadata:
      labels:
        app: pref
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 80
            preference:
              matchExpressions:
              - key: availability-zone
                operator: In
                values:
                - zone1
          - weight: 20
            preference:
              matchExpressions:
              - key: share-type
                operator: In
                values:
                - dedicated
      containers:
      - args:
        - sleep
        - "99999"
        image: busybox
        name: main

Update Image

kubectl set image deployment.v1.apps/example-deployment nginx=darealmc/nginx-k8s:v2

MicroServices Example

cd ~/
git clone https://github.com/linuxacademy/robot-shop.git
kubectl create namespace robot-shop
kubectl -n robot-shop create -f ~/robot-shop/K8s/descriptors/
kubectl get pods -n robot-shop -w
# Access in http://$kube_server_public_ip:30080

Application LifeCycle Manager

Update

kubectl apply -f kubeserve-deployment.yaml

kubectl replace -f kubeserve-deployment.yaml

Rolling Update

kubectl set image deployments/kubeserve app=linuxacademycontent/kubeserve:v2 --v 6

Rollback

# Use --record flag to create the deployment - kubectl create -f kubeserve-deployment.yaml --record
kubectl rollout undo deployments kubeserve
kubectl rollout history deployment kubeserve
kubectl rollout undo deployment kubeserve --to-revision=2

Pause / Resume

kubectl rollout undo deployment kubeserve --to-revision=2
kubectl rollout resume deployment kubeserve

Readiness Probe

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubeserve
spec:
  replicas: 3
  selector:
    matchLabels:
      app: kubeserve
  minReadySeconds: 10
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      name: kubeserve
      labels:
        app: kubeserve
    spec:
      containers:
      - image: linuxacademycontent/kubeserve:v3
        name: app
        readinessProbe:
          periodSeconds: 1
          httpGet:
            path: /
            port: 80