• (2022版)一套教程搞定k8s安装到实战 | Volumes


    视频来源:B站《(2022版)最新、最全、最详细的KubernetesK8s)教程,从K8s安装到实战一套搞定》

    一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

    附上汇总贴:(2022版)一套教程搞定k8s安装到实战 | 汇总_COCOgsta的博客-CSDN博客


    Container(容器)中的磁盘文件是短暂的,当容器崩溃时,kubelet会重新启动容器,但最初的文件将丢失,Container会以最干净的状态启动。另外,当一个Pod运行多个Container时,各个容器可能需要共享一些文件。Kubernetes Volume可以解决这两个问题。

    一些需要持久化数据的程序才会用到Volumes,或者一些需要共享数据的容器需要volumes。

    Redis-Cluster:nodes.conf

    日志收集的需求:需要在应用程序的容器连加一个sidecar,这个容器是一个收集日志的容器,比如filebeat,它通过volumes共享应用程序的日志文件目录。

    Volumes:官方文档kubernetes.io/docs/concep…

    1. 背景

    Docker也有卷的概念,但是在Docker中卷只是磁盘上火另一个Container中的目录,其生命周期不受管理。虽然目前Docker已经提供了卷驱动程序,但是功能非常有限,例如从Dokcer 1.7版本开始,每个Container只允许一个卷驱动程序,并且无法将参数传递给卷。

    另一方面,Kubernetes卷具有明确的生命周期,与使用它的Pod相同。因此,在Kubernetes中的卷可以比Pod中运行的任何Container都长,并且可以在Container重启或者销毁之后保留数据。Kubernetes支持多种类型的卷,Pod可以同时使用任意数量的卷。

    从本质上讲,卷只是一个目录,可能包含一些数据,Pod中的容器可以访问它。要使用卷Pod需要通过.spec.volumes字段指定为Pod提供的卷,以及使用.spec.containers.volumeMounts字段指定卷挂载的目录。从容器中的进程可以看到由Docker镜像和卷组成的文件系统视图,卷无法挂载其他卷或具有到其他卷的硬链接,Pod中的每个Container必须独立指定每个卷的挂载位置。

    1. 卷的类型

    Kubernetes支持的卷的类型有很多,以下为常用的卷。

    (1)awsElasticBlockStore(EBS)

    awsElasticBlockStore卷挂载一个AWS EBS Volume到Pod中,与emptyDir卷不同的是,当移除Pod时EBS卷的内容不会被删除,这意味着可以将数据预先放置在EBS卷中,并且可以在Pod之间切换该数据。

    使用awsElasticBlockStore卷的限制:

    • 运行Pod的节点必须是AWS EC2实例。
    • AWS EC2实例需要和EBS卷位于同一区域和可用区域。
    • EBS仅支持挂载卷的单个EC2实例。

    在将Pod与EBS卷一起使用之前,需要先创建EBS卷,确保该卷的区域与集群的区域匹配,并检查size和EBS卷类型是否合理:

    1. aws ec2 create-volume --availability-zone=eu-west-1a --size=10 --volume-type=gp2
    2. 复制代码

    emptyDir

    和上述volume不同的是,如果删除Pod,emptyDir卷中的数据也将被删除,一般emptyDir卷用于Pod中的不同Container共享数据。它可以被挂载到相同或不同的路径上。

    默认情况下,emptyDir卷支持节点上的任何介质,可能是SSD、磁盘或网络存储,具体取决于自身的环境。可以将emptyDir.medium字段设置为Memory,让Kubernetes使用tmpfs(内存支持的文件系统),虽然tmpfs非常快,但是tmpfs在节点重启时,数据同样会被清除,并且设置的大小会被计入到Container的内存限制当中。

    使用emptyDir卷的示例,直接指定emptyDir为{}即可:

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: test-pd
    5. spec:
    6. containers:
    7. - image: k8s.gcr.io/test-webserver
    8. name: test-container
    9. volumeMounts:
    10. - mountPath: /cache
    11. name: cache-volume
    12. volumes:
    13. - name: cache-volume
    14. emptyDir: {}
    15. 复制代码

    hostPath

    hostPath卷可将节点上的文件或目录挂载到Pod上,用于Pod自定义日志输出或访问Docker内部的容器等。

    使用hostPath卷的示例。将主机的/data目录挂载到Pod的/test-pd目录:

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: test-pd
    5. spec:
    6. containers:
    7. - image: k8s.gcr.io/test-webserver
    8. name: test-container
    9. volumeMounts:
    10. - mountPath: /test-pd
    11. name: test-volume
    12. volumes:
    13. - name: test-volume
    14. hostPath:
    15. # directory location on host
    16. path: /data
    17. # this field is optional
    18. type: Directory
    19. 复制代码

    hostPath卷常用的type(类型)如下:

    • type为空字符串:默认选项,意味着挂载hostPath卷之前不会执行任何检查。
    • DirectoryOrCreate:如果给定的path不存在任何东西,那么将根据需要创建一个权限为0755的空目录,和Kubelet具有相同的组和权限。
    • Directory:目录必须存在于给定的路径下。
    • FileOrCreate:如果给定的路径不存储任何内容,则会根据需要创建一个空文件,权限设置为0644,和Kubelet具有相同的组和所有权。
    • File:文件,必须存在于给定路径中。
    • Socket:UNIX套接字,必须存在于给定路径中。
    • CharDevice:字符设备,必须存在于给定路径中。
    • BlockDevice:块设备,必须存在于给定路径中。

    NFS

    Exporter配置

    /data/nfs/ 192.168.0.24(rw,sync,no_subtree_check,no_root_squash)


    作者:热爱编程的通信人
    链接:https://juejin.cn/post/7134535698094227492/
    来源:稀土掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    万物皆可集成系列:低代码对接阿里物流API实现快递跟踪
    sequencer和sequence
    【AOP系列】AOP场景实践
    Survey of intrusion detection systems:techniques, datasets and challenges
    mybatis各阶段的详解
    现代企业架构框架-应用架构
    解决pip安装包后但是Pycharm检测不到
    0.96OLED 4针IIC STM32-HAL库版本(附源码)
    python的安装教程
    浅谈Serverless之uniCloud
  • 原文地址:https://blog.csdn.net/guolianggsta/article/details/126462387