美文网首页
在Rancher中安装基础存储Longhorn

在Rancher中安装基础存储Longhorn

作者: 野生DBNull | 来源:发表于2020-10-20 11:11 被阅读0次

1.Longhorn介绍

Longhorn是用于Kubernetes的轻量级,可靠且功能强大的企业级分布式块存储系统。

Longhorn使用容器和微服务实现分布式块存储。Longhorn为每个块设备卷创建一个专用的存储控制器,并跨多个节点上存储的多个副本同步复制该卷。存储控制器和副本本身使用Kubernetes进行编排。

特征

  • 企业级分布式块存储,无单点故障
  • 块存储的增量快照
  • 备份到基于有效更改块检测的辅助存储(与NFSS3兼容的对象存储)
  • 定期快照和备份
  • 自动化,无中断升级。您可以升级整个Longhorn软件堆栈,而无需中断正在运行的存储卷。
  • 直观的GUI仪表板

2.工作原理

image.png

3.安装Longhorn

3.1 安装前提条件
  • Docker v1.13 +
  • Kubernetes v1.14 +。
  • root权限,Longhorn工作负载必须能够以root用户身份运行,才能正确部署和操作Longhorn。
  • open-iscsi已安装,并且iscsid守护程序正在所有节点上运行。
  • curl,findmnt,grep,awk,blkid,lsblk必须安装。
  • 支持CSI v1.1。
  • 默认情况下,Longhorn安装需要三个节点的群集,因为默认副本数为3,并且禁用了节点级别的软抗关联性,说白了就是要求必须有三台Worker在集群中。
  • 主机文件系统支持file extents存储数据的功能。目前,我们支持:
    • ext4
    • XFS文件
  • curlfindmntgrepawkblkidlsblk必须安装。
  • 必须启用挂载传播

可以用如下脚本去检查缺少了什么基础组件,然后将缺少的东西安装上就好了

curl -sSfL https://raw.githubusercontent.com/longhorn/longhorn/master/scripts/environment_check.sh | bash

PS:这个脚本可能会出现下载不下来的情况,如果下载不下,就直接使用下面的源代码去验证。

vi environment_check.sh
# 将下面的environment_check.sh源码拷贝进去
sh ./environment_check.sh

environment_check.sh源码

#!/bin/bash

