云原生是趋势吗?学习k8s和docker的意义在哪里?

幻灰龙 幻灰龙     2022-12-16     333

关键词:

直接答案: 是!

很多学生在学习 ‘云’, 这里有很多未知的新技术、工具、和流程。

很多工程师写的程序,被部署到了"云原生"平台里运行,“云原生”和“云主机”有什么区别?

请看 云原生入门技能树

细细说下为什么。

从前,写代码只要在单机上写即可,但是编程会演化。

例如,写单机程序。写一个单机命令行程序; 写一个单机GUI程序,此时需要关心数据,模型,界面; 写一个单机网页程序。程序利用到了单机的资源: 内存,CPU,磁盘存储。为了利用内存,做了各种压榨内存的内存分配器,为了便利地使用内存,有了引用计数和垃圾回收。为了利用CPU,操作系统提供了进程和线程抽象,用户态程序提供了协程调度。为了在多线程间共享状态,有了同步/互斥/信号量。为了多进程间共享状态,有了内存共享。为了利用磁盘,有单机数据库sqlite,有各种数据冗余编码分片存储和解码技术。

例如,写服务端/客户端程序。写一个远程服务的命令行客户端程序,例如mysql命令行客户端。写一个B/S的GUI程序,例如点菜系统。将网页部署到服务端。程序用到了服务端的资源: 服务器的内存,CPU,磁盘,数据库。对于客户端来说,核心在于业务逻辑,客户端CPU密集型计算,剩下的通过API请求完成。于是有了前后端分工。服务端让程序的状态存储和计算资源对于客户端来说是1:N的关系。这个时候服务端只要是单机即可。

例如,服务端构架演化。网站请求的静态资源请求量大了需要CDN。数据库数据多了需要做主从分离。数据库请求量大了需要做缓存。接口层顶不住了需要上高性能反向代理服务器。这样逐渐地,服务端程序变成了多机。

例如,服务端程序本身也会1变3。这个时候也不是什么微服务,就是多个服务的依赖,A服务依赖B服务,至于A和B是不是微也没人管。但是服务多了就要有服务间请求的代理问题,发布和订阅等问题,消息队列做了这些事,例如zeromq。分离的服务间除了数据库,还要有一些重要的全局元数据同步解决状态一致性问题,元数据管理做了这件事,例如zookeeper。服务多了,就需要命名,名字最后还得转成ip端口,名字服务做了这件事。这样经过一系列操作,让分布式程序能尽量像单机程序一样工作。

例如,写分布式数据处理程序。典型的是map/reduce构架。接着各种大数据处理框架卷起来。这是因为数据量大了,单机放不下也处理不过来,通过分布式数据处理来利用内存,cpu。但是对带宽提出了要求。分布式还带来了对日志收集,监控,链路跟踪的需求。

例如,写微服务程序。分布式程序变得复杂了,于是把很多经典的做法做了规范化。传统单机上写程序,也分单进程程序和多进程程序,例如Chrome浏览器。微服务通常建立在元数据同步,授权,消息队列的基建上。每个服务的状态内部化,服务间通过API解耦。代价之一是状态存储的分离。微服务也带来了服务发现和注册的需求。微服务是分布式服务利用多机内存,cpu的进一步规范化。

例如,写Dockerfile。容器化一开始只是解决依赖环境打包的问题。这带来了一层虚拟化层,在尽量少牺牲性能损耗的基础上,带来了可移植性。早期Java的JVM希望做到一次编写到处运行,运行在那里呢?运行在JVM虚拟机上。但是编程语言总是忘记了它不是本尊,本尊是操作系统环境。编程语言提供了程序运行的运行时(runtime),但是语言之下,是操作系统的环境,文件系统,环境的配置,以及所有依赖的其他程序,这些构成了大的运行时。容器提供了真自包含运行时的能力。
从容器开始,前面的那些如何写程序的形态全部都要重来一遍。单机程序的容器化,服务端客户端程序,特别是服务端程序的容器化。分布式程序当然也可以全部容器化,全部用容器来启动。连数据库,缓存,消息队列,都可以容器化。docker是典型的容器。

