【发布时间】:2016-05-18 22:20:39
【问题描述】:
我正在尝试按照https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/registry 的说明将私有 docker 注册表添加到 Kubernetes,但 rc 创建的 pod 无法挂载持久卷声明。
首先我在 EBS 上创建一个卷,如下所示:
aws ec2 create-volume --region us-west-1 --availability-zone us-west-1a --size 32 --volume-type gp2
(us-west-1a 也是我所有 kube minions 都在其中运行的可用区。)
然后我像这样创建一个持久卷:
kind: PersistentVolume
apiVersion: v1
metadata:
name: kube-system-kube-registry-pv
labels:
kubernetes.io/cluster-service: "true"
spec:
capacity:
storage: 30Gi
accessModes:
- ReadWriteOnce
awsElasticBlockStore:
volumeID: vol-XXXXXXXX
fsType: ext4
对持久卷的声明如下:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: kube-registry-pvc
namespace: kube-system
labels:
kubernetes.io/cluster-service: "true"
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
复制控制器是这样指定的:
apiVersion: v1
kind: ReplicationController
metadata:
name: kube-registry-v0
namespace: kube-system
labels:
k8s-app: kube-registry
version: v0
kubernetes.io/cluster-service: "true"
spec:
replicas: 1
selector:
k8s-app: kube-registry
version: v0
template:
metadata:
labels:
k8s-app: kube-registry
version: v0
kubernetes.io/cluster-service: "true"
spec:
containers:
- name: registry
image: registry:2
resources:
limits:
cpu: 100m
memory: 100Mi
env:
- name: REGISTRY_HTTP_ADDR
value: :5000
- name: REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY
value: /var/lib/registry
volumeMounts:
- name: image-store
mountPath: /var/lib/registry
ports:
- containerPort: 5000
name: registry
protocol: TCP
volumes:
- name: image-store
persistentVolumeClaim:
claimName: kube-registry-pvc
当我创建 rc 时,它成功启动了一个 pod,但该 pod 无法挂载卷:
$ kubectl describe po kube-registry --namespace=kube-system
...
Events:
FirstSeen LastSeen Count From SubobjectPath Reason Message
───────── ──────── ───── ──── ───────────── ────── ───────
1m 1m 1 {scheduler } Scheduled Successfully assigned kube-registry-v0-3jobf to XXXXXXXXXXXXXXX.us-west-1.compute.internal
22s 22s 1 {kubelet XXXXXXXXXXXXXXX.us-west-1.compute.internal} FailedMount Unable to mount volumes for pod "kube-registry-v0-3jobf_kube-system": Timeout waiting for volume state
22s 22s 1 {kubelet XXXXXXXXXXXXXXX.us-west-1.compute.internal} FailedSync Error syncing pod, skipping: Timeout waiting for volume state
如果我不使用持久卷和持久卷声明,我能够成功挂载 EBS 卷。以下内容没有错误,例如:
apiVersion: v1
kind: Pod
metadata:
name: test-ebs
spec:
containers:
- image: gcr.io/google_containers/test-webserver
name: test-container
volumeMounts:
- mountPath: /test-ebs
name: test-volume
volumes:
- name: test-volume
awsElasticBlockStore:
volumeID: vol-XXXXXXXX
fsType: ext4
我的两个问题是:
- 有谁知道可能出了什么问题以及如何解决?
- 一般来说,我在哪里可以找到有关此类错误的更多详细信息?我无法在任何地方找到更详细的日志消息,并且“无法挂载卷...超时等待卷状态”并没有太大帮助。
【问题讨论】:
-
你检查了 pod 启动节点上的 Kubernetes 日志吗?你的答案应该在那里。
-
我进行了同样的练习,并注意到我可以跳过 pv 并使用动态 pv 配置来代替,方法是定义一个存储类,并将 aws-ebs 作为配置器。我设法完成了注册表设置。至于故障排除,请使用“描述”。我在第一次尝试时确实遇到了 pvc 配置错误,因为 aws sc1 存储至少需要 500Gi,而且我指定了更小的东西。
标签: amazon-web-services kubernetes