这是我参与「第四届青训营 」笔记创作活动的第4天
1 Kubernetes 简介
介绍k8s核心功能以及设计准则、架构、组件等
如何部署你的WordPress应用?
- 登录服务器,手动安装各种依赖,然后部署二进制?
- 或是自己编译,打包镜像,手动启动容器?容器可以一次打包,任意运行,解决了环境依赖的问题。
有了容器技术为什么还需要k8s?
- 应用数量巨大怎么办?(一个个启动或者用脚本已经力不从心了)
- 如何自动化部署?
- 如何编排?(哪个应用运行在哪个节点更好?)
- 出了问题如何恢复?
k8s是什么?
- 目的:管理容器应用和服务
- 作用:声明式配置和自动化
- 特点:便携,可扩展、开源
1.1 Kubernetes核心概念
- Pod:k8s最小单位,一个或多个container的组合
- Deployment、Statefulset:Pod的集合
- Volume/PVC/PV/StorageClass:存储相关
- Node

1.2 Kubernetes设计准则
- Declarative > imperative:声明式的,只需要告诉系统你想达到的效果
- Control loops:观察、纠正、循环
- Simple > Complex:让用户用得简单,把复杂留给系统
- Modularity:模块化
- Legacy compatible:向下兼容
- Open > Close:开源
1.3 Kubernetes架构
如图,k8s大体可以分为两块,一个是蓝色虚线框内,控制面的东西,另一个就是浅灰色框里面的节点层面的东西

控制层
-
ETCD
- 持久化数据中心
- 维护集群中所有数据的有序性和一致性
- 事件机制同步数据变更
-
APIServer
- 对所有组件提供API接口
- 负责admission,鉴权等功能
- 提供后端etcd数据cacher,降低ETCD压力
- 结合ETCD,提供List-Watch机制
-
Controller-Manager
- 提供一系列控制器 ,负责维护各种对象的生命周期比如: Node controller,PV,controller,Deployment controller,StatefulSet controller等
-
Scheduler
- 负责应用实例的调度,把Pod绑定到合适的Node
节点层
- Kubelet:基于Pod声明,真正开始启动容器,负责容器生命周期维护
- Kube- proxy:网络代理,负责维护节点网络规则,接管Pod出入流量
1.4 Kubernetes核心通信机制 List-Watch
这块没太明白,以后再看看

1.5 Kubernetes核心功能
- 服务发现和负载均衡
- 存储编排
- 自动发布,回滚
- 自愈
- 秘钥,配置管理
- 资源管理,应用编排调度
2 资源管理
介绍k8s如何做资源管理,包括上报、维护、分配以及回收等
2.1 可管理的资源种类
-
计算
- CPU,Memory,HugePages,GPU……
- Socket,Numa……
-
存储
- Ephemeral Storage,NFS,GlusterFS,RBD,Cinder……
- ByteDance Storage(FS,Block)……
2.2 资源上报

2.3 资源分配
2.4 状态维护
2.5 资源回收
3 调度
介绍k8s的调度机制、流程等
4 优化实践
总结k8s与yarn的一些不同点,以及k8s还可以做哪些改进