简介

来自B站www.bilibili.com视频

K8s优点:

前身是Borg系统

  1. 轻量
  2. 开源
  3. 弹性伸缩
  4. 负载均衡 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端口不能冲突

控制器类型:

  1. ReplicationController(RC): 保证容器应用的副本数始终保持在用户定义的副本数. 建议使用ReplicaSet替代此 ReplicaSet(RS): 与RC无本质区别,但支持集合式的selector Deployment: 控制RS来创建POD. 建议使用Deployment自动管理RS, 这样就不用担心与其他机制不兼容的问题 (例如: RS不支持rolling-update,但Deployment支持) HPA: 根据CPU利用率扩容
  2. StatefulSet: 为了解决有状态服务的问题. Docker只要是无状态服务, 存储不需要保留.
    • 稳定的持久化存储: Pod重新调度后还是能访问到相同的持久化数据, 基于PVC实现
    • 稳定的网络标识: PodName,hostname不变
    • 有序部署/删除: Pod按顺序部署
  3. DaemonSet: 确保全部/一些Node运行一个Pod的副本. 有Node加入集群时, 会为他们新增一个Pod
    • 集群存储daemon
    • 日志收集daemon
    • 监控daemon
  4. Job,Cronjob
    • Job: 仅执行一次的任务. 如果Pod没有正常退出, 也会执行
    • CronJob: 基于时间

服务发现: