Kubernetes:将本地文件夹安装到 pods 时出现问题 - “0/1 个节点可用:1 个节点存在卷节点关联冲突。”
Kubernetes: problem mounting local folder to pods - "0/1 nodes are available: 1 node(s) had volume node affinity conflict."
我尝试将本地文件夹挂载为 PersistentVolume 并在其中一个 pods 中使用它,但过程似乎有问题并且 pod 保持“待定”状态。
以下是我的pv yaml文件:
kind: PersistentVolume
apiVersion: v1
metadata:
name: pv-web
labels:
type: local
spec:
storageClassName: mlo-web
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
local:
path: ${MLO_REPO_DIR}/web/
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- mlo-node
和 pvc yaml 文件:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-web
namespace: mlo-dev
labels:
type: local
spec:
storageClassName: mlo-web
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
和部署 yaml 文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
namespace: mlo-dev
labels:
app: web
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: xxxxxx/web:latest
ports:
- containerPort: 3000
volumeMounts:
- name: webdir
mountPath: /service
...
volumes:
- name: webdir
persistentVolumeClaim:
claimName: pvc-web
我发现pod一直处于“pending”状态:
web-deployment-d498c7f57-4cfbg 0/1 Pending 0 26m
当我使用“kubectl describe”检查 pod 状态时,结果如下:
Name: web-deployment-d498c7f57-4cfbg
Namespace: mlo-dev
Priority: 0
Node: <none>
Labels: app=web
pod-template-hash=d498c7f57
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Controlled By: ReplicaSet/web-deployment-d498c7f57
Containers:
web:
Image: xxxxxx/web:latest
Port: 3000/TCP
Host Port: 0/TCP
Command:
npm
run
mlo-start
Environment:
NODE_ENV: <set to the key 'NODE_ENV' of config map 'env-config'> Optional: false
WEBPACK_DEV_SERVER: <set to the key 'webpack_dev_server' of config map 'env-config'> Optional: false
REDIS_URL_SESSION: <set to the key 'REDIS_URL' of config map 'env-config'> Optional: false
WORKSHOP_ADDRESS: <set to the key 'WORKSHOP_ADDRESS' of config map 'env-config'> Optional: false
USER_API_ADDRESS: <set to the key 'USER_API_ADDRESS' of config map 'env-config'> Optional: false
ENVCUR_API_ADDRESS: <set to the key 'ENVCUR_API_ADDRESS' of config map 'env-config'> Optional: false
WIDGETS_API_ADDRESS: <set to the key 'WIDGETS_API_ADDRESS' of config map 'env-config'> Optional: false
PROGRAM_BULL_URL: <set to the key 'REDIS_URL' of config map 'env-config'> Optional: false
PROGRAM_PUBSUB: <set to the key 'REDIS_URL' of config map 'env-config'> Optional: false
PROGRAM_API_ADDRESS: <set to the key 'PROGRAM_API_ADDRESS' of config map 'env-config'> Optional: false
MARATHON_BULL_URL: <set to the key 'REDIS_URL' of config map 'env-config'> Optional: false
MARATHON_API_ADDRESS: <set to the key 'MARATHON_API_ADDRESS' of config map 'env-config'> Optional: false
GIT_API_ADDRESS: <set to the key 'GIT_API_ADDRESS' of config map 'env-config'> Optional: false
GIT_HTTP_ADDRESS: <set to the key 'GIT_HTTP_ADDRESS' of config map 'env-config'> Optional: false
LOG_URL: <set to the key 'LOG_URL' of config map 'env-config'> Optional: false
LOGGER_PUBSUB: <set to the key 'REDIS_URL' of config map 'env-config'> Optional: false
AUTH0_CLIENT_ID: <set to the key 'AUTH0_CLIENT_ID' of config map 'env-config'> Optional: false
AUTH0_DOMAIN: <set to the key 'AUTH0_DOMAIN' of config map 'env-config'> Optional: false
AUTH0_CALLBACK_URL: <set to the key 'AUTH0_CALLBACK_URL' of config map 'env-config'> Optional: false
AUTH0_LOGOOUT_RETURN: <set to the key 'AUTH0_LOGOOUT_RETURN' of config map 'env-config'> Optional: false
AUTH0_CLIENT_SECRET: <set to the key 'auth0-client-secret' in secret 'env-secret'> Optional: false
SESSION_SECRET: <set to the key 'session-secret' in secret 'env-secret'> Optional: false
Mounts:
/service from webdir (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-w9v7j (ro)
Conditions:
Type Status
PodScheduled False
Volumes:
webdir:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: pvc-web
ReadOnly: false
default-token-w9v7j:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-w9v7j
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 30s (x2 over 30s) default-scheduler 0/1 nodes are available: 1 node(s) had volume node affinity conflict.
我发现的错误信息是:
Warning FailedScheduling 30s (x2 over 30s) default-scheduler 0/1 nodes are available: 1 node(s) had volume node affinity conflict.
你知道我的问题出在哪里吗?非常感谢!
您似乎没有符合您的亲和力要求的节点。
删除 PersistentVolume
:
的亲和力要求
删除这部分:
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- mlo-node
并且仅使用(并将 local
更改为 hostPath
):
kind: PersistentVolume
apiVersion: v1
metadata:
name: pv-web
labels:
type: local
spec:
storageClassName: mlo-web
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
hostPath:
path: /absolute-path/web/
这类似于 Configure a Pod to Use a PersistentVolume for Storage 示例,同样使用 Minikube。
我尝试将本地文件夹挂载为 PersistentVolume 并在其中一个 pods 中使用它,但过程似乎有问题并且 pod 保持“待定”状态。
以下是我的pv yaml文件:
kind: PersistentVolume
apiVersion: v1
metadata:
name: pv-web
labels:
type: local
spec:
storageClassName: mlo-web
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
local:
path: ${MLO_REPO_DIR}/web/
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- mlo-node
和 pvc yaml 文件:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-web
namespace: mlo-dev
labels:
type: local
spec:
storageClassName: mlo-web
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
和部署 yaml 文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
namespace: mlo-dev
labels:
app: web
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: xxxxxx/web:latest
ports:
- containerPort: 3000
volumeMounts:
- name: webdir
mountPath: /service
...
volumes:
- name: webdir
persistentVolumeClaim:
claimName: pvc-web
我发现pod一直处于“pending”状态:
web-deployment-d498c7f57-4cfbg 0/1 Pending 0 26m
当我使用“kubectl describe”检查 pod 状态时,结果如下:
Name: web-deployment-d498c7f57-4cfbg
Namespace: mlo-dev
Priority: 0
Node: <none>
Labels: app=web
pod-template-hash=d498c7f57
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Controlled By: ReplicaSet/web-deployment-d498c7f57
Containers:
web:
Image: xxxxxx/web:latest
Port: 3000/TCP
Host Port: 0/TCP
Command:
npm
run
mlo-start
Environment:
NODE_ENV: <set to the key 'NODE_ENV' of config map 'env-config'> Optional: false
WEBPACK_DEV_SERVER: <set to the key 'webpack_dev_server' of config map 'env-config'> Optional: false
REDIS_URL_SESSION: <set to the key 'REDIS_URL' of config map 'env-config'> Optional: false
WORKSHOP_ADDRESS: <set to the key 'WORKSHOP_ADDRESS' of config map 'env-config'> Optional: false
USER_API_ADDRESS: <set to the key 'USER_API_ADDRESS' of config map 'env-config'> Optional: false
ENVCUR_API_ADDRESS: <set to the key 'ENVCUR_API_ADDRESS' of config map 'env-config'> Optional: false
WIDGETS_API_ADDRESS: <set to the key 'WIDGETS_API_ADDRESS' of config map 'env-config'> Optional: false
PROGRAM_BULL_URL: <set to the key 'REDIS_URL' of config map 'env-config'> Optional: false
PROGRAM_PUBSUB: <set to the key 'REDIS_URL' of config map 'env-config'> Optional: false
PROGRAM_API_ADDRESS: <set to the key 'PROGRAM_API_ADDRESS' of config map 'env-config'> Optional: false
MARATHON_BULL_URL: <set to the key 'REDIS_URL' of config map 'env-config'> Optional: false
MARATHON_API_ADDRESS: <set to the key 'MARATHON_API_ADDRESS' of config map 'env-config'> Optional: false
GIT_API_ADDRESS: <set to the key 'GIT_API_ADDRESS' of config map 'env-config'> Optional: false
GIT_HTTP_ADDRESS: <set to the key 'GIT_HTTP_ADDRESS' of config map 'env-config'> Optional: false
LOG_URL: <set to the key 'LOG_URL' of config map 'env-config'> Optional: false
LOGGER_PUBSUB: <set to the key 'REDIS_URL' of config map 'env-config'> Optional: false
AUTH0_CLIENT_ID: <set to the key 'AUTH0_CLIENT_ID' of config map 'env-config'> Optional: false
AUTH0_DOMAIN: <set to the key 'AUTH0_DOMAIN' of config map 'env-config'> Optional: false
AUTH0_CALLBACK_URL: <set to the key 'AUTH0_CALLBACK_URL' of config map 'env-config'> Optional: false
AUTH0_LOGOOUT_RETURN: <set to the key 'AUTH0_LOGOOUT_RETURN' of config map 'env-config'> Optional: false
AUTH0_CLIENT_SECRET: <set to the key 'auth0-client-secret' in secret 'env-secret'> Optional: false
SESSION_SECRET: <set to the key 'session-secret' in secret 'env-secret'> Optional: false
Mounts:
/service from webdir (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-w9v7j (ro)
Conditions:
Type Status
PodScheduled False
Volumes:
webdir:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: pvc-web
ReadOnly: false
default-token-w9v7j:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-w9v7j
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 30s (x2 over 30s) default-scheduler 0/1 nodes are available: 1 node(s) had volume node affinity conflict.
我发现的错误信息是:
Warning FailedScheduling 30s (x2 over 30s) default-scheduler 0/1 nodes are available: 1 node(s) had volume node affinity conflict.
你知道我的问题出在哪里吗?非常感谢!
您似乎没有符合您的亲和力要求的节点。
删除 PersistentVolume
:
删除这部分:
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- mlo-node
并且仅使用(并将 local
更改为 hostPath
):
kind: PersistentVolume
apiVersion: v1
metadata:
name: pv-web
labels:
type: local
spec:
storageClassName: mlo-web
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
hostPath:
path: /absolute-path/web/
这类似于 Configure a Pod to Use a PersistentVolume for Storage 示例,同样使用 Minikube。