无法使我的有状态服务运行。 Pod无法安排到节点上

时间:2019-05-02 19:11:11

标签: kubernetes

我已经尝试了一段时间,以便在kubernetes集群上启动有状态服务。 该集群有一个主机和一个工人。它运行在运行Ubuntu 18.04的AWS EC2实例之上。

我已经尝试了所有可以想到的方法,但是当我创建有状态服务时,不会将pod调度到节点上。 我认为这与PV有关,但我不知道是什么。 另外,我很难获得任何诊断信息。尝试在pod和容器上运行kubectl日志不会返回任何内容。

我首先尝试使用本地硬件,即本地安装,但这并不能解决问题。 现在,我已经创建了一个AWS EBS卷,并创建了一个引用此内容的PV。
PV正确地绑定到了它,但是我仍然无法使用kubernetes在工作程序节点上调度Pod。

这是我正在使用的.yaml配置文件。

第一个创建名为“ fast”的存储类

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: fast
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
reclaimPolicy: Retain
mountOptions:
  - debug
volumeBindingMode: Immediate

这是创建PV的yaml文件。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: fast
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
reclaimPolicy: Retain
mountOptions:
  - debug
volumeBindingMode: Immediate

最后,这是statefulset yaml文件

apiVersion: apps/v1
kind: StatefulSet
metadata:
  namespace: lab4a
  name: apache-http
spec:
  selector:
    matchLabels:
      app: httpd
  serviceName: "httpd-service"
  replicas: 3
  template:
    metadata:
      namespace: lab4a
      labels:
        app: httpd
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: httpd
        image: httpd:latest
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/local/apache2/htdocs
  volumeClaimTemplates:
  - metadata:
      name: web-pvc
      namespace: lab4a
    spec:
      accessModes: [ "ReadWriteMany" ]
      storageClassName: "fast"
      resources:
        requests:
          storage: 10Gi

kubectl得到pv给了我

NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
ebs-pv   10Gi       RWX            Retain           Available                                   31m

因此,至少就我所知,有理由认为PV已准备就绪。 据我了解,我不需要手动提供PV声明,因为statefulset yaml文件中的volumeClaimTemplates部分将动态执行此操作。

kubectl全部获得-n lab4a给了我

NAME        READY   STATUS    RESTARTS   AGE
pod/web-0   0/1     Pending   0          16m

NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/nginx   ClusterIP   None         <none>        80/TCP    16m

NAME                   READY   AGE
statefulset.apps/web   0/2     16m

当我运行kubectl describe pod web-0 -n lab4a时,我得到以下信息:

Name:               web-0
Namespace:          lab4a
Priority:           0
PriorityClassName:  <none>
Node:               <none>
Labels:             app=nginx
                    controller-revision-hash=web-b46f789c4
                    statefulset.kubernetes.io/pod-name=web-0
Annotations:        <none>
Status:             Pending
IP:                 
Controlled By:      StatefulSet/web
Containers:
  nginx:
    Image:        k8s.gcr.io/nginx-slim:0.8
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:
      /usr/share/nginx/html from www (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-mjclk (ro)
Conditions:
  Type           Status
  PodScheduled   False 
Volumes:
  www:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  www-web-0
    ReadOnly:   false
  default-token-mjclk:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-mjclk
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason            Age                 From               Message
  ----     ------            ----                ----               -------
  Warning  FailedScheduling  35s (x14 over 16m)  default-scheduler  0/2 nodes are available: 2 node(s) had taints that the pod didn't tolerate.

我不知道发生了什么问题,并且我不知道还有什么可以尝试调试此问题的。 kubernetes是否无法将持久卷绑定到节点?还是其他问题?

任何帮助表示赞赏。 谢谢

1 个答案:

答案 0 :(得分:0)

(1)您的存储空间

AWS EBS不提供ReadWriteMany(请参阅文档https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes中的表)。

您可以

  • 改用ReadWriteOnce(建议)。
  • 如果您确实有需要,请设置一个群集内NFS,该群集中的NFS托管允许ReadWriteMany的PV。

(2)您的污点和宽容

您的Pod的容忍度看起来还不错;您能否提供有关节点污点的见解?您是否曾经在此集群上摆弄kubectl taint ...?这是托管集群,还是您在AWS机器上自行设置了集群?