【问题标题】:CephFS Volume Mount FailsCephFS 卷挂载失败
【发布时间】:2017-05-18 02:15:08
【问题描述】:

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

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

我现在正在尝试使用 kubernetes 示例 here 启动一个 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 失败 “kubernetes.io/cephfs/445ee063-d1f1-11e6-a3e3-1418776a29a6-cephfs” (规格名称:“cephfs”)吊舱“445ee063-d1f1-11e6-a3e3-1418776a29a6”(UID: “445ee063-d1f1-11e6-a3e3-1418776a29a6”)与: CephFS:挂载失败: 挂载失败:fork/exec /bin/mount:参数无效 参数: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 管理器容器是否需要安装 ceph-fs-common 包才能成功挂载?我找不到任何进一步的调试信息来确定错误的原因。

【问题讨论】:

    标签: kubernetes ceph


    【解决方案1】:

    为了在 kubernetes 中成功挂载 CephFS 卷,需要解决几个问题。请记住,我使用 kube-deploy docker multinode 配置部署了 Kubernetes 1.4.6。

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

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

    为解决问题,我将 YAML 配置为使用 Ceph secretfile 而不是 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-commonceph-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"
    

    完整要点here

    【讨论】:

      【解决方案2】:

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

      • Ceph 需要机器的 IP 地址才能工作
      • 您运行容器的操作系统是安装存储的操作系统:需要在该机器上安装 ceph 工具。容器完全不知道挂载的磁盘

      【讨论】:

      • 所有 kubernetes 节点都安装了ceph-fs-common 并且工作正常,因为我可以手动挂载到主机操作系统。另外,在实际的 yaml 配置中使用了 IP 地址,结果相同。
      猜你喜欢
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 2016-01-10
      • 2014-04-17
      • 2021-01-28
      相关资源
      最近更新 更多