云原生技术概述
云原生计算基金会(CNCF)关于云原生定义的最新版本是:云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。


容器技术基础-Docker
Docker基础概念
容器技术的价值
- 容器是轻量级的
- 容器是易于移植的
- 容器可以实现秒级部署
- 容器是互相隔离的
容器编排带来的价值
- 大规模容器自动化部署
- 敏捷高效的资源调度
- 强大的弹性伸缩能力
- 容器服务自愈能力
- 自动化的服务发现
Docker容器基础概念
- 是资源分割和调度的基本单位
- 封装整个服务的运行时环境,用于构建、发布和运行分布式应用的一个框架
- 是一个跨平台、可移植并且简单易用的容器解决方案
- Docker是世界领先的软件容器平台
- Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,对进程进行封装隔离
- Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员。
- 用户可以方便的创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样
Docker的三大核心概念
- 容器:容器是从镜像创建的运行实例
- 镜像:容器镜像为标准化打包提供了基础
- 仓库:Docker仓库是集中存放镜像文件的场所
Docker架构与使用
Docker Registry:镜像仓库
- 官方的仓库:Docker Hub
- 私有镜像仓库搭建:基于开源项目Harbor或阿里云提供的镜像仓库服务
Docker Server:Docker服务端
- 宿主机中运行守护进程(Docker daemon)
- 接收Docker客户端(Client)发送的指令来拉取镜像、缓冲、启动容器等操作 Docker Client:Docker客户端
- 主要负责通过docker命令行对容器进行基本操作,如拉取镜像,构建镜像,运行容器等等
容器编排技术基础-Kubernetes
Kubernetes基础架构
Kubernetes容器编排的事实标准
Kubernetes
- Google开源的一个容器编排引擎
- 支持自动化部署、大规模可伸缩、应用容器化管理
- 在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
核心功能
- 服务发现与负载均衡
- 容器的自动装箱
- 存储编排
- 自动化容器恢复
- 自动发布与回滚
- 配置与密文管理
- 批量执行
- 水平伸缩
Kubernetes 是一个自动化的容器编排平台,它负责应用的部署、应用的弹性以及应用的管理,这些都是基于容器的。
Kubernetes核心概念-Pod
Pod
- 是Kubernetes中能够创建和部署的最小单元
- 是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上
- 包含了一个或多个容器,还包括了存储、网络等各个容器共享的资源
- 支持多种容器环境,,Docker则是最流行的容器环境
Kubernetes核心概念-Volume
Volume
- Pod中能够被多个容器共享的磁盘目录
- 用来管理 Kubernetes 存储的
- 用来声明在 Pod 中的容器可以访问文件目录的
- 一个卷可以被挂载在Pod中一个或者多个容器的指定路径下面
- 支持多种后端存储的抽象:本地存储、分布式存储、阿里云存储等
Docker提供了Volume机制以便实现数据的持久化,Kubernetes中Volume的概念与Docker中的 Volume类似
Kubernetes核心概念-Deployment
Deployment
- 是Kubernetes中部署应用最常见的一种方式
- 做应用的真正的管理
- Pod 是组成 Deployment 最小的单元
- 定义一组 Pod 的副本数目、版本等
Kubernetes核心概念-Service
Service
- 是Kubernetes核心的概念
- 通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址
- 将请求进行负载分发到后端的各个容器应用上
- 支持多种访问方式实现:
- Cluster IP
- NodePort
- LoadBalance
Kubernetes核心概念-Namespace
Namespace
- 用来做一个集群内部的逻辑隔离的,它包括鉴权、资源管理等
- 每个资源都属于一个Namespace
- 同一个Namespace中的资源名唯一
- 不同Namespace中资源可重名
Namespaces可以理解为Kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼此隔离,他们可以为软件开发团队提供组织,安全、性能等方面的保障。
Kubernetes核心架构
- Kubernetes系统用于管理分布式节点集群中的微服务或容器化应用程序
- 提供了零停机时间部署、自动回滚、缩放和容器的自愈(其中包括自动配置、自动重启、自动复制 的高弹性基础设施,以及容器的自动缩放等)等功能。
Kubernetes Master(主控节点):
- 集群的“大脑”,负责管理所有节点 (Node)
- 负责调度Pod在哪些节点上运行
- 负责控制集群运行过程中的所有状态
Kubuernetes Node(工作节点):
- 负责管理所有容器(Container)
- 负责监控/上报所有Pod的运行状态
Kubernetes架构- Master服务端
- kube-apiserver:集群的HTTP REST API接口,是集群控制的入口
- kube-controller manager:集群中所有资源对象的自动化控制中心
- kube-scheduler:集群中Pod资源对象的调度服务
- Etcd:一个分布式的一个存储系统
Kubernetes架构-Node客户端组件
- kubelet组件:负责管理节点上容器的创建、删除、启停等任务,与 Master节点进行通信
- kube-proxy:负责Kubernetes服务的通信及负载均衡服务
- Container Runtime:负责容器的基础管理服务,接收kubelet组件的指令
Kubernetes流程及场景
Kubernetes典型使用流程
①发出指令 ②API响应指令,存储etcd,创建Deployment ③控制器发现资源,并加入到工作队列,创建POD ④创建完成,更新存储etcd ⑤资源调度根据规则将POD绑定主机 ⑥绑定结果存储etcd ⑦Kubelet基于运行情况增加POD ⑧Kubelet创建增加的新POD ⑨kube-proxy对POD服务发现和负载均衡 ⑩控制器检测POD运行情况,删除或重新创建

Kubernetes使用场景-调度
调度器
- Kubernetes核心组件之一,承载着整个集群资源的调度功能
- 根据特定调度算法和策略,将Pod调度到最优工作节点上
- 更合理与充分的利用集群计算资源,使资源更好的服务于业务服务的需求
等待调度——过滤
正在调度——策略
集群状态——运行
Kubernetes使用场景-自动恢复
- Kubernetes的主要好处之一是它具有管理和维护集群中容器的能力
- 可以提供服务零停机时间的保障。
- Pod或容器出现故障时Kubernetes还可以让系统实现”自愈”
Kubernetes使用场景-弹性伸缩
- Kubernetes 有业务负载检查的能力,会根据业务承担的负载,对业务进行扩容,实现资源弹性伸缩。