Kubernetes(一)--简介

一、什么是kubernetes(K8s)?

  Kubernetes作为容器编排生态圈中重要一员,是Google大规模容器管理系统borg的开源版本实现,吸收借鉴了google过去十年间在生产环境上所学到的经验与教训。 Kubernetes提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用。当前Kubernetes支持GCE、vShpere、CoreOS、OpenShift、Azure等平台,除此之外,也可以直接运行在物理机上.kubernetes是一个开放的容器调度管理平台,不限定任何一种言语,支持java/C++/go/python等各类应用程序 。
  kubernetes是一个完备的分布式系统支持平台,支持多层安全防护、准入机制、多租户应用支撑、透明的服务注册、服务发现、内建负载均衡、强大的故障发现和自我修复机制、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力,完善的管理工具,包括开发、测试、部署、运维监控,一站式的完备的分布式系统开发和支撑平台。

 使用Kubernetes可以:

  • 自动化容器的部署和复制
  • 随时扩展或收缩容器规模
  • 将容器组织成组,并且提供容器间的负载均衡
  • 很容易地升级应用程序容器的新版本
  • 提供容器弹性,如果容器失效就替换它,等等...

 

 Kubernetes解决的问题:

  1. 调度 - 容器应该在哪个机器上运行
  2. 生命周期和健康状况 - 容器在无错的条件下运行
  3. 服务发现 - 容器在哪,怎样与它通信
  4. 监控 - 容器是否运行正常
  5. 认证 - 谁能访问容器
  6. 容器聚合 - 如何将多个容器合并成一个工程

实际上,使用Kubernetes只需一个部署文件,使用一条命令就可以部署多层容器(前端,后台等)的完整集群

二、kubernetes角色  

  (1)Pod

  Pod是Kubernetes中最小部署单元,所有的容器均在Pod中运行,一个Pod可以承载一个或者多个相关的容器。Pod中容器共享存储和网络,同一个Pod中的容器会部署在同一个docker宿主机上并且能够共享资源。

  (2)Service

  Service是一个应用服务抽象,定义了Pod逻辑集合和访问这个pod集合的策略(比如访问策略)。Service代理Pod集合对外表现为一个访问入口,分配一个机器IP地址,来自这个IP的请求将负载均衡转发到后端Pod中的容器。Service通过Lable Selector选择一组Pod提供服务。

  (3)Volume

  数据卷

  • 可以用来共享Pod容器中使用的数据
  • 持久化数据

  (4)Namespace

  是kubernetes系统中的另一个重要的概念,通过将系统内部的对象“分配”到不同的Namespace中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。Kubernetes集群在启动后,会创建一个名为“default”的Namespace,如果不特别指明Namespace,则用户创建的Pod、RC、Service都被系统创建到“default”的Namespace中。

  (5)Label

  Label机制是K8S中一个重要设计,通过Label进行对象弱关联,灵活地分类和选择不同服务或业务,让用户根据自己特定的组织结构以松耦合方式进行服务部署。Label是一对KV,对用户而言非常有意义的,但对K8S本身而言没有直接意义的。Label可以在创建对象时指定,也可以在后期修改,每个对象可以拥有多个标签,但key值必须是唯一的。

  (6)RC(Replication Controller)

  Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行, 如果少于指定数量的pod副本(replicas),Replication Controller会启动新的Container,反之会杀死多余的以保证数量不变。Replication Controller使用预先定义的pod模板创建pods,一旦创建成功,pod 模板和创建的pods没有任何关联,可以修改pod 模板而不会对已创建pods有任何影响,也可以直接更新通过Replication Controller创建的pods。对于利用pod 模板创建的pods,Replication Controller根据label selector来关联,通过修改pods的label可以删除对应的pods。

  (7)Deployment

  Kubernetes Deployment提供了官方的用于更新Pod和Replica Set(下一代的Replication Controller)的方法,您可以在Deployment对象中只描述您所期望的理想状态(预期的运行状态),Deployment控制器为您将现在的实际状态转换成您期望的状态,例如,您想将所有的webapp:v1.0.9升级成webapp:v1.1.0,您只需创建一个Deployment,Kubernetes会按照Deployment自动进行升级。现在,您可以通过Deployment来创建新的资源(pod,rs,rc),替换已经存在的资源等。

  Deployment集成了上线部署、滚动升级、创建副本、暂停上线任务,恢复上线任务,回滚到以前某一版本(成功/稳定)的Deployment等功能,在某种程度上,Deployment可以帮我们实现无人值守的上线,大大降低我们的上线过程的复杂沟通、操作风险。

  (8)StatefulSet

  使用Deployment创建的Pod是无状态的,当挂在Volume之后,如果该Pod挂了,Replication Controller会再run一个来保证可用性,但是由于是无状态的,Pod挂了的时候与之前的Volume的关系就已经断开了,新起来的Pod无法找到之前volume。StatefulSet 的目的就是给为数众多的有状态负载提供正确的控制器支持。

  当应用有以下任意要求时,StatefulSet的价值就体现出来了。 
   ● 稳定的、唯一的网络标识。 
   ● 稳定的、持久化的存储。 
   ● 有序的、优雅的部署和扩展。 
   ● 有序的、优雅的删除和停止。

  (9)DaemonSet

  DaemonSet能够让所有(或者一些特定)的Node节点运行同一个pod。当节点加入到kubernetes集群中,pod会被(DaemonSet)调度到该节点上运行,当节点从kubernetes集群中被移除,被(DaemonSet)调度的pod会被移除,如果删除DaemonSet,所有跟这个DaemonSet相关的pods都会被删除。

  (10)Job

  在有些场景下,是想要运行一些容器执行某种特定的任务,任务一旦执行完成,容器也就没有存在的必要了。在这种场景下,创建pod就显得不那么合适。于是就是了Job,Job指的就是那些一次性任务。通过Job运行一个容器,当其任务执行完以后,就自动退出,集群也不再重新将其唤醒。还可以执行定时任务。

