我在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存在)
有人知道它是否是一个错误(也许是已知问题)?
或者我做错了什么?
另外:我怎样才能进一步排除故障?
答案 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_LRS
和Premium_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
答案 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:
在我们的例子中,我们需要为“Microsoft.Storage”命名空间注册我们的集群订阅,以便控制器可以提供所需的 PV。您可以使用 azure cli 执行此操作:
az provider register --namespace Microsoft.Storage