Kubernetes知识点总结

大家好,我是瓜哥,随着容器的火爆,利用容器架构来搭建业务系统的人越来越多。现在javaweb开发人才在市场里面已经非常多,就业薪资也逐渐没有增长空间。所以作为一个IT码农,需要不断的提升自己各方面技术能力。


之前虽然接触过一段时间的K8S,但是里面的各种组件和知识点非常多,看完后就会老忘记,今天抽时间来总结一下K8S里面重要的知识点。
实操中发现,像 Docker 之类的容器引擎,折腾少量容器还行。但如今的云原生应用、机器学习任务或者大数据分析业务,动辄就要使用成百上千的容器。要管理这么多容器,Docker 们就力不从心了。
江山代有才人出,有需求就有改变,当前市场上就出现了一批容器编排工具,典型的是 Swarm、Mesos 和 K8S。
经过多年啊发展,K8S“击败”Swarm 和 Mesos,几乎成了当前容器编排的事实标准。下面对K8S核心组件进行具体的总结。

 

一、Kubernetes是什么?

学习地址:http://docs.kubernetes.org.cn/227.html

Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

  • 快速部署应用
  • 快速扩展应用
  • 无缝对接新的应用功能
  • 节省资源,优化硬件资源的使用

二、Kubernetes 特点

  • 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
  • 可扩展: 模块化, 插件化, 可挂载, 可组合
  • 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
  1. 容器优势
  • 快速创建/部署应用:与VM虚拟机相比,容器镜像的创建更加容易。
  • 持续开发、集成和部署:提供可靠且频繁的容器镜像构建/部署,并使用快速和简单的回滚(由于镜像不可变性)。
  • 开发和运行相分离:在build或者release阶段创建容器镜像,使得应用和基础设施解耦。
  • 开发,测试和生产环境一致性:在本地或外网(生产环境)运行的一致性。
  • 云平台或其他操作系统:可以在 Ubuntu、RHEL、 CoreOS、on-prem、Google Container Engine或其它任何环境中运行。
  • Loosely coupled,分布式,弹性,微服务化:应用程序分为更小的、独立的部件,可以动态部署和管理。
  • 资源隔离
  • 资源利用:更高效

三、使用Kubernetes能做什么?

可以在物理或虚拟机的Kubernetes集群上运行容器化应用,Kubernetes能提供一个以“容器为中心的基础架构”,满足在生产环境中运行应用的一些常见需求,如:

四、Kubernetes不是什么?

  • Kubernetes不限制支持应用的类型,不限制应用框架。不限制受支持的语言runtimes (例如, Java, Python, Ruby),满足12-factor applications 。不区分 “apps” 或者“services”。 Kubernetes支持不同负载应用,包括有状态、无状态、数据处理类型的应用。只要这个应用可以在容器里运行,那么就能很好的运行在Kubernetes上。
  • Kubernetes不提供中间件(如message buses)、数据处理框架(如Spark)、数据库(如Mysql)或者集群存储系统(如Ceph)作为内置服务。但这些应用都可以运行在Kubernetes上面。
  • Kubernetes不部署源码不编译应用。持续集成的 (CI)工作流方面,不同的用户有不同的需求和偏好的区域,因此,我们提供分层的 CI工作流,但并不定义它应该如何工作。
  • Kubernetes允许用户选择自己的日志、监控和报警系统。
  • Kubernetes不提供或授权一个全面的应用程序配置 语言/系统(例如,jsonnet)。
  • Kubernetes不提供任何机器配置、维护、管理或者自修复系统。

四、Kubernetes不是什么?

   Kubernetes 组件

  • Master 组件

Master组件提供集群的管理控制中心。

Master组件可以在集群中任何节点上运行。但是为了简单起见,通常在一台VM/机器上启动所有Master组件,并且不会在此VM/机器上运行用户容器。

  • kube-apiserver

kube-apiserver用于暴露Kubernetes API。任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行。

  • ETCD

etcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。

  • kube-controller-manager

kube-controller-manager运行管理控制器,它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行。

这些控制器包括:

节点(Node)控制器。

副本(Replication)控制器:负责维护系统中每个副本中的pod。

端点(Endpoints)控制器:填充Endpoints对象(即连接Services&Pods)。

Service Account和Token控制器:为新的Namespace 创建默认帐户访问API Token。

  • cloud-controller-manager

云控制器管理器负责与底层云提供商的平台交互。云控制器管理器是Kubernetes版本1.6中引入的,目前还是Alpha的功能。

云控制器管理器仅运行云提供商特定的(controller loops)控制器循环。可以通过将--cloud-provider flag设置为external启动kube-controller-manager ,来禁用控制器循环。

cloud-controller-manager 具体功能:

节点(Node)控制器

路由(Route)控制器

Service控制器

卷(Volume)控制器

  • kube-schedule

kube-scheduler 监视新创建没有分配到Node的Pod,为Pod选择一个Node。

  • 插件 addons

