什么是K8S
- K8S是容器编排平台。
- 其希腊语含义是“舵手”
- 运送管理容器的轮船
- 自动化的容器编排平台
- 应用的部署、管理、弹性
- 核心功能
- 服务发现、负载均衡
- 容器的自动装箱。(上线)
- 存储编排
- 自动容器恢复
- 自动发布与回滚
- 配置管理
- 批量执行、水瓶伸缩
调度
K8S会观察集群的状态。然后把容器放置到合适的机器上。
自动恢复
如果宿主机出现故障。就会把宿主机上的容器迁移到健康的宿主机上。
水平伸缩
如果负载过高,就会对水平扩容。然后负载均衡。
K8S的架构
Master架构
- API server:与所有组件联建。用来处理API处理
- Controller:自动恢复,自动扩容
- scheduler:调度器。把容器放置在合适的机器上
- ETCD:分布式的存储系统。api server需要的信息全都存在ETCD中。
node架构
node上面真正运行业务负载。
- pod:每个业务负载运行在pod中。一个pod中运行一个或多个容器。
- kubelet:node上真正运行pod的组件。关键组件。通过api server得到pod运行需要的状态,然后提交到container runtime组件,在宿主机上创建容器运行需要的组件。并把容器运行起来。
- 对网络和存储的操作以插件的形式实现。比如CSI(container storage interface)定义一个存储的RPC接口,然后定义好每个接口的功能和要求。之后各个厂商可以实现对于自己存储系统的插件。
- kube-proxy使用ip table来实现serverless组网。
架构例子
- 用户提交一个pod
- api server先把相关信息写到etcd
- scheduler通过watch(notification)机制得知有一个pod需要调度。
- scheduler根据pod的需求和宿主机的状态来做一个调度决策。然后通知api server这个pod需要调度到什么什么地方。
- api server把sheduler给的调度信息写入ETCD(服务注册?)。然后通知相应node。
- 相应node通过container runtime组件来把容器运行起来。并通过一些插件来配置网络和存储。
K8S的核心概念和API
pod
- 最小的调度以及资源单元。用户提交pod之后K8S就会把pod运行起来。
- pod是对一组容器和资源的抽象。
- 定义容器运行的方式(command、环境变量等)
- pod为里面的容器提供了共享的运行环境(网络,进程空间)
- pod之间是隔离的
volume
- 用来管理pod的存储
- 什么在pod中容器可以访问的文件目录
- volume可以挂载在容器的指定目录下面
- volume支持多种存储的抽象
- 本地存储,分布式存储,云存储...
Deployment
- 定义一组pod的数目、版本等
- 通过controller维持pod的数量
- 自动恢复失败的pod
- 通过controller来控制pod的版本
- 滚动升级、重新生成、回滚等
service
- 提供一组pod的稳定访问地址。负载均衡,流量转发。将一个deployment的pod的ip抽象成一个第三方的带负载均衡的ip地址。
- 多种组网:
- ClusterIP:kube proxy方式组网
- node port??
- loadBalencer??
namespace
- 一个集群内部逻辑隔离(鉴权、资源额度)
- 每个资源属于一个namespace
- 同一个namespace中的资源命名唯一
- 不同namespace中资源可重名
API 基础知识
访问某个namespace的pod资源。
spec下面还会有一个status来指定pod的状态。
- HTTP + JSON/YAML组成。
- kubectl:cli接口
- UI
- curl:通过http请求交互
label
- 一组key:value
- 可以被select查询
- select color=red
- 通过label就可以对资源进行筛选
- service对于一组pod。通过labal selector来选取一系列pod