裸机/私有云上的 Kubernetes 存储

     2023-02-15     14

关键词:

【中文标题】裸机/私有云上的 Kubernetes 存储【英文标题】:Kubernetes Storage on bare-metal/private cloud 【发布时间】: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?)添加到我的测试安装中。

【问题讨论】:

【参考方案1】:

NFS 示例: https://github.com/kubernetes/kubernetes/tree/master/examples/volumes/nfs

GlusterFS 示例: https://github.com/kubernetes/kubernetes/tree/master/examples/volumes/glusterfs

希望有帮助!

【讨论】:

谢谢,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。

git

(零)从这个分支拉代码(一)把本地代码提交到“本地私有库的release/V7.2分支”上去(说白了代码还是在本地)(二)commit完之后,把本地私有库的代码提交到云上的私有库:fork的私有库(三)本地私有库的这个分支,push到... 查看详情

kubernetes 在 pod 中使用具有 root 用户的 nfs 持久卷

】kubernetes在pod中使用具有root用户的nfs持久卷【英文标题】:kubernetesusenfspersistentvolumeswitharootuserinapod【发布时间】:2018-11-2319:14:38【问题描述】:好吧,我现在正在用头撞墙好几天......我的用例:我在自己的裸机云上,我正在运... 查看详情

Kubernetes 中部署的私有存储库 Airflow 的 image_pull_secrets 错误

】Kubernetes中部署的私有存储库Airflow的image_pull_secrets错误【英文标题】:Errorinimage_pull_secretsforprivaterepositoryAirflowdeployedinKubernetes【发布时间】:2021-01-2321:05:46【问题描述】:我已经在azurekubernetes中部署了apache气流。apache气流的Helm... 查看详情

如何从 bitbucket 云上的 bitbucket 存储库获取 HTTP 访问令牌

】如何从bitbucket云上的bitbucket存储库获取HTTP访问令牌【英文标题】:HowdoIobtainanHTTPaccesstokenfromabitbucketrepositoryonbitbucketcloud【发布时间】:2022-01-2010:08:28【问题描述】:我需要为存储库创建一个HTTP访问令牌,它允许我在另一个存... 查看详情

通过阿里云拉取google云上的镜像

在创建kubernetes集群时需要一些Google云上的镜像国内拉取不了Google云上的镜像,所以我们想到了阿里云,因为阿里云服务器在美国,所以我们去阿里云上的构建镜像的功能拉取国外的镜像,然后再从阿里云上拉取到本地话不多说... 查看详情

最佳实践丨构建云上私有池(虚拟idc)的5种方案详解

简介: 云上私有池系列终篇终于来了,本文将重点介绍构建云上的私有池(虚拟IDC)的多种方案和各自的优缺点,并给出相关的性价比优化建议。本文作者:阿里云技术专家李雨前摘要围绕私有池(... 查看详情

实践分享丨构建云上私有池(虚拟idc)的5种方案详解

简介: 云上私有池系列终篇终于来了,本文将重点介绍构建云上的私有池(虚拟IDC)的多种方案和各自的优缺点,并给出相关的性价比优化建议。本文作者:阿里云技术专家李雨前摘要围绕私有池(... 查看详情

最佳实践丨构建云上私有池(虚拟idc)的5种方案详解

简介:云上私有池系列终篇终于来了,本文将重点介绍构建云上的私有池(虚拟IDC)的多种方案和各自的优缺点,并给出相关的性价比优化建议。本文作者:阿里云技术专家李雨前摘要围绕私有池(虚... 查看详情

如何让 Kubernetes Ingress Port 80 在裸机单节点集群上工作

】如何让KubernetesIngressPort80在裸机单节点集群上工作【英文标题】:HowtogetKubernetesIngressPort80workingonbaremetalsinglenodecluster【发布时间】:2018-12-2318:04:04【问题描述】:我有一个使用kubeadm创建的裸机kubernetes(v1.11.0)集群,并且工作正... 查看详情

在具有私有 GKE 集群的 Terraform 上使用 Kubernetes 提供程序

】在具有私有GKE集群的Terraform上使用Kubernetes提供程序【英文标题】:UseKubernetesprovideronTerraformwithprivateGKEcluster【发布时间】:2021-05-2421:15:41【问题描述】:我想使用Terraform上的kubernetes提供程序与私有GKE集群进行交互。我可以成... 查看详情

带有 git 私有仓库的 Jenkins kubernetes 插件

】带有git私有仓库的Jenkinskubernetes插件【英文标题】:Jenkinskubernetespluginwithgitprivaterepo【发布时间】:2021-11-0119:26:45【问题描述】:我正在尝试使用jenkinskubernetesplugin和Gitlabbranchsourceplugin,以及Kubernetes集群在我的集群中进行构建... 查看详情

将文件放置在 GKE 上的 Kubernetes 持久卷存储中

】将文件放置在GKE上的Kubernetes持久卷存储中【英文标题】:PlacingFilesInAKubernetesPersistentVolumeStoreOnGKE【发布时间】:2018-11-1503:43:36【问题描述】:我正在尝试在Kubernetes(托管在GKE上)上运行Factorio游戏服务器。我已经设置了一个... 查看详情

丢掉虚拟机,在裸机上使用kubernetes六大优势!(代码片段)

...流群👇👇原文链接:https://dzone.com/articles/use-kubernetes-on-bare-metal如果你喜欢在虚拟机上部署Kubernetes,请丢弃它,使用裸机部署,本文介绍了在裸机上尝试K8s的六个优势。如果组织需要扩展需求,且易预... 查看详情

检查cloudkit上的私有数据库存储[重复]

】检查cloudkit上的私有数据库存储[重复]【英文标题】:Checkprivatedatabasestorageoncloudkit[duplicate]【发布时间】:2016-09-0913:37:03【问题描述】:我有一个应用程序,我想使用CloudKit和私有数据库在iCloud上保存一些用户数据。问题是,如... 查看详情

为 Elastic Beanstalk 上的 github 私有存储库访问设置 SSH 密钥

】为ElasticBeanstalk上的github私有存储库访问设置SSH密钥【英文标题】:SettingupSSHkeysforgithubprivaterepoaccessonElasticBeanstalk【发布时间】:2017-09-1519:08:09【问题描述】:我的Node.JS项目包含对托管在github上的私有NPM存储库的引用。这在本... 查看详情

云上跑容器,如何降低存储成本

...业级自服务K8S应用和数据管理能力,不论是在本地部署,私有云,还是公有云中。我们的目的是帮助客户:大幅简化为容器应用做存储扩容的操作在不需要停机的情况下,更有效的管理云计 查看详情

带有私有 Google Cloud 存储库的 GKE 上的 ImagePullBackOff

】带有私有GoogleCloud存储库的GKE上的ImagePullBackOff【英文标题】:ImagePullBackOffonGKEwithPrivateGoogleCloudRepository【发布时间】:2019-12-1803:30:54【问题描述】:我正在使用以下(标准)部署在GKE中创建部署apiVersion:apps/v1kind:Deploymentmetadata:n... 查看详情

发布到 Nexus 上的私有 NPM 存储库时的身份验证错误

】发布到Nexus上的私有NPM存储库时的身份验证错误【英文标题】:AuthenticationerroronpublishingtoprivateNPMrepositoryonNexus【发布时间】:2019-12-0806:49:12【问题描述】:我在发布到我的私有Nexus上托管的私有npm注册表时遇到身份验证问题。... 查看详情