kubernetes介绍

介绍

Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。

Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 大规模运行生产工作负载十几年经验的基础上, 结合了社区中最优秀的想法和实践。

在生产环境中部署一个应用程序时, 通常要部署该应用的多个实例以便对应用请求进行负载均衡。

在 Kubernetes 中, 我们可以创建多个容器, 每个容器里面运行一个应用实例, 然后通过内置的负载均衡策略, 实现对这一组应用实例的管理、 发现、 访问, 而这些细节都不需要运维人员去进行复杂的手工配置和处理。

传统部署时代

传统的应用部署方式是通过插件或脚本来安装应用。 这样做的缺点是应用的运行、 配置、 管理、 所有生存周期将与当前操作系统绑定, 这样做并不利于应用的升级更新/回滚等操作,

虚拟化部署时代

因此,虚拟化技术被引入了。虚拟化计数能够更好地利用物理服务器的资源,并且因为可轻松地添加或更新应用程序,而有更高的可扩展性, 但是虚拟机非常重, 并不利于可移植性。

容器部署时代

新的方式是通过部署容器方式实现,容器类似于 VM,但是更宽松的隔离特性,使容器之间可以共享操作系统(OS)。 因此,容器比起 VM 被认为是更轻量级的。

每个容器之间互相隔离, 每个容器有自己的文件系统 , 容器之间进程不会相互影响, 能区分计算资源。 相对于虚拟机, 容器能快速部署,由于容器与底层设施、 机器文件系统解耦的, 所以它能在不同云、 不同版本操作系统间进行迁移

image-20230729150614821

kubernetes 功能和架构

Kubernetes 是一个轻便的和可扩展的开源平台, 用于管理容器化应用和服务。 通过Kubernetes 能够进行应用的自动化部署和扩缩容。 在 Kubernetes 中, 会将组成应用的容器组合成一个逻辑单元以更易管理和发现。

kubernetes 的功能

(1) 自动装箱基于容器对应用运行环境的资源配置要求自动部署应用容器,可以快速、可靠地部署容器,并处理容器之间的依赖关系

(2) 自我修复(自愈能力):

当容器失败时, 会对容器进行重启当所部署的 Node 节点有问题时, 会对容器进行重新部署和重新调度,当容器未通过监控检查时, 会关闭此容器直到容器正常运行时, 才会对外提供服务

(3) 水平扩展通过简单的命令、 用户 UI 界面或基于 CPU 等资源使用情况, 对应用容器进行规模扩大或规模剪裁,可以根据应用负载的变化自动调整容器的数量,以确保应用程序始终具有所需的资源。

(4)服务发现和负载均衡:

服务发现用户不需使用额外的服务发现机制, 就能够基于 Kubernetes 自身能力实现服务发现和负载均衡,Kubernetes 使用 DNS 名称或自己的 IP 地址来暴露容器。 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

(5) 滚动更新:

可以根据应用的变化, 对应用容器运行的应用, 进行一次性或批量式更新

(6) 版本回退:

可以根据应用部署情况, 对应用容器运行的应用, 进行历史版本即时回退

(7) 密钥和配置管理:

允许存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。在不需要重新构建镜像的情况下, 可以部署和更新密钥和应用配置, 类似热部署。

(8) 存储编排:

自动实现存储系统挂载及应用, 特别对有状态应用实现数据持久化非常重要存储系统可以来自于本地目录、 网络存储(NFS、 Gluster、 Ceph 等)、 公共云存储服务

(9) 批处理:

提供一次性任务, 定时任务; 满足批量数据处理和分析的场景

Kubernetes集群架构

image-20230729150701141

当你部署完 Kubernetes,便拥有了一个完整的集群。

一组工作机器,称为 节点, 会运行容器化应用程序。每个集群至少有一个工作节点。

工作节点会托管 Pod ,而 Pod 就是作为应用负载的组件。 控制平面管理集群中的工作节点和 Pod。 在生产环境中,控制平面通常跨多台计算机运行, 一个集群通常运行多个节点,提供容错性和高可用性。

控制平面组件(Control Plane Components)

控制平面组件会为集群做出全局决策,比如资源的调度。 以及检测和响应集群事件,例如当不满足部署的 replicas 字段时, 要启动新的 pod)。

api server

提供 Kubernetes 集群的 API 接口。它作为 Kubernetes 集群中的控制中心,负责各组件之间的协调和管理,包括维护集群状态、接收和处理用户请求、授权和认证等。

