[云]Kubernetes 的基础知识

目标:

实践实验室涵盖 Kubernetes 的基础知识(这个句子的意思是在实验室中通过实践学习 Kubernetes 的基本概念) 在此过程中理解 Kubernetes 概念(这个句子的意思是在学习的过程中理解 Kubernetes 的相关概念)

议程: 开始使用 Kubernetes(这个句子的意思是介绍如何开始学习 Kubernetes)

改编自 Jérôme Petazzoni 的容器培训,可在 GitHub 上找到:https://github.com/jpetazzo/container.training

Jérôme Petazzoni(Jérôme Petazzoni 是一位知名的软件工程师和培训师)(GitHub 是一个面向开源及私有软件项目的托管平台)

开始使用 Kubernetes 容器化

Containerization

标准软件单元,可以打包您的代码及其所有依赖项,使应用程序能够在不同的计算环境中快速且可靠地运行。 —— Docker.com

(这个句子的意思是容器化是一种软件单元的标准化形式,它能够将代码和所有必需的依赖项打包起来,确保应用程序在转移到不同的计算环境时能够快速且稳定地运行。来源于 Docker.com,Docker 是一个支持容器化技术的平台,允许开发者打包应用及其依赖项到一个可移植的容器中,这些容器可以在任何机器上运行,无需担心依赖项问题。)

Dockerfile example

图片显示的是一个 Dockerfile,这是一个用来定义 Docker 容器如何被构建的文本文件。具体来说,这个 Dockerfile 包含了一系列的指令,用于构建一个运行 Node.js 应用的 Docker 容器。以下是每条指令的作用:

  1. FROM node:18-alpine - 从 Docker Hub 上获取名为 node:18-alpine 的基础镜像。这个镜像基于 Alpine Linux,预装了 Node.js 版本 18。Alpine Linux 因其轻量级而被广泛用于 Docker 容器中。

  2. WORKDIR /frontend - 设置工作目录为 /frontend。这是接下来的指令将在容器内部操作的默认目录。

  3. COPY package.json ./ - 将宿主机(你的电脑)上的 package.json 文件复制到容器的工作目录。package.json 文件定义了 Node.js 项目的依赖。

  4. RUN npm install - 运行 npm install 命令,根据 package.json 安装项目所需的所有依赖。

  5. COPY . . - 将当前目录下的所有文件和目录复制到容器的工作目录。这通常包括你的应用代码和其他必要文件。

  6. EXPOSE 3000 - 声明容器在运行时会监听端口 3000。这通常是应用程序运行的端口。

  7. CMD npm run dev - 定义容器启动时执行的命令,这里是启动开发服务器。

这个 Dockerfile 的目的是为了创建一个可以在隔离环境中运行、开发和测试 Node.js 前端应用的容器。

疑惑:

现在: 如果我们运行容器的机器崩溃了怎么办? 如果我们想分别容器化我们的前端和后端,并拥有多个容器,该怎么办? 如果突然有流量高峰,我们想快速启动五个实例来均匀分配在负载均衡器后面,然后当比赛结束后杀掉其中三个实例以便我们可以缩减规模,我们该如何操作? 我们如何协调这个部署、管理、自动化和扩展容器化应用程序的过程

Kubernetes

是一个容器管理系统,它在一个集群上运行和管理容器化应用程序。那这到底意味着什么呢?

Kubernetes 的核心作用是自动化容器操作,包括部署、扩展、维护和运行多容器应用的生命周期管理。具体来说:

  1. 集群管理:Kubernetes 允许您将物理或虚拟机组成一个集群。这个集群作为一个整体运行容器化的应用程序,提供更强大的计算能力。

  2. 运行容器化应用:在 Kubernetes 中,您可以将应用程序和其依赖打包成容器,然后部署到集群上。Kubernetes 负责保证这些容器在集群的不同机器上正确运行。

  3. 自动扩展和管理:Kubernetes 可以根据预设的规则自动调整应用程序的资源使用,比如在流量高峰自动增加应用实例数量,流量减少时自动减少实例。这种自动扩展帮助应用高效并稳定运行。

  4. 容错处理:如果集群中的节点出现故障,Kubernetes 可以自动重启失败的容器,在其他正常节点上重新部署,确保应用持续可用。

简而言之,Kubernetes 像是一个自动化的容器管理员,

Kubernetes 是一个容器管理系统(Kubernetes 是一个用于自动部署、扩展和管理容器化应用程序的开源平台)

它在一个集群上运行和管理容器化应用程序

