kubectl create namespace test
或者您可以像创建其他任何Kubernetes资源一样,创建一个YAML文件并应用它。
test.yaml:
kind: NamespaceapiVersion: v1metadata: name: test labels: name: testkubectl apply -f test.yaml
查看命名空间
kubectl get namespace

apiVersion: v1kind: Podmetadata: name: mypod labels: name: mypodspec: containers: - name: mypod image: nginx
您可能会注意到在任何地方都没有提到名称空间。 如果在此文件上运行kubectl apply,它将在当前活动的命名空间中创建Pod。 除非您更改它,否则这将是“默认”命名空间。
有两种方法可以明确告诉Kubernetes您要在哪个Namespace中创建资源。
一种方法是在创建资源时设置namespace标识:
kubectl apply -f pod.yaml --namespace=test
您还可以在YAML声明中指定命名空间:
apiVersion: v1kind: Podmetadata: name: mypod namespace: test labels: name: mypodspec: containers: - name: mypod image: nginx
如果在YAML声明中指定命名空间,则将始终在该命名空间中创建资源。如果您尝试使用namespace标志来设置另一个命名空间,则该命令将会失败。
在命名空间中查看资源
$ kubectl get podsNo resources found.
这是因为所有命令都是针对当前active的命名空间运行的。 要查找Pod,您需要指定namespace。
$ kubectl get pods --namespace=testNAME READY STATUS RESTARTS AGEmypod 1/1 Running 0 10s
这可能会很快让人觉得很烦,特别是如果您是一个开发团队的开发人员,该团队使用自己的命名空间来处理所有事情,并且不希望对每个命令都指定namespace。 让我们看看我们如何解决这个问题。
管理active命名空间

kubens test
现在您可以看到test命名空间处于active状态:

$ kubectl get podsNAME READY STATUS RESTARTS AGEmypod 1/1 Running 0 10m
跨命名空间通信
<Service Name>.<Namespace Name>.svc.cluster.local
通常,您只需要服务名称,DNS将自动解析为完整地址。 但是,如果需要访问另一个命名空间中的服务,则需使用服务名称加上命名空间名称。
例如,如果要连接到test命名空间中的database服务,可以使用以下地址:
database.test
如果要连接到production命名空间中的database服务,可以使用以下地址:
database.production
警告:如果您创建一个映射到“com”或“org”等TLD的命名空间,然后创建一个与网站名称相同的服务,例如“google”或“reddit”,Kubernetes将拦截“google.com“或”reddit.com“的请求并将其发送到您的服务。 这通常对于测试和代理非常有用,但也可以轻松破坏集群中的内容!
注意:如果确实要隔离命名空间,则应使用网络策略(Network Policies)来完成此操作。 更多信息请继续关注未来剧集!
命令空间粒度
充电区
Kubernetes企业容器云平台培训,31天掌握Kubernetes,并能独立完成Kubernetes落地。
课程内容包括:
1、Docker概念,组件,容器,镜像,网络,架构、Jenkins与Docker的CI/CD;
2、Kubernetes设计理念,架构设计,核心组件,基本功能,常用控制器,资源对象,集群网络,插件,安全框架,存储,高可用,资源监控,日志管理,Jenkins与Kubernetes的CI/CD及落地经验;
点击下面 “阅读原文” 可查看具体课程内容。
小编有话说
人生舞台的大幕随时都可能拉开,关键是你愿意表演,还是选择躲避。