Api server 接收客户端的 RESTful 请求,并将其转换为相应的内部操作,然后通过其他核心组件(如 etcd、kube-scheduler、kube-controller-manager、kubelet 等)完成对 Kubernetes 集群的管理和控制。在请求处理期间,api server 还会执行安全检查、身份验证和授权等任务,以确保用户请求的安全性和正确性。

etcd

一个分布式的键值存储系统,用于存储 Kubernetes 集群的状态和元数据。etcd 中存储的数据包括:

  1. Kubernetes 集群的配置信息(如 API server 的地址、容器运行时的地址等);
  2. Kubernetes 对象的定义(如 Pod、Service、ReplicaSet 等);
  3. Kubernetes 对象的状态(如 Pod 的状态、Service 的 IP 地址等);
  4. 一些运行时状态信息(如节点的状态、容器的状态等)。

etcd 的分布式存储模式保证了数据的高可用和一致性,作为 Kubernetes 所有集群数据的后台数据库。。当集群中的一个节点故障时,etcd 会自动将该节点上的数据同步到其他节点上,保证数据不会丢失。同时,etcd 使用 Raft 算法保证数据一致性,即使在网络分区或节点故障的情况下也能保证数据的一致性。

scheduler

负责将新建的Pod调度到节点上运行。它通过监控未分配的Pod,并基于节点的可用资源和调度策略来选择合适的节点进行调度。

Scheduler通过调用Kubernetes API来获取未分配的Pod,并使用调度策略对它们进行评估,以决定应该将它们分配到哪个节点上。

Kubernetes中的scheduler支持多种调度算法,包括最佳节点选择算法、负载均衡算法等。它可以根据不同的Pod的需求进行调度,调度决策考虑的因素包括单个 Pod 及 Pods 集合的资源需求、软硬件及策略约束、 亲和性及反亲和性规范、数据位置、工作负载间的干扰及最后时限。同时,scheduler还会监测节点的状态,如节点的可用资源情况、节点的连接状态等,以保证节点的可用性。

一旦确定了最佳节点,Scheduler会将Pod的调度信息写入Kubernetes API服务器,以便kubelet能够获取并启动相关的容器。如果没有合适的节点可用,则Pod将保持未调度状态,直到有合适的节点可用为止。

controller manager

Kubernetes的Controller Manager是一个独立的进程,它负责管理集群中的控制器,以确保集群中的资源状态与期望状态保持一致。控制器管理器由多个控制器组成,每个控制器都是一个独立的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在同一个进程中运行。它们负责监视和调节集群中资源的状态。

Controller manager 负责监控 Kubernetes 集群中的资源对象,例如 Pods、Services、ReplicationControllers、Endpoints 等,并根据定义好的规则进行控制和管理。它可以执行多种控制器,例如 ReplicaSet、Deployment、StatefulSet、DaemonSet 等,确保它们的行为符合用户定义的期望状态。

控制器管理器中的控制器例如:

  1. Replication Controller(RC)控制器:它用于确保Pod的副本数始终符合定义。
  2. Node Controller节点控制器:当节点不可用时,它会检测并采取相应措施,如重新分配Pods。
  3. Service Controller服务控制器:它将Service Pod与Endpoint的关联保持同步,确保Pod可以被正确路由到。
  4. Namespace Controller控制器:它负责确保任何新创建的对象都被分配到正确的命名空间中。
  5. PersistentVolume Controller控制器:它监视PersistentVolume的状态,并确保Pod可以正确地访问它们。
  6. Job Controller任务控制器:用于管理集群中的任务,例如批处理作业或单次作业。

Node组件

节点组件会在每个节点上运行,负责维护运行的 Pod 并提供 Kubernetes 运行环境。

kubelet

负责管理和维护节点上的容器化应用程序。Kubelet运行在每个节点上,与master节点通信,管理节点上的容器和它们的生命周期,确保他们按照规定运行。

Kubelet的主要职责包括:

  1. 与API服务器通信,接收来自于Scheduler的Pod调度信息,并创建该节点上的Pod。
  2. 与Docker等容器运行时进行交互,确保Pod中的容器正确启动、运行、停止和删除。
  3. 持续监视节点上的容器和Pod,确保它们处于健康状态,如果出现故障,则进行重启或清理。
  4. 与CRI(Container Runtime Interface)进行交互,以支持不同的容器运行时,比如Docker、rkt和CRI-O等。

