No pods created when deploying a Docker image to Google Cloud using a Kubernetes deployment YAML file

4/19/2020

I am facing an issue when trying to create a deployment on Google Cloud using a Kubernetes YAML file. I see that no pods are created when using a YAML file; however, if I use kubectl create deployment..., pods do get created.

My YAML file is as follows :

#Deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
  generation: 1
  labels:
    app: hello-world
  name: hello-world
  namespace: default
  resourceVersion: "3691124"
spec:
  progressDeadlineSeconds: 600
  replicas: 3
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: hello-world
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
      - image: myrepo/hello-world:0.0.4.RELEASE
        imagePullPolicy: IfNotPresent
        name: hello-world
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
#Service
apiVersion: v1
kind: Service
metadata:
  labels:
    app: hello-world
  name: hello-world
  namespace: default
  resourceVersion: "3691877"
spec:
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 32448
    port: 8080
    protocol: TCP
    targetPort: 8001
  selector:
    app: hello-world
  sessionAffinity: None
  type: LoadBalancer

This is what I see when I run kubectl get all :

NAME                           TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)          AGE
service/hello-world            LoadBalancer   Some IP        Some IP 3     8001:32449/TCP    15m
service/kubernetes             ClusterIP      Some IP 2      <none>         444/TCP           12d

As you can see, the only resource that started was the service. I neither see any deployment nor see any pods being created.

Note I have replaced the actual IP addresses with "Some IP" above for obvious reasons..

Question: Why are no pods getting created when I use the YAML but pods get created when I use kubectl create deployment instead of using a YAML configuration file?

-- Ping
deployment
google-cloud-platform
kubernetes
microservices
yaml

2 Answers

4/19/2020

The best practice is to create different yaml files for different resources. use Helm if you need to package multiple kubernetes resources into a single entity.

-- RAMNEEK GUPTA
Source: StackOverflow

4/19/2020
  1. You should use --- in YAML, when you have multiple resources in a single file.
  2. You have to set apiVersion: apps/v1 in deployment.
---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
  generation: 1
  labels:
    app: hello-world
  name: hello-world
  namespace: default
  resourceVersion: "3691124"
spec:
  progressDeadlineSeconds: 600
  replicas: 3
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: hello-world
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
      - image: myrepo/hello-world:0.0.4.RELEASE
        imagePullPolicy: IfNotPresent
        name: hello-world
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: hello-world
  name: hello-world
  namespace: default
  resourceVersion: "3691877"
spec:
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 32448
    port: 8080
    protocol: TCP
    targetPort: 8001
  selector:
    app: hello-world
  sessionAffinity: None
  type: LoadBalancer

Output

$ kubectl get deply,po,svc
NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/hello-world   0/3     3            0           5m34s

NAME                               READY   STATUS             RESTARTS   AGE

pod/hello-world-6bd8d58486-7lzh9   0/1     ImagePullBackOff   0          3m49s
pod/hello-world-6bd8d58486-m56rq   0/1     ImagePullBackOff   0          3m49s
pod/hello-world-6bd8d58486-z9xmz   0/1     ImagePullBackOff   0          3m49s

NAME                  TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
service/hello-world   LoadBalancer   10.108.65.81     <pending>     8080:32448/TCP    3m49s
service/kubernetes    ClusterIP      10.96.0.1        <none>        443/TCP           9d
-- hariK
Source: StackOverflow