缘由

在写此系列文章之前,我做了3年的Java开发,后来因为项目的变动,接触了大约半年的k8s相关东西,零零散散,似懂非懂的,而且在日常开发中,经常会卡壳,问人总会被怼,所以自己索性来系统的学学大名鼎鼎的k8s,为日后自己的职业规划做一些打算。

本篇作为k8s系列文章的开篇,主要介绍了什么是云原生、k8s的引入以及云原生未来如何。

另外:

由于【kubbernetes中文指南】书中对这块的介绍太好了,大部分内容是原封不动的搬运过来的,各位如果有兴趣的可以看看此书,强烈推荐!!!

我在这里贴出电子版的地址,大家可放心食用。
Kubernetes 中文指南——云原生应用架构实战手册

解决了什么问题

传统应用升级缓慢、架构臃肿、不能快速迭代、故障不能快速定位、问题无法快速解决等问题,云原生这一概念横空出世。

什么是云原生

云原生是一种行为方式和设计理念,究其本质,凡是能够提高云上资源利用率应用交付效率的行为或方式都是云原生的。

从宏观概念上讲,云原生是不同思想的集合,集目前各种热门技术之大成。

从微观概念上讲,可分为如下四个方面:

  • 容器化:作为应用包装的载体
  • 持续交付:利用容器的轻便的特性,构建持续集成和持续发布的流水线
  • DevOps:开发与运维之间的协同,上升到一种文化的层次,能够让应用快速的部署和发布
  • 微服务:这是应用开发的一种理念,将单体应用拆分为微服务才能更好的实现云原生,才能独立的部署、扩展和更新

可能看起来有点晦涩难懂,我在这里说一下自己的理解:

所谓的原生,指的利用Java,php,c,c++,python等等开发语言开发出来的应用,应用需要部署到服务器上;而指的是云服务器,那么云原生结合起来就是原生应用上云的过程,以及上云的一系列解决方案

cloud-native-architecutre-mindnode.jpg

云原生的设计理念及特性

云原生其设计理念如下:

  • 面向分布式设计(Distribution):容器、微服务、API 驱动的开发;

  • 面向配置设计(Configuration):一个镜像,多个环境配置;

  • 面向韧性设计(Resistancy):故障容忍和自愈;

  • 面向弹性设计(Elasticity):弹性扩展和对环境变化(负载)做出响应;

  • 面向交付设计(Delivery):自动拉起,缩短交付时间;

  • 面向性能设计(Performance):响应式,并发和资源高效利用;

  • 面向自动化设计(Automation):自动化的 DevOps;

  • 面向诊断性设计(Diagnosability):集群级别的日志、metric 和追踪;

  • 面向安全性设计(Security):安全端点、API Gateway、端到端加密;

综上所述,云原生应用应该具备以下几个特性:

  • 敏捷
  • 可靠
  • 高弹性
  • 易扩展
  • 故障隔离保护
  • 不中断业务持续更新

Kubernetes 与云原生的关系

Kubernetes:云原生操作系统

00704eQkgy1frr4z08j6oj31p20w2n6n.jpg

Kubernetes 介绍

Kubernetes 是 Google 基于 Borg 开源的容器编排调度引擎,作为 CNCF(Cloud Native Computing Foundation)最重要的组件之一,它的目标不仅仅是一个编排系统,而是提供一个规范,可以让你来描述集群的架构,定义服务的最终状态,Kubernetes 可以帮你将系统自动得达到和维持在这个状态。

更直白的说,Kubernetes 用户可以通过编写一个 YAML 或者 json 格式的配置文件,也可以通过工具 / 代码生成或直接请求 Kubernetes API 创建应用,该配置文件中包含了用户想要应用程序保持的状态,不论整个 Kubernetes 集群中的个别主机发生什么问题,都不会影响应用程序的状态,你还可以通过改变该配置文件或请求 Kubernetes API 来改变应用程序的状态。

云原生的未来

下面是CNCF给出的云原生景观图。

如果图片不显示或者违规,请访问:https://landscape.cncf.io/
我也搞不清为啥csdn不让放这个图片=.=

在这里插入图片描述

该图中包括云原生的各种层次的提供者和应用,通过该图可以组合出一些列的云原生平台。

  • IaaS云提供商(公有云、私有云)
  • 配置管理,提供最基础的集群配置
  • 运行时,包括存储和容器运行时、网络等
  • 调度和管理层,协同和服务发现、服务管理
  • 应用层

也可以有平台提供以上所有功能,还可以有提供可观测性、分析和扩展应用。

看到这个景观图,大家觉得Kubernetes真的还只做了容器编排吗?实际上它是制定了一个标准。就像一个系统一样,所有的应用和插件都是基于它来构建的。

开始之前

希望您掌握以下知识和准备以下环境:

知识:

  1. Linux 操作系统原理;
  2. Linux 常用命令;
  3. Docker 容器原理及基本操作;
  4. 了解常用的中间件,比如Nginx,MySQL,Redis等;
  5. 云平台相关概念以及操作。

环境:

  1. 多台云服务器,安装Docker。

更多推荐