Kubernetes 简介

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 集群指令运行流程

  1. kubectl发送了一个部署nginx的任务
  2. 进入Master节点,进行安全认证
  3. 认证通过后,APIserver接受指令
  4. 将部署的命令数据记录到etcd中
  5. APIserver再读取etcd中的命令数据
  6. APIserver找到scheduler(调度器),说要部署nginx
  7. scheduler(调度器)找APIserver调取工作节点数据。
  8. APIserver调取etcd中存储的数据,并将数据发给scheduler。
  9. scheduler通过计算,比较找到适合部署nginx的最佳节点是node1,发送给APIserver。
  10. APIserver将要部署在node1的计划存储到etcd中。
  11. APIserver读取etcd中的部署计划,通知node1节点的kubelet部署容器
  12. kubelet根据指令部署nginx容器,kube-proxy为nginx容器创建网桥
  13. 容器网桥部署完成后,kubelet通知APIserver部署工作完成。
  14. APIserver将部署状态存储到etcd当中,同时通知controller manager(控制器)有新活了
  15. controller manager向APIserver要需要监控容器的数据
  16. APIserver找etcd读取相应数据,同时通知kubelet要源源不断发送监控的数据
  17. APIserver将kubelet发送来的数据存储到etcd当中
  18. APIserver将etcd的数据返回给controller manager
  19. controller manager根据数据计算判断容器是否存在或健康