dependencies() {
  local targets=($@)
  local allFound=true
  for ((i=0; i<${#targets[@]}; i++)); do
    local target=${targets[$i]}
    if [ "$(which $target)" == "" ]; then
      allFound=false
      echo Not found: $target
    fi
  done
  if [ "$allFound" == "false" ]; then
    echo "Please install missing dependencies."
    exit 2
  fi
}

create_ds() {
cat <<EOF > $TEMP_DIR/environment_check.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: longhorn-environment-check
  name: longhorn-environment-check
spec:
  selector:
    matchLabels:
      app: longhorn-environment-check
  template:
    metadata:
      labels:
        app: longhorn-environment-check
    spec:
      containers:
      - name: longhorn-environment-check
        image: busybox
        args: ["/bin/sh", "-c", "sleep 1000000000"]
        volumeMounts:
        - name: mountpoint
          mountPath: /tmp/longhorn-environment-check
          mountPropagation: Bidirectional
        securityContext:
          privileged: true
      volumes:
      - name: mountpoint
        hostPath:
            path: /tmp/longhorn-environment-check
EOF
  kubectl create -f $TEMP_DIR/environment_check.yaml
}

cleanup() {
  echo "cleaning up..."
  kubectl delete -f $TEMP_DIR/environment_check.yaml
  rm -rf $TEMP_DIR
  echo "clean up complete"
}

wait_ds_ready() {
  while true; do
    local ds=$(kubectl get ds/longhorn-environment-check -o json)
    local numberReady=$(echo $ds | jq .status.numberReady)
    local desiredNumberScheduled=$(echo $ds | jq .status.desiredNumberScheduled)

    if [ "$desiredNumberScheduled" == "$numberReady" ] && [ "$desiredNumberScheduled" != "0" ]; then
      echo "all pods ready ($numberReady/$desiredNumberScheduled)"
      return
    fi

    echo "waiting for pods to become ready ($numberReady/$desiredNumberScheduled)"
    sleep 3
  done
}

validate_ds() {
  local allSupported=true
  local pods=$(kubectl -l app=longhorn-environment-check get po -o json)

  for ((i=0; i<1; i++)); do
    local pod=$(echo $pods | jq .items[$i])
    local nodeName=$(echo $pod | jq -r .spec.nodeName)
    local mountPropagation=$(echo $pod | jq -r '.spec.containers[0].volumeMounts[] | select(.name=="mountpoint") | .mountPropagation')

    if [ "$mountPropagation" != "Bidirectional" ]; then
      allSupported=false
      echo "node $nodeName: MountPropagation DISABLED"
    fi
  done

  if [ "$allSupported" != "true" ]; then
    echo
    echo "  MountPropagation is disabled on at least one node."
    echo "  As a result, CSI driver and Base image cannot be supported."
    echo
    exit 1
  else
    echo -e "\n  MountPropagation is enabled!\n"
  fi
}

dependencies kubectl jq mktemp
TEMP_DIR=$(mktemp -d)
trap cleanup EXIT
create_ds
wait_ds_ready
validate_ds
exit 0

执行后应该是这样的情况,其中kubectl这个依赖可以不去管它,只要将其他的依赖安装好就行了

image.png
3.2 安装open-iscsi

用于安装的命令open-iscsi因Linux发行版而异。
对于Debian和Ubuntu,请使用以下命令:

apt-get install open-iscsi

对于带有的RHEL,CentOS和EKS EKS Kubernetes Worker AMI with AmazonLinux2 image,请使用以下命令:

yum install iscsi-initiator-utils
3.3 开始安装Longhorn
  • 1.检查longhorn-system 命名空间是否被占用,如果被占用需要先将该命名空间删除。

  • 2.打开Rancher商店


    image.png
    image.png

直接将下面的yaml文件贴进去就可以了,有兴趣的小伙伴可以看看每一个参数的介绍,然后根据自己的需求去修改yaml文件,重点的项我已经用注释标记出来了。

---
  image: 
    defaultImage: true
    longhorn: 
      manager: "longhornio/longhorn-manager"
      managerTag: "v1.0.1"
      engine: "longhornio/longhorn-engine"
      engineTag: "v1.0.1"
      ui: "longhornio/longhorn-ui"
      uiTag: "v1.0.1"
      instanceManager: "longhornio/longhorn-instance-manager"
      instanceManagerTag: "v1_20200514"
  csi: 
    attacherImage: ""
    provisionerImage: ""
    nodeDriverRegistrarImage: ""
    resizerImage: ""
    kubeletRootDir: ""
    attacherReplicaCount: "1"
    provisionerReplicaCount: ""
  privateRegistry: 
    registryUrl: ""
    registryUser: ""
    registryPasswd: ""
  longhorn: 
    default_setting: true
  defaultSettings: 
    registrySecret: ""
    backupTarget: ""
    backupTargetCredentialSecret: ""
    createDefaultDiskLabeledNodes: false
    defaultDataPath: "/var/lib/longhorn/" # 这个地方选择你的数据存储地址
    replicaSoftAntiAffinity: false
    storageOverProvisioningPercentage: "200"
    storageMinimalAvailablePercentage: "25"
    upgradeChecker: true
    defaultReplicaCount: "1" # 默认副本数
    guaranteedEngineCPU: "0.25"
    defaultLonghornStaticStorageClass: "longhorn-static"
    backupstorePollInterval: "300"
    taintToleration: ""
    priorityClass: ""
    autoSalvage: true
    disableSchedulingOnCordonedNode: true
    replicaZoneSoftAntiAffinity: true
    volumeAttachmentRecoveryPolicy: "wait"
    mkfsExt4Parameters: ""
  persistence: 
    defaultClass: true
    defaultClassReplicaCount: "1"
  ingress: 
    enabled: false # 是不是开启Nginx代理
    host: "xip.io"
  service: 
    ui: 
      type: "NodePort" # 用NodePort的方式去使用UI
      nodePort: "32767" # 这里建议使用Rancher集群中的最后一个端口

点击安装等待一会儿就好了,安装完成后应该如下图所示


image.png

然后用NodePort的方式去访问刚刚安装的UI应该会出现这样的界面


image.png

到此Longhorn安装完毕。在StrongClass会出现一个默认的存储类,其他的存储类就需要自己新建了,可以参考官网去新建。

--友情链接--
中文官网
官网文档

相关文章

网友评论

      本文标题:在Rancher中安装基础存储Longhorn

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