【k8s】存储

@


写在前面

  • 相关博文
  • 个人博客首页
  • 免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将完全由用户自行承担,本人不承担任何法律责任。

k8s 存储

卷(Volume)

  • 临时卷

    • emptyDir
    • confiMap
    • secret
  • 持久卷

    • 本地存储 hostPath local
    • 网络存储 nfs
    • 分布式存储
  • 映射卷

    • producted 多个卷映射到同一个目录上

创建持久卷(PV)

  • 静态创建
    • 管理员预先手动创建
    • 手动创建麻烦、不够灵活(local卷不支持动态创建,必须手动创建PV)
    • 资源浪费(例如一个PVC可能匹配到比声明容量大的卷)
    • 对自动化工具不够友好
  • 动态创建
    • 根据用户请求按需创建持久卷,在用户请求时自动创建
    • 动态创建需要使用存储类(StorageClass)
    • 用户需要在持久卷声明(PVC)中指定存储类来自动创建声明中的卷。
    • 如果没有指定存储类,使用集群中默认的存储类。

pv & pvc

pv 持久卷
pvc 持久卷声明
image


临时卷 configmap 使用

apiVersion: v1
kind: ConfigMap
metadata:
  name: v-mysql-config
data:
 mysql.cnf: |
    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    init-connect='SET NAMES utf8mb4'

    [client]
    default-character-set=utf8mb4

    [mysql]
    default-character-set=utf8mb4
---
apiVersion: v1
kind: Pod
metadata:
  name: mysql-1
spec:
  containers:
  - name: mysql
    image: mysql:latest
    volumeMounts:
      - mountPath: /var/lib/mysql
        name: conf-volume

        readOnly: true
  volumes:
  - name: conf-volume
    configMap:
      name: v-mysql-config

临时卷 secret

apiVersion: v1
kind: Secret
metadata:
  name: mysql-password
type: Opaque
data:
  PASSWORD: MTIzNDU2Cg==
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: v-mysql-config
data:
 mysql.cnf: |
    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    init-connect='SET NAMES utf8mb4'

    [client]
    default-character-set=utf8mb4

    [mysql]
    default-character-set=utf8mb4
---
apiVersion: v1
kind: Pod
metadata:
  name: mysql-1
spec:
  containers:
  - name: mysql
    image: mysql:latest
    env:
      - name: MYSQL_ROOT_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysql-password
            key: PASSWORD
            optional: false # 此值为默认值;表示secret已经存在了
    volumeMounts:
      - mountPath: /etc/mysql/conf.d
        name: conf-volume
        readOnly: true
      - mountPath: /var/lib/mysql
        name: data-volume
  volumes:
  - name: conf-volume
    configMap:
      name: v-mysql-config
  - name: data-volume
    hostPath:
      # directory location on host
      path: /home/mysql/data
      # this field is optional
      type: DirectoryOrCreate


动态创建pvc

  • local-path的存储类(StorageClass)
    • 它支持动态创建基于hostPath或local的持久卷。
    • 创建PVC后,会自动创建PV,不需要再去手动的创建PV。
    • 删除PVC,PV也会被自动删除

待定。。。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-path-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-path
  resources:
    requests:
      storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod
spec:
  containers:
    - name: mysql
      image: mysql:latest
      env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
      ports:
        - containerPort: 3306
      volumeMounts:
        - mountPath: /var/lib/mysql #容器中的目录
          name: local-mysql-data
  volumes:
    - name: local-mysql-data
      persistentVolumeClaim:
        claimName: local-path-pvc

参考资料


posted @ 2023-11-21 11:07  Nones  阅读(6)  评论(0编辑  收藏  举报