三、kubernetes组件

  1.kubectl
    客户端命令行工具,将接受的命令格式化后发送给kube-apiserver,作为整个系统的操作入口。

  2.kube-apiserver
    作为整个系统的控制入口,以REST API服务提供接口。

  3.kube-controller-manager
    用来执行整个系统中的后台任务,包括节点状态状况、Pod个数、Pods和Service的关联等。

  4.kube-scheduler
    负责节点资源管理,接受来自kube-apiserver创建Pods任务,并分配到某个节点。

  5.etcd
    负责节点间的服务发现和配置共享。

  6.kube-proxy
    运行在每个计算节点上,负责Pod网络代理。定时从etcd获取到service信息来做相应的策略。

  7.kubelet
    运行在每个计算节点上,作为agent,接受分配该节点的Pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver。

  8.DNS
    一个可选的DNS服务,用于为每个Service对象创建DNS记录,这样所有的Pod就可以通过DNS访问服务了。

四、工作流程

  

  1.Kubectl(user commands): k8s APIs客户端工具,通过用户输入命令操作APIs资源

  2.认证,用户输入命令要通过APIs的认证

  3.认证通过之后,交由APIs中REST中对象处理(Kubernetes以RESTFul形式开放接口,用户可操作的REST对象有三个Pod,service,controller)

  4.APIs中的操作处理都会持久化存储到一个分布式存储etcd

  5.Scheduler调度组件,会检测REST对象中是否有新的动作产生,并将具体操作,根据算法下发到node节点中

  6.Controller通过API Server提供的接口实时监控整个集群的每个资源对象的当前状态,当发生各种故障导致系统状态发生变化时,会尝试将系统状态修复到“期望状态”

  7.kubeletl类似于一个agent,处理AIPs下发的任务,如创建Pod、容器、获取节点信息等

  8.proxy负责网络代理,Service具体实现就是有proxy处理,维护网络规则和四层负载均衡工作

原文地址:https://www.cnblogs.com/jay-fred/p/9968860.html

时间: 2024-10-09 10:59:12

Kubernetes(一)--简介的相关文章

kubernetes的简介及使用教程(转)

