kubernetes3

1、为什么要学习kubernetes

        以kubernetes为核心的云原生技术(以kubernetes为核心的云原生架构体系)正在吃掉整个世界(软件的世界),越来越多的企业把应用程序服务迁移到kubernetes云原生体系下; 无论是传统企业,互联网企业追求开发效率(实现企业的数字化转型: 开发到测试生成自动化的过程),云原生技术是企业数字化转型唯一路径,实现企业的生产效率倍增;

技术发展趋势:(探索未来的技术的发展方向及趋势)

12021年: 阿里达摩院发布了2021年十大颠覆性技术之一: 云原生技术颠覆的IT开发行业

2、云原生技术来了— Java语言真的快挂了吗??

Java(JDK,JVM) 诞生最大优势是什么??

① 跨平台(jvm)

② 庞大的生态体系

③ 庞大用户群体

Java语言的缺点是什么??

① 占用内存比较多,在并发处理上没有优势

② 性能不太友好(没有一些脚本语言性能强大: go,ruby)

③ 项目体积比较大

云原生技术: 典型的特性就是跨平台 (云原生技术和任何语言相结合)

GO + 云原生技术 实现了跨平台,且性能比java语言强大太多。

3jdk16开始全面拥抱云原生技术

思考: Java语言性能突破的方向在哪里??à 脚本化(lambda表达式)-- 性能,体积

4Spring,SpringCloud向云原生技术演进

写的java代码 à Spring框架处理 à 脚本化的代码

1.1、轻装上阵

一旦使用kubernetes技术,研发团队不需要关心那些和项目业务没有太大关系的底层代码(底层通信组件,协议转换,服务治理,服务扩容,负载均衡,服务监控……, 只需要做项目业务开发即可,因此研发团队只需要一个小而精悍的团队即可。

1.2、全面拥抱微服务

云原生结合微服务特点: 拆分的很细小的服务(微小模块)叫做微服务架构,更加适合部署在云原生架构体系中,一般云原生架构中部署的服务,一般全部采用的是微服务架构。

微服务难题: 由于拆分的服务较多,服务之间调用关系变得复杂(服务之间调用链路变得复杂),增加了技术难度(服务出现了,排查困难)

1 服务问题排查困难

2 服务降级,限流,熔断

3) 链路追踪

4 服务监控(性能监控,日志监控)

一旦使用kubernetes后,就不需要关心以上内容了,一切都交给kubernetes来负责即可,因此我们终于全面拥抱微服务架构。

 

1.3、无缝迁移

项目开发(开发环境) -- 发布版本测试环境发布版本(Q:一模一样的环境)-- stable(稳定版) – 上线(生产环境)

存在问题: 测试环境,生产环境不一致的现象,往往造成以上线出问题了。

 

1.4、弹性扩容

 

服务上线: 促销活动 --- 流量增大(事先预知: 活动预演,压测预案)--- 预备服务器,无缝切换

 

   突发事件 --- 明星结婚 --- 弹性扩容

 

扩容指标: 根据cpu,内存使用率进行动态扩容,一旦cpu,内存使用率超过70%,立马对服务进行扩容。反之缩容

 

 

 

 

1.5、充分利用服务器资源

思考: 物理机,虚拟机部署应用服务的时候,这些服务器CPU,内存是否有被充分利用呢??

答案: 不能被充分利用

 

1.6、自动化运维

kubernetes为核心构建的DevOps流水线的生产模式,实现服务生产,发布,运维的自动化,大大增加了生产能力,节省了项目开发及运维成本。

Kubernetes自动化运维特性:

1、服务调度,发布

2、自愈

3、弹性收缩容

4、日志监控

5、容错

6、链路追踪

……………

运维:300个运维 ---- 3个运维……

 

2Kubernetes是什么?

2.1、服务部署演变

 

第一代服务部署模式: 物理机部署模式,所有服务都部署在物理机服务器中。(资源利用率不高,环境一致性问题)

第二代服务部署模式: 虚拟机部署模式,所有的服务都部署在虚拟机服务器。(资源利用率也不高,虚拟机本身占用资源,环境一致性问题)

问题: 当你虚拟机越来越多,构建了私有云平台,如何实现虚拟机自动化管理,调度,维护,监控??

答案: 需要虚拟机私有云平台操作系统,openstack

第三代服务部署模式: 容器化的部署方式,所有的应用服务都部署在容器中。

问题: 当你的服务越来越多,容器越来越多(几百万个容器),如何管理,调度,维护??

答案: 需要一个容器云操作系统:kubernetes

小结: kubernetes是什么??

答案: kubernetes是一个容器云操作系统,对容器进行管理/编排(扩容,调度,发布,监控……………)

 

2.2Kubernetes概述

Kubernetes的核心就是为了服务调度,对服务实现自动化调度部署,提供了一个完美的解决方案。

2.3Kubernetes历史

Google内存使用系统: borg系统,服务调度系统

很多其他厂商: docker公司:docker-swarm,mesos 开源的,免费的。

Kubernetesgoogle公司开发的,使用go语言开发的,参考google公司内部borg系统架构而开发的,是一套强大的容器编排技术(管理),开源的,免费;

 

3、容器编排技术

3.1Docker-compose

