kubernetes3
1、为什么要学习kubernetes?
以kubernetes为核心的云原生技术(以kubernetes为核心的云原生架构体系)正在吃掉整个世界(软件的世界),越来越多的企业把应用程序服务迁移到kubernetes云原生体系下; 无论是传统企业,互联网企业追求开发效率(实现企业的数字化转型: 开发到测试生成自动化的过程),云原生技术是企业数字化转型唯一路径,实现企业的生产效率倍增;
技术发展趋势:(探索未来的技术的发展方向及趋势)
1、2021年: 阿里达摩院发布了2021年十大颠覆性技术之一: 云原生技术颠覆的IT开发行业
2、云原生技术来了— Java语言真的快挂了吗??
Java(JDK,JVM) 诞生最大优势是什么??
① 跨平台(jvm)
② 庞大的生态体系
③ 庞大用户群体
Java语言的缺点是什么??
① 占用内存比较多,在并发处理上没有优势
② 性能不太友好(没有一些脚本语言性能强大: go,ruby)
③ 项目体积比较大
云原生技术: 典型的特性就是跨平台 (云原生技术和任何语言相结合)
GO + 云原生技术 : 实现了跨平台,且性能比java语言强大太多。
3、jdk16开始全面拥抱云原生技术
思考: Java语言性能突破的方向在哪里??à 脚本化(lambda表达式)-- 性能,体积
4、Spring,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个运维……
2、Kubernetes是什么?
2.1、服务部署演变
第一代服务部署模式: 物理机部署模式,所有服务都部署在物理机服务器中。(资源利用率不高,环境一致性问题)
第二代服务部署模式: 虚拟机部署模式,所有的服务都部署在虚拟机服务器。(资源利用率也不高,虚拟机本身占用资源,环境一致性问题)
问题: 当你虚拟机越来越多,构建了私有云平台,如何实现虚拟机自动化管理,调度,维护,监控??
答案: 需要虚拟机私有云平台操作系统,openstack
第三代服务部署模式: 容器化的部署方式,所有的应用服务都部署在容器中。
问题: 当你的服务越来越多,容器越来越多(几百万个容器),如何管理,调度,维护??
答案: 需要一个容器云操作系统:kubernetes
小结: kubernetes是什么??
答案: kubernetes是一个容器云操作系统,对容器进行管理/编排(扩容,调度,发布,监控……………)
2.2、Kubernetes概述
Kubernetes的核心就是为了服务调度,对服务实现自动化调度部署,提供了一个完美的解决方案。
2.3、Kubernetes历史
Google内存使用系统: borg系统,服务调度系统
很多其他厂商: docker公司:docker-swarm,mesos 开源的,免费的。
Kubernetes是google公司开发的,使用go语言开发的,参考google公司内部borg系统架构而开发的,是一套强大的容器编排技术(管理),开源的,免费;
3、容器编排技术
3.1、Docker-compose
Docker-compose也是一个容器编排技术,可以对容器进行批量的创建,更新;但是不能实现容器的其他控制(扩容,自愈,负载均衡……),且不能实现跨节点操作(很多服务器),也就是说docker-compose是单机版容器编排技术。
3.2、mesos
Mesos是Apache旗下的开源项目,实现容器编排管理,当然mesos必须借助一些组件: marathon , zookeeper
Mesos针对不得运行框架采用相对独立的调度系统,其框架也提供Docker容器的调度支持,Mesos并不负责调度,而是负责委派授权,毕竟很多框架已经实现了调度功能。
Mesos调度实现比较复杂,需要很多其他服务进行配合。且不能实现服务功能(扩容,自愈,API,安全,监控………)
3.3、Docker-swarm
Docker-swarm是一个docker公司开发的调度系统,使用标准的docker API , 和docker容器化完美结合,底层还使用docker-compose组合成为了一个容器编排技术。
Docker-swarm调度策略:
1、最少容器的,且忽略他们状态
2、随机
Swarm依据调度策略+过滤器组合选择一个合适的节点进行调度,实现服务的部署。Docker-swarm虽然能实现服务调度,但是很多功能无法实现(动态扩缩容,api管理,安全,监控……)
3.4、kubernetes
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、微服务: 微服务架构更加适合运行在云原生架构体系中,更好实现云原生
3、DevOps: 开发+运营(运维)结合,DevOps是一种敏捷的开发思想,让开发以一种更好的组织形式实现流水线的生产模式,实现产品高效交付。
4、CI/CD: 可持续交付,可持续部署
扩展: CNCF (云原生组织) : 对云原生做了一个新的定义,ServiveMesh服务网格架构也是云原生技术。
4.2、云知识扩展
云计算的三层架构:
1、iaas : 基础设施及服务 (机房建设:网络,硬件) --- 虚拟机为体系构建出来的私有云,公有云,混合云体系;
2、paas: 平台即服务: Kubernetes构建平台基础软件环境
3、saas: 软件即服务 软件服务提供商提供行业解决方案。
5、Kubernetes架构
5.1、Kubernetes集群
Kubernetes是一个分布式架构的集群,一个master对应一群node节点,k8s如果需要实现高可用,就可以对master节点建立多个master节点,实现master的主备关系;当master失效,备份的master节点就会立马别启用。
Master节点: 负责服务调度及服务发布,不负责服务存储部署(也就是master节点不允许部署服务的),而不是都被master节点调度部署到node节点。
Node节点: 服务最终都会被部署到node节点。
5.2、Master节点
Master节点核心组件:
1、api Server : 服务网关,所有的请求都必须经过api Server,进行统一认证授权
2、Scheduler: 调度器,负责把需要部署的服务调度到一个合适的node节点进行部署
3、controller manager : 控制器,管理kubernetes资源对象(k8s的一切资源都可以看做是资源对象),实现资源对象CRUD
4、etcd : nosql数据库(类似redis), 用来存储集群状态,网络状态,资源对象;
5.3、Node节点
Node节点核心组件:
1、Pod: 是k8s非常重要的一个概念,是一个k8s部署服务最小单元,管理的最小单元,pod内部封装的是容器
2、docker: docker引擎,k8s管理容器,容器是docker引擎创建的。
3、kubelet: node节点代理,kubelet代理master调度结果,在node节点创建服务。
4、kube-proxy : 负载均衡,服务发现
5、fluented : 日志监控组件,收集服务日志
6、K8s工作流程
6.1、服务调度流程
Docker容器化部署服务: 直接把服务部署在Docker容器即可(Dockerfile构建容器镜像,然后让镜像变成容器运行),容器的外层就是物理机或虚拟机(宿主机);
Kubernetes服务部署: 不会直接部署容器,而是部署POD服务,pod是一个进程,pod内部封装是容器,POD是kubernetes部署服务的最小单元。
6.2、k8s控制器
控制器: 控制服务资源对象,管理服务资源对象,实现资源对象crud.
1、Replication controller (): 副本控制器,控制服务副本数量,当服务副本数量一旦设定,副本控制器就必须保证服务集群副本数量与预期设置的数量一致。即使服务宕机,副本控制也必须及时恢复服务,以保证服务高可用性。
2、Node Controller : 管理node节点
3、namespace controller : 管理命名空间
4、Service controller (): 虚拟服务控制器,主要实现对pod负载均衡,服务发现。
5、EndPoints controller (): 维护service ,pod之间映射关系的控制器
6、Service Account Controller (): 本地服务访问安全控制 控制器
7、Persistent volume controller (): 持久化的数据卷的控制器,主要用来管理持久化的数据卷,用来做有状态服务部署。
8、DeamonSet controller : 让每一个服务节点都部署相同的服务
9、Deployment controller () : 无状态服务部署控制器
10、Job Controller : 批处理任务控制器
11、Pod AutoScaler controller() : 自动扩缩容控制器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2021-07-27 java文档注释
2020-07-27 对ts的研究