云原生之路02之Kubernetes
第三章 Kubernetes系统快速入门
- 云中资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按需付费,像水电一样使用IT基础设施
K8S 架构分层
- 生态系统: 不属于K8S,第三方
- 接口层:工具,UI,SDK库 等外围工具,外部可提供自有的实现
- 治理层:策略执行和自动化编排
- 应用层:部署(无状态/有状态应用,批处理,集群应用等)和路由(服务发现,DNS解析等),会提供默认实现,可以替换为各自的实现,但必须通过一致性测试
- 内核层:k8s最核心功能,对外提供API构建高层的应用,对内提供插件式应用执行环境,为必选模块。等同于Linux的Kernel
Kuberbets概览
- 模型对象
- Pod:能够创建,调度和管理的最小部署单元
- Service:一个Pods的逻辑集合和访问这个集合的策略
- Deployment:无状态工作负载
- StatefulSet:有状态工作负载
- …
- 增删改查–apiserver
- 功能组件
- Master:
- apiserver
- Scheduler: Pod调度
- Controller Mannager: 升级运维、扩容缩容
- Node
- kubelet: 部署启动、运行监控
- Kube-proxy: 服务发现
- Master:
- 功能特性
- Pod调度
- 部署启动
- 运行监控
- 服务发现
- 升级运维
- 扩容缩容
Pod
- Pods是能够创建,调度和管理的最小部署单元,是一组容器的集合
- 同一个pod里的容器共享同一个网络命名空间,IP地址及端口空间。
- pod是短暂的应用,pods被调度到节点,保持在这个节点上直到被销毁。
容器
- Infrastructure Container:基础容器
- 用户不可见,无需感知
- 维护整个pod网络空间
- InitContainers:初始化容器:用于服务等待处理以及注册pod信息等
- 先于业务容器开始执行
- 顺序执行,执行成功退出,全部执行成功后开始其他业务容器。
- Containers:业务容器
- 并行启动,启动成功后一直运行Running。
容器基本组成
- 镜像部分
- 镜像地址和拉取策略
- 拉取镜像的认证凭据
- 启动命令
- command:替换docker容器的entrypoint
- args:作为docker容器entrypoint的入参
- 计算资源
- 请求值:调度依据
- 限制值:容器最大能使用的规格
Pod外部输入方式
Pod可以接收的外部输入方式:环境变量,配置文件以及密钥
- 环境变量:使用简单,但一旦变更后必须重启容器
- Key-value 自定义
- From 配置文件(configmap)
- From 密钥(Secret)
- 以卷形式挂载到容器内使用,权限可控
- 配置文件(configmap)
- 秘钥(Secret)
Pod与工作负载的关系
- 通过label-selector和owerReference相关联
- Pod通过工作负载实现应用的运维,如伸缩,升级等。
-
关键工作负载 ReplicaSet
- ReplicaSet-副本控制器
- 确保Pod的一定数量的份数(replica)在运行。如果超过这个数量,控制器会杀死一些,如果少了,控制器会启动一些
- ReplicaSet用于解决pod的扩容和缩容问题
- 通常用于无状态应用
-
关键工作负载 Deployment
- 更新Pod 和 ReplicaSet
- 集成了上线部署、滚动升级、创建副本、暂停上线任务、恢复上线任务、回滚到以前某一版本(成功/稳定)的Deployment等功能。无人值守的上线,避免沟通、操作的风险
K8S系统组件
K8S总体架构
K8S基于list-watch机制的控制器架构
K8S Controllers
K8S Scheduler
- 为 pod 找到一个合适的 Node
- Default scheduler 基于列队的调度器,一次调度一个pod,调度时刻全局最优