kube-proxy

kube-proxy 是一个网络代理,它负责将 Kubernetes 集群内部的网络流量转发到正确的目的地。kube-proxy 运行在每个节点上,对外暴露一个虚拟IP地址,在Kubernetes中被称为"Service IP"。当有新的服务被创建时,kube-proxy会监视服务的变化,并动态调整负载均衡规则,确保流量能够被正确地路由到正确的Pod上。

Kube-proxy的具体实现方式有多种,包括iptables、IPVS和userspace等方式。其中,iptables是最常使用的一种方式,它可以利用Linux内核提供的网络功能,实现基础的负载均衡和端口转发。但随着集群规模的增大,iptables的性能和可扩展性会越来越受限。因此,IPVS成为了一种更为高效的替代方案,它使用Linux内核的高级网络功能,可以实现更加复杂的负载均衡需求,并支持动态调整规则。而userspace的方式则是一种较为灵活的解决方案,可以通过自定义程序实现各种负载均衡算法和协议。

Master node

在 Kubernetes 架构中,Master node 是集群的控制中心。它负责管理整个集群的状态和资源分配,包括:

  1. API Server:是集群的核心组件,负责接收和处理来自其他组件的请求,以及维护整个集群的状态信息。
  2. Etcd:一个高可用的分布式键值存储系统,用于存储集群的所有配置信息和状态信息。
  3. Controller Manager:管理集群中的各种控制器,比如Replication Controller、Endpoint Controller等,在集群中维护期望状态并对实际状态进行调整来保持它们一致。
  4. Scheduler:负责将Pod调度到集群中的节点上,并根据节点上的资源使用情况和Pod的需求来做出最优的调度决策。

Master node 一般不承载应用程序容器,其主要作用是负责集群的管理和控制,并且为 worker node 提供 API Server 和其他必要的组件,是整个 Kubernetes 集群的大脑。

Master节点是Kubernetes集群中最重要的组件之一,必须保证其高可用性,因为如果Master节点宕机,整个集群都将失去管理和协调的能力。因此,在生产环境中,通常会将多个Master节点部署在不同的服务器上,以确保高可用性。

worker node

Worker 节点是 Kubernetes 集群中的工作节点,它承担着容器的运行和管理任务。

Worker node通过Kubernetes节点代理与集群通信,并执行由Kubernetes master指定的Pod的启动、停止和重启操作。每个worker node都运行一个容器运行时环境,比如Docker,以便能够运行Pod中的容器。

Worker 节点包括 Docker 或其他容器运行时、kubelet(负责管理节点上的容器)、kube-proxy(负责服务发现和负载均衡)、Pod 网络接口和一些其他的插件(如 CNI 插件)等组件,这些组件协同工作,通过与 Master 节点交互来确保容器的高可用性和可靠性。Worker 节点的数量可以根据业务负载的大小进行扩展。

kubectl

kubectl是Kubernetes命令行工具,用于与Kubernetes集群进行交互。它允许开发人员和系统管理员管理Kubernetes对象,如Pod、Deployment、Service等。还可以查看集群状态、日志和排查故障。

kubectl的工作原理是将命令行参数解析和API请求封装在一个命令行工具中。它通过调用Kubernetes API服务器来执行请求,并从结果中提取信息并显示给用户。

kubectl的主要功能包括创建、更新和删除Kubernetes对象、查看资源、管理应用程序等。它还提供了一些有用的功能,如日志跟踪、端口转发、执行命令等。

pod

Pod 是最小的可部署单元。一个 Pod 包含一个或多个紧密关联的容器,这些容器共享网络和存储资源,并被放置在同一个节点上。Pod 也包含一组配置控制器,用于描述容器如何运行,并可与其他 Pod 通信。每个 Pod 在其生命周期中都有一个唯一的 IP 地址,并且可以被其他容器轻松访问。Pod 是可替换的,当需要更新或重启 Pod 时,可以轻松地进行替换。在 Kubernetes 中,Pod 通常是水平扩展应用程序的主要方式,以满足高负载的要求。

docker

Kubernetes 利用 Docker 来运行和管理容器化的应用程序。在 Kubernetes 架构中,Docker 扮演着一个重要的角色,它负责创建和运行应用程序的容器,并与 Kubernetes 运行时环境交互。