意思是 Kubernetes 能够在多台服务器组成的网络(即集群)上,自动运行和管理用于封装和运行应用程序的容器)

那这到底意味着什么呢?

Kubernetes 的核心作用是自动化容器操作,包括部署、扩展、维护和运行多容器应用的生命周期管理

(Kubernetes 主要用来自动化处理与容器相关的任务,比如部署新的应用、调整应用规模或维护应用的运行状态,以确保应用的持续运行和高效性)

Basic things we can ask Kubernetes to do

我们可以要求 Kubernetes 执行的基本操作:

  1. 使用镜像启动 5 个容器(这意味着 Kubernetes 将根据给定的 Docker 镜像,启动 5 个运行相同应用的容器实例)
    atseashop/api:v1.3
  2. 在这些容器前放置一个内部负载均衡器(负载均衡器将接收到的请求分发给后面运行的多个容器,以提高处理效率和可用性)
  3. 使用镜像 atseashop/webfront.3 启动 10 个容器(同样地,这表示 Kubernetes 将根据另一个指定的 Docker 镜像启动 10 个容器实例)
    atseashop/webfront:v1.3
  4. 在这些容器前放置一个公共负载均衡器(与内部负载均衡器类似,但它面向的是外部流量,可以直接从互联网接收请求)

如果是黑色星期五(或圣诞节),流量激增,增长我们的集群并添加容器

(在流量大幅增加的特殊日子,Kubernetes 可以自动增加更多容器来处理额外的网络请求,以避免服务器过载)

       5.新版本发布!用新的镜像替换我的容器

atseashop/webfront:v1.4

(当应用有新版本时,Kubernetes 可以将旧的容器逐一替换为新版本的容器,确保应用更新不影响服务) 在升级过程中继续处理请求;一次更新一个容器(这意味着 Kubernetes 可以实施滚动更新,逐步替换旧容器,从而在更新过程中不中断服务)

Overview

下面是各个组件的介绍:

控制平面(Control Plane)

控制平面的职责是管理集群的整体状态,包括调度应用程序、维护应用程序的所需状态、扩展应用程序等。

  • API Server (api): Kubernetes API服务器,作为集群内所有组件交互的枢纽。(这个组件允许用户和内部Kubernetes组件与集群交互,是所有资源配置活动的前端)
  • Scheduler (sched): 调度器,负责分配任务到合适的节点上。(这个组件根据预定的资源使用等需求,为新创建的容器自动选择最合适的节点)
  • Controller Manager (c-m): 控制器管理器,运行控制器进程。(这些控制器确保集群的状态与您定义的期望状态相匹配,如维护正确的容器数量)
  • etcd: 高可用键值存储,用于所有集群数据。(它存储了整个集群的状态,可以被看作是集群的"数据库")

节点(Nodes)

节点是运行容器化应用的服务器,是Kubernetes集群的工作负载承载者。

  • Kubelet (kubelet): 每个节点上的代理,用于确保容器在Pod中运行。(这个组件管理节点上的容器生命周期,如启动、停止容器,它按照 API Server 的指示管理其节点上的容器)
  • Kube-Proxy (k-proxy): 网络代理,维护节点上的网络规则。(这个组件维护和管理节点上的网络通讯,如负载均衡和网络流量的转发)

其他组件

  • Cloud provider API: 这通常是与Kubernetes集群集成的云服务提供商的API,用于管理跨集群资源的扩展。(这个接口允许 Kubernetes 集群与云提供商的服务交互,如自动扩展硬件资源)

控制平面(Control plane)

控制平面负责整个集群的管理和协调。

  • kube-apiserver: Kubernetes 集群的 API 服务器,是管理和操作集群的通信枢纽。(此组件允许用户和系统组件与 Kubernetes 集群进行交互,它处理和响应 API 请求以及更新 etcd 的状态数据)
  • kube-scheduler: 负责调度 Pods 到适合的计算机节点上。(调度器选择最适合的节点以运行未分配的 Pod,基于资源需求、策略约束、亲和性规格等因素)
  • kube-controller-manager: 运行控制器,这些控制器通过 API 服务器监视集群的共享状态,并进行必要的更改以将当前状态向期望状态移动。(这些控制器负责处理集群中的常规任务,如复制控制、作业跟踪和更多)
  • etcd: 一个轻量级、分布式的键值存储,用于保存所有集群数据,即 Kubernetes 的“真实来源”(etcd 存储集群的状态和元数据,是整个集群中数据的中心存储位置)

