Kubernetes 使用 Freenas 作为后端的外部存储供给器教程
项目介绍
Freenas-Provisioner 是一个专为 Kubernetes 设计的外部存储供给器,它能够自动响应 Kubernetes 集群中的 PersistentVolumeClaim(PVC)请求。当在集群中创建一个新的 PVC 时,该供给器会通过调用配置好的 Freenas API 创建相应的数据集(dataset)和 NFS 共享,使之能够被 PVC 使用。当 PVC 或者与其关联的持久卷被删除时,Freenas-Provisioner 自动清理对应的 Freenas 上的数据集和共享,实现资源的生命周期管理。
项目快速启动
步骤一:准备环境
确保你有一个运行着 Kubernetes 的环境,并且已经安装了kubectl命令行工具。
步骤二:部署 Freenas-Provisioner
首先,从 GitHub 下载部署文件:
git clone https://github.com/nmaupu/freenas-provisioner.git
cd freenas-provisioner/deploy
接下来,你需要创建一个秘钥(Secret),包含你的Freenas服务器的认证信息和主机地址。假设你已经准备好了这些信息,并进行了Base64编码(以username
和password
为例):
编辑 secret.yaml
文件,填入相应的密钥值:
apiVersion: v1
kind: Secret
metadata:
name: freenas-nfs-secret
type: Opaque
data:
username: YWRtaW4= # Base64 encoded 'admin'
password: Mypassword== # 这里应该是正确的Base64编码密码
hostname: aW5zdGFuY2Uucm9vdA== # Base64 encoded 'instance.root'
然后应用这个Secret到你的Kubernetes集群:
kubectl apply -f secret.yaml
紧接着部署Provisioner自身:
kubectl apply -f rbac.yaml
kubectl apply -f deployment.yaml
步骤三:创建StorageClass
创建一个指向刚刚设置的Secret的StorageClass:
kubectl apply -f class.yaml
应用案例和最佳实践
示例:创建并使用存储卷
创建一个PersistentVolumeClaim来申请存储:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: freenas-test-pvc
spec:
storageClassName: freenas-nfs
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Mi
将此PVC应用于测试Pod:
apiVersion: v1
kind: Pod
metadata:
name: freenas-test-pod
spec:
containers:
- name: freenas-test-pod
image: gcr.io/google_containers/busybox:1.24
command: ["/bin/sh"]
args: ["-c", "date >> /mnt/file.log && exit 0 || exit 1"]
volumeMounts:
- name: freenas-test-volume
mountPath: "/mnt"
restartPolicy: Never
volumes:
- name: freenas-test-volume
persistentVolumeClaim:
claimName: freenas-test-pvc
执行以下命令创建Pod并观察Freenas上的变化以及Pod的日志来确认是否成功挂载存储:
kubectl apply -f test-pod.yaml
典型生态项目
对于更高级的场景或特性,如ISCSI支持,可以参考另一个项目travisghansen/freenas-iscsi-provisioner,它提供了对ISCSI协议的支持,包括快照、容量调整等功能。这扩展了与Freenas交互的能力,适合需要块存储的应用场景。
以上步骤提供了一个基本框架,实际部署时可能还需要根据具体环境进行调整。记得始终查看最新的官方文档或项目仓库以获取最新指导。