美文网首页微服务架构和实践Kubernetes
k8s使用openebs实现动态持久化存储

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

作者: 647f379ea944 | 来源:发表于2018-08-12 09:39 被阅读0次

    简介

    本文章介绍如何使用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
    

    参考文档

    相关文章

      网友评论

        本文标题:k8s使用openebs实现动态持久化存储

        本文链接:https://www.haomeiwen.com/subject/jxxsbftx.html