计算机(Compute machines)

这里描述的是运行 Kubernetes Pods 和容器的节点。

  • kubelet: 在集群中的每个节点上运行的代理,它确保容器都在 Pod 中正常运行。(kubelet 是节点级别的管理者,负责启动、停止和维护容器的应用状态)
  • kube-proxy: 网络代理,运行在每个节点上,维护节点的网络规则。(kube-proxy 处理节点上的网络通信,例如负载均衡和流量转发)
  • Container runtime: 负责运行容器的底层软件。(这是实际运行容器的软件,如 Docker、containerd)

持久存储(Persistent storage)

用于存储应用数据,确保数据在 Pod 重启和替换后依然可用。

容器注册表(Container registry)

存储容器镜像的位置,Kubernetes 可以从这里拉取镜像以部署新的容器或更新现有的容器。

基础设施类型(Underlying infrastructure)

显示 Kubernetes 可以部署在哪些类型的基础设施上:

  • 物理(Physical): 直接部署在物理硬件上。
  • 虚拟(Virtual): 部署在虚拟机上。
  • 私有云(Private): 在私有云环境中部署。
  • 公共云(Public): 在公共云提供商上部署。
  • 混合云(Hybrid): 结合使用私有云和公共云。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/885650.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【无人机设计与技术】四旋翼无人机的建模

摘要 本项目的目标是通过 Simulink 建模和仿真,研究四旋翼无人机的建模、姿态控制、定点位置控制及航点规划功能。无人机建模包含了动力单元模型、控制效率模型和刚体模型,并运用这些模型实现了姿态控制和位置控制。姿态控制为无人机的平稳飞行提供基础…

OpenCV normalize() 函数详解及用法示例

OpenCV的normalize函数用于对数组(图像)进行归一化处理,即将数组中的元素缩放到一个指定的范围或具有一个特定的标准(如均值和标准差)。它有两个原型函数, 如下: Normalize()规范化数组的范数或值范围。当normTypeNORM…

制造企业为何需要PLM系统?PLM系统解决方案对制造业重要性分析

制造企业为何需要PLM系统?PLM系统解决方案对制造业重要性分析 新华社9月23日消息,据全国组织机构统一社会信用代码数据服务中心统计,我国制造业企业总量突破600万家。数据显示,2024年1至8月,我国制造业企业数量呈现稳…

简单线性回归分析-基于R语言

本题中&#xff0c;在不含截距的简单线性回归中&#xff0c;用零假设对统计量进行假设检验。首先&#xff0c;我们使用下面方法生成预测变量x和响应变量y。 set.seed(1) x <- rnorm(100) y <- 2*xrnorm(100) &#xff08;a&#xff09;不含截距的线性回归模型构建。 &…

计算机视觉综述

大家好&#xff0c;今天&#xff0c;我们将一起探讨计算机视觉的基本概念、发展历程、关键技术以及未来趋势。计算机视觉是人工智能的一个重要分支&#xff0c;旨在使计算机能够“看”懂图像和视频&#xff0c;从而完成各种复杂的任务。无论你是对这个领域感兴趣的新手&#xf…

Linux操作系统中MongoDB

1、什么是MongoDB 1、非关系型数据库 NoSQL&#xff0c;泛指非关系型的数据库。随着互联网web2.0网站的兴起&#xff0c;传统的关系数据库在处理web2.0网站&#xff0c;特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心&#xff0c;出现了很多难以克服的问…

SpringBoot整合JPA详解

SpringBoot版本是2.0以上(2.6.13) JDK是1.8 一、依赖 <dependencies><!-- jdbc --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><!--…

C# C++ 笔记

第一阶段知识总结 lunix系统操作 1、基础命令 &#xff08;1&#xff09;cd cd /[目录名] 打开指定文件目录 cd .. 返回上一级目录 cd - 返回并显示上一次目录 cd ~ 切换到当前用户的家目录 &#xff08;2&#xff09;pwd pwd 查看当前所在目录路径 pwd -L 打印当前物理…

Unity实战案例全解析:RTS游戏的框选和阵型功能(5)阵型功能 优化

前篇&#xff1a;Unity实战案例全解析&#xff1a;RTS游戏的框选和阵型功能&#xff08;4&#xff09;阵型功能-CSDN博客 本案例来源于unity唐老狮&#xff0c;有兴趣的小伙伴可以去泰克在线观看该课程 我只是对重要功能进行分析和做出笔记分享&#xff0c;并未无师自通&#x…

