【Kubernetes】

【k8s学习】kubernetes namespace介绍

2022-06-20  本文已影响0人  伊丽莎白2015

【本文目标】

【前置文章】

1. Namespace

官网:https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/namespaces/

1.1 集群的4个默认的namespace

Kubernetes默认就会有4个namespaces。可以通过命令kubectl get namespace查看:

image.png
1.2 创建namespace

kubectl create namespace <name>

image.png

也可以通过yaml配置文件创建namespace。

2. Namespace use cases

use case-1:根据功能来区别

如果我们只有default namespace,然后我们在default下面创建了太多的deployment,replicaset,pod以及service,以致于我们在查看的时候眼花缭乱。

这时候我们就需要对我们的资源进行分组了,比如:

根据Kubernetes官网建议,如果你的项目架构很小,用户量也很小,那么也不需要使用namespace来group资源。但如果你的用户量很小,但架构还是很复杂的,比如有很多模块,像logging, monitoring等等,那么还是可以使用namespace的。

2.2 use case-2:多个组开发同一个项目的时候

假设有两个组都在开发同一个项目,虽然项目是一样的,但组1在部署的时候,可能有自己的ConfigMap,组2也有自己的ConfigMap,这种情况下会造成相互干扰,所以可以使用namespace隔离开。

比如给组1 assign namespace1的权限,给组2 assign namespace2的权限,这样天然的就不会相互干扰了。

2.3 use case-3:同一个群集里有多个Stage(如Dev/Test等)

这种情况下nginx或是elastic等组件可以共用,所以也可以用namespace来分组。

2.4 use case-4:a/b发布

在production中,可能想要新功能只提供给某些特定的用户,而另外一些用户仍然使用现有版本,也就意味着在prod环境下要同时部署多个版本,这种情况下也可以使用namespace来隔离。

3. namespace中的资源

3.1 大部分资源都不能跨namespace访问

比如有个ConfigMap在namespace-a下面,那么在namespace-b下面,不能直接拿来使用。即:Each namespace must define own ConfigMapSecret也一样。

但是service是可以跨namespace访问的。比如在namespace-a下的项目,想要访问namespace-c下面的mysql,那么namespace-a下的ConfigMap除了指定service = mysql-service外,还必须加上namespace的后缀,即:dburl = mysql-service.namespace-c

3.2 有些资源是不能按namespace划分的

比如volumenode组件,是globally(全局)层面的资源,不能把它们分配给某个namespace。

可以使用命令kubectl api-resources --namespaced=falsec列出不能被namespace化的资源。

4. 在namespace中创建组件

比如我们现在有个创建ConfigMap的yaml文件,我们想要在namespace-a中创建。

方式1:在kubectl apply后面加上参数-n <namespace name>即可,如:

kubectl apply -f mysql-config.yaml -n namespace-a

方式2:在mysql-config.yaml的metadata中,除了声明name外,加上另一个属性,叫namespace,如下: image.png

如果在yaml中声明了,那么在创建的时候就可以不需要额外加-n了,推荐把namespace放在yaml中。

另外,我们当前所在的namespace是default namespace,如果想要查看my-namespace下的组件,也需要加-n参数,如查看my-namespace下的所有的Pod:

kubectl get pod -n my-namespace

如果想要切换当前的namespace,kubectl并不提供这样的功能,需要额外安装工具:kubens

在MacOS下使用brew install kubectx进行安装。安装好后,可以使用命令kubens查看:

image.png

切换namespace:

kubens my-namespace

image.png 这时候默认的namespace就从default切换到了my-namespace: image.png

参考:
https://www.youtube.com/watch?v=X48VuDVv0do

上一篇下一篇

猜你喜欢

热点阅读