kubernetes简介

Black lives matter.

一、kubernetes是什么

Kubernetes (K8s) 是生产级别的容器编排系统,用于自动化部署、扩展和管理容器化应用程序,

它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现,

简单来说,k8s是用来管理容器集群的工具。

该项目托管在CNCF(云原生计算基金会)。

二、kubernetes特性

1.服务发现和负载平衡

无需修改您的应用程序即可使用不熟悉的服务发现机制。

Kubernetes为Pods提供自己的IP地址并为一组Pod提供单个DNS名称,并且可以在它们之间进行负负载均衡。

2.服务拓扑

基于群集拓扑的服务流量路由。

3.存储编排

自动挂载您选择的存储系统,无论是本地存储,公共云提供商(例如GCP或AWS)还是网络存储系统(例如NFS,iSCSI,Gluster,Ceph,Cinder或Flocker)。

4.自我修复

重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器,并且在它们准备好服务之前不会将它们公布给客户端。

5.自动部署和回滚

Kubernetes会逐步推出针对应用或其配置的更改,确保在监视应用程序运行状况的同时,不会终止所有实例。

如果出现问题,Kubernetes会为您回滚更改。充分利用不断成长的部署解决方案生态系统。

6.机密和配置管理

部署和更新机密和应用程序配置,而无需重建镜像,也不会在堆栈配置中暴露机密。

7.自动装箱

根据资源需求和其他约束自动放置容器,同时不会牺牲可用性,将任务关键工作负载和尽力服务工作负载进行混合放置,以提高资源利用率并节省更多资源。

8.批量执行

除了服务之外,Kubernetes还可以管理您的批处理和CI工作负载,并根据需要替换发生故障的容器。

9.IPv4/IPv6双协议栈

将IPv4和IPv6地址分配给Pod和Services。

10.水平伸缩

使用一个简单的命令、一个UI或基于CPU使用情况自动对应用程序进行伸缩。

三、Kubernetes 不是什么 

Kubernetes 不是传统的、包罗万象的 PaaS(平台即服务)系统。由于 Kubernetes 运行在容器级别而不是硬件级别,因此它提供了 PaaS 产品共有的一些普遍适用的功能,例如部署、扩展、负载均衡、日志记录和监视。但是,Kubernetes 不是单一的,默认解决方案是可选和可插拔的。Kubernetes 提供了构建开发人员平台的基础,但是在重要的地方保留了用户的选择和灵活性。

Kubernetes 不限制支持的应用程序类型。Kubernetes 旨在支持极其多种多样的工作负载,包括无状态、有状态和数据处理工作负载。如果应用程序可以在容器中运行,那么它应该可以在 Kubernetes 上很好地运行。

Kubernetes 不部署源代码,也不构建您的应用程序。持续集成、交付和部署(CI/CD)工作流取决于企业组织的文化、偏好以及技术要求。

Kubernetes 不提供应用程序级别的服务作为内置服务,例如中间件(例如,消息总线)、数据处理框架(例如,Spark)、数据库(例如,mysql)、缓存、集群存储系统(例如,Ceph)。这样的组件可以在 Kubernetes 上运行,并且/或者可以由运行在 Kubernetes 上的应用程序通过可移植机制(例如,开放服务代理)来访问。

Kubernetes 不指定日志记录、监控或告警解决方案。它提供了一些集成作为概念证明,并提供了收集和导出指标的机制。

Kubernetes 不提供或不要求配置语言/系统(例如 jsonnet),它提供了声明性 API,该声明性 API 可以由任意形式的声明性规范所构成。

Kubernetes 不提供也不采用任何全面的机器配置、维护、管理或自我修复系统。

此外,Kubernetes 不仅仅是一个编排系统,实际上它消除了编排的需要。编排的技术定义是执行已定义的工作流程:首先执行 A,然后执行 B,再执行 C。相比之下,Kubernetes 包含一组独立的、可组合的控制过程,这些过程连续地将当前状态驱动到所提供的所需状态。从 A 到 C 的方式无关紧要,也不需要集中控制,这使得系统更易于使用且功能更强大、健壮、弹性和可扩展性。

四、相关概念

1.概述
要使用 Kubernetes,你需要用 Kubernetes API 对象来描述集群的预期状态(desired state):包括你需要运行的应用或者负载,它们使用的镜像、副本数,以及所需网络和磁盘资源等等。你可以使用命令行工具 kubectl 来调用 Kubernetes API 创建对象,通过所创建的这些对象来配置预期状态。你也可以直接调用 Kubernetes API 和集群进行交互,设置或者修改预期状态。

一旦你设置了你所需的目标状态,Kubernetes 控制面(control plane) 会通过 Pod 生命周期事件生成器(PLEG),促成集群的当前状态符合其预期状态。为此,Kubernetes 会自动执行各类任务,比如运行或者重启容器、调整给定应用的副本数等等。

Kubernetes 控制面由一组运行在集群上的进程组成:
Kubernetes 主控组件(Master)包含三个进程,都运行在集群中的某个节点上,主控组件通常被称为 master 节点。这些进程包括:kube-apiserver、kube-controller-manager 和 kube-scheduler。
集群中的每个非 master 节点都运行两个进程:
kubelet,和 master 节点进行通信。
kube-proxy,一种网络代理,将 Kubernetes 的网络服务代理到每个节点上

2.Kubernetes 对象
Kubernetes包含很多用来表示系统状态的抽象层,包括:已部署的容器化应用和负载、与它们相关的网络和磁盘资源,以及有关集群正在执行的其他操作的信息。这些抽象层使用 Kubernetes API 中的对象来表示。
Kubernetes的基本对象包括:
Pod
Service
Volume
Namespace

Kubernetes还包含更高级别的抽象,这些抽象基于基本对象通过控制器构建,并提供其他功能和便利性。
具体包括:
Deployment
DaemonSet
StatefulSet
ReplicaSet
Job

3.Kubernetes 控制面Control Plane
Kubernetes 控制面的各个部分,(如 Kubernetes 主控组件和 kubelet 进程),管理着 Kubernetes 如何与你的集群进行通信。控制面维护着系统中所有的 Kubernetes 对象的状态记录,并且通过连续的控制循环(control loop)来管理这些对象的状态。在任意时间点,控制面的控制循环都能响应集群中的变化,并且让系统中所有对象的实际状态与你提供的预期状态相匹配。

比如,当你通过 Kubernetes API 创建一个 Deployment 对象,你就为系统增加了一个新的期望状态。Kubernetes 控制面记录着对象的创建,并通过启动必要的应用然后将它们调度至集群某个节点上来执行你的指令,以此来保持集群的实际状态和期望状态的匹配。

4.Kubernetes Master 节点
Kubernetes master 节点负责维护集群的期望状态。当你要与 Kubernetes 通信时,使用如 kubectl 的命令行工具,就可以直接与 Kubernetes master 节点进行通信。
"master" 是指管理集群状态的一组进程的集合。通常这些进程都运行在集群中一个单独的节点上,这个节点则被称为master节点。master节点也可以扩展副本数,来获取更好的可用性及冗余。

5.Kubernetes Node 节点
集群中的 node 节点都是用来运行你的应用和云工作流的机器(虚拟机、物理机等)。Kubernetes master 节点控制所有 node 节点;你很少需要和 node 节点进行直接通信。

 

posted on 2020-06-23 19:10  流年似水zlw  阅读(829)  评论(0)    收藏  举报

导航