volume 、namespace

作者: 阿兵云原生 | 来源:发表于2023-06-28 22:58 被阅读0次

    顺带说一下 volume 和 namespace ,咱们就开始分享一下 service 是什么

    [图片上传失败...(image-ad6de9-1688050707794)]

    volume 是什么

    还记得 docker 的 volume 吗,是一个数据卷

    在 K8S 中,volume 是 pod 中能够被多个容器访问的共享目录 ,实际上和 docker 是一样的

    volume 是被定义在 pod 上面的,因此,volume 的生命周期和 pod 是相同的

    volume 会被该 pod 中的多个容器挂载到具体的文件目录下面,若某个容器挂掉了,是不会影响 volume 的,也就是说 volume 中的数据是不会丢失的

    我们可以使用 volume:

    • 在 pod 中指定 volume 的类型 和内容,可以使用spec.volumes字段
    • 需要将 volume 映射到容器中,我们可以使用 spec.containers.volumeMounts字段

    上面有说到 volume 的类型,这就可多了 , K8S 中支持的 volume 类型有:

    • awsElasticBlockStore
    • azureFile
    • cephfs
    • emptyDir
    • hostPath
    • configMap
    • fc (光纤通道)
    • 。。 。 等等

    可以查看这上面的文档,每一种 卷类型都有解释到 点我开始卷一下

    简单看一下 emptyDir 卷类型

    emptyDir 见名知意,emptyDir 在创建 pod 的时候就会被创建,而且是个空的 , 只要 pod 在运行,这个卷就会一直存在

    但是,当 pod 从节点上删除的时候,这个 emptyDir 也会被随之永久删除了

    使用 emptyDir 我们可以这样写

    [图片上传失败...(image-2c4bee-1688050707794)]
    

    emptyDir 卷存储是依赖于我们节点的存储介质的,例如,磁盘,SSD 或者网络存储等等

    再来看看 hostPath 类型

    hostPath 类型的卷,能够让对应的容器访问当当前宿主机上指定的目录

    对于 hostPath 类型,我们尽可能的少用,官方有一个这样的警告

    [图片上传失败...(image-50a557-1688050707794)]

    例如,我们需要运行一个访问一个 docker 系统目录的容器,那么我们可以使用 /var/lib/docker 目录作为一个 hostPath 类型的卷

    但是,只要这个 pod 离开宿主机的话,hostPath 中的数据不会被永久删除,但是数据也不会跟着 pod 迁移到别的宿主机上面

    使用 hostPath 我们可以这样写

    [图片上传失败...(image-a281b5-1688050707794)]

    关于 卷 的,我们后续可以将高阶用法,以及具体的原理可以分享一波

    namespace

    namespace 即 命名空间

    命名空间在多数情况下是用于实现多用户的资源隔离的,通过集群内部的资源对象分配到不同的 命名空间中,形成逻辑上的分组,

    这样可以让不同的组在共享使用整个集群的资源的情况下,还能够被分组管理

    在 K8S 初始状态下,K8S 会有 3 个命名空间

    • default

    无名字空间对象的默认名字空间

    在 K8S 中,集群启动后,会创建一个 default 的命名空间
    如果我们创建的 rc ,service,pod,不指定命名空间的话,那么这些资源都将被系统创建为 default 的命名空间中

    • kube-system

    K8S 系统创建的对象的名字空间

    • kube-public

    是 K8S 自动创建且被所有用户可读的名字空间

    关于命名空间共享集群我们可以查看这里: 点我 进入 命名空间

    我们可以这样使用命名空间:

    • 创建一个 NameSpace
    apiVersion: v1
    kind: NameSpace
    metadata:
      name: myns
    --------------------
    apiVersion: v1
    kind: Pod
    metadata:
      name: busybox
      namespace: myns
    spec:
     containers:
     - image: busybox
       command:
       - ls 
       name: busybox
    

    如上,我们创建了一个名为 myns的命名空间,创建了一个 pod ,指定命名空间为 myns

    我们可以这样查看命名空间:

    kubectl get namesapces

    [图片上传失败...(image-ed9d06-1688050707794)]

    我们也可以直接通过命令创建命名空间

    kubectl create namespace myns

    [图片上传失败...(image-2c3916-1688050707794)]

    创建一个 pod ,指定命名空间为 myns , 创建后,我们可以查看指定 命名空间下的 pod 资源

    kubectl get pods --namespace=命名空间

    [图片上传失败...(image-494c45-1688050707794)]

    今天就到这里,学习所得,若有偏差,还请斧正

    欢迎点赞,关注,收藏

    朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

    [图片上传失败...(image-844681-1688050707794)]

    好了,本次就到这里

    技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

    我是阿兵云原生,欢迎点赞关注收藏,下次见~

    相关文章

      网友评论

        本文标题:volume 、namespace

        本文链接:https://www.haomeiwen.com/subject/xekaydtx.html