赵占旭的博客

K8S 初识

Kubernetes是用来管理容器的软件,docker和kubernetes的关系类似于qemu和openstack的关系。接下来的信息基本来自于kubernetes中文文档

架构

构成组件

Kubernetes主要由以下几个核心组件组成:

  • etcd保存了整个集群的状态;
  • apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

除了核心组件,还有一些推荐的Add-ons:

  • kube-dns负责为整个集群提供DNS服务
  • Ingress Controller为服务提供外网入口
  • Heapster提供资源监控
  • Dashboard提供GUI
  • Federation提供跨可用区的集群
  • Fluentd-elasticsearch提供集群日志采集、存储与查询

介绍完组件之后,我们需要知道这些组件部署时所在的位置。kubernetes部署时主要分为控制节点(master)以及计算节点(node)。

Master

avatar

  • kube-apiserver暴露Kubernetes API,任何资源请求/调用操作都是通过kub-apiserver提供的接口进行。
  • etcd,提供存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。
  • kube-controller-manager运行管理控制器,它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行。
    • 计算节点(Node)控制器。
    • 副本(Replication)控制器:负责维护系统中每个副本中的pod。
    • 端点(Endpoints)控制器:填充Endpoints对象(即连接Services&Pods)。
    • Service Account和Token控制器:为新的Namespace 创建默认帐户访问API Token。
  • kube-scheduler监视新创建没有分配到Node的Pod,为Pod选择一个Node。
  • 插件(addon)是实现集群pod和Services功能的 。Pod由Deployments,ReplicationController等进行管理。Namespace 插件对象是在kube-system Namespace中创建。
  • DNS虽然不严格要求使用插件,但Kubernetes集群都应该具有集群 DNS。
  • 用户界面,kube-ui提供集群状态基础信息查看。
  • 容器资源监控,提供一个UI浏览监控数据。
  • Cluster-level Logging,负责保存容器日志,搜索/查看日志。

Node

avatar

  • kubelet是主要的节点代理,它会监视已分配给节点的pod
    • 安装Pod所需的volume。
    • 下载Pod的Secrets。
    • Pod中运行的docker(或experimentally, rkt)容器。
    • 定期执行容器健康检查。
    • 如果有必要,通过创建镜像pod,将pod的状态报告回Master的REST。
    • 将node的状态报告回Master的REST。
  • kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象。
  • docker用于运行容器。
  • rkt运行容器,作为docker工具的替代方案。
  • supervisord是一个轻量级的监控系统,用于保障kubelet和docker运行。
  • fluentd是一个守护进程,可提供cluster-level logging。

avatar

用户会在Master节点通过kubectl命令进行一些操作,用以创建删除容器。首先会进行认证,然后通过REST根据scheduler的调度确定Node节点,发送给Node节点的kubelet,然后创建pod。
用户访问会先通过firewall,然后proxy模块会有负载均衡访问对应的Pod中的container。

注意:所有文章非特别说明皆为原创。为保证信息与源同步,转载时请务必注明文章出处!谢谢合作 :-)

原始链接:http://zhaozhanxu.com/2019/10/14/K8S/2019-10-14-Kubernetes/

许可协议: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。