nacos 使用 NFS 持久化安装部署
部署 NFS
在 NFS Server 上执行以下命令:
sudo apt update sudo apt install nfs-kernel-server -y
|
创建用于存放 Nacos 数据的目录
sudo mkdir -p /data/nfs/nacos
|
调整权限,生产环境建议更精细的权限控制
sudo chown nobody:nogroup /data/nfs/nacos sudo chmod 777 /data/nfs/nacos
|
配置 NFS 服务
sudo nano /etc/exports
/data/nfs/nacos 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
|
启动服务:
sudo exportfs -a sudo systemctl restart nfs-kernel-server
|
在 Kubernetes 中配置 NFS 客户端
为了让 K8S 节点能挂载 NFS,所有 Worker 节点都必须安装客户端工具:
sudo apt install nfs-common -y
|
部署 NFS 动态存储类 (StorageClass)
手动创建 PV 非常麻烦,在 K8S 中我们通常使用 nfs-subdir-external-provisioner 来实现自动创建 PV。
使用 Helm 快速部署 (推荐)
这是目前最简单、最标准的方式,添加仓库
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
|
安装 nfs-provisioner 作为 存储 Provisioner
helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --set nfs.server=192.168.1.100 \ --set nfs.path=/data/nfs/nacos \ --set storageClass.name=nfs-storage \ --set storageClass.defaultClass=true
|
kubectl get sc 验证 StorageClass
Nacos 关联 NFS 存储
现在可以在 Nacos 的部署配置中使用这个 nfs-storage 的 StorageClass 了。参考以下资源清单部署单节点的 Nacos 完整服务,包括 Nginx Ingress 以及鉴权
nacos-single-node.yamlapiVersion: v1 kind: Namespace metadata: name: nacos --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nacos-pvc namespace: nacos spec: accessModes: - ReadWriteMany storageClassName: nfs-storage resources: requests: storage: 5Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: nacos namespace: nacos spec: replicas: 1 selector: matchLabels: app: nacos template: metadata: labels: app: nacos spec: containers: - name: nacos image: nacos/nacos-server:v2.2.3 ports: - containerPort: 8848 env: - name: MODE value: "standalone" - name: NACOS_AUTH_ENABLE value: "true" - name: NACOS_AUTH_TOKEN value: "XDoArVHBA1o8DDsyBchWLGXNfWYibjvEOa7qfroNmZ4=" - name: NACOS_AUTH_IDENTITY_KEY value: "admin" - name: NACOS_AUTH_IDENTITY_VALUE value: "admin" - name: JVM_XMS value: "512m" - name: JVM_XMX value: "512m" volumeMounts: - name: nacos-storage mountPath: /home/nacos/data - name: nacos-storage mountPath: /home/nacos/logs volumes: - name: nacos-storage persistentVolumeClaim: claimName: nacos-pvc --- apiVersion: v1 kind: Service metadata: name: nacos namespace: nacos spec: selector: app: nacos ports: - name: http port: 8848 targetPort: 8848 type: ClusterIP --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nacos namespace: nacos annotations: nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/whitelist-source-range: "54.251.236.229/24,206.119.115.76/24" spec: ingressClassName: nginx rules: - host: nacos.example.click http: paths: - path: / pathType: Prefix backend: service: name: nacos port: number: 8848
|
部署完成后通过 nacos.example.click 登录后台,初始默认密码为 nacos/nacos
nacos 使用 Mysql 持久化安装部署
要使用 Mysql 存储数据,只需修改资源清单为以下内容即可:
apiVersion: v1 kind: Namespace metadata: name: nacos --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nacos-pvc namespace: nacos spec: accessModes: - ReadWriteMany storageClassName: nfs-storage resources: requests: storage: 5Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: nacos namespace: nacos spec: replicas: 1 selector: matchLabels: app: nacos template: metadata: labels: app: nacos spec: containers: - name: nacos image: nacos/nacos-server:v2.2.3 ports: - containerPort: 8848 env: - name: MODE value: "standalone"
- name: SPRING_DATASOURCE_PLATFORM value: "mysql"
- name: MYSQL_SERVICE_HOST value: "<MYSQL_SERVICE_HOST>" - name: MYSQL_SERVICE_PORT value: "3306" - name: MYSQL_SERVICE_DB_NAME value: "<MYSQL_SERVICE_DB_NAME>" - name: MYSQL_SERVICE_USER value: "<MYSQL_SERVICE_USER>" - name: MYSQL_SERVICE_PASSWORD value: "<MYSQL_SERVICE_PASSWORD>"
- name: MYSQL_SERVICE_DB_PARAM value: "characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true"
- name: NACOS_AUTH_ENABLE value: "true" - name: NACOS_AUTH_TOKEN value: "XDoArVHBA1o8DDsyBchWLGXNfWYibjvEOa7qfroNmZ4=" - name: NACOS_AUTH_IDENTITY_KEY value: "admin" - name: NACOS_AUTH_IDENTITY_VALUE value: "admin" - name: JVM_XMS value: "512m" - name: JVM_XMX value: "512m" volumeMounts: - name: nacos-storage mountPath: /home/nacos/data - name: nacos-storage mountPath: /home/nacos/logs volumes: - name: nacos-storage persistentVolumeClaim: claimName: nacos-pvc --- apiVersion: v1 kind: Service metadata: name: nacos namespace: nacos spec: selector: app: nacos ports: - name: http port: 8848 targetPort: 8848 - name: rpc port: 9848 targetPort: 9848 type: ClusterIP --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nacos namespace: nacos annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: ingressClassName: nginx rules: - host: nacos.example.click http: paths: - path: / pathType: Prefix backend: service: name: nacos port: number: 8848
|