Kubernetes(常简称为K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它提供了一个强大的容器编排和管理系统,可以简化应用程序的部署、扩展和管理过程。
1. k8s 构架详解
1.1. Master 节点
Kubernetes 集群中的 Master 节点是整个集群的控制中心,负责管理和控制集群中的所有操作。
Master 节点包含以下组件:
- kube-apiserver:作为 Kubernetes API 的前端,处理来自用户和其他组件的 API 请求,并将其转发到适当的组件进行处理。
- kube-controller-manager:负责运行和管理各种控制器,监控集群状态并根据需要进行调整。
- kube-scheduler:负责将新创建的 Pod 调度到集群中的节点上,根据节点资源和其他策略进行决策。
- etcd:一个分布式键值存储系统,用于存储集群的配置数据和状态信息。
1.2. Node 节点
Kubernetes 集群中的 Node 节点是运行容器的工作节点。
Node 节点都有以下组件:
- kubelet:负责管理节点上的容器,与 Master 节点通信,并执行 Master 节点下发的指令。
- kube-proxy:负责为 Pod 提供网络代理和负载均衡功能,以便它们可以与集群内和集群外的其他服务进行通信。
- 容器引擎:负责在节点上运行和管理容器。
1.3. 其他组件
- Flannel:一个网络插件,它的作用是为 Kubernetes 集群提供网络通信功能。
- kube-dns:它的作用是提供 DNS(Domain Name System)解析服务,为集群中的应用程序提供服务发现和名称解析功能。
- Ingress Controller:它的作用是管理和处理集群中的 Ingress 资源,为应用程序提供外部访问和路由的功能。
- Heapster:一个监控组件,用于收集和聚合集群中的资源使用情况和性能指标数据。它可以提供对集群中的节点、Pod、容器等资源的监控和度量。
- Dashboard:一个基于 Web 的用户界面,用于可视化和管理 Kubernetes 集群。它提供了一个直观的界面,使用户可以轻松地查看和操作集群中的资源。
- Federation:是一种用于管理多个 Kubernetes 集群的解决方案。它允许将多个独立的 Kubernetes 集群组织成一个逻辑上的整体,以便更方便地管理和操作这些集群。
- Fluentd-elasticsearch:Fluentd 是一个开源的日志收集和传输工具,而 Elasticsearch 是一个开源的分布式搜索和分析引擎。Fluentd-Elasticsearch 是将 Fluentd 与 Elasticsearch 结合使用的解决方案,用于实现日志的收集、传输和存储。
- Rancher:k8s管理工具。
2. k8s 集群指令运行流程
- kubectl发送了一个部署nginx的任务
- 进入Master节点,进行安全认证
- 认证通过后,APIserver接受指令
- 将部署的命令数据记录到etcd中
- APIserver再读取etcd中的命令数据
- APIserver找到scheduler(调度器),说要部署nginx
- scheduler(调度器)找APIserver调取工作节点数据。
- APIserver调取etcd中存储的数据,并将数据发给scheduler。
- scheduler通过计算,比较找到适合部署nginx的最佳节点是node1,发送给APIserver。
- APIserver将要部署在node1的计划存储到etcd中。
- APIserver读取etcd中的部署计划,通知node1节点的kubelet部署容器
- kubelet根据指令部署nginx容器,kube-proxy为nginx容器创建网桥
- 容器网桥部署完成后,kubelet通知APIserver部署工作完成。
- APIserver将部署状态存储到etcd当中,同时通知controller manager(控制器)有新活了
- controller manager向APIserver要需要监控容器的数据
- APIserver找etcd读取相应数据,同时通知kubelet要源源不断发送监控的数据
- APIserver将kubelet发送来的数据存储到etcd当中
- APIserver将etcd的数据返回给controller manager
- controller manager根据数据计算判断容器是否存在或健康