Azure kubernetes上的PVC卷安装需要一个多小时

时间:2017-08-24 20:04:14

标签: azure kubernetes

我在Azure上安装了构造kubernetes集群。它来自构造安装程序GH repo,来自master(commit 0a7a1edb0a2eec8f3fb9e1e612a8ef1fd890c332)。

> kubectl version                                                                       

Client Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.2", GitCommit:"922a86cfcd65915a9b2f69f3f193b8907d741d9c", GitTreeState:"clean", BuildDate:"2017-07-21T08:23:22Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"7", GitVersion:"v1.7.3+coreos.0", GitCommit:"42de91f04e456f7625941a6c4aaedaa69708be1b", GitTreeState:"clean", BuildDate:"2017-08-07T19:44:31Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}

在群集上,我创建了存储类,PVC和pod,如:https://gist.github.com/mwieczorek/28b7c779555d236a9756cb94109d6695

但是pod无法启动。我跑的时候:

kubectl describe pod mypod

我参加活动:

FailedMount     Unable to mount volumes for pod "mypod_default(afc68bee-88cb-11e7-a44f-000d3a28f26a)": 
timeout expired waiting for volumes to attach/mount for pod "default"/"mypod". list of unattached/unmounted volumes=[mypd]

在kubelet日志(https://gist.github.com/mwieczorek/900db1e10971a39942cba07e202f3c50)中,我看到:

Error: Volume not attached according to node status for volume "pvc-61a8dc6a-88cb-11e7-ad19-000d3a28f2d3" 
(UniqueName: "kubernetes.io/azure-disk//subscriptions/abc/resourceGroups/tectonic-cluster-mwtest/providers/Microsoft.Compute/disks/kubernetes-dynamic-pvc-61a8dc6a-88cb-11e7-ad19-000d3a28f2d3") pod "mypod" (UID: "afc68bee-88cb-11e7-a44f-000d3a28f26a")

当我创建PVC时 - 创建Azure上的新光盘。 在创建pod之后 - 我在天蓝色的门户网站上看到光盘已连接到安排了pod的工作虚拟机。

> fdisk -l

所示:

Disk /dev/sdc: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

我在GH上发现了类似的问题(kubernetes / kubernetes / issues / 50150),但我有一个由master构建的集群,所以它不是udev规则(我检查过 - 文件/etc/udev/rules.d/66 -azure-storage.rules存在)

有人知道它是否是一个错误(也许是已知问题)?

或者我做错了什么?

另外:我怎样才能进一步排除故障?

3 个答案:

答案 0 :(得分:1)

我在实验室进行了测试,使用你的yaml文件来创建pod,一小时后,它仍然显示待处理。

root@k8s-master-ED3DFF55-0:~# kubectl get pod
NAME          READY     STATUS    RESTARTS   AGE
mypod         0/1       Pending   0          1h
task-pv-pod   1/1       Running   0          2h

我们可以使用这个yaml文件来创建pod:

<强> PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
  namespace: kube-public
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi

输出:

root@k8s-master-ED3DFF55-0:~# kubectl get pvc --namespace=kube-public
NAME      STATUS    VOLUME                                     CAPACITY   ACCESSMODES   STORAGECLASS   AGE
mypvc     Bound     pvc-1b097337-8960-11e7-82fc-000d3a191e6a   100Gi      RWO           default        3h

<强>波德

kind: Pod
apiVersion: v1
metadata:
  name: task-pv-pod
spec:

  volumes:
    - name: task-pv-storage
      persistentVolumeClaim:
       claimName: task-pv-claim

  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
      - mountPath: "/usr/share/nginx/html"
        name: task-pv-storage

输出:

root@k8s-master-ED3DFF55-0:~# kubectl get pods
NAME          READY     STATUS    RESTARTS   AGE
task-pv-pod   1/1       Running   0          3h

作为解决方法,我们可以使用default作为存储类

在Azure中,有托管磁盘和非托管磁盘。如果您的节点使用托管磁盘,则将创建两个存储类,以提供使用Azure托管磁盘创建Kubernetes持久卷的访问权限。

他们是托管高级托管标准,并分别映射到Standard_LRSPremium_LRS托管磁盘类型。

如果您的节点使用非托管磁盘,则如果持久性卷资源未将存储类指定为资源定义的一部分,则将使用默认存储类。

默认存储类使用非托管blob存储,并将在资源组中存在的现有存储帐户中配置blob,或者设置新的存储帐户。

所有VM大小都可以使用非托管持久卷类型。

有关托管磁盘和非托管磁盘的详细信息,请参阅此link

以下是测试结果:

root@k8s-master-ED3DFF55-0:~# kubectl get pvc --namespace=default
NAME            STATUS    VOLUME                                     CAPACITY   ACCESSMODES   STORAGECLASS       AGE
shared          Pending                                                                       standard-managed   2h
shared1         Pending                                                                       managed-standard   15m
shared12        Pending                                                                       standard-managed   14m
shared123       Bound     pvc-a379ced4-897c-11e7-82fc-000d3a191e6a   2Gi        RWO           default            12m
task-pv-claim   Bound     pvc-3cefd456-8961-11e7-82fc-000d3a191e6a   3Gi        RWO           default            3h

<强>更新 这是我的K8s代理的非托管磁盘: enter image description here

答案 1 :(得分:0)

在您的情况下,“kubectl describe pod-name”不提供足够的信息,您需要提供k8s控制器管理器日志以进行故障排除

获取控制器管理器登录master:

#get the "CONTAINER ID" of "/hyperkube controlle"
docker ps -a | grep "hyperkube controlle" | awk -F ' ' '{print $1}'
#get controller manager logs
docker logs "CONTAINER ID" > "CONTAINER ID".log 2>&1 &

答案 2 :(得分:0)

供应应该非常快。检查您的控制器日志以确保正确配置了 PVC 所需的 PV:

  1. 导航到 Azure 门户 > 群集 > 活动日志
  2. 删除命名空间过滤器并查找“更新存储帐户创建”条目。

在我们的例子中,我们需要为“Microsoft.Storage”命名空间注册我们的集群订阅,以便控制器可以提供所需的 PV。您可以使用 azure cli 执行此操作:

az provider register --namespace Microsoft.Storage