Node
可以理解为一个物理机或者虚拟机 ,K8S中的一个节点 ,每个节点包含Pod 所需的服务, 这些节点 是由 Control Plane 来管理, 节点的名称 用来标识Node 对象,名称必须是唯一的. Node上有三个组件分别是 kubelet ,kube-proxy,container-runtime .
kubelet 负责管理和维护每个节点上的Pod,并确保他们按照预期运行. kubelet 是在每个节点上运行的主要 “节点代理” 它可以使用以下方式之一向 API 服务器注册:
kubelet 是基于 PodSpec 来工作的。每个 PodSpec 是一个描述 Pod 的 YAML 或 JSON 对象。 kubelet 接受通过各种机制(主要是通过 apiserver)提供的一组 PodSpec,并确保这些 PodSpec 中描述的容器处于运行状态且运行状况良好。 kubelet 不管理不是由 Kubernetes 创建的容器。
容器运行时 , 有很多种, 比如 docker-engine , containerd , CRI-O 等
控制平面(Control Plane)是指容器编排层,它暴露 API 和接口来定义、 部署容器和管理容器的生命周期。
Pod
是kubernetes 的最小调度单元, 他是 一个或多个容器的组合 . 一般只有一个容器,可以理解为容器的抽象.一个 Pod 可以包含一个或多个紧密关联的容器, 它们共享相同的网络命名空间、 IP 地址和存储卷, 并在同一个宿主上运行。
Service
是将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法。
Ingress 是对集群中服务的外部访问进行管理的 API 对象, 典型的访问方式是 HTTP。 可以通过Ingress资源来配置不同的转发规则, 从而达到根据不同的规则设置访问集群内不同的Service所对应的后端Pod。
命名空间 ( namespace) 提供一种机制, 将同一集群中的资源划分为相互隔离的组, 以便进行分类、 筛选和管理。同一命名空间内的资源名称要唯一, 但跨命名空间时没有这个要求。
ConfigMap , Secret 可以把外部信息 ,敏感信息 存起来. 更新这些配置会比较方便. 避免配置变更重新编译和部署的问题.
Volumes 可以将数据挂载到集群中本地磁盘和远程存储上, 做数据持久化使用的.
Deployment 组件 来管理无状态的组件, 可以将一个或多个Pod 组合在一起, 副本控制, 滚动更新, 动态扩缩容等 等.
StatefulSet 组件 来管理 有状态的组件 (mysql ,缓存,消息队列等)
对于有状态的应用程序, 可以单独部署, 从 K8S 集群中剥离出来, 单独部署.