11 篇文章带有标签 “storage”

MinIO for Kubernetes

DirectPV

安装 DirectPV plugin

Krew

kubectl krew update
kubectl krew install directpv

Release 二进制

release=$(curl -sfL "https://api.github.com/repos/minio/directpv/releases/latest" | awk '/tag_name/ { print substr($2, 3, length($2)-4) }')
curl -fLo kubectl-directpv https://github.com/minio/directpv/releases/download/v${release}/kubectl-directpv_${release}_linux_amd64
sudo chmod a+x kubectl-directpv
sudo mv kubectl-directpv /usr/local/bin/

安装 DirectPV CSI driver kubectl directpv install ███████████████████████████████████████████████████████████████████████████ 100% ┌───────────────

Velero: 备份和迁移 Kubernetes 资源和持久卷

介绍

Velero 是一款开源工具,用于安全备份和恢复、执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷。

功能

  • 灾难恢复 减少基础设施丢失、数据损坏和/或服务中断时的恢复时间。
  • 数据迁移 通过轻松地将 Kubernetes 资源从一个集群迁移到另一个集群,实现集群可移植性。
  • 数据保护 提供关键数据保护功能,例如计划备份、保留计划以及用于自定义操作的备份前或备份后挂钩。

是什么让 Velero 脱颖而出?

与其他直接访问 Kubernetes etcd 数据库来执行备份和恢复的工具不同,Velero 使用 Kubernetes API 来捕获集群资源的状态并在必要时恢复它们。这种 API 驱动的方法具有许多关键优势:

  • 备份可以捕获集群资源的子集,按命名空间、资源类型和/或标签选择器进行过滤,从而为备份和恢复的内容提供高度的灵活性。
  • 托管 Kubernetes 产品的用户通常无权访问底层 etcd 数据库,因此无法直接备份/恢复它。
  • 通过聚合 API 服务器公开的资源可以轻松备份和恢复,即使它们存储在单独的 etcd 数据库中也是如此。

此外,Velero 使您能够使用存储平台的本机快照功能或称为 Restic 的集成文件级备份工具来备份和恢复应用程序的持久数据及其 配置。

Velero 的工作原理

参考资料 Velero Kubernetes 備份,災難復原之 Velero 篇 使用

在 Kubernetes 上部署 MySQL

部署单实例 MySQL

创建 PVC(NFS)

mysql-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

创建 Deployment mysql-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: mysql spec: selector: matchLabels: app: mysql strategy: type: Recreate template: metadata: labels: app: mysql spec: containers: - image: mysql:5.

使用 StorageClass 动态创建 NFS 持久卷

PVC 操作流程

Volume

卷的核心是一个目录,其中可能存有数据,Pod 中的容器可以访问该目录中的数据。 所采用的特定的卷类型将决定该目录如何形成的、使用何种介质保存数据以及目录中存放的内容。

使用卷时, 在 .spec.volumes 字段中设置为 Pod 提供的卷,并在 .spec.containers[*].volumeMounts 字段中声明卷在容器中的挂载位置。

emptyDir 卷的存储介质(例如磁盘、SSD 等)是由保存 kubelet 数据的根目录(通常是 /var/lib/kubelet)的文件系统的介质确定。 Kubernetes 对 emptyDir 卷或者 hostPath 卷可以消耗的空间没有限制,容器之间或 Pod 之间也没有隔离。

PersistentVolume

持久卷(PersistentVolume,PV) 是集群中的一块存储,可以由管理员事先创建, 或者使用存储类(Storage Class)来动态创建。 持久卷是集群资源,就像节点也是集群资源一样。PV 持久卷和普通的 Volume 一样, 也是使用卷插件来实现的,只是它们拥有独立于任何使用 PV 的 Pod 的生命周期。

PV 对象是由运维人员事先创建在 Kubernetes 集群里待用的。