ARM Process state -- SPSR

Holds the saved process state for the current mode. 保存当前模式的已保存进程状态。 N, bit [31] Set to the value of PSTATE.N on taking an exception to the current mode, and copied to PSTATE.N on executing an exception return operation in the current mod…

袋鼠云数据资产平台:数据模型标准化建表重构升级

数据模型是什么&#xff1f;简单来说&#xff0c;数据模型是用来组织和管理数据的一种方式。它为构建高效且可靠的信息系统提供了基础&#xff0c;不仅决定了如何存储和管理数据&#xff0c;还直接影响系统的性能和可扩展性。 想要建立一个良好的数据模型&#xff0c;设计时需…

链表的基础知识

文章目录 概要整体架构流程 小结 概要 链表是一种常见的数据结构&#xff0c;它通过节点之间的连接关系实现数据的存储和访问。链表由一系列节点&#xff08;Node&#xff09;组成&#xff0c;每个节点包含数据和指向下一个节点的指针。链表的特点是物理存储单元上非连续、非顺…

Qt的互斥量用法

目的 互斥量的概念 互斥量是一个可以处于两态之一的变量:解锁和加锁。这样&#xff0c;只需要一个二进制位表示它&#xff0c;不过实际上&#xff0c;常常使用一个整型量&#xff0c;0表示解锁&#xff0c;而其他所有的值则表示加锁。互斥量使用两个过程。当一个线程(或进程)…

网络编程,端口号,网络字节序,udp

前面一篇我们讲了网络的基础&#xff0c;网络协议栈是什么样的&#xff0c;数据如何流动传输的&#xff1b;接下来这篇&#xff0c;我们将进行实践操作&#xff0c;真正的让数据跨网络进行传输&#xff1b; 1.网络编程储备知识 1.1 初步认识网络编程 首先我们需要知道我们的…

Java基础 3. 面向对象

Java基础 3. 面向对象 文章目录 Java基础 3. 面向对象3.1. 面向对象3.2. 对象的创建和使用3.3. 封装3.4. 构造方法3.5. this关键字3.6. static关键字JVM体系结构 [^现阶段不用掌握]3.7. 单例模式 [^初级]3.8. 继承3.9. 方法覆盖3.10. 多态3.11. super关键字3.12. final关键字3.…

你的虚拟猫娘女友,快来领取!--文心智能体平台

文章目录 一、引言二、赛事介绍2.1 简介2.2 比赛时间2.3 大赛具体链接2.4 第一期赛题 三、智能体创建流程3.1 进入文心智能体平台3.1 创建智能体3.1 虚拟猫娘女友特性3.1 智能体调优 四、引言智能体测试五、结语 一、引言 我是热爱生活的通信汪&#xff0c;今天这篇博文记录一…

[CSP-J 2022] 解密

题目来源&#xff1a;洛谷题库 [CSP-J 2022] 解密 题目描述 给定一个正整数 k k k&#xff0c;有 k k k 次询问&#xff0c;每次给定三个正整数 n i , e i , d i n_i, e_i, d_i ni​,ei​,di​&#xff0c;求两个正整数 p i , q i p_i, q_i pi​,qi​&#xff0c;使 n …

C语言 | Leetcode C语言题解之第448题找到所有数组中消失的数字

题目&#xff1a; 题解&#xff1a; int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize) {for (int i 0; i < numsSize; i) {int x (nums[i] - 1) % numsSize;nums[x] numsSize;}int* ret malloc(sizeof(int) * numsSize);*returnSize 0;for (in…

“2024光明多多垂直农业挑战赛”决赛启动成功举办

由光明食品集团所属上花集团的光明花博邨基地&#xff0c;与拼多多携手&#xff0c;联合中国农业大学、浙江大学等共同举办的“2024光明多多垂直农业挑战赛暨第四届多多农研科技大赛”于9月20-21日正式启动决赛。来自上海交大、中国农大、上海农科院、国家农业智能装备工程技术…

基于Node.js+Express+MySQL+VUE科研成果网站发布查看科研信息科研成果论文下载免费安装部署

目录 1.技术选型‌ ‌2.功能设计‌ ‌3.系统架构‌ ‌4.开发流程‌ 5.开发背景 6.开发目标 7.技术可行性 8.功能可行性 8.1功能图 8.2 界面设计 8.3 部分代码 构建一个基于Spring Boot、Java Web、J2EE、MySQL数据库以及Vue前后端分离的科研成果网站&#xff0c;可…