3

我已经使用 docker -multinode 配置以及 Ceph 集群成功部署了 Kubernetes 集群,并且能够使用以下命令手动挂载 CephFS 设备:

sudo mount -t ceph monitor1:6789:/ /ceph -o name=admin,secretfile=/etc/ceph/cephfs.secret

我现在正在尝试使用此处的 kubernetes 示例启动一个 pod :

apiVersion: v1
kind: Secret
metadata:
  name: ceph-secret
data:
  key: my-ceph-secret-key
---
apiVersion: v1
kind: Pod
metadata:
  name: cephfs2
spec:
  containers:
  - name: cephfs-rw
    image: kubernetes/pause
    volumeMounts:
    - mountPath: "/mnt/cephfs"
      name: cephfs
  volumes:
  - name: cephfs
    cephfs:
      monitors:
      - "monitor1:6789"
      - "monitor2:6789"
      - "monitor3:6789"
      user: admin
      secretRef:
        name: ceph-secret
      readOnly: false

当我运行时:

sudo kubectl create -f cephfs.yml

我收到以下错误:

警告 FailedMount MountVolume.SetUp failed for volume "kubernetes.io/cephfs/445ee063-d1f1-11e6-a3e3-1418776a29a6-cephfs" (spec.Name: "cephfs") pod "445ee063-d1f1-11e6-a3e3-1418776a29a6" (UID : "445ee063-d1f1-11e6-a3e3-1418776a29a6") with: CephFS: mount failed: mount failed: fork/exec /bin/mount: invalid argument 挂载参数:monitor1:6789,monitor2:6789,monitor3:6789:/data /var/lib/kubelet/pods/445ee063-d1f1-11e6-a3e3-1418776a29a6/volumes/kubernetes.io~cephfs/cephfs ceph [name=admin,secret=secret]

kubernetes manager 容器是否需要安装 ceph-fs-common 包才能成功挂载?我找不到任何进一步的调试信息来确定错误的原因。

4

2 回答 2

2

AFAIK 你可能在这里有 2 个问题:

  • Ceph 需要机器的 IP 地址才能工作
  • 您运行容器的操作系统是安装存储的操作系统:需要在该机器上安装 ceph 工具。容器完全不知道挂载的磁盘
于 2017-01-03T22:15:30.403 回答
0

为了在 kubernetes 中成功挂载 CephFS 卷,有几个问题需要修复。请记住,我已经使用kube-deploy docker 多节点配置部署了 Kubernetes 1.4.6。

问题 #1:使用 Kubernetes 机密的挂载命令失败

在更仔细地检查上述错误时,我发现 Kubernetes 使用被解释为换行符的字符来加密我的 Ceph 密码。结果,kubelet 在尝试挂载文件系统时失败。

为了解决这个问题,我将 YAML 配置为使用 Cephsecretfile而不是 Kubernetes secret

apiVersion: v1
kind: Pod
metadata:
  name: cephfs-test
spec:
  containers:
  - name: cephfs-rw
    image: kubernetes/pause
    volumeMounts:
    - mountPath: "/mnt/cephfs"
      name: cephfs
  volumes:
  - name: cephfs
    cephfs:
      monitors:
      - "<monitor1>:6789"
      - "<monitor2>:6789"
      - "<<monitor3>:6789"
      user: admin
      # Omit for CephFS mounting error
      # secretRef:
      #   name: ceph-secret
      secretFile: "/etc/ceph/user.secret"
      readOnly: false

问题 #2:Kubelet 缺少 Ceph 包和配置

kubelet 都缺少将 CephFS 卷挂载到容器以及必要的配置文件所需ceph-fs-common的包。ceph-common以下脚本应将必要的更新应用于 kubelet 主/工作代理:

docker exec $KUBELET_ID apt-get update
docker exec $KUBELET_ID apt-get install -y wget lsb-release apt-transport-https
docker exec $KUBELET_ID /bin/bash -c "wget -q -O- 'https://download.ceph.com/keys/release.asc' | apt-key add -"
RELEASE=$(docker exec $KUBELET_ID lsb_release -sc)
docker exec $KUBELET_ID /bin/bash -c "echo deb https://download.ceph.com/debian-jewel/ $RELEASE main | tee /etc/apt/sources.list.d/ceph.list"
docker exec $KUBELET_ID apt-get update
docker exec $KUBELET_ID apt-get install -y ceph-fs-common ceph-common

docker exec $KUBELET_ID mkdir -p /etc/ceph
docker exec $KUBELET_ID /bin/bash -c "echo $CEPH_SECRET > /etc/ceph/admin.secret"

完整的要点在这里

于 2017-01-06T17:43:41.957 回答