【问题标题】:pod stuck in pending state after kubectl apply?应用 kubectl 后 pod 卡在挂起状态?
【发布时间】:2019-06-14 22:48:03
【问题描述】:

在 kubectl apply 后,我的 pod 处于挂起状态。我目前正在尝试部署 3 个服务,它们是 postgres 数据库、api 服务器和应用程序的 ui。postgres pod 运行良好,但其余 2 个服务处于挂起状态。

我尝试创建这样的 yaml 文件

api 服务器持久化卷

kind: PersistentVolume
apiVersion: v1
metadata:
  name: api-initdb-pv-volume
  labels:
    type: local
    app: api
spec:
  storageClassName: manual
  capacity:
    storage: 1Mi
  accessModes:
    - ReadOnlyMany
  hostPath:
    path: "/home/vignesh/pagedesigneryamls/api"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: api-initdb-pv-claim-one
  labels:
    app: api
spec:
  storageClassName: manual
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 1Mi

api服务器


apiVersion: v1
kind: Service
metadata:
  name: apiserver
  labels:
    app: apiserver
spec:

  ports:
  - name: apiport
    port: 8000
    targetPort: 8000

  selector:
    app: apiserver
    tier: backend    

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: apiserver
  labels:
    app: apiserver
spec:
  selector:
    matchLabels:
      app: apiserver
      tier: backend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: apiserver
        tier: backend
    spec:

      containers:
      - image: suji165475/devops-sample:wootz-backend
        name: apiserver
        ports:
        - containerPort: 8000
          name: myport
        volumeMounts:
        - name: api-persistent-storage-one
          mountPath: /usr/src/app
        - name: api-persistent-storage-two
          mountPath: /usr/src/app/node_modules  
      volumes:
      - name: api-persistent-storage-one
        persistentVolumeClaim:
          claimName: api-initdb-pv-claim-one
      - name: api-persistent-storage-two
        persistentVolumeClaim:
          claimName: api-initdb-pv-claim-two 

docker-compose 文件(仅供参考)


version: "3"

services:
  pg_db:
    image: postgres
    networks: 
      - wootzinternal
    ports:
      - 5432
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=postgres
      - POSTGRES_DB=wootz
    volumes:
      - wootz-db:/var/lib/postgresql/data
  apiserver:
    image: wootz-backend
    volumes:
      - ./api:/usr/src/app
      - /usr/src/app/node_modules
    build:
      context: ./api
      dockerfile: Dockerfile
    networks: 
      - wootzinternal
    depends_on:
      - pg_db
    ports:
      -  '8000:8000'
  ui:
    image: wootz-frontend
    volumes:
      - ./client:/usr/src/app
      - /usr/src/app/node_modules
    build:
      context: ./client
      dockerfile: Dockerfile
    networks:
      - wootzinternal
    ports:
      - '80:3000'

volumes:
  wootz-db:

networks:
  wootzinternal:
    driver: bridge

当我在 api server yaml 文件上尝试 kubectl apply 时,api server 的 pod 一直处于挂起状态。我该如何解决这个问题。

【问题讨论】:

  • 你能发布命令“kubectl describe pod pod_name”的输出吗?

标签: docker ubuntu kubernetes


【解决方案1】:

对于您未来的问题,如果您需要获得更多关于正在发生的事情的信息,您应该使用kubectl describe pod_name,因为这将为您和我们提供更多信息,并增加获得正确答案的机会。我使用了你的 yaml 并在描述了 pod 之后:

persistentvolumeclaim "api-initdb-pv-claim-two" not found

添加第二个后:

pod has unbound PersistentVolumeClaims (repeated 3 times)

添加第二个 PV 后,它应该开始工作。

您有两个持久卷声明,并且只有一个持久卷。您不能将两个 PVC 绑定到一个 PV。因此,在这种情况下,您需要将另一个 PV 和另一个 PVC 添加到清单中。

您可以阅读更多关于它的信息here

PersistentVolume (PV) 是一种原子抽象。你不能 将其细分为多个声明。

有关 Persistent Volumes 及其工作原理的更多信息可以在官方documentation 中找到。

另外,如果您尝试部署 PostgresSQL,here 是一个很好的指南,说明如何做到这一点。另一个使用托管 Kubernetes 服务会更容易 - how to run HA PostgreSQL on GKE

【讨论】:

    【解决方案2】:

    api-initdb-pv-claim-两个 pvc 不存在。

    您需要创建 pv 并使用每个 pvc 绑定它

    【讨论】:

    • 好的,我现在也为 api-initdb-pv-claim-two 创建了 pv 和 pvc,并且 pod 现在显示为 crashloopbackoff
    • 我应该如何为问题中的 docker-compose 文件中提到的个人服务创建 yaml?/
    • 你用的是什么图片?
    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 2015-12-15
    • 2019-07-20
    • 2016-05-28
    • 1970-01-01
    • 2018-02-18
    • 2018-10-09
    • 1970-01-01
    相关资源
    最近更新 更多