kubernetes(k8s):浅谈 喜欢ヅ旅行 2023-02-17 03:20 106阅读 0赞 **基本工作过程** Kubernetes 的核心工作过程: * **资源对象**:Node、Pod、Service、Replication Controller 等都可以看作一种资源对象 * **操作**:通过使用 `kubectl` 工具,执行增删改查 * **存储**:对象的目标状态(预设状态),保存在 `etcd` 中持久化储存; * **自动控制**:跟踪、对比 etcd 中存储的目标状态与资源的当前状态,对差异资源纠偏,自动控制集群状态。Kubernetes实际是:高度自动化的资源控制系统,将其管理的一切抽象为资源对象,大到服务器 Node 节点,小到服务实例 Pod。 Kubernetes 的资源控制是一种声明+引擎的理念: * **声明**:对某种资源,声明他的目标状态 * **自动**:Kubernetes 自动化资源控制系统,会一直努力将该资源对象维持在目标状态。 **架构(物理+逻辑)** Kubernetes 集群,是主从架构: * **Master**:管理节点,集群的控制和调度 * **Node**:工作节点,执行具体的业务容器 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNjk2OQ_size_16_color_FFFFFF_t_70]下述几个组件,都是独立的进程,每个进程都是 Go 语言编写,实际部署 Kubernetes 集群,就是部署这些程序。 **Master节点:** * kube-apiserver * kube-controller-manager * kube-scheduler **Node节点:** * kubelet * kube-proxy 具体,2 种角色的节点,需要运行的进程和职责不同,详细描述如下。 **Master 管理节点**:管理整个 Kubernetes 集群,接收外部命令,维护集群状态。 * **apiserve**r: Kubernetes API Server集群控制的入口 * 资源的增删改查,持久化存储到 etcd * **kubectl** 直接与 API Server 交互,默认端口 6443。 * **etcd**: 一个高可用的 key-value 存储系统 * 作用:存储资源的状态 * 支持 Restful 的API。 * 默认监听 2379 和 2380 端口(2379提供服务,2380用于集群节点通信)(疑问:集群节点,是说 etcd 的集群? Master 集群?) * **scheduler**: 负责将 pod 资源调度到合适的 node 上。 * 调度算法:根据 node 节点的性能、负载、数据位置等,进行调度。 * 默认监听 10251 端口。 * **controller-manager:** 所有资源的自动化控制中心每个资源,都对应有一个控制器(疑问:作用是什么?) * Kubernetes 的核心控制守护进程,默认监听10252端口。(疑问:为什么有监听段口感?) 补充说明: scheduler和controller-manager都是通过apiserver从etcd中获取各种资源的状态,进行相应的调度和控制操作。 **Node 节点:** Master 节点,将任务调度到 Node 节点,以 docker 方式运行;当 Node 节点宕机时,Master 会自动将 Node 上的任务调度到其他 Node 上。 * **kubelet**: 本节点Pod的生命周期管理,定期向Master上报本节点及Pod的基本信息 * Kubelet是在每个Node节点上运行agent * 负责维护和管理所有容器:从 apiserver 接收 Pod 的创建请求,启动和停止Pod * Kubelet不会管理不是由Kubernetes创建的容器 * 定期向Master上报信息,如操作系统、Docker版本、CPU、内存、pod 运行状态等信息 * **kube-proxy**:集群中 Service 的通信以及负载均衡 * **功能**:服务发现、反向代理。 * **反向代理**:支持TCP和UDP连接转发,默认基于Round Robin算法将客户端流量转发到与service对应的一组后端pod。 * **服务发现**:使用 etcd 的 watch机制,监控集群中service和endpoint对象数据的动态变化,并且维护一个service到endpoint的映射关系。(本质是:路由关系) * **实现方式**:存在两种实现方式,userspace 和 iptables。 * userspace:在用户空间,通过kuber-proxy实现负载均衡的代理服务,是最初的实现方案,较稳定、效率不高; * iptables:在内核空间,是纯采用iptables来实现LB,是Kubernetes目前默认的方式;runtime:一般使用 docker 容器,也支持其他的容器。 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNjk2OQ_size_16_color_FFFFFF_t_70]: https://img-blog.csdnimg.cn/20200611192939914.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzNjk2OQ==,size_16,color_FFFFFF,t_70
还没有评论,来说两句吧...