具体来说,Kubernetes 使用 Docker 来实现以下功能:

  1. 容器化应用程序:Kubernetes 允许用户将应用程序打包成 Docker 容器,并将它们发布到一个容器仓库中,方便部署和管理。
  2. 管理容器:Kubernetes 可以通过 Docker 镜像来创建和管理容器,并确保容器的健康状态。它可以监控容器运行状态并重启故障容器,也可以调整容器的资源限制和分配。
  3. 负载均衡和服务发现:Kubernetes 可以通过 Docker 容器来实现负载均衡和服务发现。它可以自动将容器分配到可用节点上,并提供一组负载均衡规则来确保应用程序的高可用性和可伸缩性。
  4. 管理容器:Kubernetes 可以通过 Docker 镜像来创建和管理容器,并确保容器的健康状态。它可以监控容器运行状态并重启故障容器,也可以调整容器的资源限制和分配。
  5. 负载均衡和服务发现:Kubernetes 可以通过 Docker 容器来实现负载均衡和服务发现。它可以自动将容器分配到可用节点上,并提供一组负载均衡规则来确保应用程序的高可用性和可伸缩性。
  6. 网络管理:Kubernetes 可以使用 Docker 提供的网络服务来管理容器网络。它可以创建和管理容器间的网络,并允许容器之间进行通信。

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

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

相关文章

K8S中网络如何通信

Kubernetes 提出了一个自己的网络模型“IP-per-pod”,能够很好地适应集群系统的网络需求,它有下面的这 4 点基本假设: 集群里的每个 Pod 都会有唯一的一个 IP 地址。Pod 里的所有容器共享这个 IP 地址。集群里的所有 Pod 都属于同一个网段。…

SQL-每日一题【626.换座位】

题目 表: Seat 编写SQL查询来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。 按 id 升序 返回结果表。 查询结果格式如下所示。 示例 1: 解题思路 前置知识 MySQL 的 MOD() 函数是取模运算的函数,它返回两个数相除…

qt简易闹钟

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->stopBtn->setDisabled(true);this->setFixedSize(this->size()); //设置固定大小this->s…

【C语言进阶】程序环境和预处理

🔥博客主页:小王又困了 📚系列专栏:C语言 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、程序的翻译环境和执行环境 二、详解编译和链接 2.1翻译环境 2.2编译的过…

Windows 10 中无法最大化任务栏中的程序

方法1:仅选择选项 PC 屏幕 如果您使用双显示器,有时这可能会发生在您的 1 台计算机已插入但您正在访问的应用程序正在另一台计算机上运行的情况下,因此您看不到任何选项。因此,请设置仅在主计算机上显示显示的 PC 屏幕选项。 第…

nacos2.2.3最新版启动所遇到的问题总结

前言 有问题就看官方文档,看不懂或者还是报错再看博客!因为有时候忙的焦头烂额,却发现官方写的非常清楚,而且人家还自带一个example示例,自己都没有看,自己瞎折腾!本人吃过亏,特此提…

抖音seo短视频账号矩阵系统技术开发简述

说明:本开发文档适用于抖音seo源码开发,抖音矩阵系统开发,短视频seo源码开发,短视频矩阵系统源码开发 一、 抖音seo短视频矩阵系统开发包括 抖音seo短视频账号矩阵系统的技术开发主要包括以下几个方面: 1.前端界面设…

uniapp使用uni-swipe-action后右侧多了小于1px的间隙

问题&#xff1a;uniapp使用uni-swipe-action后右侧多了小于1px的间隙。且在真机上没有问题&#xff0c;但是在微信开发者工具中有问题。 代码如下&#xff1a;在滑动滑块或者点击这个区域时&#xff0c;就会出现问题。 <scroll-view :scroll-y"true" :style&quo…

设计模式-命令模式在Java中的使用示例-桌面程序自定义功能键

场景 欲开发一个桌面版应用程序&#xff0c;该应用程序为用户提供了一系列自定义功能键&#xff0c;用户可以通过这些功能键来实现一些快捷操作。 用户可以将功能键和相应功能绑定在一起&#xff0c;还可以根据需要来修改功能键的设置&#xff0c;而且系统在未来可能还会增加…

P5691 [NOI2001] 方程的解数

