Kubernetes pod 永远不会准备好
Kubernetes pod never gets ready
我正在使用 VM(主)和 3 个裸机服务器(所有 运行ning Ubuntu 14.04)设置一个小型 Kubernetes 集群。我关注了 Kubernetes install tutorial for Ubuntu. Each bare metal server also has 2T of disk space exported using Ceph 0.94.5。一切正常,但是当我尝试启动复制控制器时,我得到以下信息 (kubectl get pods):
NAME READY STATUS RESTARTS AGE
site2-zecnf 0/1 Image: site-img is ready, container is creating 0 12m
pod 将永远处于“未就绪”状态,但是,如果我将其关闭并重新启动,它将 运行 正常(尽管有时我必须重复此操作几次)。一旦 pod 运行ning,一切正常。
如果由于某种原因,pod 挂掉了,它会被 Kubernetes 重启,但可以再次进入这个 Not Ready 状态。 运行:
kubectl describe pod java-site2-crctv
我得到(删除了一些字段):
Namespace: default
Status: Pending
Replication Controllers: java-site2 (1/1 replicas created)
Containers:
java-site:
Image: javasite-img
State: Waiting
Reason: Image: javasite-img is ready, container is creating
Ready: False
Restart Count: 0
Conditions:
Type Status
Ready False
Events:
FirstSeen LastSeen Count From SubobjectPath Reason Message
Sat, 14 Nov 2015 12:37:56 -0200 Sat, 14 Nov 2015 12:37:56 -0200 1 {scheduler } scheduled Successfully assigned java-site2-crctv to 10.70.2.3
Sat, 14 Nov 2015 12:37:57 -0200 Sat, 14 Nov 2015 12:45:29 -0200 46 {kubelet 10.70.2.3} failedMount Unable to mount volumes for pod "java-site2-crctv_default": exit status 22
Sat, 14 Nov 2015 12:37:57 -0200 Sat, 14 Nov 2015 12:45:29 -0200 46 {kubelet 10.70.2.3} failedSync Error syncing pod, skipping: exit status 22
容器无法装载卷。但是,如果我在所有节点的本地文件夹中手动安装卷(rdb 块),问题就消失了(pods 开始没有问题)。
在我看来,Kubernetes 无法映射它们 (sudo rbd map java-site-vol
),只能挂载它们 (sudo mount /dev/rbd/rbd/java-site-vol /...
)。
我应该映射我使用的所有 Ceph 卷还是应该由 Kubernetes 映射?
我终于解决了这个问题。在描述复制控制器的 yaml 文件中,我在卷部分使用 keyring:
:
keyring: "ceph.client.admin.keyring"
在我 generated a Ceph secret 并将 yaml 文件更改为使用 secretRef
之后:
secretRef:
name: "ceph-secret"
Kubernetes 能够映射和挂载 Ceph 卷并且 pods 开始正常启动。我不知道为什么在这种情况下使用 keyring:
不起作用。
我正在使用 VM(主)和 3 个裸机服务器(所有 运行ning Ubuntu 14.04)设置一个小型 Kubernetes 集群。我关注了 Kubernetes install tutorial for Ubuntu. Each bare metal server also has 2T of disk space exported using Ceph 0.94.5。一切正常,但是当我尝试启动复制控制器时,我得到以下信息 (kubectl get pods):
NAME READY STATUS RESTARTS AGE
site2-zecnf 0/1 Image: site-img is ready, container is creating 0 12m
pod 将永远处于“未就绪”状态,但是,如果我将其关闭并重新启动,它将 运行 正常(尽管有时我必须重复此操作几次)。一旦 pod 运行ning,一切正常。
如果由于某种原因,pod 挂掉了,它会被 Kubernetes 重启,但可以再次进入这个 Not Ready 状态。 运行:
kubectl describe pod java-site2-crctv
我得到(删除了一些字段):
Namespace: default
Status: Pending
Replication Controllers: java-site2 (1/1 replicas created)
Containers:
java-site:
Image: javasite-img
State: Waiting
Reason: Image: javasite-img is ready, container is creating
Ready: False
Restart Count: 0
Conditions:
Type Status
Ready False
Events:
FirstSeen LastSeen Count From SubobjectPath Reason Message
Sat, 14 Nov 2015 12:37:56 -0200 Sat, 14 Nov 2015 12:37:56 -0200 1 {scheduler } scheduled Successfully assigned java-site2-crctv to 10.70.2.3
Sat, 14 Nov 2015 12:37:57 -0200 Sat, 14 Nov 2015 12:45:29 -0200 46 {kubelet 10.70.2.3} failedMount Unable to mount volumes for pod "java-site2-crctv_default": exit status 22
Sat, 14 Nov 2015 12:37:57 -0200 Sat, 14 Nov 2015 12:45:29 -0200 46 {kubelet 10.70.2.3} failedSync Error syncing pod, skipping: exit status 22
容器无法装载卷。但是,如果我在所有节点的本地文件夹中手动安装卷(rdb 块),问题就消失了(pods 开始没有问题)。
在我看来,Kubernetes 无法映射它们 (sudo rbd map java-site-vol
),只能挂载它们 (sudo mount /dev/rbd/rbd/java-site-vol /...
)。
我应该映射我使用的所有 Ceph 卷还是应该由 Kubernetes 映射?
我终于解决了这个问题。在描述复制控制器的 yaml 文件中,我在卷部分使用 keyring:
:
keyring: "ceph.client.admin.keyring"
在我 generated a Ceph secret 并将 yaml 文件更改为使用 secretRef
之后:
secretRef:
name: "ceph-secret"
Kubernetes 能够映射和挂载 Ceph 卷并且 pods 开始正常启动。我不知道为什么在这种情况下使用 keyring:
不起作用。