
云原生十二法则
十二法则讲解
https://zhuanlan.zhihu.com/p/243404169
1. 国内外的五朵云
1.1 海外五朵云(2018年数据)

1.2 国内五朵云(2018年数据)

2. 什么叫做云原生
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。
这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
云原生应用程序开发通常包括DevOps,敏捷方法,微服务,云平台,Kubernetes和Docker等,以及持续交付,简而言之,每种新的和现代的应用程序部署方法。其目的就是利用云的便利,更高效稳定的开发应用。
云原生根本目的就是利用云上的便利,以及各种容器技术,更高效稳定的开发应用
。
3. 什么是IAAS、PAAS、SAAS
云计算的三个分层
1 | SaaS: Software-as-a-Service(软件即服务) |


现在还有其它的分法
FaaS、BaaS
4. 什么叫docker
1 | 官方定义:Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。由 Docker Inc. 公司 前 dotC1oud公司, PaaS市场中的老牌提供商)的团队编写,基于 Apache 2.0开源授权协议发行。 |
总结一下:可以将docker理解为一个集装箱,是IT标准化的体系
。
1 | 以公司的服务为例,存在着不同的linux版本,不同服务依赖不同的应用版本,.so等,有些业务可能还需要设置环境变量。 |
4.1 好处
更高效的利用系统资源
资源隔离
一致的运行环境
持续交付和部署
更轻松的迁移
更轻松的维护和扩展
4.2 相关概念
docker是静态的叫镜像,动态的叫容器,存储镜像的地方叫仓库或者镜像仓库
,其中生成镜像最普遍的方式是编写Dockerfile。
5. 什么是Kubernetes
Kubernetes 这个单词来自于希腊语,含义是 舵手 或 领航员 。其词根是 governor 和 cybernetic。 K8s 是它的缩写,用 8 字替代了“ubernete”。是Google 公司于 2014 年启动的项目
Kubernetes 可以在物理或虚拟机集群上调度和运行应用程序容器。然而,Kubernetes 还允许开发人员从物理和虚拟机’脱离’,从以主机为中心的基础架构转移到以容器为中心的基础架构,这样可以提供容器固有的全部优点和益处。Kubernetes 提供了基础设施来构建一个真正以容器为中心的开发环境。
总结:k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具
5.1 相关概念

Node
1 | 节点(上图橘色方框)是物理或者虚拟机器,作为Kubernetes worker,通常称为Minion。每个节点都运行如下Kubernetes关键组件: |
Pod
(k8s调度的单元,扩缩容以这个为单位)
1 | Pod(上图绿色方框)安排在节点上,包含一组容器和卷。同一个Pod里的容器共享同一个网络命名空间,可以使用localhost互相通信。Pod是短暂的,不是持续性实体。你可能会有这些问题: |
ReplicaSet(Replication-拷贝复制的意思)
1 | 是 Pod 副本的抽象,用于解决 Pod 的扩容和伸缩,`主要作用是确保Pod以你指定的副本数运行` |
Deployment
1 | Deployment 表示部署,在内部使用ReplicaSet 来实现。可以通过 Deployment 来生成相应的 ReplicaSet 完成 Pod 副本的创建。在公有云的容器服务里面有很多细分: |
Container(容器)
1 | 刚才说了运行的镜像叫容器,所以我们打的镜像跑起来就是这个东西。 |
Service与Ingress(路由与服务发现)
1 | 一组pod对外提供的服务叫Service,Service 是后端真实服务的抽象,一个 Service 可以代表多个相同的后端服务 |

6. 上面一堆改变了什么?

DevOps:
1 | DevOps 一词的来自于 Development 和 Operations 的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。DevOps 其实包含了三个部分:开发、测试和运维。换句话 DevOps 希望做到的是软件产品交付过程中IT工具链的打通,使得各个团队减少时间损耗,更加高效地协同工作。 |
CI:
1 | CI的全称是Continuous Integration,表示持续集成。持续集成(CI)是在源代码变更后自动检测、拉取、构建和(在大多数情况下)进行单元测试的过程。持续集成是启动管道的环节(尽管某些预验证 —— 通常称为上线前检查pre-flight checks —— 有时会被归在持续集成之前)。持续集成的目标是快速确保开发人员新提交的变更是好的,并且适合在代码库中进一步使用。 |
CD:
1 | 持续交付(CONTINUOUS DELIVERY),软件发布到目标环境。 |
CD:
1 | 持续部署(CONTINUOUS DEPLOYMENT) |
CO:
1 | 持续运营(CONTINUOUS OPERATION) |

结论:使用上述的1-6可以使得整个增长流程流转的更加有效率,虽然在CI+CD部分作了优化,但是对于全局来说,已经是个不小的改进。