rancher-desktop with k3s 如何做基于hostpath的本地持久化?-灵析社区

雁过留痕

本地测试了一下,使用MacOS上的OrbStack模拟的k8s环境,实现应该和rancher-desktop差不多。 具体测试了一下,主要修改 1. 这里取消注释了 storageClassName ,指定了之后,后面的pve才能工作 apiVersion: v1 kind: PersistentVolume metadata: name: postgres-data-pv spec: capacity: storage: 10Gi # 根据实际需求设置存储容量 accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-path hostPath: path: "/Users/hy/Projects/kubernetes/sf/data" 2. 这里指定一下 volumeName apiVersion: apps/v1 kind: StatefulSet metadata: name: postgres-statefulset namespace: postgresd spec: replicas: 1 selector: matchLabels: app: postgres serviceName: postgres-serive template: ... volumeClaimTemplates: - metadata: name: postgres-data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 5Gi volumeName: postgres-data-pv 持久化正常: ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241002/ecb3f0e0764f37c4afe0f323ed47dff5.png) * * * 补充一下可能的原因,我猜测原因可能是两个k8s环境的storageClass实现不一样,看了一下用了local-path的storageClass默认就是会自动创建出pv。 这里OrbStack默认使用的也是rancher.io/local-path,所以直接就能复现一样的问题。 * * * OrbStack默认使用的是 local-path ,完整的yaml: # 定义一个命名空间 apiVersion: v1 kind: Namespace metadata: name: postgresd --- # 定义配置 apiVersion: v1 kind: ConfigMap metadata: name: postgres-config namespace: postgresd data: POSTGRES_DB: postgres MAX_CONNECTIONS: "10000" LOG_MIN_DURATION_STATEMENT: "500ms" --- # 定义存储卷 apiVersion: v1 kind: PersistentVolume metadata: name: postgres-data-pv spec: capacity: storage: 10Gi # 根据实际需求设置存储容量 accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-path hostPath: path: "/Users/hy/Projects/kubernetes/sf/data" --- # 定义用户名、密码等敏感信息 apiVersion: v1 kind: Secret metadata: name: postgres-secret namespace: postgresd type: Opaque data: postgres-user: cG9zdGdyZXM= # Base64编码的用户名,这里是"postgres" postgres-password: U2VjdXJlUGFzc3dvcmQ= # Base64编码的密码,这里是"SecurePassword" --- apiVersion: apps/v1 kind: StatefulSet metadata: name: postgres-statefulset namespace: postgresd spec: replicas: 1 selector: matchLabels: app: postgres serviceName: postgres-serive template: metadata: labels: app: postgres spec: containers: - name: postgresd image: postgres:16.2-alpine3.19 ports: - containerPort: 5432 name: postgresd-port env: - name: POSTGRES_USER valueFrom: secretKeyRef: name: postgres-secret key: postgres-user - name: POSTGRES_PASSWORD valueFrom: secretKeyRef: name: postgres-secret key: postgres-password - name: POSTGRES_DB valueFrom: configMapKeyRef: name: postgres-config key: POSTGRES_DB volumeMounts: - name: postgres-data mountPath: /var/lib/postgresql/data subPath: data volumeClaimTemplates: - metadata: name: postgres-data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 5Gi volumeName: postgres-data-pv # storageClassName: local-path --- # 定义将5432端口映射到kind cluster 5432端口的service apiVersion: v1 kind: Service metadata: namespace: postgresd name: postgres-service spec: selector: app: postgres ports: - port: 5432 targetPort: 5432 type: ClusterIP

阅读量:1

点赞量:0

问AI