题目 思路 暴搜显然会TLE&#xff0c;所以这时候就应该请出DFS的伙伴——折半搜索&#xff08;meet in the middle&#xff09;了 折半搜索的思路就是先搜完后一半后&#xff0c;借助这一半的数据来搜索前一半&#xff0c;效率是原来的2倍 这个题怎么才能折半搜索呢&#xff1…

【Linux】更换jdk版本

目录 一、前言二、查看jdk版本号1、项目中的版本号&#xff08;pom.xml&#xff09;2、服务器中的版本号 三、更换jdk版本1、创建java文件夹2、下载并解压JDK安装包①、下载jdk安装包②、移动到创建好的/usr/local/java路径下③、解压jdk安装包 四、删除原来的jdk版本1、删除原…

Qt: 查看qmake相关参数设置

Qt开发中&#xff0c;经常会遇到qmake相关问题&#xff0c;比如同时安装了多个Qt版本的情况。比如我的情况是系统自带了Qt 5.12.8, 但是开发中遇到一些兼容性问题&#xff0c;于是又手动安装了5.9.8。 查看qmake版本&#xff0c;qmake -v, 虽然项目中已经指定了5.9.8, 但是系统…

【力扣每日一题】2023.7.30 环形链表2

题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 这道题属于是那种知道解法就很简单&#xff0c;不知道解法就很难独立想出来的那种&#xff0c;我们只需要稍微记住这类题的固定解法就可以。 所以接下来我先说解法&#xff0c;再解释为什么解法可以解出来。 那么我们都…

数值线性代数: 共轭梯度法

本文总结线性方程组求解的相关算法&#xff0c;特别是共轭梯度法的原理及流程。 零、预修 0.1 LU分解 设&#xff0c;若对于&#xff0c;均有&#xff0c;则存在下三角矩阵和上三角矩阵&#xff0c;使得。 设&#xff0c;若对于&#xff0c;均有&#xff0c;则存在唯一的下三…

MyBatis(二)

文章目录 一.MyBatis的模式开发1.1 定义数据表和实体类1.2 配置数据源和MyBatis1.3 编写Mapper接口和增加xxxMapper.xml1.4 测试我们功能的是否实现. 二. Mybatis的增删查改操作2.1 单表查询2.2 多表查询三.动态SQL的实现3.1 什么是动态SQL3.2 动态SQL的使用if标签的使用trim标…

LeetCode559. N 叉树的最大深度

559. N 叉树的最大深度 文章目录 [559. N 叉树的最大深度](https://leetcode.cn/problems/maximum-depth-of-n-ary-tree/)一、题目二、题解方法一&#xff1a;迭代方法二&#xff1a;递归 一、题目 给定一个 N 叉树&#xff0c;找到其最大深度。 最大深度是指从根节点到最远叶…

【机器学习】Multiple Variable Linear Regression

Multiple Variable Linear Regression 1、问题描述1.1 包含样例的X矩阵1.2 参数向量 w, b 2、多变量的模型预测2.1 逐元素进行预测2.2 向量点积进行预测 3、多变量线性回归模型计算损失4、多变量线性回归模型梯度下降4.1 计算梯度4.2梯度下降 首先&#xff0c;导入所需的库 im…

架构的分类

目录 一、 RUP41 架构 1.1 RUP41架构方法概述 1.2 RUP41架构总体 1.3 RUP41架构方法内容 1.3.1 逻辑视图 1.3.2 开发视图 1.3.3 物理视图 1.3.4 处理视图 1.3.5 场景视图 ​二、 TOGAF9 架构 2.1 TOGAF9 架构概述 2.2 TOGAF9 架构分类 2.2.1 业务架构 2.2.2 数据架…

蓝海卓越计费管理系统远程命令执行

活着&#xff0c;就要时刻准备承受磨难&#xff01; 漏洞描述 蓝海卓越计费管理系统存在命令调试页面&#xff0c;导致攻击者可以远程命令执行 漏洞复现 访问 debug.php页面 远程调试命令执行 /debug.php漏洞证明 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝…

linux -网络编程-多线程并发服务器

目录 1.三次握手和四次挥手 2 滑动窗口 3 函数封装思想 4 高并发服务器 学习目标&#xff1a; 掌握三次握手建立连接过程掌握四次握手关闭连接的过程掌握滑动窗口的概念掌握错误处理函数封装实现多进程并发服务器实现多线程并发服务器 1.三次握手和四次挥手 思考: 为什么…