Appearance
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>]