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

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[云原生专题-29]:K8S - 核心概念 - 名字空间/命名空间概念详解与主要操作案例相关的知识,希望对你有一定的参考价值。

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

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122791716


目录

第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默认的自带的名字空间

一个集群的三个初始命名空间:defaultkube-system 和 kube-public

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

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

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

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

1.6 K8S资源的创建方式

(1)cubectl命令行方式

(2)yaml配置文件的方式

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

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

2.1 查看已有的名字空间

$ kubectl get namespace
$ kubectl get ns

NAME            STATUS   AGE
default         Active   5m23s
kube-public     Active   5m24s
kube-system     Active   5m24s

2.2 创建新的名字空间

$ kubectl create namespace dev
namespace/dev created

2.3 删除已有的名字空间

$ kubectl delete namespace dev
$ kubectl delete ns dev

namespace "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 -A
NAMESPACE       NAME                            READY   STATUS  RESTARTS   AGE
kube-system   coredns-5644d7b6d9-4vxv6          1/1     Running   0             32m
kube-system   coredns-5644d7b6d9-t5wn7          1/1     Running   0             32m
kube-system   etcd-minikube                     1/1     Running   0             31m
kube-system   kube-addon-manager-minikube       1/1     Running   0             32m
kube-system   kube-apiserver-minikube           1/1     Running   0             31m
kube-system   kube-controller-manager-minikube  1/1     Running   0             31m
kube-system   kube-proxy-5tdmh                  1/1     Running   0             32m
kube-system   kube-scheduler-minikube           1/1     Running   0             31m
kube-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.yaml

apiVersion: v1
kind: Namespace
metadata:
 name: ns-dev
 labels:
name: ns-dev
uid: 1234

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

kubectl apply -f dev-ns.yaml

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

$ kubectl get namespace
$ kubectl get ns
NAME            STATUS   AGE
default         Active   67d
kube-public     Active   67d
kube-system     Active   67d
ns-dev          Active   14s

3.2 删除已有的名字空间

(1)删除配置文件

kubectl delete -f dev-ns.yaml

(2)查看结果

$ kubectl get namespace
$ kubectl get ns
NAME            STATUS   AGE
default         Active   67d
kube-public     Active   67d
kube-system     Active   67d

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

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122791716

以上是关于[云原生专题-29]:K8S - 核心概念 - 名字空间/命名空间概念详解与主要操作案例的主要内容,如果未能解决你的问题,请参考以下文章

[云原生专题-42]:K8S - 核心概念 - placeholder-有状态服务

[云原生专题-38]:K8S - 核心概念 - 存储抽象- 空间大小可配置的目录挂载PV+PVC

[云原生专题-40]:K8S - 核心概念 - 网络模型网络通信集群内负载均衡机制(重要重要重要)

[云原生专题-33]:K8S - 核心概念 - 服务Service管理服务发现负载均衡

[云原生专题-39]:K8S - 核心概念 - 存储抽象- pod配置文件的挂载ConfigMap

[云原生专题-32]:K8S - 核心概念 - 工作负载资源之Depolyment(无状态应用)的概念与常见操作命令