k8s系列一什么是云原生
k8s系列(一)——什么是云原生
缘由
在写此系列文章之前,我做了3年的Java开发,后来因为项目的变动,接触了大约半年的k8s相关东西,零零散散,似懂非懂的,而且在日常开发中,经常会卡壳,问人总会被怼,所以自己索性来系统的学学大名鼎鼎的k8s,为日后自己的职业规划做一些打算。
本篇作为k8s系列文章的开篇,主要介绍了什么是云原生、k8s的引入以及云原生未来如何。
另外:
由于【kubbernetes中文指南】书中对这块的介绍太好了,大部分内容是原封不动的搬运过来的,各位如果有兴趣的可以看看此书,强烈推荐!!!
我在这里贴出电子版的地址,大家可放心食用。
解决了什么问题
传统应用升级缓慢、架构臃肿、不能快速迭代、故障不能快速定位、问题无法快速解决等问题,云原生这一概念横空出世。
什么是云原生
云原生是一种行为方式和设计理念,究其本质,凡是能够 提高云上资源利用率 和 应用交付效率的行为或方式 都是云原生的。
从宏观概念上讲,云原生是不同思想的集合,集目前各种热门技术之大成。
从微观概念上讲,可分为如下四个方面:
- 容器化:作为应用包装的载体
- 持续交付:利用容器的轻便的特性,构建持续集成和持续发布的流水线
- DevOps:开发与运维之间的协同,上升到一种文化的层次,能够让应用快速的部署和发布
- 微服务:这是应用开发的一种理念,将单体应用拆分为微服务才能更好的实现云原生,才能独立的部署、扩展和更新
可能看起来有点晦涩难懂,我在这里说一下自己的理解:
所谓的
原生
,指的利用Java,php,c,c++,python等等开发语言开发出来的应用,应用需要部署到服务器上;而
云
指的是云服务器,那么
云原生
结合起来就是原生应用上云的过程,以及
上云的一系列解决方案
。
云原生的设计理念及特性
云原生其设计理念如下:
- 面向分布式设计(Distribution):容器、微服务、API 驱动的开发;
- 面向配置设计(Configuration):一个镜像,多个环境配置;
- 面向韧性设计(Resistancy):故障容忍和自愈;
- 面向弹性设计(Elasticity):弹性扩展和对环境变化(负载)做出响应;
- 面向交付设计(Delivery):自动拉起,缩短交付时间;
- 面向性能设计(Performance):响应式,并发和资源高效利用;
- 面向自动化设计(Automation):自动化的 DevOps;
- 面向诊断性设计(Diagnosability):集群级别的日志、metric 和追踪;
- 面向安全性设计(Security):安全端点、API Gateway、端到端加密;
综上所述,云原生应用应该具备以下几个特性:
- 敏捷
- 可靠
- 高弹性
- 易扩展
- 故障隔离保护
- 不中断业务持续更新
Kubernetes 与云原生的关系
Kubernetes:云原生操作系统
Kubernetes 介绍
是 Google 基于 开源的容器编排调度引擎,作为 (Cloud Native Computing Foundation)最重要的组件之一,它的目标不仅仅是一个编排系统,而是提供一个规范,可以让你来描述集群的架构,定义服务的最终状态,Kubernetes 可以帮你将系统自动得达到和维持在这个状态。
更直白的说,Kubernetes 用户可以通过编写一个 YAML 或者 json 格式的配置文件,也可以通过工具 / 代码生成或直接请求 Kubernetes API 创建应用,该配置文件中包含了用户想要应用程序保持的状态,不论整个 Kubernetes 集群中的个别主机发生什么问题,都不会影响应用程序的状态,你还可以通过改变该配置文件或请求 Kubernetes API 来改变应用程序的状态。
云原生的未来
下面是CNCF给出的云原生景观图。
如果图片不显示或者违规,请访问:https://landscape.cncf.io/
我也搞不清为啥csdn不让放这个图片=.=
该图中包括云原生的各种层次的提供者和应用,通过该图可以组合出一些列的云原生平台。
- IaaS云提供商(公有云、私有云)
- 配置管理,提供最基础的集群配置
- 运行时,包括存储和容器运行时、网络等
- 调度和管理层,协同和服务发现、服务管理
- 应用层
也可以有平台提供以上所有功能,还可以有提供可观测性、分析和扩展应用。
看到这个景观图,大家觉得Kubernetes真的还只做了容器编排吗?实际上它是制定了一个标准。就像一个系统一样,所有的应用和插件都是基于它来构建的。
开始之前
希望您掌握以下知识和准备以下环境:
知识:
- Linux 操作系统原理;
- Linux 常用命令;
- Docker 容器原理及基本操作;
- 了解常用的中间件,比如Nginx,MySQL,Redis等;
- 云平台相关概念以及操作。
环境:
- 多台云服务器,安装Docker。