k8s 调度和管理 | 青训营笔记
这是我参与「第四届青训营」笔记创作活动的的第5天。
k8s 简介
场景引入:如何部署你的WordPress应用?
登录服务器,安装各种依赖,脚本启动? 用docker自己编辑打包镜像,手动、脚本起容器?
什么是容器
Docker:没有每一个虚拟机装一个操作系统,而是基于Host Operating System 做修改
可以一次打包一个容器镜像,然后运行在任何地方
为什么有了docker还需要k8s?
答:做容器编排。
我们有一个或几个容器,可以很方便地管理:手动、脚本
但如果我们有很多容器,应用数量几万、几十万,应该怎么搞?手动执行不现实,脚本也比较难管理。
如果容器出了问题,怎么恢复?
需要做一个比较复杂的系统去管理。
k8s的含义
特点:便携、可拓展、开源
目的:管理服务应用、声明式管理和自动化流程
k8s 核心概念
Pod
服务编排、管理的最小单位,有一个或多个关系比较紧密的container组成
Deployment/statefulSet
Deployment:几个实例集群,是由跑相同服务(如后端某一个rpc服务)的Pod组成(Replica) StatefulSet:也是几个Pod集群,但可以挂不同的存储卷,相当于几个不同状态的实例共同完成一个工作
Volume/PVC/PV/StorageClass
Volume 是k8s最原始的管理,现在已经不用了 把Volume封装成PVC(Presistent volume claim),PVC需要用户去配置(创建一个存储空间表明用户需要这些空间做一些事,是一个声明),PV由管理员创建或k8s自己创建
PVC和PV是一一绑定的关系。PV实际上代表某一个存储介质的存储空间。
StorageClass 是一个集合,管理员配置好storageClass之后,如果用户声明了PVC(如我想要一个20G的nfs空间),直接就从StorageClass拉起来
Node:k8s 由很多节点构成(管理节点、数据节点),如一个物理机机器就是一个node
Pod 长什么样
PV 长什么样
PVC 长什么样
Deployment 长什么样
stateful set 长什么样
Node 长什么样
设计准则:
- 是声明式的而不是命令式的,只需要告诉k8s最终的理想状态
- 控制循环:通过controller去做,每个循环做一点工作(如创建节点、attach、mount,服务启动之后的异常监控)
- 简单:让用户用得越简单越好
- 模块化:组件、接口、插件,甚至组件内部都由模块组成
- 向下兼容
- 开放
架构
etcd:一个一致化存储的kv store