Skip to content

No.5 在 K8s 环境中使用 JuiceFS

在本视频中,我们将详细介绍如何在 Kubernetes (K8s) 环境中安装、配置和使用 JuiceFS 文件系统。JuiceFS 是一个云原生分布式文件系统,提供 CSI Driver,非常适合在 K8s 环境中部署使用。

查看 K8s 节点信息

在安装 JuiceFS 之前,首先需要确认 Kubernetes 集群的节点状态。可以使用以下命令查看集群中的所有节点:

bash
kubectl get nodes

该命令会列出所有节点及其状态,确保所有节点均为 Ready 状态,以便后续部署 JuiceFS CSI Driver。

安装 JuiceFS CSI Driver

shell
# 添加 JuiceFS 仓库
helm repo add juicefs https://juicedata.github.io/charts/

# 更新仓库
helm repo update

# 创建并进入配置文件目录
mkdir ~/myjuicefs && cd ~/myjuicefs

# 创建配置文件
touch myvalues.yaml

# 安装 CSI Driver
helm install juicefs-csi-driver juicefs/juicefs-csi-driver -n kube-system -f myvalues.yaml

# 检查 CSI Driver 状态
kubectl get pods -n kube-system -l app.kubernetes.io/name=juicefs-csi-driver

使用 JuiceFS CSI Driver Dashboard

JuiceFS CSI Driver 内置了一个 Dashboard,远程访问时可以通过端口转发的方式访问。

shell
kubectl port-forward -n kube-system svc/juicefs-csi-dashboard 8088:8088

在浏览器中访问 http://localhost:8088 即可查看 JuiceFS CSI Driver 的 Dashboard。

使用 JuiceFS CSI Driver

创建 StorageClass

首先需要将 JuiceFS 文件系统相关的 URL、密码、秘钥等信息写入到一个 Secret 类型的配置文件中。可以基于文件系统名称创建配置文件,例如 jfs1-secret.yaml

yaml
apiVersion: v1
kind: Secret
metadata:
  name: jfs1-secret
  namespace: default
  labels:
    # 增加该标签以启用认证信息校验
    juicefs.com/validate-secret: "true"
type: Opaque
stringData:
  name: filesystem-name
  metaurl: redis://:password@x.x.x.x/1
  storage: minio
  bucket: https://x.x.x.x/bucket-name
  access-key: xxxx
  secret-key: xxxx

将 Secret 写入到 Kubernetes 集群中:

bash
kubectl apply -f jfs1-secret.yaml

接下来,创建一个 StorageClass 文件 jfs1-sc.yaml

yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: jfs1-sc
provisioner: csi.juicefs.com
reclaimPolicy: Retain
parameters:
  csi.storage.k8s.io/provisioner-secret-name: jfs1-secret
  csi.storage.k8s.io/provisioner-secret-namespace: default
  csi.storage.k8s.io/node-publish-secret-name: jfs1-secret
  csi.storage.k8s.io/node-publish-secret-namespace: default

将 StorageClass 写入到 Kubernetes 集群中:

bash
kubectl apply -f jfs1-sc.yaml

部署一个测试应用

接下来,创建一个 PersistentVolumeClaim (PVC) 和一个 Deployment 来测试 JuiceFS 的使用。以下是一个简单的 HTTPD 应用示例,文件名为 httpd.yaml

yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-httpd-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: jfs1-sc
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-httpd
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-httpd
  template:
    metadata:
      labels:
        app: my-httpd
    spec:
      containers:
      - name: httpd
        image: httpd:latest
        volumeMounts:
        - name: data
          mountPath: /usr/local/apache2/htdocs
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: my-httpd-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: my-httpd
  namespace: default
spec:
  selector:
    app: my-httpd
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

部署应用到 Kubernetes 集群中:

bash
kubectl apply -f httpd.yaml

查看应用监听的端口:

bash
kubectl get svc my-httpd -o wide

查看集群节点 IP 地址:

bash
kubectl get nodes -o wide

使用任一节点的 IP 地址,在浏览器中访问 http://<node-ip>:<port> 即可访问 HTTPD 服务。

常用 kubectl 命令

以下是一些常用的 kubectl 基础命令:

bash
# 查看所有命名空间
kubectl get namespaces

# 查看所有 Pod
kubectl get pods

# 查看指定命名空间下的 Pod
kubectl get pods -n <namespace>

# 查看所有 Service
kubectl get svc

# 查看指定资源的详细信息
kubectl describe <resource> <name>

# 查看集群中的所有部署
kubectl get deployments

# 查看指定 Deployment 的详细信息
kubectl describe deployment <deployment-name>

Helm 的基本使用方法

Helm 是 Kubernetes 的包管理工具,常用命令如下:

bash
# 查看 Helm 版本
helm version

# 添加 Helm 仓库
helm repo add <repo-name> <repo-url>

# 更新 Helm 仓库
helm repo update

# 搜索 Chart
helm search repo <chart-name>

# 安装 Chart
helm install <release-name> <repo-name>/<chart-name> [--namespace <namespace>]

# 升级 Chart
helm upgrade <release-name> <repo-name>/<chart-name>

# 卸载 Chart
helm uninstall <release-name> [--namespace <namespace>]

# 查看已安装的 Chart
helm list [--namespace <namespace>]

相关资源

视频地址