
# Kubernetes资源对象
Kubernetes资源对象根据作用域区分为命名空间级和集群级。
#### 命名空间级别
命名空间（Namespace）是Kubernetes提供的隔离机制，用于给集群中的任何资源对象进行分类、筛选和管理。
如果不同的资源对象放在不同的命名空间下，他们就会相互隔离。例如，获取所有Pod使用的命令是：
```
kubectl get pod
```
这里的Pod是有命名空间的，默认为default。指定命名空间需使用如下命令：
```
kubectl get pod -n default
```
当要获取全部命名空间下的Pod时，使用如下命令：
```
kubectl get pod --all-namespaces
```
这样就可以看到集群下所有的Pod了。
```
$ kubectl get pod --all-namespaces
NAMESPACE     NAME                                            READY   STATUS    RESTARTS   AGE
default       nginx-dd9796d66-5chbr                           1/1     Running   0          3d1h
default       nginx-dd9796d66-xl69p                           1/1     Running   0          15d
default       sa-example                                      1/1     Running   0          10d
kube-system   coredns-6fcd88c4c-k8rtf                         1/1     Running   0          48d
kube-system   coredns-6fcd88c4c-z46p4                         1/1     Running   0          48d
kube-system   everest-csi-controller-856f8bb679-42rgw         1/1     Running   1          48d
kube-system   everest-csi-controller-856f8bb679-xs6dz         1/1     Running   0          48d
kube-system   everest-csi-driver-mkpbv                        2/2     Running   0          48d
kube-system   everest-csi-driver-v754w                        2/2     Running   0          48d
kube-system   icagent-5p44q                                   1/1     Running   0          48d
kube-system   icagent-jrlbl                                   1/1     Running   0          48d
monitoring    alertmanager-alertmanager-0                     2/2     Running   0          29d
monitoring    cluster-problem-detector-7788f94f64-thp6s       1/1     Running   0          29d
monitoring    custom-metrics-apiserver-5f7dcf6d9-n5nrr        1/1     Running   0          19d
monitoring    event-exporter-6844c5c685-khf5t                 1/1     Running   1          3d1h
monitoring    kube-state-metrics-8566d5f5c5-7kx7b             1/1     Running   0          29d
monitoring    node-exporter-7l4ml                             1/1     Running   0          29d
monitoring    node-exporter-gpxvl                             1/1     Running   0          29d
```
Pod属于命名空间级资源。此外，大多数工作负载资源、Service资源、配置与存储资源都属于命名空间级。
- **工作负载资源**
  Pod：Kubernetes部署应用或服务的最小的基本单位。
  ReplicaSet：Kubernetes中的一种副本控制器，主要作用是控制由其管理的Pod，使Pod副本的数量始终维持在预设的个数。
  Deployment：声明了Pod的模板和控制Pod的运行策略，适用于部署无状态的应用程序。
  StatefulSet：主要用于管理有状态的应用，创建的Pod拥有根据规范创建的持久型标识符。
  DaemonSet：主要用于部署常驻集群内的后台程序，例如节点的日志采集。
  Job：Job控制器会创建一个或者多个Pod，这些Pod按照运行规则运行，直至运行结束。
  CronJob：根据指定的预定计划周期性地运行一个Job。
  
- **服务发现资源**
  Service：用户在Kubernetes中可以部署各种容器，其中一部分是通过HTTP、HTTPS协议对外提供七层网络服务，另一部分是通过TCP、UDP协议提供四层网络服务。而Kubernetes定义的Service资源是用来管理集群中四层网络的服务访问。基于四层网络，Service提供了集群内容器服务的暴露能力。
  Ingress：Ingress能够提供七层网络下HTTP、HTTPS协议服务的暴露，同时也包括各种七层网络下的常见能力。Ingress是允许访问到集群内Service规则的集合，您可以通过配置转发规则，实现不同URL可以访问到集群内不同的Service。
  
- **配置与存储资源**
  ConfigMap：key-value类型的键值对，通过ConfigMap您可以将配置与运行的镜像进行解耦，使应用程序有更强的移植性。
  Secret：key-value类型的键值对，用于存储密码、令牌、密钥等敏感信息，降低直接对外暴露的风险。
  Volume：Volume（存储卷）本质是一个目录，其中可能包含一些数据，Pod中的容器可以访问该目录。Volume的生命周期与挂载它的Pod相同，但是Volume里面的文件可能在Volume消失后仍然存在，这取决于Volume的类型。
  
 
#### 集群级别
集群级别的资源，它的作用范围要比命名空间大很多，全集群可见，并且可以调用，不属于某一个命名空间，因此资源对象的名称必须全局唯一。
集群级别的资源，不管在任何命名空间下定义，在其他的命名空间下都能看得到，在定义的时候无需指定命名空间。
常见的集群级资源有：Namespace（命名空间）、Node（节点）、Role（角色）、RoleBinding（角色绑定）、ClusterRole（集群角色）、ClusterRoleBinding（集群角色绑定）。
- **Namespace** ：是Kubernetes提供的隔离机制，用于给集群中的任何资源对象进行分类、筛选和管理。
  要查询集群下所有的命名空间，可以使用如下命令：
  ```
  kubectl get ns
  ```
  
- **Node**：节点是组成容器集群的基本元素，可以为虚拟机或物理机。每个节点都包含运行Pod所需要的基本组件，包括Kubelet、Kube-proxy等。Node名称要全局唯一。
- **Role**：角色，其实是定义一组对Kubernetes资源（命名空间级别）的访问规则。
- **RoleBinding**：角色绑定，定义了用户和角色的关系。
- **ClusterRole**：集群角色，其实是定义一组对Kubernetes资源（集群级别，包含全部命名空间）的访问规则。
- **ClusterRoleBinding** ：集群角色绑定，定义了用户和集群角色的关系。
  ![](https://support.huaweicloud.com/usermanual-ucs/public_sys-resources/note_3.0-zh-cn.png)
  Role和ClusterRole指定了可以对哪些资源做哪些动作，RoleBinding和ClusterRoleBinding将角色绑定到特定的用户、用户组或ServiceAccount上。
  
 
