闲人运维

个人运维记录


Longhorn存储

<p>[TOC]</p> <h5>LongHorn介绍</h5> <p><a href="https://longhorn.io/">Longhorn</a>是用于Kubernetes的轻量级、可靠且功能强大的分布式块存储系统,使用容器和微服务实现分布式块存储,为每个块设备卷创建一个专用的存储控制器,并在存储在多个节点上的多个副本之间同步复制该卷,存储控制器和副本本身使用Kubernetes编排。</p> <pre><code class="language-bash">- 企业级分布式块存储,无单点故障 - 块存储的增量快照 - 备份到基于高效变更块检测的辅助存储(NFS或S3兼容的对象存储) - 重复快照和备份 - 自动、无中断的升级。您可以升级整个 Longhorn 软件堆栈,而不会中断正在运行的存储卷。 - 直观的 GUI 仪表板</code></pre> <h5>LongHorn原理</h5> <ul> <li>如下图,Longhorn volumes有三个实例,每个卷都有一个专用控制器,称为 Longhorn Engine 并作为 Linux 进程运行,每个 Longhorn 卷有两个副本(replica),每个副本是一个 Linux 进程,通过为每个卷创建单独的 Longhorn Engine,如果一个控制器出现故障,其他卷的功能不会受到影响</li> </ul> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=f46f488eb6c5d946704a6fd16e0e22c7" alt="" /></p> <h5>LongHorn安装</h5> <ul> <li>集群环境信息、因为longhorn不能支持管理裸盘,要求先在本地挂载一个目录到数据盘中;</li> </ul> <table> <thead> <tr> <th style="text-align: left;">主机名</th> <th style="text-align: left;">IP地址</th> <th style="text-align: left;">磁盘</th> <th style="text-align: left;">挂载路径</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">k8s-master</td> <td style="text-align: left;">10.0.0.41</td> <td style="text-align: left;">/dev/sdb</td> <td style="text-align: left;">/data/longhorn1 (可选)</td> </tr> <tr> <td style="text-align: left;">k8s-node1</td> <td style="text-align: left;">10.0.0.42</td> <td style="text-align: left;">/dev/sdb</td> <td style="text-align: left;">/data/longhorn1</td> </tr> <tr> <td style="text-align: left;">k8s-node2</td> <td style="text-align: left;">10.0.0.43</td> <td style="text-align: left;">/dev/sdb</td> <td style="text-align: left;">/data/longhorn1</td> </tr> </tbody> </table> <ul> <li>配置磁盘挂载,在所有节点操作;</li> </ul> <pre><code class="language-bash"># longhorn支持xfs,ext4文件系统,这里使用xfs mkdir -p /data/longhorn1 mkfs.xfs /dev/sdb mount /dev/sdb /data/longhorn1 echo "/dev/sdb /data/longhorn1 xfs defaults 0 0" &gt;&gt; /etc/fstab mount -a</code></pre> <ul> <li>在集群每个节点上安装open-iscsi,以及nfsv4-client;</li> </ul> <pre><code class="language-bash"># centos yum install iscsi-initiator-utils nfs-utils systemctl enable iscsid systemctl start iscsid</code></pre> <ul> <li>配置k8s集群允许特权pod,在apiserver配置中添加如下参数;</li> </ul> <pre><code class="language-bash"># vim /etc/kubernetes/manifests/kube-apiserver.yaml [09:48:39 root@k8s-mater /etc/kubernetes/manifests]# cat kube-apiserver.yaml |grep "privileged" - --allow-privileged=true</code></pre> <ul> <li>通过官方的检测脚本检查环境依赖,在master执行即可;</li> </ul> <pre><code class="language-bash"># 检测结果要求没有报错即可 curl -sSfL https://raw.githubusercontent.com/longhorn/longhorn/v1.3.0/scripts/environment_check.sh | bash</code></pre> <ul> <li>使用helm3部署,必须以root身份运行;</li> </ul> <pre><code class="language-bash">kubectl create ns longhorn-system helm repo add longhorn https://charts.longhorn.io helm repo update helm install longhorn longhorn/longhorn --namespace longhorn-system --create-namespace helm -n longhorn-system list kubectl -n longhorn-system get pod</code></pre> <h5>LongHorn面板</h5> <ul> <li>安装Longhorn后,添加ingress规则从外部访问,默认情况下不会启用身份验证;</li> </ul> <pre><code class="language-bash">kubectl -n longhorn-system get svc # 名称为longhorn-frontend的svc用于访问Longhorn-UI</code></pre> <ul> <li>这里使用traefik进行转发访问;</li> </ul> <pre><code class="language-yaml">apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: longhorn-ui-svc namespace: longhorn-system spec: rules: - host: code.longhorn.cn http: paths: - path: / pathType: Prefix backend: service: name: longhorn-frontend port: number: 80</code></pre> <ul> <li>访问ui面板;</li> </ul> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=00f214aac18c1467bfd321c617d3d292" alt="" /></p> <h5>LongHorn磁盘</h5> <ul> <li>在Node页面,选择节点进行编辑,将默认的那个磁盘挂载停止并删除掉,然后添加前面挂载的数据盘路径并启用;</li> </ul> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=2f2797120fd5de95d921e4607271a970" alt="" /></p> <hr /> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=acb6baa328e064518dc1506d459f402e" alt="" /></p> <hr /> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=5557daaba1e62936b7d55549be7094cc" alt="" /></p>

页面列表

ITEM_HTML