HOME

MicroK8s存储卷使用案例

介绍MicroK8s与存储卷

MicroK8s是一个轻量级的Kubernetes发行版,它为开发人员提供了一个本地测试、开发和快速部署集群的简便方法。它支持多种场景,包括容器化应用的运行、微服务架构的构建等。在实际使用过程中,持久化数据管理对于许多应用来说是必不可少的需求之一。

存储卷是Kubernetes中用来挂载到Pod中的目录或文件的功能模块,能够提供对容器内数据的持久化存储,并确保即使Pod被重新调度,这些数据也不会丢失。MicroK8s支持多种类型的存储卷,包括本地磁盘、NFS(网络文件系统)和CSI(容器存储接口),可以灵活地满足不同场景下的需求。

案例一:使用本地目录存储卷

假设我们正在开发一个需要持久化日志记录的应用程序。在这个场景中,我们可以利用MicroK8s中的本地目录存储卷来实现这一需求。

部署应用

首先,我们需要创建一个包含日志记录容器的部署文件 log-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: log-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: log-app
  template:
    metadata:
      labels:
        app: log-app
    spec:
      containers:
      - name: log-container
        image: busybox
        command: ["sh", "-c", "while true; do echo '$(date)'; sleep 2; done > /log/log.txt"]
        volumeMounts:
        - mountPath: /log
          name: local-storage
      volumes:
      - name: local-storage
        emptyDir:
          medium: Memory

然后,我们使用 microk8s.kubectl apply -f log-deployment.yaml 命令部署应用。这里我们使用了 emptyDir 类型的存储卷来存储日志文件。

查看数据

当我们查看Pod的日志输出时,会发现每秒都会有一个新的时间戳记录被写入到 /log/log.txt 文件中:

microk8s.kubectl get pods -o wide
microk8s.kubectl exec log-app-<pod-name> -- cat /log/log.txt

案例二:使用NFS存储卷

假设我们的应用需要访问一个共享文件系统中的数据,我们可以通过配置NFS存储卷来实现这一需求。

准备NFS服务器

首先确保有一个可用的NFS服务器,并将要共享的目录挂载到 nfs-exported。这里以本地机器为例:

sudo mkdir -p /mnt/nfs/exported && sudo chown nobody:nogroup /mnt/nfs/exported
sudo mount -t nfs <NFS-SERVER-IP>:/exported /mnt/nfs/exported

配置MicroK8s NFS提供者

然后,在MicroK8s中启用NFS存储类:

microk8s.enable storage
microk8s.kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/multi-tenancy/master/incubator/virtualcluster-operator/deploy/production/vco-production.yaml
microk8s.kubectl create ns storagecluster-system
microk8s.kubectl get pods --all-namespaces

部署应用

接下来,我们创建一个使用NFS存储卷的应用部署文件 nfs-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nfs-app
  template:
    metadata:
      labels:
        app: nfs-app
    spec:
      containers:
      - name: nfs-container
        image: busybox
        command: ["sh", "-c", "cat /nfs/data.txt"]
        volumeMounts:
        - mountPath: /data
          name: nfs-volume
      volumes:
      - name: nfs-volume
        persistentVolumeClaim:
##           claimName: nfs-pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

通过 microk8s.kubectl apply -f nfs-deployment.yaml 命令,我们将部署应用。这里我们使用了一个PVC(持久卷声明)来关联到NFS存储卷。

数据验证

最后,确保数据能够被正确地写入和读取:

echo "Hello, MicroK8s!" | microk8s.kubectl exec nfs-app-<pod-name> -- cat /data/data.txt

结论

以上两个案例展示了如何在MicroK8s中使用存储卷来实现持久化数据管理。无论是简单的本地目录还是复杂的NFS共享文件系统,MicroK8s都提供了强大的支持和灵活性。通过合理选择合适的存储解决方案,能够更好地满足不同应用的特定需求。