kubernetes 学习笔记
k8s 产生的背景

粗略分为三个阶段
- app 部署在操作系统上。
- app 部署在虚拟机上
- app 部署在容器上
1 到 2 的演进比较容易理解,应用直接部署在操作系统上显然会面临的问题就是
资源如何分配,多个应用运行于一个机器,怎么划分好各自需要的内存和CPU,带宽等等;
倘若应用之间不共享硬件,各自占领一台机器,又会造成资源的浪费。
解决这种问题,我们通常可能是按照应用的运行情况规划好资源,但是硬件的收缩和扩展远远没有软件灵活,因此诞生了第二种方案,用虚拟机的方式。虚拟机是一种软件,它表现得就和一个操作系统一样,但是它的硬件资源都是虚拟的。
Hypervisor 可以理解为一个介于硬件和操作系统之间的虚拟化层,它的作用是将硬件资源转换为可以被多个虚拟机使用的虚拟资源。
VM的创建不那么灵活和便捷,它的启动和硬件机器启动一样,需要做一系列的初始化动作
容器类似于 VM,容器与 VM 类似,有自己的文件系统、CPU、内存、进程空间,但更轻量级。
容器的一些好处(摘自 k8s 官网文档):
敏捷应用程序的创建和部署:与使用 VM 镜像相比,提高了容器镜像创建的简便性和效率。 ——这个可以认为是2 演进到3 的一个因素
持续开发、集成和部署:通过快速简单的回滚(由于镜像不可变性),支持可靠且频繁的 容器镜像构建和部署。
关注开发与运维的分离:在构建/发布时而不是在部署时创建应用程序容器镜像, 从而将应用程序与基础架构分离。这点暂时不解
可观察性:不仅可以显示操作系统级别的信息和指标,还可以显示应用程序的运行状况和其他指标信号。
跨开发、测试和生产的环境一致性:在便携式计算机上与在云中相同地运行。
跨云和操作系统发行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方运行。
以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行 OS 到使用逻辑资源在 OS 上运行应用程序。
松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分, 并且可以动态部署和管理 - 而不是在一台大型单机上整体运行。
资源隔离:可预测的应用程序性能。
资源利用:高效率和高密度。
k8s 是什么
kubernetes 是一个管理容器的平台。
容器的启动,关闭,扩容等等,由 k8s 平台来管理
它可以做的事情:
- 服务发现 & 负载均衡
- 存储编排
- 自动部署和回滚版本
- 自动完成装箱计算
- 自我修复
- 密钥管理
k8s 和CI/CD DevOps 的关系
持续集成和持续部署通常指代组织内一系列的生产,质量控制和产品发布活动,k8s 并不包含代码构建,自动化测试和应用部署这些环节。
当源代码经过编译,构建,测试,部署到生产环境时,k8s 负责检测所部署的应用节点,并自动调度流量,对部署的容器集群,k8s 有一个基本的保证,负载均衡,服务发现,自我修复,故障后回滚等等,它是一个容器管理平台,处于 CI/CD 的末端
同时,k8s 也不负责日志监控,资源监控等,告警等功能
k8s 也不承诺一些应用之间内部的服务,比如消息队列,缓存,数据库等等
核心概念
- 节点(Node) 一个虚拟机或物理机,我理解为,一个节点对应一个操作系统
- Pod 集群上一组正在运行的容器
- 控制平面 容器的编排层,它暴露接口来定义管理容器的生命周期
- DNS