应用编排与管理 -- Job + CronJob
Job作用
创建一个或多个 Pod 来确保指定数量的 Pod 可以成功地运行终止
跟踪 Pod 状态,根据配置及时重试失败的 Pod
确定依赖关系,保证上一个任务运行完毕后再运行下一个任务
控制任务并行度,并根据配置确保 Pod 队列大小
实践YAML 文件job.yaml123456789101112131415161718apiVersion: batch/v1kind: Jobmetadata: name: pispec: backoffLimit: 4 # 重试次数 template: # Pod Selector spec: containers: - name: pi image: perl ports: null command: - perl - '-Mbignum=bpi' - '-wle' - print bpi(2000) restartPoli ...
应用编排与管理 -- Deployment
作用每个 Deployment 管理一组相同的应用 Pod(相同的一个副本)
实践YAML 文件nginx-deployment123456789101112131415161718192021apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: app: nginxspec: replicas: 3 # 期望的 Pod 数量 selector: # Pod Selector matchLabels: app: nginx template: # Pod Template metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
查看 Deployment123456789$ kubectl get ...
应用编排与管理 -- 核心原理
资源元信息Kubernetes资源对象
Spec(specification):期望的状态
Status:观测到的状态
Metadata:元数据
Labels:识别资源
Annotations:描述资源
OwnerReference:描述多个资源之间的相互关系
Labels
标识型的 KV 元数据
标签名包含域名前缀:用来描述打标签的系统和工具
作用
用于筛选资源
唯一的组合资源的方法
可以使用 Selector 来查询(类SQL)
Selector
Pod
Tie
Env
pod1
front
dev
pod2
back
prod
pod3
front
test
pod4
back
gray
相等型
可以包含多个相等条件,多个相等条件之间是逻辑与的关系,如Tie=front, Env=dev命中 pod1
集合型
Env in (test, gray):命中 pod3 和 pod4
Tie notin (front, back):无命中
其他
release:存在 release 标签
!release:不存在 release 标签
相等型和集合型 ...
Kubernetes -- Pod + 容器设计模式
基本概念容器 ► Pod ► Kubernetes
容器:一个视图被隔离、资源受限制的进程
容器 PID=1 的进程为应用本身(管理容器 = 管理应用)
Pod:进程组
Kubernetes:操作系统
容器镜像:软件安装包
进程组
容器是单进程模型(容器 == 应用 == 进程,只能管理 PID=1 的进程,并不是说容器内只能运行一个进程)
容器内 PID=1 的进程为应用进程,本身不具备进程管理能力
如果将 PID=1 的进程改为 systemd,导致:管理容器 = 管理systemd != 管理应用
因此需要引入 Pod
原子调度单位紧密协作:必须部署在同一台机器上并共享某些信息
关系
亲密关系 – 调度解决
两个应用(Pod)需要运行在同一台宿主机上
超亲密关系 – Pod 解决
会发生直接的文件交换
使用 localhost 或者 Socket 文件进行本地通信
会发生非常频繁的 RPC 调用
会共享某些 Linux Namespace
实现机制解决的问题
...
Kubernetes -- 核心概念
核心功能
Kubernetes是工业级容器编排平台,源于希腊语,意为『舵手』、『飞行员』
Kubernetes是自动化的容器编排平台:部署、弹性、管理
核心功能
服务发现与负载均衡
容器自动装箱(调度)
存储编排
自动容器恢复
自动发布与回滚
配置与密文管理
批量执行(Job)
水平伸缩(弹性)
调度Placement(红色容器):调度器观察正在被调度容器的大小,为其寻找一个能满足其资源需求的节点
自动恢复 将失败节点上的容器迁移到健康节点
水平伸缩
架构
Master
组件
职责
扩展性
API Server
用来处理 API 操作Kubernetes中所有组件都会与 API Server 进行连接组件与组件之间一般不进行独立的连接,依赖于 API Server 进行消息的传送
水平扩展
Controller
用来完成集群状态的管理(如自动恢复、水平扩张等)
热备
Scheduler
用来完成调度操作
热备
etcd
分布式存储系统,用来存储 API Server 所需要的元数据本身为高可用系统,可以保证 Master 组件的高可用性
Node
Node:真 ...
Kubernetes -- 容器
容器与镜像容器容器是一个资源视图隔离、资源可限制、独立文件系统的进程集合
镜像容器镜像:运行容器所需要的所有文件集合
构建镜像
运行容器
容器生命周期
Moby 容器引擎架构containerd-shim: 插件化、动态接管
容器 vs VM
参考资料
CNCF × Alibaba 云原生技术公开课
云原生 -- 概述
定义最佳路径
云原生是一条使用户能低心智负担的、敏捷的、以可扩展、可复制的方式,最大化地利用云的能力,发挥云的价值的最佳路径
愿景
软件从诞生就生在云上、长在云上,全新的软件开发、发布和运维模式
技术范畴
理论基础
理论基础
目前实现
不可变基础设施
容器镜像
云应用编排理论
容器设计模式
意义
Key
Value
基础设施一致性和可靠性
容器镜像自包含可漂移
简单可预测的部署与运维
自描述、自运维流程自动化容易水平扩展可快速复制的管控系统和支撑组件
关键技术点
参考资料
CNCF × Alibaba 云原生技术公开课
Kubernetes -- 应用开发视角
云原生架构Cloud Native App
Applications adopting the principles of Microservices packaged as Containers orchestracted by Platforms running on top of Cloud infrastructure, developed using practices such as Continous Delivery and DevOps.
云演进史
Kubernetes目标 Kubernetes本质上是为了简化微服务的开发和部署,解决微服务的公共关注点
架构
架构模式:Master-Slave
Node可以是物理机也可以是虚拟机
Master(为保证HA,Master也是多节点部署,但真正做调度决策的只有一个Master节点,因此涉及到选主)
etcd(单独部署)
基于KV的分布式存储,底层采用Raft协议,保存Kubernetes的状态数据
API Server
对外提供操作和获取Kubernetes集群资源的API,唯一可以操作etcd的组件 – 被Google和RedHa ...
声明式API -- 基本概念
命令式 vs 声明式命令式12# kubectl create -f nginx.yaml# kubectl replace -f nginx.yaml
声明式1# kubectl apply -f nginx.yaml
所谓声明式,即只需要提交一个定义好的API对象来声明所期待的状态即可
声明式API允许多个API写端,以PATCH的方式对API对象进行修改,而无需关心本地原始YAML文件的内容
声明式API最主要的能力:_PATCH API_
声明式API是Kubernetes编排能力赖以生存的核心所在
本质区别
kubectl replace
kubectl apply
执行过程
使用新API对象替换旧API对象
执行对旧API对象的PATCH操作类似:kubectl set image、kubectl edit
kube-apiserver
一次只能处理一个写请求,否则可能产生冲突
一次能处理多个写请求,具备Merge能力
Kubernetes编程范式
使用控制器模式,与Kubernetes里API对象的『增、删、改、查』进行协作,进而完成用户业务逻辑的编写
...