首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定状态设置为本地永久卷-卷节点关联冲突错误

绑定状态设置为本地永久卷-卷节点关联冲突错误
EN

Stack Overflow用户
提问于 2018-09-06 23:30:34
回答 2查看 5.9K关注 0票数 2

我有3个节点的kubernetes,主机名是host_1,host_2,host_3。

代码语言:javascript
复制
$ kubectl get nodes
NAME       STATUS    ROLES     AGE       VERSION
host_1     Ready     master    134d      v1.10.1
host_2     Ready     <none>    134d      v1.10.1
host_3     Ready     <none>    134d      v1.10.1

我定义了3个大小为100M的本地持久卷,映射到每个节点上的本地目录。我使用了以下描述符3次,其中<hostname>是: host_1、host_2、host_3之一:

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolume
metadata:
  name: test-volume-<hostname>
spec:
  capacity:
    storage: 100M
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: local-storage
  local:
    path: /opt/jnetx/volumes/test-volume
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - <hostname>

在应用了三个这样的yamls之后,我得到了以下内容:

代码语言:javascript
复制
$ kubectl get pv
NAME                 CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM    STORAGECLASS    REASON    AGE
test-volume-host_1   100M       RWO            Delete           Available            local-storage             58m
test-volume-host_2   100M       RWO            Delete           Available            local-storage             58m
test-volume-host_3   100M       RWO            Delete           Available            local-storage             58m

现在,我有一个非常简单的容器来写入文件。该文件应位于本地持久卷上。我将其部署为具有1个副本的状态集,并通过状态集的volumeClaimTemplates映射卷:

代码语言:javascript
复制
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: filewriter
spec:
  serviceName: filewriter
  ...
  replicas: 1
  template:
    spec:
      containers:
        - name: filewriter
          ...
          volumeMounts:
          - mountPath: /test/data
            name: fw-pv-claim
  volumeClaimTemplates:
  - metadata:
      name: fw-pv-claim
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: local-storage
      resources:
        requests:
          storage: 100M

卷声明似乎已创建,并绑定到第一台主机上的pv:

代码语言:javascript
复制
$ kubectl get pv
NAME                 CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                              STORAGECLASS    REASON    AGE
test-volume-host_1   100M       RWO            Delete           Bound       default/fw-pv-claim-filewriter-0   local-storage             1m
test-volume-host_2   100M       RWO            Delete           Available                                      local-storage             1h
test-volume-host_3   100M       RWO            Delete           Available                                      local-storage             1h

但是,pod挂起了挂起状态:

代码语言:javascript
复制
$ kubectl get pods
NAME                         READY     STATUS    RESTARTS   AGE
filewriter-0                 0/1       Pending   0          4s

如果我们进行描述,我们可以看到以下错误:

代码语言:javascript
复制
$ kubectl describe pod filewriter-0
Name:           filewriter-0
...
Events:
  Type     Reason            Age              From               Message
  ----     ------            ----             ----               -------
  Warning  FailedScheduling  2s (x8 over 1m)  default-scheduler  0/3 nodes are available: 1 node(s) had taints that the pod didn't tolerate, 2 node(s) had volume node affinity conflict. 

你能帮我找出哪里不对劲吗?为什么不能直接创建pod呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-07 04:16:21

似乎PV可用的一个节点有一个您的StatefulSet不能容忍的污点。

票数 3
EN

Stack Overflow用户

发布于 2020-11-11 00:01:24

我有一个与上面非常相似的案例,并观察到了相同的症状(节点亲和性冲突)。在我的例子中,问题是我有两个卷连接到两个不同的节点,但试图在一个pod中使用它们。

我通过使用kubectl describe pvc name-of-pvc并注意到selected-node注释检测到了这一点。一旦我将pod设置为使用同时位于一个节点上的卷,我就不再有问题了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52207577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档