那么写一个在分布式环境下上传,下载,调度容器在不同服务器上运行的元程序,就可以极大简化分布式或者微服务的程序部署和运行流程。这就是“容器编排”,也就是k8s做的事情。它把分布式程序的自包含了,成为了一个更大的运行时。此时,又可以假装在写单机程序了。

这里发生了质的变化。以前,假设一个程序是一个进程,进程是被操作系统编排和调度的。你也可以说操作系统是“进程编排程序”。现在,假设一个程序是一个容器,容器是被“容器编排”程序调度的。我们可以说“进程编排”程序是操作系统,当然也可以说“容器编排”是XX系统。XX=操作?

一个视角是,在程序直接运行在操作系统假设下,微服务的管理就有服务网格的概念。就是把服务注册,发现,消息队列,流量监控,日志收集,链路跟踪之类的,都规约到微服务运行所依赖的标准套装上。这是微服务的“运行时”. 在程序容器化后运行在容器编排环境里,微服务也被容器化,当然对应的服务网格这个“运行时”也被容器化后运行在容器编排环境里。例如: istio 是服务网格的一种实现,可以容器化后运行在容器编排环境k8s里。在这个基础之上,写微服务,容器化,跑在k8s里,获得k8s里的istio的好处。一个超大的运行时。

操作系统的程序,一般通过包管理软件来下载,安装,卸载。容器编排作为一个平台,也可以有自己这层抽象层的包管理软件。例如k8s的helm包管理。

有了k8s+容器化,本质上还是对云上服务器资源的使用,也就是“云原生”的含义,程序运行所要消耗的资源,一开始就假设是云的资源,把云变成像单机一样去写程序。

如果是多云的环境,在不同环境部署k8s又是一个不同云环境依赖的问题。这个时候需要多云的基础设施部署规范,可移植。Terraform 就是做这个事情的。

这些云原生环境是如何一步一步搭建出来的呢?对于很多初学者来说,有很多未知的新技术、工具、和流程,在 “云原生入门技能树”里,我做了一个经过反复调整的设计:云原生入门技能树

到了这里,假设上面的这些,都是云提供好的,是标准的,像买云主机环境一样(本质是个虚拟化的Linux操作系统运行时,”进程编排程序”),买云原生环境(本质是个虚拟化的XX系统运行时,“容器编排程序”). 那么,对于开发者来说,就是“云原生”: 我又可以写“单机程序了”。

#云原生征文#深入万物基础-容器

深入万物基础-容器一、思考我们在k8s里面的容器和docker的容器有什么异同?其实docker之前有自己的一套编排软件:dockerswarm它可以在多台主机中创建一个docker集群,但是也仅限于此了,docker在很早就放弃了这个项目。dockermachine... 查看详情

原来懂docker和k8s,找工作这么吃香!

随着云原生时代的到来,各大厂纷纷上云,甚至有人说,未来的软件就是生在云上,长在云上的。在这种云原生时代大势下,衍生出来的 Kubernetes工程师、云原生工程师的薪资也水涨船高,大厂不惜花重金... 查看详情

云原生存储详解:容器存储与k8s存储卷(代码片段)

作者|阚俊宝阿里云技术专家导读:云原生存储详解系列文章将从云原生存储服务的概念、特点、需求、原理、使用及案例等方面,和大家一起探讨云原生存储技术新的机遇与挑战。本文为该系列文章的第二篇,会对容器存储的... 查看详情

再见了docker!go落地的k8s云原生架构已成气候!

...0c;BAT、京东、美团、字节都走上了全域容器化部署以及云原生架构的康庄大道。美团技术团队云原生演进之路如果你认为 Docker和Kubernetes是运维的事儿,和普通开发没关系,那可就大错特错了。调查报告显示,在5000&#... 查看详情

docker圣经:大白话说docker底层原理,6w字实现docker自由(代码片段)

...到。尼恩的技术社群(50+)中,很多小伙伴凭借“左手云原生+右手大数据”的绝活,拿到了offer,并且是非常优质的offer,据说年终奖都足足18个月。而云原生的核心组件是Docker+K8S,但是Docker又很难。在这里,尼恩从架构师视角... 查看详情

前端走进云原生,k8s部署助力项目上云(代码片段)

 一、云原生云原生是面向云应用设计的一种全新架构理念,是充分发挥云效能的最佳实践路径,可以帮助企业构建弹性可靠、松耦合、易管理可观测的应用系统,提升关键应用的交付效率,降低系统的运维复杂度。云原生是一种文化... 查看详情

