无法移过 1 个 pod 具有未绑定的即时 PersistentVolumeClaims

Failed to move past 1 pod has unbound immediate PersistentVolumeClaims

我是 Kubernetes 的新手,正在尝试使用 helm 图表让 apache 气流工作。经过近一周的努力,我无处可去 - 甚至无法让 apache 气流文档中提供的那个工作。我使用 Pop OS 20.04 和 microk8s.

当我运行这些命令时:

kubectl create namespace airflow
helm repo add apache-airflow https://airflow.apache.org
helm install airflow apache-airflow/airflow --namespace airflow

helm 安装在五分钟后超时。

kubectl get pods -n airflow

显示此列表:

NAME                                   READY   STATUS     RESTARTS   AGE
airflow-postgresql-0                   0/1     Pending    0          4m8s
airflow-redis-0                        0/1     Pending    0          4m8s
airflow-worker-0                       0/2     Pending    0          4m8s
airflow-scheduler-565d8587fd-vm8h7     0/2     Init:0/1   0          4m8s
airflow-triggerer-7f4477dcb6-nlhg8     0/1     Init:0/1   0          4m8s
airflow-webserver-684c5d94d9-qhhv2     0/1     Init:0/1   0          4m8s
airflow-run-airflow-migrations-rzm59   1/1     Running    0          4m8s
airflow-statsd-84f4f9898-sltw9         1/1     Running    0          4m8s
airflow-flower-7c87f95f46-qqqqx        0/1     Running    4          4m8s

然后当我运行下面的命令时:

kubectl describe pod airflow-postgresql-0 -n airflow

我得到以下信息(根据事件进行了调整):

Events:
  Type     Reason            Age                From               Message
  ----     ------            ----               ----               -------
  Warning  FailedScheduling  58s (x2 over 58s)  default-scheduler  0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.

然后我使用以下命令删除了命名空间

kubectl delete ns airflow

此时,pods 的终止卡住了。然后我在另一个终端调出代理:

kubectl proxy

然后发出以下命令强制删除命名空间及其所有 pods 和资源:

kubectl get ns airflow -o json | jq '.spec.finalizers=[]' | curl -X PUT http://localhost:8001/api/v1/namespaces/airflow/finalize -H "Content-Type: application/json" --data @-

然后我使用以下命令删除了 PVC:

kubectl delete pvc --force --grace-period=0 --all -n airflow

你又卡住了,所以我不得不发出另一个命令来强制删除:

kubectl patch pvc data-airflow-postgresql-0 -p '{"metadata":{"finalizers":null}}' -n airflow

此时 PVC 被终止,这两个命令 return 没有:

kubectl get pvc -n airflow
kubectl get all -n airflow

然后重启机器,再次执行helm install(使用本题第一节的first和last命令),结果还是一样

然后我执行了以下命令(使用我在此处找到的建议):

kubectl describe pvc -n airflow

我得到以下输出(我正在发布 PostgreSQL 的事件部分):

Type    Reason         Age                   From                         Message
  ----    ------         ----                  ----                         -------
  Normal  FailedBinding  2m58s (x42 over 13m)  persistentvolume-controller  no persistent volumes available for this claim and no storage class is set

所以我的假设是我需要提供存储 class 作为 values.yaml

的一部分

我的理解对吗?如何在 values.yaml?

中提供所需的(以及什么值)

如果你用helm安装,你可以用helm delete airflow -n airflow卸载。

这是一种使用默认值为 测试 目的安装气流的方法:

生成清单helm template airflow apache-airflow/airflow -n airflow > airflow.yaml

用你喜欢的编辑器打开“airflow.yaml”,将所有“volumeClaimTemplates”替换为emptyDir。示例:

创建命名空间并安装:

kubectl create namespace airflow
kubectl apply -f airflow.yaml --namespace airflow

如果需要,您可以 从 pods 中取出文件。

删除kubectl delete -f airflow.yaml --namespace airflow.