zoukankan      html  css  js  c++  java
  • Kubernetes命名空间及标签

    命名空间(namespace)是Kubernetes提供的组织机制,用于给集群中的任何对象组进行分类、筛选和管理。每一个添加到Kubernetes集群的工作负载必须放在一个命名空间中。

    命名空间的作用:

    1、命名空间为集群中的对象名称赋予作用域,有效实现隔离。虽然在命名空间中名称必须是唯一的,但是相同的名称可以在不同的命名空间中使用。这对于某些场景来说可能帮助很大。例如,如果使用命名空间来划分应用程序生命周期环境(如开发、测试、生产),则可以在每个环境中维护利用同样的名称维护相同对象的副本。

    2、命名空间还可以让用户轻松地将策略应用到集群的具体部分。

    3、使用命名空间最大的好处之一是能够利用Kubernetes RBAC(基于角色的访问控制)。

    预配置的Kubernetes命名空间

    在我们进行创建命名空间之前,先讨论一下Kubernetes是如何自动设置它的。在默认情况下,新的集群上有三个命名空间:

    • default:向集群中添加对象而不提供命名空间,这样它会被放入默认的命名空间中。在创建替代的命名空间之前,该命名空间会充当用户新添加资源的主要目的地,无法删除。
    • kube-public:kube-public命名空间的目的是让所有具有或不具有身份验证的用户都能全局可读。这对于公开bootstrap组件所需的集群信息非常有用。它主要是由Kubernetes自己管理。
    • kube-system:kube-system命名空间用于Kubernetes管理的Kubernetes组件,一般规则是,避免向该命名空间添加普通的工作负载。它一般由系统直接管理,因此具有相对宽松的策略。

    命名空间命令操作

    1、显示集群中所以命名空间:

    [root@localhost ~]# kubectl get namespaces
    NAME          STATUS   AGE
    default       Active   2d22h
    kube-public   Active   2d22h
    kube-system   Active   2d22h

    2、查看指定命名空间下的pod对象

    [root@localhost ~]# kubectl get pods -n kube-system
    NAME                                    READY   STATUS    RESTARTS   AGE
    coredns-6c66ffc55b-w9zcb                1/1     Running   0          2d22h
    etcd-minikube                           1/1     Running   0          2d22h
    kube-addon-manager-minikube             1/1     Running   5          2d22h
    kube-apiserver-minikube                 1/1     Running   1          2d22h
    kube-controller-manager-minikube        1/1     Running   0          2d22h
    kube-proxy-bjq4n                        1/1     Running   0          2d22h
    kube-scheduler-minikube                 1/1     Running   5          2d22h
    kubernetes-dashboard-6d97598877-xmhkp   1/1     Running   0          2d22h
    storage-provisioner                     1/1     Running   0          2d22h
    [root@localhost ~]# 

    3、创建命名空间demo-test

    [root@localhost ~]# kubectl create namespace demo-test
    namespace/demo-test created
    [root@localhost ~]# 

    4、删除命名空间

    [root@localhost ~]# kubectl get namespaces
    NAME          STATUS   AGE
    default       Active   2d22h
    demo-test     Active   2m7s
    kube-public   Active   2d22h
    kube-system   Active   2d22h
    [root@localhost ~]# 
    [root@localhost ~]# kubectl delete namespace demo-test
    namespace "demo-test" deleted
    [root@localhost ~]#

    5、查看所有pod所属的命名空间

    [root@localhost ~]# kubectl get pods --all-namespaces
    NAMESPACE     NAME                                    READY   STATUS    RESTARTS   AGE
    default       nginx-55bd7c9fd-9jhg2                   1/1     Running   0          2d22h
    default       nginx-55bd7c9fd-cphvg                   1/1     Running   0          2d22h
    default       nginx-55bd7c9fd-s4lnk                   1/1     Running   0          2d20h
    kube-system   coredns-6c66ffc55b-w9zcb                1/1     Running   0          2d22h
    kube-system   etcd-minikube                           1/1     Running   0          2d22h
    kube-system   kube-addon-manager-minikube             1/1     Running   5          2d22h
    kube-system   kube-apiserver-minikube                 1/1     Running   1          2d22h
    kube-system   kube-controller-manager-minikube        1/1     Running   0          2d22h
    kube-system   kube-proxy-bjq4n                        1/1     Running   0          2d22h
    kube-system   kube-scheduler-minikube                 1/1     Running   5          2d22h
    kube-system   kubernetes-dashboard-6d97598877-xmhkp   1/1     Running   0          2d22h
    kube-system   storage-provisioner                     1/1     Running   0          2d22h
    [root@localhost ~]# 

    6、指定命名空间

    # kubectl create -f xxx.yaml -n namespace_name
    或者
    [root@localhost ~]# kubectl create deployment nginx --image=nginx -n demo-test

    7、获取命名空间的详细信息,使用kubectl describe命令:

    [root@localhost ~]# kubectl describe namespace kube-system
    Name:         kube-system
    Labels:       <none>
    Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                    {"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"name":"kube-system","namespace":""}}
    Status:       Active
    
    No resource quota.
    
    No resource limits.
    [root@localhost ~]# 

    K8S——Label(标签)

    查看标签

    需要使用--showlabels选项来查看pod的标签

    #查看pod的标签
    [root@k8s-master ~]# kubectl get pod --show-labels
    NAME                             READY   STATUS    RESTARTS   AGE   LABELS
    nginx-deploy-868855d887-2qc44    1/1     Running   0          45m   app=nginx,pod-template-hash=868855d887
    nginx-deploy-868855d887-6l884    1/1     Running   0          18h   app=nginx,pod-template-hash=868855d887
    nginx-deploy-868855d887-sbqjq    1/1     Running   0          18h   app=nginx,pod-template-hash=868855d887
    tomcat-deploy-7bf9b544c7-4vnsx   1/1     Running   0          45m   app=tomcat,pod-template-hash=7bf9b544c7
    tomcat-deploy-7bf9b544c7-6cm5f   1/1     Running   0          16h   app=tomcat,pod-template-hash=7bf9b544c7
    tomcat-deploy-7bf9b544c7-bwhsq   1/1     Running   0          16h   app=tomcat,pod-template-hash=7bf9b544c7
    [root@k8s-master ~]# 
    #查看node标签
    [root@k8s-master ~]# kubectl get node --show-labels
    NAME         STATUS   ROLES    AGE     VERSION   LABELS
    k8s-master   Ready    master   5d18h   v1.18.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
    k8s-node01   Ready    <none>   5d17h   v1.18.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,isIngress=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux
    k8s-node02   Ready    <none>   5d17h   v1.18.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,isIngress=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node02,kubernetes.io/os=linux
    [root@k8s-master ~]# 
    
    #指定标签的key值查询
    [root@k8s-master ~]# kubectl get pod -L app
    NAME                             READY   STATUS    RESTARTS   AGE   APP
    nginx-deploy-868855d887-2qc44    1/1     Running   0          46m   nginx
    nginx-deploy-868855d887-6l884    1/1     Running   0          18h   nginx
    nginx-deploy-868855d887-sbqjq    1/1     Running   0          18h   nginx
    tomcat-deploy-7bf9b544c7-4vnsx   1/1     Running   0          46m   tomcat
    tomcat-deploy-7bf9b544c7-6cm5f   1/1     Running   0          16h   tomcat
    tomcat-deploy-7bf9b544c7-bwhsq   1/1     Running   0          16h   tomcat
    [root@k8s-master ~]# 

     根据svc、pod的标签,进行服务筛选:

    [root@localhost nginx-ingress]# kubectl get pod -n monitoring -l app=prometheus
    NAME               READY   STATUS    RESTARTS   AGE
    prometheus-k8s-0   2/2     Running   1          54m
    prometheus-k8s-1   2/2     Running   1          54m
    [root@localhost nginx-ingress]# 
    [root@hz01 nginx-ingress]# kubectl get svc -n monitoring -l app=grafana
    NAME      TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    grafana   NodePort   192.168.87.255   <none>        3000:30712/TCP   27h
  • 相关阅读:
    使用XmlWriter写入XML
    Xml的一些基本概念(摘抄自w3school.com.cn)
    Basler相机启动问题xml读取出错
    c#开方,平方,sin函数计算
    如果遇到继承控件,添加到新项目里在工具栏找不到的情况下,F5启动一下,重新生成是不会有的,要运行成功才有
    添加项目文件时候不要把引用文件直接放到bin-debug里
    发现三个很好看的控件
    merge into 批量修改语句
    -- oracle上一些查询表和字段语句
    -- oracle上查看储存过程内容
  • 原文地址:https://www.cnblogs.com/saneri/p/13553979.html
Copyright © 2011-2022 走看看