【问题标题】:Kubernetes Storage on bare-metal/private cloud裸机/私有云上的 Kubernetes 存储
【发布时间】:2015-07-04 01:50:43
【问题描述】:

我刚开始在 2 个私有云服务器上设置 2 个节点(主从)上的 Kubernetes。我已经安装了它,做了基本的配置,让它运行一些简单的从 master 到 minion 的 pods/services。

我的问题是:

如何在不使用 Google Cloud 时将持久存储与 Pod 一起使用?

在我的第一次测试中,我运行了一个 Ghost 博客 pod,但如果我撕毁 pod,更改就会丢失。尝试将卷添加到 pod,但实际上找不到任何关于不在 GC 上时如何完成的文档。

我的尝试:

apiVersion: v1beta1
id: ghost
kind: Pod
desiredState:
  manifest:
    version: v1beta1
    id: ghost
    containers:
      - name: ghost
        image: ghost
        volumeMounts:
          - name: ghost-persistent-storage
            mountPath: /var/lib/ghost
        ports:
          - hostPort: 8080
            containerPort: 2368
    volumes:
      - name: ghost-persistent-storage
        source:
          emptyDir: {}

找到这个:Persistent Installation of MySQL and WordPress on Kubernetes

不知道如何将存储(NFS?)添加到我的测试安装中。

【问题讨论】:

    标签: kubernetes storage persistent kubernetes-pod


    【解决方案1】:

    【讨论】:

    • 谢谢,NFS 正是我需要的。今天要试一试:)
    • 很好,它可以使用 nfs 从 master 挂载到 pod,但是当我重新启动 pod 时,它会删除挂载目录中的所有内容:/
    【解决方案2】:

    您可以尝试https://github.com/suquant/glusterd 解决方案。

    Kubernetes 集群中的 Glusterfs 服务器

    想法很简单,集群管理器监听kubernetes api并添加到/etc/hosts“metadata.name”和pod ip地址。

    1。创建 pod

    gluster1.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: gluster1
      namespace: mynamespace
      labels:
        component: glusterfs-storage
    spec:
      nodeSelector:
        host: st01
      containers:
        - name: glusterfs-server
          image: suquant/glusterd:3.6.kube
          imagePullPolicy: Always
          command:
            - /kubernetes-glusterd
          args:
            - --namespace
            - mynamespace
            - --labels
            - component=glusterfs-storage
          ports:
            - containerPort: 24007
            - containerPort: 24008
            - containerPort: 49152
            - containerPort: 38465
            - containerPort: 38466
            - containerPort: 38467
            - containerPort: 2049
            - containerPort: 111
            - containerPort: 111
              protocol: UDP
          volumeMounts:
            - name: brick
              mountPath: /mnt/brick
            - name: fuse
              mountPath: /dev/fuse
            - name: data
              mountPath: /var/lib/glusterd
          securityContext:
            capabilities:
              add:
                - SYS_ADMIN
                - MKNOD
      volumes:
        - name: brick
          hostPath:
            path: /opt/var/lib/brick1
        - name: fuse
          hostPath:
            path: /dev/fuse
        - name: data
          emptyDir: {}
    

    gluster2.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: gluster2
      namespace: mynamespace
      labels:
        component: glusterfs-storage
    spec:
      nodeSelector:
        host: st02
      containers:
        - name: glusterfs-server
          image: suquant/glusterd:3.6.kube
          imagePullPolicy: Always
          command:
            - /kubernetes-glusterd
          args:
            - --namespace
            - mynamespace
            - --labels
            - component=glusterfs-storage
          ports:
            - containerPort: 24007
            - containerPort: 24008
            - containerPort: 49152
            - containerPort: 38465
            - containerPort: 38466
            - containerPort: 38467
            - containerPort: 2049
            - containerPort: 111
            - containerPort: 111
              protocol: UDP
          volumeMounts:
            - name: brick
              mountPath: /mnt/brick
            - name: fuse
              mountPath: /dev/fuse
            - name: data
              mountPath: /var/lib/glusterd
          securityContext:
            capabilities:
              add:
                - SYS_ADMIN
                - MKNOD
      volumes:
        - name: brick
          hostPath:
            path: /opt/var/lib/brick1
        - name: fuse
          hostPath:
            path: /dev/fuse
        - name: data
          emptyDir: {}
    

    3。运行 pod

    kubectl create -f gluster1.yaml
    kubectl create -f gluster2.yaml
    

    2。管理 glusterfs 服务器

    kubectl --namespace=mynamespace exec -ti gluster1 -- sh -c "gluster peer probe gluster2"
    kubectl --namespace=mynamespace exec -ti gluster1 -- sh -c "gluster peer status"
    kubectl --namespace=mynamespace exec -ti gluster1 -- sh -c "gluster volume create media replica 2 transport tcp,rdma gluster1:/mnt/brick gluster2:/mnt/brick force"
    kubectl --namespace=mynamespace exec -ti gluster1 -- sh -c "gluster volume start media"
    

    3。用法

    gluster-svc.yaml

    kind: Service
    apiVersion: v1
    metadata:
      name: glusterfs-storage
      namespace: mynamespace
    spec:
      ports:
        - name: glusterfs-api
          port: 24007
          targetPort: 24007
        - name: glusterfs-infiniband
          port: 24008
          targetPort: 24008
        - name: glusterfs-brick0
          port: 49152
          targetPort: 49152
        - name: glusterfs-nfs-0
          port: 38465
          targetPort: 38465
        - name: glusterfs-nfs-1
          port: 38466
          targetPort: 38466
        - name: glusterfs-nfs-2
          port: 38467
          targetPort: 38467
        - name: nfs-rpc
          port: 111
          targetPort: 111
        - name: nfs-rpc-udp
          port: 111
          targetPort: 111
          protocol: UDP
        - name: nfs-portmap
          port: 2049
          targetPort: 2049
      selector:
        component: glusterfs-storage
    

    运行服务

    kubectl create -f gluster-svc.yaml
    

    在你可以通过主机名“glusterfs-storage.mynamespace”在集群中挂载NFS之后

    【讨论】:

      【解决方案3】:

      在新 API (v1beta3) 中,我们添加了更多卷类型,包括 NFS volumes。 NFS 卷类型假定您已经有一个 NFS 服务器在某个地方运行以指向 pod。试一试,如果您有任何问题,请告诉我们!

      【讨论】:

      • v1beta3 链接坏了,只能找到v1.请更新链接,可能使用提交 ID。
      猜你喜欢
      • 2020-08-05
      • 2015-09-20
      • 2019-01-26
      • 2018-11-06
      • 1970-01-01
      • 2019-09-05
      • 1970-01-01
      • 2019-01-24
      • 2019-10-01
      相关资源
      最近更新 更多