简介
来自B站www.bilibili.com视频
K8s优点:
前身是Borg系统
- 轻量
- 开源
- 弹性伸缩
- 负载均衡 IPVS
学习内容:
- Pod控制器: 掌握各种控制器特点及定义方式
- 服务发现: 掌握SVC原理及其构建方式
- 存储: 掌握多种存储类型的特点, 个性化选用合适存储方案
- 调度器: 掌握调度器原理
- 安全: 集群认证,鉴权
- HELM: 类似yum 掌握原理,模板自定义,部署一些插件
- 运维: 修改Kubeadm达到正数可用期限10年,构建高可用kube集群
k8s架构
graph TB linkShard–>borglet1 linkShard–>borglet2 linkShard–>borglet3 linkShard–>borglet4 read/UI–>borgcfg read/UI–>command-line read/UI–>web-browers
ETCD的架构(K8s也是HTTP协议进行C/S架构开发)
graph LR A[HTTP Server]<–>Raft A<–>Storage Raft<–> Storage Raft<–>WAl[WAL日志]
CRI:container runtime interface
主要组件:
- APIServer: 所有服务访问入口
- ControllerManager: 维持副本期望数目
- Scheduler: 负责介绍任务,选择合适的节点分配任务
- ETCD: 可信赖的分布式键值存储服务,存储需要持久化的K8s集群所有重要信息. Etcd2会把数据写在内存, 宕机会丢失数据 Etcd3会持久化数据,不会丢失
- Kubelet: 直接跟容器引擎交互实现容器的生命周期管理
- Kube-proxy: 负责写入规则至IPTABLES,IPVS实现服务映射访问
插件: - CoreDNS: 为集群中svc创建一个域名IP对应关系解析
- Dashboard: 给k8s集群提供B/S结构的访问体系
- Ingress Controller: 官方提供4层代理, Ingress可以实现7层代理, 通过域名负载均衡
- Federation: 提供跨集群中心多k8s统一管理的功能
- Prometheus: 提供k8s集群监控能力
- ELK: 提供k8s集群日志统一分析
Pod
Pod类型
- 自主式Pod
- 控制器控制的Pod
不同Pod共用 pause容器 的 网络/存储卷 > pod端口不能冲突
控制器类型:
- ReplicationController(RC): 保证容器应用的副本数始终保持在用户定义的副本数. 建议使用ReplicaSet替代此 ReplicaSet(RS): 与RC无本质区别,但支持集合式的selector Deployment: 控制RS来创建POD. 建议使用Deployment自动管理RS, 这样就不用担心与其他机制不兼容的问题 (例如: RS不支持rolling-update,但Deployment支持) HPA: 根据CPU利用率扩容
- StatefulSet: 为了解决有状态服务的问题. Docker只要是无状态服务, 存储不需要保留.
- 稳定的持久化存储: Pod重新调度后还是能访问到相同的持久化数据, 基于PVC实现
- 稳定的网络标识: PodName,hostname不变
- 有序部署/删除: Pod按顺序部署
- DaemonSet: 确保全部/一些Node运行一个Pod的副本. 有Node加入集群时, 会为他们新增一个Pod
- 集群存储daemon
- 日志收集daemon
- 监控daemon
- Job,Cronjob
- Job: 仅执行一次的任务. 如果Pod没有正常退出, 也会执行
- CronJob: 基于时间
服务发现: