# 容器化、微服务、云原生与Serverless系列扫盲(Docker、Kubernetes、Istio、Podman及CNCF等)

> 作者：zning（https://ning.ae） · 发布：2019/07/11 23:28 下午 (UTC+8) · 原文：https://zning.me/15628589236228.html

技术与时俱进，传统大型应用逐步实现容器化、微服务化，甚至走在前面的企业或团体已然实现了云原生、服务自治与Serverless。可以说，未来的技术应用是“小、微、云”的天下，若不了解和跟进会落伍。因此自今日开始我将定期整理更新相关概念扫盲在本文中。

> 注意：本文首次撰写于2019-07-11，最近修改时间为2019-07-11，请注意相关介绍的时效性。

## 容器

### Docker

Docker是一个开放源代码软件项目，让应用程序部署在软件货柜下的工作可以自动化进行，借此在Linux操作系统上，提供一个额外的软件抽象层，以及操作系统层虚拟化的自动管理机制。 Docker利用Linux核心中的资源分离机制，例如cgroups，以及Linux核心名字空间，来创建独立的容器。

> 近期Docker有很多厂商接连推出自己的容器化产品例如红帽的Podman，其应用方向有被分解的趋势。

### Kubernetes

Kubernetes是用于自动部署、扩展和管理容器化应用程序的开源系统。该系统由Google设计并捐赠给Cloud Native Computing Foundation来使用。 它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。 它支持一系列容器工具, 包括Docker等。

> 现在主流互联网厂商对K8S的部署逐步加速和成熟，成为容器化的主流选择。

### Podman

什么是Podman？Podman是一个无守护程容器引擎，用于在Linux系统上开发，管理和运行OCI容器。容器可以以root身份运行，也可以以无根模式运行。简单地说：`alias docker = podman`。更多细节在这里。

> Podman是红帽自己出的，号称要替代Docker的，符合CNCF云原生标准的标准化容器。目前仍在发展起步中，有一定前景。

## 微服务

（未完待续）

## 云原生（Cloud Native） 

### Istio - 云原生服务网格

Istio是一个开放平台，用于提供统一的方式来集成微服务，管理跨微服务的流量，实施策略和聚合遥测数据。Istio的控制平面在底层集群管理平台上提供了一个抽象层，例如Kubernetes。

Istio由以下组成部分组成：

* **Envoy** - 每个微服务的Sidecar代理，用于处理集群中服务之间以及从服务到外部服务之间的入口/出口流量。代理形成一个*安全的微服务网格，*提供丰富的功能，如发现，丰富的第7层路由，断路器，策略实施和遥测记录/报告功能。

    > 注意：服务网格不是覆盖网络。它简化并增强了应用程序中的微服务如何通过底层平台提供的网络相互通信。

* **Mixer** - 代理和微服务利用的中央组件，用于实施授权，速率限制，配额，身份验证，请求跟踪和遥测收集等策略。

* **Pilot** - 负责在运行时配置代理的组件。

* **Citadel** - 负责证书颁发和轮换的集中组件。

* **Citadel Agent** - 负责证书颁发和轮换的每节点组件。

* **Galley** - 用于在Istio中验证，摄取，聚合，转换和分发配置的中央组件。

Istio目前支持基于Kubernetes和Consul的环境。我们计划在不久的将来支持其他平台，如Cloud Foundry和Mesos。

## CNCF

CNCF，全称Cloud Native Computing Foundation（云原生计算基金会），成立于2015年12月11日，其口号是坚持和整合开源技术来让编排容器作为微服务架构的一部分，其作为致力于云原生应用推广和普及的一支重要力量，不论您是云原生应用的开发者、管理者还是研究人员都有必要了解。

CNCF作为一个厂商中立的基金会，致力于Github上的快速成长的开源技术的推广，如Kubernetes、Prometheus、Envoy等，帮助开发人员更快更好的构建出色的产品。

下图是CNCF的全景图。

![CNCF landscape](https://landscape.cncf.io/images/landscape.png)