插件(addon)是实现集群pod和Services功能的 。Pod由Deployments,ReplicationController等进行管理。Namespace 插件对象是在kube-system Namespace中创建。

  • DNS

虽然不严格要求使用插件,但Kubernetes集群都应该具有集群 DNS。

群集 DNS是一个DNS服务器,能够为 Kubernetes services提供 DNS记录。

由Kubernetes启动的容器自动将这个DNS服务器包含在他们的DNS searches中

  • 用户界面

kube-ui提供集群状态基础信息查看。更多详细信息,请参阅使用HTTP代理访问Kubernetes API

  • 容器资源监测

容器资源监控提供一个UI浏览监控数据。

  • Cluster-level Logging

Cluster-level logging,负责保存容器日志,搜索/查看日志。

  • 节点(Node)组件

节点组件运行在Node,提供Kubernetes运行时环境,以及维护Pod。

  • kubelet

kubelet是主要的节点代理,它会监视已分配给节点的pod,具体功能:

安装Pod所需的volume。

下载Pod的Secrets。

Pod中运行的 docker(或experimentally,rkt)容器。

定期执行容器健康检查。

Reports the status of the pod back to the rest of the system, by creating a mirror pod if necessary.

Reports the status of the node back to the rest of the system.

  • kube-proxy

kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象。

  • docker

docker用于运行容器。

  • RKT

rkt运行容器,作为docker工具的替代方案。

  • supervisord

supervisord是一个轻量级的监控系统,用于保障kubelet和docker运行。

  • fluentd

fluentd是一个守护进程,可提供cluster-level logging.。

五、K8S 中的对象

  • K8S 中的对象

 Kubernetes 对象是持久化的实体,表示整个集群的状态,通常使用yaml文件来描述这些对象,主要用于描述下面的一些信息:

哪些容器化应用在运行(以及在哪个 Node 上);

可以被应用使用的资源;

关于应用运行时表现的策略,比如重启策略、升级策略,以及容错策略;

操作(无论是创建、修改,或者删除) Kubernetes 对象都需要使用 Kubernetes API,比如,当使用 kubectl 命令行接口时,CLI 会执行必要的 Kubernetes API 调用,也可以在程序中直接调用 Kubernetes API。为了实现该目标,Kubernetes 当前提供了一个golang客户端库。

  • 对象的组成

每个 Kubernetes 对象包含两个嵌套的对象字段,它们负责管理对象的配置:

对象的spec(规约):必需,它描述了对象的期望状态(Desired State),希望对象所具有的特征,另外还有关于对象的一些基本信息(如名字);

对象的status(状态):描述了对象的实际状态(Actual State),由 Kubernetes 系统提供和更新的;

六、Kubernetes集群

Kubernetes将底层的计算资源连接在一起对外体现为一个高可用的计算机集群。Kubernetes将资源高度抽象化,允许将容器化的应用程序部署到集群中。为了使用这种新的部署模型,需要将应用程序和使用环境一起打包成容器。与过去的部署模型相比,容器化的应用程序更加灵活和可用,在新的部署模型中,应用程序被直接安装到特定的机器上,Kubernetes能够以更高效的方式在集群中实现容器的分发和调度运行。

Kubernetes集群包括两种类型资源:

Master节点:协调控制整个集群。

Nodes节点:运行应用的工作节点。

Master 负责集群的管理。Master 协调集群中的所有行为/活动,例如应用的运行、修改、更新等。

(Node)节点作为Kubernetes集群中的工作节点,可以是VM虚拟机、物理机。每个node上都有一个Kubelet,用于管理node节点与Kubernetes Master通信。每个Node节点上至少还要运行container runtime(比如docker或者rkt)。

Kubernetes上部署应用程序时,会先通知master启动容器中的应用程序,master调度容器以在集群的节点上运行,node节点使用master公开的Kubernetes API与主节点进行通信。最终用户还可以直接使用Kubernetes API与集群进行交互。

Kubernetes集群可以部署在物理机或虚拟机上。使用Kubernetes开发时,你可以采用Minikube。Minikube可以实现一种轻量级的Kubernetes集群,通过在本地计算机上创建虚拟机并部署只包含单个节点的简单集群。Minikube适用于Linux,MacOS和Windows系统。Minikube CLI提供集群管理的基本操作,包括 start、stop、status、 和delete。

七、Kubernetes架构

Kubernetes借鉴了Borg的设计理念,比如Pod、Service、Labels和单Pod单IP等。Kubernetes的整体架构跟Borg非常像,如下图所示

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设计理念和功能其实就是一个类似Linux的分层架构,如下图所示

  • 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
  • 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)
  • 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
  • 接口层:kubectl命令行工具、客户端SDK以及集群联邦
  • 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴
    • Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等
    • Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

关注我,定期为你提供最新资讯。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT瓜哥-杨得朝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值