docker与k8s的恩怨情仇-云原生时代的闭源落幕

转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。在本系列前几篇文章中,我们介绍了从CloudFoundry到Docker等PaaS平台的发展迭代过程。今天我们继续来为大家介绍... 查看详情

docker问题集锦(32)-云原生大趋势下的容器化技术现状与发展

目录前言正文一、传统虚拟技术面临的挑战二、容器化的含义三、 查看详情

你准备好了在云中工作吗?

...这个话题聊下云时代的技能。无服务器计算,容器化,云原生应用,DevOps,人工智能,机器学习以及混合云和多云解决方案等IT趋势正在成为主流或“新常态”。所有大小企业都在寻找具有许多热门趋势关键技能的云专家。在无... 查看详情

前端走进云原生,k8s部署助力项目上云(代码片段)

 一、云原生云原生是面向云应用设计的一种全新架构理念,是充分发挥云效能的最佳实践路径,可以帮助企业构建弹性可靠、松耦合、易管理可观测的应用系统,提升关键应用的交付效率,降低系统的运维复杂度。云原生是一种文化... 查看详情

前端走进云原生,k8s部署助力项目上云(代码片段)

 一、云原生云原生是面向云应用设计的一种全新架构理念,是充分发挥云效能的最佳实践路径,可以帮助企业构建弹性可靠、松耦合、易管理可观测的应用系统,提升关键应用的交付效率,降低系统的运维复杂度。云原生是一种文化... 查看详情

云原生kubernetes系列第五篇kubeadmv1.20部署k8s集群架构(人生这道选择题,总会有遗憾)(代码片段)

系列文章目录😜即日起,更新云原生相关知识,喜欢的小伙伴可以给我点个三连喔😜收录至专栏云原生😜【云原生Docker系列第一篇】Docker镜像管理😜【云原生Docker系列第二篇】Docker容器管理😜【云... 查看详情

2019北美kubecon+cloudnativecon上的k8s五大趋势

...会今年在圣地亚哥举办,超过12000名参会者以及100多个云原生供应商出席了这次大会。越来越多的企业开始采用K8S和容器架构来进行数字化转型的实践。我们总结了目前K8S发展存在的挑战,以及未来K8S发展的五大趋势,在这里分... 查看详情

k8s稳居容器榜首,docker冲顶技术热词,微服务应用热度不减,2021云原生开发者现状

...下,企业上云已成为企业和政府的普遍共识,云原生开发者迎来了最好的时代。从云原生概念提出后的爆炸式增长,到近年来进入稳定期,开发者也逐渐在各个技术领域中得到历练、沉淀和升华。中国云原生开发... 查看详情

springcloud与微服务学习总结(13)——云原生趋势下,微服务的拆分粒度如何把握?

前言微服务在最近几年大行其道,很多公司的研发人员都在考虑微服务架构,同时,随着Docker容器技术和自动化运维等相关技术发展,微服务变得更容易管理,这给了微服务架构良好的发展机会。在做微服务的路上,拆分服务是... 查看详情

springcloud与微服务学习总结(13)——云原生趋势下,微服务的拆分粒度如何把握?

前言微服务在最近几年大行其道,很多公司的研发人员都在考虑微服务架构,同时,随着Docker容器技术和自动化运维等相关技术发展,微服务变得更容易管理,这给了微服务架构良好的发展机会。在做微服务的路上,拆分服务是... 查看详情

云原生之kubernetes实战部署k8s集群管理平台wayne

【云原生之kubernetes实战】部署k8s集群管理平台Wayne一、Wayne平台介绍1.Wayne简介2.Wayne特点3.Wayne架构二、检查本地docker状态1.检查docker版本2.检查docker状态三、安装docker-compose1.安装docker-compose2.给docker-compose文件添加执行权限3.查看doc... 查看详情

阿里云资深专家李国强:云原生的一些趋势和新方向

简介:云原生不仅仅是技术,更重要的是云原生技术需要和云计算进行结合,帮助用户构建云原生架构的应用。2021年11月26日,阿里云用户组(AUG)第3期活动在广州顺利举行。具有丰富的容器、微服务等领... 查看详情