Docker-compose也是一个容器编排技术,可以对容器进行批量的创建,更新;但是不能实现容器的其他控制(扩容,自愈,负载均衡……,且不能实现跨节点操作(很多服务器),也就是说docker-compose是单机版容器编排技术。

3.2mesos

MesosApache旗下的开源项目,实现容器编排管理,当然mesos必须借助一些组件: marathon , zookeeper

Mesos针对不得运行框架采用相对独立的调度系统,其框架也提供Docker容器的调度支持,Mesos并不负责调度,而是负责委派授权,毕竟很多框架已经实现了调度功能。

Mesos调度实现比较复杂,需要很多其他服务进行配合。且不能实现服务功能(扩容,自愈,API,安全,监控………)

 

3.3Docker-swarm

Docker-swarm是一个docker公司开发的调度系统,使用标准的docker API , docker容器化完美结合,底层还使用docker-compose组合成为了一个容器编排技术。

 

Docker-swarm调度策略:

1、最少容器的,且忽略他们状态

2、随机

Swarm依据调度策略+过滤器组合选择一个合适的节点进行调度,实现服务的部署。Docker-swarm虽然能实现服务调度,但是很多功能无法实现(动态扩缩容,api管理,安全,监控……)

3.4kubernetes

​ Kubernetes则采用了Pod和Label这样的概念把容器组合成一个个的互相存在依赖关系的逻辑单元。相关容器被组合成Pod后被共同部署和调度,形成服务(Service)。这个是Kubernetes和Swarm,Mesos的主要区别。

 

​ Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。

 

 

Kubernetes 为你提供:

  • 服务发现和负载均衡

Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

  • 存储编排

Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

  • 自动部署和回滚

你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。

  • 自动完成装箱计算

Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。

  • 自我修复

Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。

  • 密钥与配置管理

Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥

 

4、云原生技术

4.1、什么是云原生?

云原生技术:

1、以kubernetes为核心的架构体系,就叫做云原生技术。

2、软件架构的思想,遵循kubernetes云原生的架构设计实现,这种架构体系叫着云原生架构。

 

落地方式:

1、架构维护: 软件架构设计思想

2、应用角度: 让所有服务(应用程序:开发程序,MySQL,ES,MQ……)都必须运行在容器中,然后使用容器编排技术管理,这样结构体系叫做云原生。

 

云原生的特点:

1、容器化: 所有的服务都必须运行在容器中

2、微服务: 微服务架构更加适合运行在云原生架构体系中,更好实现云原生

3DevOps: 开发+运营(运维)结合,DevOps是一种敏捷的开发思想,让开发以一种更好的组织形式实现流水线的生产模式,实现产品高效交付。

4CI/CD: 可持续交付,可持续部署

 

扩展: CNCF (云原生组织) 对云原生做了一个新的定义,ServiveMesh服务网格架构也是云原生技术。

 

4.2、云知识扩展

云计算的三层架构:

1iaas : 基础设施及服务 (机房建设:网络,硬件) --- 虚拟机为体系构建出来的私有云,公有云,混合云体系;

2paas: 平台即服务: Kubernetes构建平台基础软件环境

3saas: 软件即服务 软件服务提供商提供行业解决方案。

5Kubernetes架构

5.1Kubernetes集群

Kubernetes是一个分布式架构的集群,一个master对应一群node节点,k8s如果需要实现高可用,就可以对master节点建立多个master节点,实现master的主备关系;当master失效,备份的master节点就会立马别启用。

Master节点: 负责服务调度及服务发布,不负责服务存储部署(也就是master节点不允许部署服务的),而不是都被master节点调度部署到node节点。

Node节点: 服务最终都会被部署到node节点。

5.2Master节点

Master节点核心组件:

1api Server : 服务网关,所有的请求都必须经过api Server,进行统一认证授权

2Scheduler: 调度器,负责把需要部署的服务调度到一个合适的node节点进行部署

3controller manager : 控制器,管理kubernetes资源对象(k8s的一切资源都可以看做是资源对象),实现资源对象CRUD

4、etcd : nosql数据库(类似redis, 用来存储集群状态,网络状态,资源对象;

5.3Node节点

Node节点核心组件:

1、Pod k8s非常重要的一个概念,是一个k8s部署服务最小单元,管理的最小单元,pod内部封装的是容器

2docker: docker引擎,k8s管理容器,容器是docker引擎创建的。

3kubelet: node节点代理,kubelet代理master调度结果,在node节点创建服务。

4kube-proxy : 负载均衡,服务发现

5fluented : 日志监控组件,收集服务日志

6K8s工作流程

6.1、服务调度流程

Docker容器化部署服务: 直接把服务部署在Docker容器即可(Dockerfile构建容器镜像,然后让镜像变成容器运行),容器的外层就是物理机或虚拟机(宿主机);

Kubernetes服务部署: 不会直接部署容器,而是部署POD服务,pod是一个进程,pod内部封装是容器,POD是kubernetes部署服务的最小单元。

6.2k8s控制器

控制器: 控制服务资源对象,管理服务资源对象,实现资源对象crud.

1、Replication controller (): 副本控制器,控制服务副本数量,当服务副本数量一旦设定,副本控制器就必须保证服务集群副本数量与预期设置的数量一致。即使服务宕机,副本控制也必须及时恢复服务,以保证服务高可用性。

2、Node Controller : 管理node节点

3namespace controller : 管理命名空间

4、Service controller (): 虚拟服务控制器,主要实现对pod负载均衡,服务发现。

5、EndPoints controller (): 维护service ,pod之间映射关系的控制器

6、Service Account Controller (): 本地服务访问安全控制 控制器

7、Persistent volume controller () 持久化的数据卷的控制器,主要用来管理持久化的数据卷,用来做有状态服务部署。

8、DeamonSet controller : 让每一个服务节点都部署相同的服务

9、Deployment controller () 无状态服务部署控制器

10Job Controller : 批处理任务控制器

11Pod AutoScaler controller() 自动扩缩容控制器

 

posted @ 2022-07-27 15:32  又回到了起点  阅读(69)  评论(0编辑  收藏  举报