我试图将一个本地文件夹装载为PersistentVolume,并在其中一个pod中使用它,但过程似乎有问题,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
和聚氯乙烯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
我发现吊舱总是在";挂起";状态:
web-deployment-d498c7f57-4cfbg 0/1 Pending 0 26m
并且当我使用";kubectl描述";,结果如下:
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.
你知道我的问题在哪里吗?非常感谢!
您似乎没有符合亲和力要求的Node。
删除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/
这类似于将Pod配置为使用存储的PersistentVolume示例,也使用Minikube。
我遇到了类似的问题。根据上面的注释@ken Tsoi,它是固定的。以下是我的更改:
新增:kind:StorageClassapiVersion:storage.k8s.io/v1元数据:名称:本地存储提供者:kubernetes.io/no-provisionervolumeBindingMode:WaitForFirstConsumer
apiVersion:v1kind:PersistentVolume元数据:名称:詹金斯pv卷标签:类型:本地规格:storageClassName:本地存储索赔参考:名称:詹金斯pv索赔名称空间:devops工具容量:存储:10Giaccess模式:-ReadWriteOnce主机路径:路径:/mnt/jenkis_volume
我为上面创建了路径mkdir/mnt/jenkis_volume,并更新了它的文件。
旧:
kind:StorageClassapiVersion:storage.k8s.io/v1元数据:名称:本地存储提供者:kubernetes.io/no-provisionervolumeBindingMode:WaitForFirstConsumer
apiVersion:v1kind:PersistentVolume元数据:名称:詹金斯pv卷标签:类型:本地规格:storageClassName:本地存储索赔参考:名称:詹金斯pv索赔名称空间:devops工具容量:存储:10Giaccess模式:-ReadWriteOnce本地:路径:/mntnodeAffinity:必需:节点选择器条款:-matchExpressions:-密钥:kubernetes.io/hostname运算符:In值:-k8-工人1