[云原生专题-29]:K8S - 核心概念 - 名字空间/命名空间概念详解与主要操作案例

网友投稿 314 2022-10-21

[云原生专题-29]:K8S - 核心概念 - 名字空间/命名空间概念详解与主要操作案例

作者主页(​​文火冰糖的硅基工坊​​​):​​文火冰糖(王文兵)的博客_文火冰糖的硅基工坊​

​目录​

​​第1章 什么是名字/命名空间​​

​​1.1 kubernetes 命名空间(namespace)是什么?​​

​​1.2 名字空间隔离哪些内容​​

​​1.3 命名空间的特点​​

​​1.4 命名空间的本质​​

​​1.5 K8S默认的自带的名字空间​​

​​1.6 K8S资源的创建方式​​

​​第2章 名字空间的常见操作​​

​​2.1 查看已有的名字空间​​

​​2.2 创建新的名字空间​​

​​2.3 删除已有的名字空间​​

​​2.4 kubectl get pods -A与kubectl get pods的区别​​

​​第3章 通过配置文件操作名字空间​​

​​3.1 创建新的名字空间​​

​​3.2 删除已有的名字空间​​

第1章 什么是名字/命名空间

1.1 kubernetes ​命名空间(namespace)​是什么?

namespace中文翻译:名字空间或命名空间,后续混用这两个中文名。

namespace提供了一种在相同的虚拟硬件资源的基础之上,提供了各种层面、各个节点资源隔离的机制。

隔离有很多优点,如它提供了安全和干净的环境。例如,用户可以安装不同版本的 Jenkins,如果它们的环境变量是在不同的命名空间,就不会冲突。

如果你是基础设施的所属者,可以为不同场合的应用系统,提供不同的名字空间,如开发环节、生产环节和运维环节,就可以使用不同的名字空间进行隔离。

1.2 名字空间隔离哪些内容

运行的服务Pods(微服务程序)微服务应用程序的配置

1.3 命名空间的特点

名字空间本身也是资源,可以动态创建或删除。名字空间可以跨越集群中的多个虚拟机节点。所有的应用程序,都必须部署在特定的名字空间中。名字空间隔离的是单机上的资源访问,不隔离IP网络访问,不用的服务之间,可以通过网络进行访问,即使他们不在相同的名字空间 。命名空间不能嵌套。部署只能在一个命名空间中进行。所有的命名空间对于该资源类型只能使用一个独一无二的名字。

1.4 命名空间的本质

命名空间的本质是虚拟集群。

​​kubernetes 文档​​ 中的解释:

kubernetes 在一个 物理集群上提供了多个 虚拟集群。这些虚拟集群被称为命名空间。

通过虚拟集群,意味着 kubernetes 可以在单个集群上提供多个 kubernetes 的虚拟集群,类似一个在其主机抽象出来的虚拟机,如下图所示:

1.5 K8S默认的自带的名字空间

一个集群的三个初始命名空间:​​default​​​、​​kube-system​​​ 和 ​​kube-public​​。

​​Default​​ 用于某些没有指明命名空间的部署,这是一种快速创建混乱的做法,如果你在没有正确信息的情况下做了很多部署,将很难清理。不建议把自己的业务应用程序部署在默认的名字空间。​​Kube-system​​ 是 Kubernetes 系统相关的所有对象组成的命名空间。任何对此命名空间的部署都可能是危险的操作,可能对系统本身造成不可挽回的破坏。​​Kube-public​​ 所有人可读,但是这个命名空间是为系统保留的。

虽然技术上你可以用这三个命名空间作部署,但我还是推荐你把这三个命名空间留作系统配置用,而不是你的项目。

因此,对于互联网应用,我们通常会在同一个物理集群上,提供三个虚拟集群(三个名字空间)

开发名字空间:用于开发人员的程序开发生产名字空间:用于正式部署前的系统验证运维名字空间:用于最终的业务服务。

1.6 K8S资源的创建方式

(1)cubectl命令行方式

(2)yaml配置文件的方式

本文以命令行为例,方面操作。

第2章 名字空间的常见操作

2.1 查看已有的名字空间

$ kubectl get namespace$ kubectl get nsNAME STATUS AGEdefault Active 5m23skube-public Active 5m24skube-system Active 5m24s

2.2 创建新的名字空间

$ kubectl create namespace devnamespace/dev created

2.3 删除已有的名字空间

$ kubectl delete namespace dev$ kubectl delete ns devnamespace "dev" deleted

备注:

删除名字空间会导致基于名字空间的所有资源和应用程序都会被删除掉,这需要小心谨慎。

2.4 kubectl get pods -A与kubectl get pods的区别

(1)kubectl get pods:获取default名字空间的pods

NAMESPACE       NAME                            READY   STATUS  RESTARTS   AGE

无应用

(2)kubectl get pods -A:获取所有的名字空间的pods

$ kubectl get pods --all-namespaces$ kubectl get pods -ANAMESPACE NAME READY STATUS RESTARTS AGEkube-system coredns-5644d7b6d9-4vxv6 1/1 Running 0 32mkube-system coredns-5644d7b6d9-t5wn7 1/1 Running 0 32mkube-system etcd-minikube 1/1 Running 0 31mkube-system kube-addon-manager-minikube 1/1 Running 0 32mkube-system kube-apiserver-minikube 1/1 Running 0 31mkube-system kube-controller-manager-minikube 1/1 Running 0 31mkube-system kube-proxy-5tdmh 1/1 Running 0 32mkube-system kube-scheduler-minikube 1/1 Running 0 31mkube-system storage-provisioner 1/1 Running 0 27m

上述的区别,充分的展示了业务应用pods是部署在特定的名字空间的。

K8S核心的自带的微服务,如kube-proxy、etcd都部署在kube-system名字空间,而不是default名字空间。

第3章 通过配置文件操作名字空间

3.1 创建新的名字空间

​(1)创建新的名字空间的配置文件*.yaml文件​

$ cd ~$ vim dev-ns.yamlapiVersion: v1kind: Namespacemetadata: name: ns-dev labels:name: ns-devuid: 1234

​(2)appy配置文件(创建名字空间)​

kubectl apply -f dev-ns.yaml

​(3)查看新创建的名字空间​

$ kubectl get namespace$ kubectl get nsNAME STATUS AGEdefault Active 67dkube-public Active 67dkube-system Active 67dns-dev Active 14s

3.2 删除已有的名字空间

​(1)删除配置文件​

kubectl delete -f dev-ns.yaml

​(2)查看结果​

$ kubectl get namespace$ kubectl get nsNAME STATUS AGEdefault Active 67dkube-public Active 67dkube-system Active 67d

作者主页(​​文火冰糖的硅基工坊​​​):​​文火冰糖(王文兵)的博客_文火冰糖的硅基工坊​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:[云原生专题-23]:K8S - Kubernetes(K8S)整体概述与组件架构通俗讲解
下一篇:Springcloud feign传日期类型参数报错的解决方案
相关文章

 发表评论

暂时没有评论,来抢沙发吧~