云和云原生

云原生十二法则

https://12factor.net/zh_cn/

十二法则讲解

https://zhuanlan.zhihu.com/p/243404169

1. 国内外的五朵云

1.1 海外五朵云(2018年数据)

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

2. 什么叫做云原生

云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。

这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。

云原生应用程序开发通常包括DevOps,敏捷方法,微服务,云平台,Kubernetes和Docker等,以及持续交付,简而言之,每种新的和现代的应用程序部署方法。其目的就是利用云的便利,更高效稳定的开发应用。

云原生根本目的就是利用云上的便利,以及各种容器技术,更高效稳定的开发应用

3. 什么是IAAS、PAAS、SAAS

云计算的三个分层

1
2
3
4
5
SaaS: Software-as-a-Service(软件即服务)

PaaS: Platform-as-a-Service(平台即服务)

IaaS: Infrastructure-as-a-Service(基础设施即服务)

现在还有其它的分法
FaaS、BaaS

4. 什么叫docker

1
2
3
4
官方定义:Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。由 Docker Inc. 公司 前 dotC1oud公司, PaaS市场中的老牌提供商)的团队编写,基于 Apache 2.0开源授权协议发行。
程序员能理解的定义:Docker是Docker Inc. 公司开源的一个基于Linux技术构建容器的容器引擎,其源代码在GitHub上,基于Go语言开发并遵从Apache 2.0协议;
普通人能理解的定义:“没有集装箱,就不会有全球化。”而Docker就是IT领域里改变世界的“集装箱”;
圈里人总结:Docker是一套以容器技术为核心的IT标准化构建体系。它不仅仅是一项技术,更不仅仅是一家公司,Docker必将改变整个IT世界,让“Build Ship Run”来的更猛烈些吧!

总结一下:可以将docker理解为一个集装箱,是IT标准化的体系

1
2
3
4
5
以公司的服务为例,存在着不同的linux版本,不同服务依赖不同的应用版本,.so等,有些业务可能还需要设置环境变量。

同时,公司内的制品库复杂,交付件各种各样,各种安装包,rpm,织云PKG,CC配置文件,ARS包等,很多程序在安装时,还要执行响应的前置脚本或者后置脚本执行各种配置。

当使用Docker时,用户可以很轻松的通过编写Dockerfile构建出一个可以直接提供服务交付件(应用+依赖环境),只要启动容器镜像,即可提供对外服务。

4.1 好处

更高效的利用系统资源
资源隔离
一致的运行环境
持续交付和部署
更轻松的迁移
更轻松的维护和扩展

4.2 相关概念

docker是静态的叫镜像,动态的叫容器,存储镜像的地方叫仓库或者镜像仓库,其中生成镜像最普遍的方式是编写Dockerfile。

5. 什么是Kubernetes

Kubernetes 这个单词来自于希腊语,含义是 舵手 或 领航员 。其词根是 governor 和 cybernetic。 K8s 是它的缩写,用 8 字替代了“ubernete”。是Google 公司于 2014 年启动的项目
Kubernetes 可以在物理或虚拟机集群上调度和运行应用程序容器。然而,Kubernetes 还允许开发人员从物理和虚拟机’脱离’,从以主机为中心的基础架构转移到以容器为中心的基础架构,这样可以提供容器固有的全部优点和益处。Kubernetes 提供了基础设施来构建一个真正以容器为中心的开发环境。
总结:k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具

5.1 相关概念

Node

1
2
3
4
节点(上图橘色方框)是物理或者虚拟机器,作为Kubernetes worker,通常称为Minion。每个节点都运行如下Kubernetes关键组件:
Kubelet:是主节点代理。
Kube-proxy:Service使用其将链接路由到Pod
Docker或Rocket:Kubernetes使用的容器技术来创建容器。

Pod(k8s调度的单元,扩缩容以这个为单位)

1
2
3
4
Pod(上图绿色方框)安排在节点上,包含一组容器和卷。同一个Pod里的容器共享同一个网络命名空间,可以使用localhost互相通信。Pod是短暂的,不是持续性实体。你可能会有这些问题:
如果Pod是短暂的,那么我怎么才能持久化容器数据使其能够跨重启而存在呢? 是的,Kubernetes支持卷的概念,因此可以使用持久化的卷类型。
是否手动创建Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么?可以手动创建单个Pod,但是也可以使用Replication Controller使用Pod模板创建出多份拷贝,下文会详细介绍。
如果Pod是短暂的,那么重启时IP地址可能会改变,那么怎么才能从前端容器正确可靠地指向后台容器呢?这时可以使用Service,下文会详细介绍。

ReplicaSet(Replication-拷贝复制的意思)

1
是 Pod 副本的抽象,用于解决 Pod 的扩容和伸缩,`主要作用是确保Pod以你指定的副本数运行`

Deployment

1
Deployment 表示部署,在内部使用ReplicaSet 来实现。可以通过 Deployment 来生成相应的 ReplicaSet 完成 Pod 副本的创建。在公有云的容器服务里面有很多细分:

Container(容器)

1
刚才说了运行的镜像叫容器,所以我们打的镜像跑起来就是这个东西。

Service与Ingress(路由与服务发现)

1
2
一组pod对外提供的服务叫Service,Service 是后端真实服务的抽象,一个 Service 可以代表多个相同的后端服务
Ingress 是反向代理规则,用来规定 HTTP/S 请求应该被转发到哪个 Service 上,比如根据请求中不同的 Host 和 url 路径让请求落到不同的 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
2
持续部署(CONTINUOUS DEPLOYMENT)
有时候,持续交付也与持续部署混淆。持续部署意味着所有的变更都会被自动部署到生产环境中。持续交付意味着所有的变更都可以被部署到生产环境中,但是出于业务考虑,可以选择不部署。如果要实施持续部署,必须先实施持续交付。

CO:

1
持续运营(CONTINUOUS OPERATION)

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


附录

k8s官方文档
十分钟带你理解Kubernetes核心概念