顺带说一下 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
apiVersion: v1
kind: NameSpace
metadata:name: myns
--------------------
apiVersion: v1
kind: Pod
metadata:name: busyboxnamespace: myns
spec:containers:- image: busyboxcommand:- ls name: busybox
如上,我们创建了一个名为 myns的命名空间,创建了一个 pod ,指定命名空间为 myns
我们可以这样查看命名空间:
kubectl get namesapces
我们也可以直接通过命令创建命名空间
kubectl create namespace myns
创建一个 pod ,指定命名空间为 myns , 创建后,我们可以查看指定 命名空间下的 pod 资源
kubectl get pods --namespace=命名空间
今天就到这里,学习所得,若有偏差,还请斧正
欢迎点赞,关注,收藏
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是阿兵云原生,欢迎点赞关注收藏,下次见~
更多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774