云原生

Table of Contents

1. 定义

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

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

云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。

来自 https://github.com/cncf/toc/blob/master/DEFINITION.md

2. 常见的术语

  • CNCF The Cloud Native Computing Foundation,云原生计算基金会。
  • OCI Open Container Initiative,开放容器标准。 是一个轻量级的,开放的治理结构(项目),在 Linux 基金会的支持下成立,旨在围绕容器格式和运行时创建的开放行业标准。 OCI 于 2015 年 6 月由 Docker,CoreOS 和其他容器行业领导者成立。当前包含两种规范:
  • CRI Container Runtime Interface,由 protocol buffers 和 gRPC API 和一些库组成。 是 Kubernetes 提出的给 kubelet 来管理节点的容器来用的。符合 CRI 的容器,Kubernetes 就可以直接使用。 目前 CRI 的实现有 Containerd,CRI-O,Docker 不符合 CRI,所以 Kubernetes 写了 dockershim 来做协议转换 (这也是 Kubernetes v1.20 之后废弃 Docker 的原因, kubelet->dockershim->dockerd->containerd 这个链路太长, 废弃之后改成了 kubelet->containerd )。

3. TODO 容器

4. TODO Docker

5. Kubernetes

Kubernetes 是开源的微服务或者容器化应用的编排工具,是谷歌开发的集群管理工具(前身是谷歌内部运行十几年的集群管理工具 Borg1, Kubernetes 吸取 Borg 的经验,然后针对社区定制的开源版本2),现已捐赠给 CNCF3

Kubernetes 提供了服务发现和负载均衡、自动部署和回滚、弹性伸缩、健康检测和服务自愈等特性。它的主要目标是通过提供一组 REST APIS 来隐藏管理容器的复杂性4

5.1. 概念(Concepts)

以下文档大都来自 Kubernetes 官方文档 Concepts,加上自己的理解。

5.2. 监控告警

  • 监控: 通过 kube-state-metrics 和 cAdvisor 暴露指标

5.3. kubectl CLI

kubectl 是用来管理 Kubernetes 集群的命令行工具。

6. Resources

  • Docker 生态系统一览 翻译的文章,较为详细的说明了 Docker 的前世今生
  • Kubernetes vs Docker 2021 翻译的文章,容器、Docker、Kubernetes 之间的关系, Kubernetes v1.20 开始废弃了 Dockershim 之后,对于研发人员、管理员以及 CI/CD 流程上会有哪些影响?
  • 12-Factor 构建 SaaS 应用方法论
  • kubernetes README Kubernetes 书籍、教程和其它资源列表
  • How Container Runtimes matter in Kubernetes? PPT,Kubernetes 中的运行时
  • Unified Kubernetes CRI runtimes based on Kata Containers PPT,理解 Kubernetes 中的运行时
  • Kubernetes Overview Diagrams Kubernetes 概述图(很帅),涵盖架构,工作负载,网络存储,RBAC,资源 requests 和 limits 等
  • GCE Kubernetes 最佳实践系列
  • Pause 容器,也称之为 Infra 容器,Pause 即暂停,但并不是停止状态,而是启动之后就会把自己阻塞住,什么都不干
    • 目标是为了解决多个容器之间最高效的共享某些资源和数据(打破 Linux Namespace/cgroups 隔离), Pause 是为了解决网络问题(如何共享网络);
    • Pod 中的其他容器 Join namespace 的方式加入到 Pause 容器的 Network namespace。所以其他容器所看到的网络设备、IP 地址、 Mac 地址等网络信息都是 Pause 容器的;
    • Pause 容器为业务容器提供:
      1. Linux namespace 的基础;
      2. 启用 pid 命名空间,开启 init 进程。
  • minReadySeconds 与 Readiness Probe 更好的理解 Pod 启动

6.1. 书籍

  • [ ] Kubernetes: Up and Running
  • [ ] Kubernetes in Action
  • [ ] Kubernetes Patterns
  • [ ] Kubernetes Best Practices
  • [ ] Cloud Native Patterns
  • [ ] Kubernetes Patterns
  • [ ] The Kubernetes Book 这本书每年都会更新一次,以跟上最新的 Kubernetes 生态

Footnotes:

First created: 2020-02-01 09:30:20
Last updated: 2021-10-13 Wed 17:31
Power by Emacs 27.2 (Org mode 9.4.6)