简体   繁体   English

使用 Kubernetes 部署 YAML 文件将 Docker 映像部署到 Google Cloud 时未创建任何 pod

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

I am facing an issue when trying to create a deployment on Google Cloud using a Kubernetes YAML file.尝试使用 Kubernetes YAML 文件在 Google Cloud 上创建部署时遇到问题。 I see that no pods are created when using a YAML file;我看到使用 YAML 文件时没有创建任何 pod; however, if I use kubectl create deployment... , pods do get created.但是,如果我使用kubectl create deployment... ,确实会创建 pod。

My YAML file is as follows:我的 YAML 文件如下:

#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 :这是我在运行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.我既没有看到任何部署,也没有看到任何正在创建的 pod。

Note I have replaced the actual IP addresses with "Some IP" above for obvious reasons..请注意,出于显而易见的原因,我已将实际的 IP 地址替换为上面的“某些 IP”。

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?问:为什么我使用 YAML 时没有创建 pod,但使用kubectl create deployment而不是使用 YAML 配置文件时创建了 pod?

  1. You should use --- in YAML, when you have multiple resources in a single file.当您在单个文件中有多个资源时,您应该在 YAML 中使用---
  2. You have to set apiVersion: apps/v1 in deployment.您必须在部署中设置apiVersion: apps/v1
---
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 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

The best practice is to create different yaml files for different resources.最佳实践是为不同的资源创建不同的 yaml 文件。 use Helm if you need to package multiple kubernetes resources into a single entity.如果您需要将 package 多个 kubernetes 资源整合到一个实体中,请使用 Helm。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM