Kubernetes -- 核心概念
核心功能 Kubernetes是工业级容器编排平台,源于希腊语,意为『舵手』、『飞行员』 Kubernetes是自动化的容器编排平台:部署、弹性、管理 核心功能 服务发现与负载均衡 容器自动装箱(调度) 存储编排 自动容器恢复 自动发布与回滚 配置与密文管理 批量执行(Job) 水平伸缩(弹性) 调度Placement(红色容器):调度器观察正在被调度容器的大小,为其寻找一个能满足其资源需求的节点 自动恢复 将失败节点上的容器迁移到健康节点 水平伸缩 架构 Master 组件 职责 扩展性 API Server 用来处理 API 操作Kubernetes中所有组件都会与 API Server 进行连接组件与组件之间一般不进行独立的连接,依赖于 API Server 进行消息的传送 水平扩展 Controller 用来完成集群状态的管理(如自动恢复、水平扩张等) 热备 Scheduler 用来完成调度操作 热备 etcd 分布式存储系统,用来存储 API Server 所需要的元数据本身为高可用系统,可以保证 Master 组件的高可用性 Node Nod...
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和Re...
声明式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对象的『增、删、改、查』进行协作,进而完成用户业务逻辑的编写 ...
容器编排 -- Job
编排对象 在线业务:Deployment、StatefulSet、DaemonSet 离线业务:Job、CronJob Jobjob.yaml Job对象不需要定义spec.selector(借助UUID) job.yaml12345678910111213141516apiVersion: batch/v1kind: Jobmetadata: name: pispec: template: spec: containers: - name: pi image: resouer/ubuntu-bc command: - sh - '-c' - "echo 'scale=10000; 4*a(1)' | bc -l" restartPolicy: Never backoffLimit: 4 创建Job123456# kubectl apply -f job.yamljob.batch/pi ...
容器编排 -- DaemonSet
Daemon Pod特征 运行在Kubernetes集群的每个Node上 每个Node有且仅有一个Daemon Pod 新Node加入Kubernetes集群,Daemon Pod会自动在新Node上被创建 旧Node被删除后,上面的Daemon Pod也会被回收 场景 网络插件的Agent组件 存储插件的Agent组件 监控组件 + 日志组件 工作原理 循环控制:遍历所有Node,根据Node上是否有被管理Pod的情况,来决定是否需要创建或者删除Pod DaemonSet在创建每个Pod时,做了两件额外的事情 自动给这个Pod加上一个nodeAffinity,来保证该Pod只会在指定节点上启动 自动给这个Pod加上一个Toleration,从而忽略Node上的unschedulable污点 API Object 该DaemonSet管理的是一个fluentd-elasticsearch镜像的Pod fluentd-elasticsearch:通过fluentd将Docker容器里的日志转发到ElasticSearch DaemonSet与Deployment非常类似,只是DaemonSe...
容器编排 -- StatefulSet(原理)
背景 Deployment的短板:Deployment认为一个应用的所有Pod,是完全一样的 有状态应用(Stateful Application) 实例之间有不对等的关系 – 拓扑 实例对外部数据有依赖关系 – 存储 StatefulSet Kubernetes在Deployment的基础上,扩展出对有状态应用的初步支持 StatefulSet是Kubernetes在作业编排的集大成者 状态抽象 分类 拓扑状态:应用的多个实例之间是不完全对等的关系 存储状态:应用的多个实例分别绑定了不同的存储数据 核心功能:通过某种方式记录状态,然后在Pod被重新创建时,能够为新Pod恢复这些状态 设计思想 StatefulSet是一种特殊的Deployment,独特之处:为每个Pod编号(代表创建顺序、网络标识等) 编号 + Headless Service ==> 拓扑状态 编号 + Headless Service + PV/PVC ==> 存储状态 拓扑状态 StatefulSet控制器使用Pod模板创建Pod时,对它们进行编...
容器编排 -- Deployment
基本概念 Deployment实现了Pod的水平伸缩(horizontal scaling out/in) – 滚动更新(rolling update) 滚动更新依赖于ReplicaSet Deployment控制ReplicaSet(版本),ReplicaSet控制Pod(副本数)!! ReplicaSet ReplicaSet的定义是Deployment的一个子集 Deployment控制器实际操纵对象是ReplicaSet,而非Pod,Deployment所管理的Pod的ownerReference为ReplicaSet 12345678910111213141516171819apiVersion: apps/v1kind: ReplicaSetmetadata: name: nginx-set labels: app: nginxspec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx sp...















