• 在 Windows 10 | Docker Desktop | Kubernetes 环境 使用 hostPath / local 为 POD 配置本机目录


    1. 进入 wsl
    # 以下目录根据需要创建,不限制位置
    mkdir /data/nginx
    # 以下目录必须在 /mnt/wsl 中创建
    mkdir /mnt/wsl/nginx
    # 链接目录
    sudo mount --bind /data/nginx /mnt/wsl/nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 配置 host-path-test POD
    # kubectl create -f host-path-test.yaml
    # kubectl delete -f host-path-test.yaml
    
    ---
    kind: Pod
    apiVersion: v1
    metadata:
      namespace: arno
      name: host-path-test
    spec:
      containers:
        - name: host-path-test-container
          image: nginx:1.23.1
          ports:
            - containerPort: 80
              name: nginx
          volumeMounts:
            - mountPath: /data
              name: data
      volumes:
        - name: data
          hostPath:
            # 必须以 /run/desktop/mnt/host 开头
            # /run/desktop/mnt/host/wsl/nginx 对应上面创建的 /mnt/wsl/nginx
            path: /run/desktop/mnt/host/wsl/nginx
            type: Directory
      nodeSelector:
        kubernetes.io/hostname: docker-desktop
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    1. 部署 host-path-test POD
    echo test > /data/nginx/index.html
    
    # 创建 POD
    kubectl create -f host-path-test.yaml
    DOCKER_ID=`docker ps -q -f name=host-path-test`
    docker exec -it ${DOCKER_ID} ls -lah /data
    docker exec -it ${DOCKER_ID} cat /data/index.html
    
    # 删除 POD
    kubectl delete -f host-path-test.yaml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 配置 local-test SC/PV/PVC/POD 文件
    # kubectl create -f local-test.yaml
    # kubectl delete -f local-test.yaml
    
    ---
    # 定义 local-storage 存储类
    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      namespace: arno
      name: local-storage
    provisioner: kubernetes.io/no-provisioner
    volumeBindingMode: WaitForFirstConsumer
    
    ---
    # 创建 data 静态卷
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      namespace: arno
      name: data
    spec:
      capacity:
        storage: 50Gi
      volumeMode: Filesystem
      accessModes:
      - ReadWriteOnce
      persistentVolumeReclaimPolicy: Delete
      storageClassName: local-storage
      local:
        # 必须以 /run/desktop/mnt/host 开头
        # /run/desktop/mnt/host/wsl/nginx 对应上面创建的 /mnt/wsl/nginx
        path: /run/desktop/mnt/host/wsl/nginx
      nodeAffinity:
        required:
          # 将 静态卷 固定在 docker-desktop 节点
          nodeSelectorTerms:
          - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - docker-desktop
    
    ---
    # 创建 nginx-pvc 申领
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      namespace: arno
      name: nginx-pvc
    spec:
      storageClassName: local-storage
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
    
    ---
    # 创建 local-test POD
    kind: Pod
    apiVersion: v1
    metadata:
      namespace: arno
      name: local-test
    spec:
      containers:
        - name: local-test-container
          image: nginx:1.23.1
          ports:
            - containerPort: 80
              name: nginx
          volumeMounts:
            - mountPath: /data
              name: data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: nginx-pvc
      nodeSelector:
        kubernetes.io/hostname: docker-desktop
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    1. 部署 local-test local-test SC/PV/PVC/POD
    echo test2 > /data/nginx/index2.html
    
    # 创建 SC/PV/PVC/POD
    kubectl create -f local-test.yaml
    kubectl get pv -n arno
    kubectl get pvc -n arno
    DOCKER_ID=`docker ps -q -f name=local-test`
    docker exec -it ${DOCKER_ID} ls -lah /data
    docker exec -it ${DOCKER_ID} cat /data/index2.html
    
    # 删除 SC/PV/PVC/POD
    kubectl delete -f local-test.yaml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    1. 参考:
      1. Unable to mount volume using hostPath
      2. #5325 (comment)
      3. Kubernetes Volumes not correctly mounted with WSL2

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    迎访问我的博客 原文 天天成长 - 在 Windows 10 | Docker Desktop | Kubernetes 环境 使用 hostPath / local 为 POD 配置本机目录

  • 相关阅读:
    zookeeper的配置
    数据在内存中的存储(1)
    深圳-海岸城购物中心数据分析
    Monaco Editor 的基本用法
    镜像的基本命令(docker)
    程序员的领域壁垒——时间片
    [Linux Review-2] Linux OS fundamental #102
    【SOLIDWORKS学习笔记】制作手机支架
    跨境电商商城源码(多语言多商户进出口电商平台)
    虹科分享 | 解析数据加密,保护你的数据安全
  • 原文地址:https://blog.csdn.net/hawkjin/article/details/126676767