PersistentVolumeClaim 持久卷声明(PersistentVolumeClaim,PVC

macOS Docker

今天用 Docker 构建镜像,突然就挂了。重启 Docker,发现 Docker 无法启动了。

出现的错误

🐳 Building platen-switch:arm64
[+] Building 0.0s (2/2) FINISHED                                                                                                                                                            
 => [internal] load build definition from Dockerfile                                                                                                                                   0.0s
 => => transferring dockerfile: 69B                                                                                                                                                    0.0s
 => [internal] load .dockerignore                                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                                        0.0s
ERROR: failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to read dockerfile: failed to create temp dir: mkdir /var/lib/docker/tmp/buildkit-mount1477620899: no space left on device

分析问题 运行诊断工具 com.docker.

MinIO Quickstart

使用容器的方式部署 MinIO

Standalone

docker run --rm \
  -p 9000:9000 \
  -p 9001:9001 \
  --name minio \
  -v /data/minio/data:/data \
  -e "MINIO_ROOT_USER=admin" \
  -e "MINIO_ROOT_PASSWORD=12345678" \
  minio/minio server /data --console-address ":9001"
API: http://172.17.0.2:9000  http://127.0.0.1:9000 

Console: http://172.17.0.2:9001 http://127.0.0.1:9001 

Documentation: https://docs.min.io

单机分布式 # 创建4个目录 mkdir -p /data/minio/erasure-code/data{1..

逻辑卷管理(Logical Volume Management)

查看 LVM 的相关命令

man lvm
lvm --help

查看系统的块设备 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 43.4M 1 loop /snap/snapd/14549 loop1 7:1 0 43.3M 1 loop /snap/snapd/14295 loop2 7:2 0 76.3M 1 loop /snap/lxd/22407 loop3 7:3 0 61.9M 1 loop /snap/core20/1328 loop4 7:4 0 55.5M 1 loop /snap/core18/2253 loop5 7:5 0 55.5M 1 loop /snap/core18/2284 loop7 7:7 0 94.5M 1 loop /snap/go/9028 loop8 7:8 0 94.5M 1 loop /snap/go/8839 loop9 7:9 0 76.3M 1 loop /snap/lxd/22358 loop10 7:10 0 61.9M 1 loop /snap/core20/1270 sda 8:0 0 558.9G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi └─sda2 8:2 0 558.

Kubernetes中的卷:将磁盘挂载到容器

通过卷在容器之间共享数据

Build [Date HTML Generator] Image

编写 HTML 生成器(date-html-generator.sh)

#!/bin/sh
mkdir /var/htdocs
while :
do
  echo $(date +'%Y-%m-%d %H:%M:%S') Writing to /var/htdocs/index.html
  echo $(date +'%Y-%m-%d %H:%M:%S') > /var/htdocs/index.html
  sleep 1
done
  • %Y : 完整年份 (0000-9999)
  • %m : 月份 (01-12)
  • %d : 日 (01-31)
  • %H : 小时(00-23)
  • %M : 分钟(00-59)
  • %S : 秒(00-60)

编写 Dockerfile

FROM busybox
ADD date-html-generator.sh /bin/date-html-generator.sh
RUN chmod +x /bin/date-html-generator.sh
ENTRYPOINT /bin/date-html-generator.sh

生成 date-html-generator 镜像 docker build -t wangjunjian/date-htm

命令du

du - 估计文件空间使用量

    -s, --summarize display only a total for each argument
    -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)

查看当前文件夹所有文件占用的空间

du -sh
15G	.

查看当前文件夹下的一级目录和文件占用的空间

du -sh *
14G	ailab
178M	software
4.0K	test.txt
33M	tmp

NFS配置

Ubuntu

服务端

  • 安装服务端
sudo apt install nfs-kernel-server
  • 查看服务状态
sudo systemctl status nfs-server
  • 查看开启的NFS协议
sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
  • 配置访问的路径
sudo nano /etc/exports
/data/nfs        172.16.33.0/24(rw,sync,fsid=0,crossmnt,no_subtree_check)
  • 应用配置
sudo exportfs -ra
  • 查看当前应用
sudo exportfs -v
  • 重启服务
sudo systemctl restart nfs-server

客户端

  • 安装客户端
sudo apt install nfs-common
  • 查看NFS服务器导出列表
showmount -e 172.16.33.157
Export list for 172.16.33.157:
/data/nfs 172.16.33.0/24,172.16.128.164
  • 挂载NFS
sudo mount -t nfs 172.16.33.157:/ $(pwd)/nfs
  • 移除挂载
sudo umount $(pwd)/nfs

参考资料 如何在Ubuntu 18.04上安装和配置NFS服务器 ubuntu18.

磁盘:分区-格式化-挂载

分区

列出块设备信息

lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0    7:0    0 71.3M  1 loop /snap/lxd/18772
loop1    7:1    0 55.4M  1 loop /snap/core18/1944
loop2    7:2    0 31.1M  1 loop /snap/snapd/10492
loop3    7:3    0 31.1M  1 loop /snap/snapd/10707
loop4    7:4    0 71.2M  1 loop /snap/lxd/18674
loop5    7:5    0 55.4M  1 loop /snap/core18/1932
sda      8:0    1  558G  0 disk 
├─sda1   8:1    1    1M  0 part 
└─sda2   8:2    1  558G  0 part /
sdb      8:16   1  2.2T  0 disk 

创建分区 sudo fdisk /dev/sdb Welcome to fdisk (util-linux 2.34). Changes will remain in memory only, until you decide to write them. Be careful before using the write command.