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:集群角色绑定,定义了用户和集群角色的关系。
Role和ClusterRole指定了可以对哪些资源做哪些动作,RoleBinding和ClusterRoleBinding将角色绑定到特定的用户、用户组或ServiceAccount上。