前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K8S命名空间

K8S命名空间

作者头像
胡齐
发布2020-06-02 17:24:48
1.6K0
发布2020-06-02 17:24:48
举报
文章被收录于专栏:运维猫运维猫

1、简介

Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。这些虚拟集群被称为命名空间。

2、如何使用命名空间

  • 命名空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间。当需要名称空间提供的功能时,请开始使用它们。
  • 命名空间为名称提供了一个范围。资源的名称需要在命名空间内是唯一的,但不能跨命名空间。命名空间不能相互嵌套,每个 Kubernetes 资源只能在一个命名空间中。
  • 命名空间是在多个用户之间划分集群资源的一种方法(通过资源配额)。
  • 在 Kubernetes 未来版本中,相同命名空间中的对象默认将具有相同的访问控制策略。
  • 不需要使用多个命名空间来分隔轻微不同的资源,例如同一软件的不同版本:使用 labels 来区分同一命名空间中的不同资源。

3、列出集群中的当前名称空间

代码语言:javascript
复制
 [root@k8s-001 k8s]# kubectl get namespaces
 NAME             STATUS   AGE
 default           Active   8h
 kube-node-lease   Active   8h
 kube-public       Active   8h
 kube-system       Active   8h

4、Kubernetes三个初始名称空间

  • default 没有其他名称空间的对象的默认名称空间。
  • kube-system Kubernetes系统创建的对象的名称空间。
  • kube-public该名称空间是自动创建的,并且对所有用户(包括未经身份验证的用户)可读。此名称空间主要保留给集群使用,以防某些资源在整个集群中公开可见。此名称空间的公共方面仅是约定,不是要求。

5、获取默认名称空间的信息

代码语言:javascript
复制
 [root@k8s-001 k8s]# kubectl get namespaces default
 NAME     STATUS   AGE
 default   Active   3h53m
 
 # 或者使用
 [root@k8s-001 k8s]# kubectl describe namespaces default
 Name:         default
 Labels:       <none>
 Annotations: <none>
 Status:       Active
 No resource quota.
 No LimitRange resource.

6、创建Namespace

代码语言:javascript
复制
 [root@k8s-001 k8s]# cat name-server.yaml 
 apiVersion: v1
 kind: Namespace
 metadata:
   name: ywm
   labels:
     name: ywm
     
 [root@k8s-001 k8s]# kubectl apply -f name-server.yaml 
 namespace/ywm created
 
 [root@k8s-001 k8s]# kubectl get namespaces
 ywm                   Active   3m22s

7、在指定名称空间上部署应用

代码语言:javascript
复制
 [root@k8s-001 k8s]# kubectl create deployment --image nginx demo-nginx --namespace=ywm
 deployment.apps/demo-nginx created
 [root@k8s-001 k8s]# kubectl describe deployment demo-nginx --namespace=ywm |grep Namespace
 Namespace:             ywm

8、设置Context选择命名空间

1.默认命名空间
代码语言:javascript
复制
 [root@k8s-001 ~]# kubectl config get-contexts
 CURRENT   NAME                         CLUSTER     AUTHINFO           NAMESPACE
 *         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   
 # 上图说明我们使用了一个名为Default的context,context没有指定命名空间,因此使用了默认命名空间
2.想要将该context使用的命名空间修改成ywm,我们输入
代码语言:javascript
复制
 [root@k8s-001 ~]# kubectl config set-context $(kubectl config current-context) --namespace=ywm
 Context "kubernetes-admin@kubernetes"modified.
3.查看context配置来验证当前是否选择了ywm
代码语言:javascript
复制
 [root@k8s-001 ~]# kubectl config get-contexts
 CURRENT   NAME                         CLUSTER     AUTHINFO           NAMESPACE
 *         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   ywm
4.验证我们的kubectl describe命令现在默认使用demo-namespace,它会请求我们的demo-nginx部署而不需要指定命名空间
代码语言:javascript
复制
 [root@k8s-001 ~]# kubectl describe deployment demo-nginx|grep Namespace
 Namespace:             ywm

9、删除命名空间并清理

删除命名空间这一功能非常强大,因为它不仅删除命名空间,还会清理其中部署了的所有资源。这一功能非常方便,但是同时如果你一不小心,也会非常危险

1.在删除之前,最好列出和命名空间相关的资源,确定想要删除的对象
代码语言:javascript
复制
 [root@k8s-001 ~]# kubectl get all --namespace=ywm
 NAME                             READY   STATUS   RESTARTS   AGE
 pod/demo-nginx-5595f574b7-dg5gq   1/1     Running   0        88m
 
 NAME                   TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)       AGE
 service/nginx-service   NodePort   10.96.90.242   <none>        80:32601/TCP   121m
 
 NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
 deployment.apps/demo-nginx   1/1     1           1          88m
 
 NAME                                   DESIRED   CURRENT   READY   AGE
 replicaset.apps/demo-nginx-5595f574b7   1        1        1      88m
2.一旦确定了要操作的范围,可以输入下面的命令删除demo-namespace命名空间和其中的所有资源
代码语言:javascript
复制
 [root@k8s-001 ~]# kubectl delete namespace ywm
 namespace "ywm"deleted
3.命名空间及其资源将从集群中删除
代码语言:javascript
复制
 [root@k8s-001 ~]# kubectl get namespace
 NAME                   STATUS   AGE
 default               Active   6h14m
 kube-node-lease       Active   6h14m
 kube-public           Active   6h14m
 kube-system           Active   6h14m
 kubernetes-dashboard   Active   5h57m

10、初始化命名空间

1.如果你之前在kubectl上下文中更改了所选的命名空间,那么输入下面的命令清除所选的命名空间
代码语言:javascript
复制
 [root@k8s-001 ~]# kubectl config set-context $(kubectl config current-context) --namespace=
 Context "kubernetes-admin@kubernetes"modified.
2.在清理demo资源时,请记住删除我们最初提供给默认命名空间的原始demo-nginx部署
代码语言:javascript
复制
 [root@k8s-001 ~]# kubectl delete deployment demo-nginx
 Error from server (NotFound): deployments.apps "demo-nginx"not found
 [root@k8s-001 ~]# kubectl get deployment 
 No resources found indefault namespace.

现在你的集群应该处于一开始的状态了

如果文章有任何错误欢迎不吝赐教,其次大家有任何关于运维的疑难杂问,也欢迎和大家一起交流讨论。关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、简介
  • 2、如何使用命名空间
  • 3、列出集群中的当前名称空间
  • 4、Kubernetes三个初始名称空间
  • 5、获取默认名称空间的信息
  • 6、创建Namespace
  • 7、在指定名称空间上部署应用
  • 8、设置Context选择命名空间
    • 1.默认命名空间
      • 2.想要将该context使用的命名空间修改成ywm,我们输入
        • 3.查看context配置来验证当前是否选择了ywm
          • 4.验证我们的kubectl describe命令现在默认使用demo-namespace,它会请求我们的demo-nginx部署而不需要指定命名空间
          • 9、删除命名空间并清理
            • 1.在删除之前,最好列出和命名空间相关的资源,确定想要删除的对象
              • 2.一旦确定了要操作的范围,可以输入下面的命令删除demo-namespace命名空间和其中的所有资源
                • 3.命名空间及其资源将从集群中删除
                • 10、初始化命名空间
                  • 1.如果你之前在kubectl上下文中更改了所选的命名空间,那么输入下面的命令清除所选的命名空间
                    • 2.在清理demo资源时,请记住删除我们最初提供给默认命名空间的原始demo-nginx部署
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档