潇湘夜雨移动版

主页 > 系统 > 云计算与云原生 >

k8s存储卷与数据持久化(5)

 
4、节点存储卷 hostPath
 
hostPath 类型的存储卷是指将工作节点上某文件系统的目录或文件挂载于 Pod 中的一种
存储卷,它可独立于 Pod 资源的生命周期,因而具有持久性 但它是 作节点本地的存储
间,仅适用于特定情况下的存储卷使用需求 ,例如,将工作节点上的文件系统关联为 Pod
的存储卷,从而使得容器访问节点文件系统上的数据 这一点在运行有管理任务的系统级
Pod 资源需要访问节点上的文件时尤为有用。
 
配置 hostPath 存储卷的嵌套宇段共有两个:一个是用于指定工作节点上的目录路径的
必选字段 path ;另一个是指定存储卷类型的 type ,它支持使用的卷类型包含如下几种
 
DirectoryOrCreate :指定的路径不存时自动将其创建为权限是 0755 的空目录,属主
属组均为 kubelet
Directory :必须存在的目录路径
FileOrCreate :指定的路径不存时自动将其创建为权限是 0644 文件,属主和属组
同是 kubelet
File :必须存在的文件路径
Socket :必须存在的 Socket 件路径
CharDevice :必须存在的字符设备文件路径
BlockDevice :必须存在的块设备文件路径
 
 
下面是定义在 vol-hos ath yaml 置文件中的 Pod 源,它运行着日志收集代理应用
filebeat ,负责收集工作节点及容器相关的日志信息发往 Redis 务器,它使用了三个 hostPath
类型的存储卷:
 
[root@zfb-jyhpt-bgcsjyh1 k8s]# cat vol-hostpath-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: vol-hostpath-pod
spec:
  containers:
  - name: filebeat
    image: ikubernetes/filebeat:5.6.7-alpine
    env:
    - name: REDIS_HOST
      value: redis.ilinux.io:6379
    - name: LOG_LEVEL
      value: info
    volumeMounts:
    - name: varlog
      mountPath: /var/log
    - name: socket
      mountPath: /var/run/dockersock
    - name: varlibdockercontainers
      mountPath: /var/lib/docker/containers
      readOnly: true
  terminationGracePeriodSeconds: 30
  volumes:
  - name: varlog
    hostPath:
      path: /var/log
  - name: varlibdockercontainers
    hostPath:
      path: /var/lib/docker/containers
  - name: socket
    hostPath:
      path: /var/run/docker.sock
 
[root@zfb-jyhpt-bgcsjyh1 k8s]# kubectl apply -f vol-hostpath-pod.yaml
[root@zfb-jyhpt-bgcsjyh1 k8s]# kubectl get pod vol-hostpath-pod -o wide
NAME               READY   STATUS    RESTARTS   AGE   IP            NODE          NOMINATED NODE   READINESS GATES
vol-hostpath-pod   1/1     Running   0          57s   10.244.4.12   172.19.33.2   <none>           <none>
 
[root@zfb-jyhpt-bgcsjyh1 k8s]# kubectl logs -f vol-hostpath-pod
2020/09/24 14:15:23.716616 tcp.go:26: WARN DNS lookup failure "redis.ilinux.io": lookup redis.ilinux.io on 10.96.0.10:53: no such host
2020/09/24 14:15:23.716639 single.go:140: ERR Connecting error publishing events (retrying): lookup redis.ilinux.io on 10.96.0.10:53: no such host
 
Pod 资源通常受控于 daemonset 类型的 Pod 控制器,它运行于集群中的每个工作
之上 ,负责收集工作节点上系统 的相关数据,因此使用 hostPath 存储卷也是理所应当
读者在创建上述 Pod 资源时,如果有可用的 Redis 服务器,则可通过环境变量 REDIS 
HOST 传递 Pod 资源,待其 Ready 之后即可通过 Redis 务器查看到由其发送的日志信息 (责任编辑:liangzh)