java系统找不到指定文件怎么解决
237
2022-09-08
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个运维 ----
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: 平台即服务:
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() : 自动扩缩容控制器
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~