前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >volume 、namespace

volume 、namespace

作者头像
阿兵云原生
发布2023-09-01 08:40:17
1730
发布2023-09-01 08:40:17
举报
文章被收录于专栏:golang云原生new

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

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 我们可以这样写

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

再来看看 hostPath 类型

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

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

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

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

使用 hostPath 我们可以这样写

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

namespace

namespace 即 命名空间

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

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

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

  • default

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

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

  • kube-system

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

  • kube-public

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

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

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

  • 创建一个 NameSpace
代码语言:javascript
复制
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-20211128120410202

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

kubectl create namespace myns

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

kubectl get pods --namespace=命名空间

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿兵云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • volume 是什么
    • 简单看一下 emptyDir 卷类型
      • 再来看看 hostPath 类型
      • namespace
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档