Kubernetes 入门指南 - 一步步
在本文中,我将向您介绍 Kubernetes。
您可以在 Youtube 上观看完整视频:
今天我们要讨论的内容是:
- 集装箱化之前的生活
- 容器部署
- 什么是容器编排
- 什么是 Kubernetes
- 为什么要使用 Kubernetes
- Kubernetes 的一些好处
- Kubernetes 的架构
如果您喜欢该视频,请点赞、分享和订阅。这对频道很有帮助。
集装箱化之前的生活:
在使用容器之前,主要有两种部署应用程序的方法:
单服务器部署
所有应用程序和服务都托管在一台服务器上。这意味着该服务器没有单一职责实现。服务器挤满了各种东西,多个应用程序同时运行,有时一个应用程序会占用大部分资源,导致其他应用程序性能下降。
- 优势
- 易于托管
- 易于维护
- 缺点
- 很难管理
- 很难扩展
- 所有不同服务的资源分配问题
虚拟机部署
为了解决单服务器部署问题,虚拟化应运而生。它允许您在单个物理服务器的 CPU 上运行多个虚拟机 (VM)。每个应用程序都有自己的虚拟机,这意味着完全的关注点分离。
这种实现方式在当今世界仍然有效。我们可以用比单服务器部署更好的方式实现可扩展性和资源利用。
- 优势
- 减少停机时间:如果一个服务中断,其他服务仍可运行
- 更好的负载处理
- 更好的资源配置
- 缺点
- 难以管理的环境
- 安全风险
- 需要大量资源
- VM 映像的一致性,这可能会导致应用程序出现错误
容器部署
容器与虚拟机类似,但它们的隔离性较低。这意味着与虚拟机不同,容器共享操作系统,并利用其内核运行。
- 优势
- CI/CD 持续集成/持续部署管道
- 环境一致性
- 资源隔离
- 资源利用
- 松散耦合的应用程序
- 缺点
- 实施的学习曲线
- 简单应用程序的复杂结构
- 从虚拟机迁移到容器部署非常耗时
什么是容器编排
使用 Docker,我们可以使用 docker run 命令运行镜像的单个实例。当用户数量增加到单个实例不够用时,会发生什么情况?一种方法是多次运行 docker run 命令。
我们需要密切关注哪些容器正在运行以及这些容器的状态,如果出现故障,我们需要重新启动新的 docker run,以便我们可以拥有应用程序的新实例。
另一个方面是 Docker 主机的健康状况。如果 Docker 主机崩溃,我们无法启动它,那么该主机上运行的容器也将无法访问。
我们需要一位专门的工程师来持续监控容器及其健康状况。
容器编排:由工具和脚本组成的解决方案,可帮助我们在生产环境中托管容器。
- 它由多个 docker 主机组成,这些主机可以托管容器,如果其中一个发生故障,其他主机仍然可以访问。
- 它允许我们通过单个命令部署数百个应用程序的容器实例
- 允许我们根据需要扩大或缩小规模
- 允许容器之间进行高级联网
- 跨不同请求进行负载平衡
使用docker⇒docker CLI⇒单个命令中的单个实例
使用 Kubernetes ⇒ kubectl ⇒ 单个命令即可管理 1000 个实例
什么是 Kubernetes
Kubernetes 是一个开源容器编排平台,用于管理 Docker 等容器化工作负载和服务,支持声明式配置和自动化。
我们可以编写脚本并自动将资源分配给 Kubernetes 环境中的节点。它使基础设施能够更高效地运行。它负责应用程序的扩展和故障转移,提供部署模式等等。
Kubernetes 简称 k8s
为什么要使用 Kubernetes
Kubernetes 旨在为我们提供可靠的基础设施。它是一个帮助我们管理现有容器的工具。它采用模块化架构,易于维护和扩展。
它使我们能够大规模部署和更新应用程序,这是它被创建的主要原因。它允许我们将应用程序部署到数千个实例。
从本质上讲,Kubernetes 允许我们删除托管和管理容器时执行的手动过程。
Kubernetes 的优势
- 高度可移植且 100% 开源:Kubernetes 跨平台兼容。它由云原生计算基金会管理。
- 工作负载可扩展性:K8S 非常高效,可以轻松添加和删除新实例,且不会造成任何停机。它可以轻松处理所有容器的扩展。
- 高可用性:k8s 旨在解决容器和基础设施的可用性,它解决了拥有高效、高能且可用的环境的要求。
- 专为部署而设计:加快测试、部署和管理部署生命周期不同阶段的能力。
- 服务发现和负载均衡:K8S 可以使用 DNS 或 IP 来暴露容器。如果流量较大,K8S 集群会负责负载均衡,并将流量分发到整个网络,确保部署稳定。
- 存储编排:K8S 支持使用本地存储或任何云存储。本地存储可以是运行 K8S 的 SSD,或者如果 K8S 连接到 Azure、AWS 等公有云,我们就可以利用云存储,并享受云提供的所有安全功能。
- 自我修复环境:如果出现故障或容器不再响应,k8s 将检测到该行为,并且 k8s 将重新启动该进程或终止该容器并启动一个新的容器。
- 自动发布和回滚:可以使用 Kubernetes 描述容器的期望状态。容器的实际状态会以可控的速率转变为期望状态。因此,我们可以轻松地进行前滚或回滚。
- 自动装箱:我们实际上可以指定每个容器所需的 CPU 和 RAM 的计算能力。
- 机密和配置管理:Kubernetes 允许您存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。您可以部署和更新机密和应用程序配置,而无需重建容器镜像,也不会在堆栈配置中暴露机密。
Kubernetes 架构
一个 k8s 集群由一组节点组成,
节点是一台机器,可以是物理机器,也可以是虚拟机,Kubernetes 软件就安装在其上。节点是一台工作机器,Kubernetes 容器将在此启动。
如果运行容器的其中一台机器发生故障,我们需要另一台机器来维持应用程序的运行。集群是一组组合在一起的节点,用于维持应用程序的正常运行
现在谁负责管理集群,谁将向集群发送有关容器和配置的信息,节点如何处理故障、日志。
K8S 架构是一种基于集群的架构,它围绕两个关键领域
- k8s master:控制 k8s 基础设施内的所有活动
- 节点:由主节点控制的 Linux 环境
k8s主节点
主节点是安装了 k8s 控制普通组件的节点,主节点监视集群中的节点并负责工作节点上容器的实际编排。
当我们在系统上安装 k8s 时,我们正在安装:
- 调度器
- 控制器
- 容器运行时
- 库贝莱特
- etcd
- API 服务器
API 服务器就像 k8s 的前端,用户、cli、管理设备都使用 API 服务器与集群进行通信
- Api Sever:是一个基于 RESTful 的基础设施,我们可以保护每个连接的安全。
- 它是集群和节点通信的主要工具
- 它实现了接口,以便不同的工具和库能够有效地通信
- 与工作节点交互并向其提供所需的信息
- etcd:这是一个允许配置、信息和管理集群内节点的工具
- 分布式可靠键/值存储
- 存储集群中节点所需的配置信息。
- 它具有键/值格式。
- 访问它的唯一方法是通过 API 服务器
- 调度程序:管理实际集群内的活动计划
- 它是k8s集群中的关键组件
- 它负责从主节点分配工作负载
- 它跟踪集群节点上工作负载的利用率,然后将工作负载放在可用资源上,它查找新创建的容器并将其分配给节点
- 控制器管理器:是一个守护进程服务器,是编排背后的大脑
- 它不断循环运行并收集信息,然后负责将这些信息提供给 API 服务器
- 它们负责在节点/容器/端点发生故障时通知并做出响应。
- 控制器将决定创建新的容器来替换失败的容器
- 该组件负责将组件的期望状态更改为期望状态
- 容器运行时:是用于运行容器的软件
- kubelet:是在集群中每个节点上运行的代理,代理负责确保节点按预期运行
kubectl 是 k8s cli,用于在 k8s 集群上部署和管理应用程序。获取集群信息并获取节点状态
kubectl run hello-minikube // run a k8s cluster
kubectl cluster-info
kubectl get nodes // list all of the nodes parts of the cluster
k8s节点由以下部分组成:
- Docker:
- 它运行并管理节点内运行的容器
- 这是容器运行时
- 库贝莱特:
- 负责节点与主 API 服务之间的信息共享
- 它与 etcd 交互以读取配置和密钥
- k8s代理
- 它在节点内部运行 k8s 服务,有助于将服务提供给外部主机。同时将请求转发到指定的容器
- 它执行原始的负载平衡,还管理节点上的 pod、卷、秘密、新容器的创建和健康检查。
感谢您的阅读。
鏂囩珷鏉ユ簮锛�https://dev.to/moe23/intro-to-kubernetes-step-by-step-3phf