k8s使用openebs实现动态持久化存储

本文介绍如何利用OpenEBS为Kubernetes提供动态持久卷(PV)功能,通过iSCSI底层存储,实现读写一次访问模式。涵盖安装配置、测试步骤及关键命令,适用于希望深入了解K8s存储解决方案的读者。

简介

本文章介绍如何使用openebs为k8s提供动态申请pv的功能。iscsi提供底层存储功能,openebs管理iscsi。目前只支持pv的ReadWriteOnce访问模式

访问模式只是能力描述,并不是强制执行的,对于没有按pvc声明的方式使用pv,存储提供者应该负责访问时的运行错误。例如如果设置pvc的访问模式为ReadOnlyMany ,pod挂载后依然可写,如果需要真正的不可写,申请pvc是需要指定 readOnly: true 参数

安装

实验用的Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

ENV["LC_ALL"] = "en_US.UTF-8"

Vagrant.configure("2") do |config|
    (1..3).each do |i|
      config.vm.define "lab#{i}" do |node|
        node.vm.box = "centos-7.4-docker-17"
        node.ssh.insert_key = false
        node.vm.hostname = "lab#{i}"
        node.vm.network "private_network", ip: "11.11.11.11#{i}"
        node.vm.provision "shell",
          inline: "echo hello from node #{i}"
        node.vm.provider "virtualbox" do |v|
          v.cpus = 2
          v.customize ["modifyvm", :id, "--name", "lab#{i}", "--memory", "3096"]
          file_to_disk = "lab#{i}_vdb.vdi"
          unless File.exist?(file_to_disk)
            # 50GB
            v.customize ['createhd', '--filename', file_to_disk, '--size', 50 * 1024]
          end
          v.customize ['storageattach', :id, '--storagectl', 'IDE', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_to_disk]
        end
      end
    end
end

安装配置iscsi

# 安装 iscsi
yum install iscsi-initiator-utils -y

# 查看 InitiatorName 是否正常配置
cat /etc/iscsi/initiatorname.iscsi

# 启动查看状态
systemctl start iscsid.service
systemctl status iscsid.service

systemctl start iscsi.service
systemctl status iscsi.service

安装openebs

# 部署
mkdir openebs && cd openebs
wget https://raw.githubusercontent.com/openebs/openebs/v0.6/k8s/openebs-operator.yaml
wget https://raw.githubusercontent.com/openebs/openebs/v0.6/k8s/openebs-storageclasses.yaml
kubectl apply -f openebs-operator.yaml
kubectl apply -f openebs-storageclasses.yaml

# 查看 openebs 状态
kubectl get pods -n openebs -o wide
kubectl get svc -n openebs
kubectl get crd

测试

# 查看 storage class
kubectl get sc

# 创建pvc测试
cat >openebs-pvc-test.yaml<<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: openebs1
spec:
 storageClassName: openebs-standard
 accessModes:
  - ReadWriteOnce
 resources:
   requests:
     storage: 5Gi
EOF
kubectl apply -f openebs-pvc-test.yaml
 
# 查看
kubectl get pvc
kubectl get pv
 
# 创建 nginx pod 挂载测试
cat >nginx-pod.yaml<<EOF
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod1
  labels:
    name: nginx-pod1
spec:
  containers:
  - name: nginx-pod1
    image: nginx:alpine
    ports:
    - name: web
      containerPort: 80
    volumeMounts:
    - name: openebs1-vol1
      mountPath: /usr/share/nginx/html
  volumes:
  - name: openebs1-vol1
    persistentVolumeClaim:
      claimName: openebs1
EOF
kubectl apply -f nginx-pod.yaml
 
# 查看
kubectl get pods -o wide
 
# 修改文件内容
kubectl exec -ti nginx-pod1 -- /bin/sh -c 'echo Hello World from Openebs!!! > /usr/share/nginx/html/index.html'
 
# 访问测试
POD_ID=$(kubectl get pods -o wide | grep nginx-pod1 | awk '{print $(NF-1)}')
curl http://$POD_ID

参考文档



作者:CountingStars_
链接:https://www.jianshu.com/p/f0ac69afc418

### 部署Local-OpenEBS实现在Kubernetes上的持久化存储 #### 安装OpenEBS及其组件 为了在 Kubernetes 上部署 Local-OpenEBS实现持久化存储,首先需要安装 OpenEBS 及其必要的组件。这可以通过 Helm 进行简化处理: ```bash helm install openebs --namespace openebs openebs/openebs --create-namespace --version 3.0.x[^3] ``` 这条命令将会创建 `openebs` 命名空间,并在此命名空间下安装 Jiva 和 Local 组件。 #### 自动创建的 StorageClass 一旦 OpenEBS 成功部署,在默认情况下会自动创建多个存储类 (StorageClasses),其中包括 `openebs-hostpath` 存储类。该存储类可以用于快速测试目的或开发环境中的简单场景[^1]。 对于生产环境中更高级别的需求,则建议自定义配置新的 StorageClass 文件并通过以下方式应用: ```bash wget https://raw.githubusercontent.com/openebs/openebs/master/k8s/openebs-storageclasses.yaml kubectl apply -f openebs-storageclasses.yaml[^2] ``` 上述操作将下载官方提供的预设 StorageClass 模板文件并将其应用于当前集群中。 #### 使用Device-LocalPV特性 当涉及到具体的节点级资源管理时,特别是针对裸金属服务器或是云提供商无法动态供应磁盘的情况,可以利用 **Device-LocalPV** 特性来分配特定主机上的物理硬盘作为 PersistentVolume(PV) 。这些 PV 将被绑定到指定的工作负载 Pod 中去使用[^4]。 具体而言,每当一个新的 PVC 请求到来并与某个预先准备好的 Device-LocalPV 匹配之后,系统就会在这个选定的目标机器上相应位置建立一个新分区;反之亦然——如果关联着某一分区的 PVC 被删除了的话,那么对应的分区也会随之消失。 #### 注意事项 值得注意的是,在实际操作过程中可能会遇到一些潜在的问题,比如由于不同的操作系统自带工具链差异所引起的兼容性问题(例如 `parted` 命令的不同版本可能导致的行为变化)。因此推荐提前确认目标平台的相关软件包状态以及查阅最新的文档指南来进行调整优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值