前言: 总结docker的时候,曾提到swarm和kubernetes,而kubbernetes在技术市场的应用上要比swarm好很多,今天准备总结下kubernetes的简介和用法,恰好发现了<惨绿少年>博主的这篇文章,(感谢!)总结的非常好,既有简介又有用例,就直接转了,嘿嘿.原文地址附在文末. PS:之前学习cobbler时似乎就看过他的博客,写的的确很不错,是个优秀的前辈. 1.1 Kubernetes简介 1.1.1 什么是Kubernetes Kubernetes (通常称为K8s

K8s(Kubernetes)简介及安装部署

前言: k8s是Kubernetes的简称,因为K和S之间有8个字母,所以才会被称为k8s. k8s最初是在Google公司内部使用了10多年的技术,它的前身是叫做Borg(博格),直到2015年才被Google公司捐赠为开源项目. 如果之前我们有接触过OpenStack,那么应该知道管理VM虚拟机资源可以用OpenStack.那么管理容器所对应的开源平台是什么呢?k8s就是其中之一,在k8s之前也有很多容器管理平台,有docker自身的docker swarm,也有apache推出的Mesos

kubernetes介绍

容器编排工具 Docker 编排三剑客 docker compose  单机编排工具 docker swarm docker machine ASF:mesos marathon kubernetes DevOps,MicroServices,Blockchain DevOps:应用模式开发,一种趋势 CI:持续集成 CD:持续交付,Delivery CD:持续部署,Deployment 应用程序架构 单体 --> 分层架构 --> 微服务 Kubernetes介绍     简介 Kubern

Kubernetes 知识点

Kubernetes 架构简介 典型的 Kubernetes 集群包含一个 master 和很多 node. Master 是控制集群的中心,node 是提供 CPU.内存和存储资源的节点. Master 上运行着多个进程,包括面向用户的 API 服务.负责维护集群状态的 Controller Manager.负责调度任务的 Scheduler 等. 每个 node 上运行着维护 node 状态并和 master 通信的 kubelet,以及实现集群网络服务的 kube-proxy. 安装 Ku

Kubernetes系列之Kubernetes资源管理

Kubernetes 从创建之初的核心模块之一就是资源调度.想要在生产环境使用好 Kubernetes,必须对它的资源模型以及资源管理非常了解.这篇文章算是对散布在网络上的 Kubernetes 资源管理内容的一个总结.干货文章,强列推荐一读. Kubernetes 资源简介 什么是资源? 在 Kubernetes 中,有两个基础但是非常重要的概念:Node 和 Pod.Node 翻译成节点,是对集群资源的抽象:Pod 是对容器的封装,是应用运行的实体.Node 提供资源,而 Pod 使用资源,

K8S调度之标签选择器

Kubernetes 调度简介 除了让 kubernetes 集群调度器自动为 pod 资源选择某个节点(默认调度考虑的是资源足够,并且 load 尽量平均),有些情况我们希望能更多地控制 pod 应该如何调度.比如,集群中有些机器的配置更好( SSD,更好的内存等),我们希望比较核心的服务(比如说数据库)运行在上面:或者某两个服务的网络传输很频繁,我们希望它们最好在同一台机器上,或者同一个机房.有一些特殊的应用,我们就希望它们能运行在我们指定的节点上,还有些情况下,我们希望某个应用在所有的节点

K8s之MySQL实现数据持久化

这个是一个只写配置及验证的博文...... 博文大纲:1.搭建nfs存储2.创建PV3.创建PVC4.确认pv及pvc的状态5.创建pod+svc(service)6.进入MySQL数据库,添加测试数据7.手动删除节点上的容器,验证数据库内的数据是否还存在8.模拟MySQL容器所在的节点宕机,验证数据是否会丢失9.client端访问MySQL数据库 k8s集群环境如下: master节点IP:192.168.20.6 node01节点IP:192.168.20.7 node02节点IP:192.

jinkens+gitlab针对k8s集群实现CI/CD

一.环境准备 k8s集群环境(我这里是三台的K8s集群): 单独一台docker服务器,主要用于向私有仓库上传镜像,Jenkins和gitlab也部署在这台服务器: 上述环境共计服务器4台,均指向同一个私有仓库,以便共享docker镜像: 服务器IP依次为192.168.20.2.20.3.20.4.20.5(前三个IP为K8s集群中的节点) Jenkins采用war包的方式部署,需要用到tomcat环境,自行参考博文,进行部署:其他环境部署可以参考以下博文:Tomcat安装及优化配置:Dock

008.kubernets的调度系统之标签选择器

一 Kubernetes 调度简介 除了让 kubernetes 集群调度器自动为 pod 资源选择某个节点(默认调度考虑的是资源足够,并且 load 尽量平均),有些情况我们希望能更多地控制 pod 应该如何调度.比如,集群中有些机器的配置更好( SSD,更好的内存等),我们希望比较核心的服务(比如说数据库)运行在上面:或者某两个服务的网络传输很频繁,我们希望它们最好在同一台机器上,或者同一个机房.有一些特殊的应用,我们就希望它们能运行在我们指定的节点上,还有些情况下,我们希望某个应用在所有的

Kubernetes系统架构简介

1. 前言 Together we will ensure that Kubernetes is a strong and open container management framework for any application and in any environment, whether in a private, public or hybrid cloud. Urs Hölzle, Google Kubernetes作为Docker生态圈中重要一员,是Google多年大规模容器管理