当前位置: 首页 > news >正文

k8s介绍

一、前言

   Kubernetes(通常简称为 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序,它提供了丰富的功能使得用户能够轻松地管理大规模的容器集群,包括自动化部署和扩展、服务发现和负载均衡、存储编排、自我修复、密钥管理和安全、水平扩展和滚动更新,以下就来简单的介绍一下k8s的组件和功能

二、组件

etcd:用于存储Kubernetes集群的配置数据、状态和元数据。etcd是Kubernetes的后端数据库,负责保存整个集群的状态信息

kube-apiserver:k8s集群的管理接口,所有对k8s集群的操作都通过API服务器进行处理,包括创建、更新和删除资源对象的请求

kube-controller-manage:k8s集群的控制器,集成了多个控制器,根据所需的状态进行调节,确保集群的期望状态与实际状态一致,其中包含Replication Controller、node Controller、Service Controller、Endpoint Controller、Namespace Controller、Service Account & Token Controller

kube-schduler:k8s集群的调度器,负责将新创建的Pod分配到集群中的节点上。它考虑诸如资源需求、硬件约束、数据本地性等因素,以确保最佳的Pod调度决策,其中的策略有优选策略、预选策略

kubelet:工作节点的监控器,负责管理该节点上的容器和Pod。它与API服务器通信,确保节点上的Pod按照规范运行,并向API服务器报告节点和Pod的状态

kube-proxy:工作节点的负载均衡器,负责在集群内部进行网络代理和负载均衡。它维护网络规则,允许Pod之间和外部网络之间的通信,并确保服务的可访问性,当节点网络发生变更时,负责更改iptables规则

三、工作流程

在了解工作流程前先来提前了解一下k8s的watch机制,watch机制是什么呢,watch"机制是指通过API Server监视资源对象的变化,这种机制对于实时了解集群中资源的状态变化非常有用,在Kubernetes中,每个组件都可以通过API Server上的restful API订阅资源对象的变更。这些组件可以通过HTTP长连接来监听资源对象的变更,一旦资源对象发生变化,API Server会向订阅者发送通知。这种方式可以用来实现各种功能,比如实时监控、自动伸缩、事件驱动等

创建pod

1.客户端使用kubectl调用kube-apiserver集群管理接口创建pod

2.kube-apiserver将资源变更信息写入etcd中存储

3.apiserver接收etcd的回调事件

4.apiserver将事件推送给订阅者kube-schduler

5.kube-schduler根据预选策略或者优选策略将pod调度到相应node节点的事件发送给apiserver

6.kube-apiserver将资源变更信息写入etcd中

7.apiserver接收etcd的回调事件

8.apiserver将事件推送给订阅者kubelet

9.kubelet调用cri启动相应的容器

10.kubele将pod状态通过kube-apiserver写入到etcd中

创建replicaset

1.客户端使用kubectl调用kube-apiserver集群管理接口创建replicaset控制器

2.kube-apiserver将信息写入etcd中存储

3.apiserver接收etcd的回调事件

4.apiserver将事件推送给订阅者kubeletkube-contorller-manage

5.kube-contorller-manage根据定义的信息通过replication controller创建rs,然后根据rs中的期望pod副本数量发送给apiserver创建pod的事件

6.kube-apiserver将资源变更信息写入etcd中

7.apiserver接收etcd的回调事件

8.apiserver将事件推送给订阅者kube-schduler

9.kube-schduler根据预选策略或者优选策略将pod调度到相应node节点的事件发送给apiserver

10.kube-apiserver将资源变更信息写入etcd中

11.apiserver将事件推送给订阅者kubelet

12.kubelet调用cri启动相应的容器

13.kubele将pod状态通过kube-apiserver写入到etcd中

四、资源隔离

namespace

Kubernetes中的命名空间(Namespace)是一种逻辑隔离机制,用于将集群中的资源划分为不同的虚拟群组,以实现多租户、多环境或多项目的资源隔离和管理,不同命名空间中的资源对象彼此之间相互隔离,互不影响。例如,Pod、Service、Deployment等资源对象都可以属于特定的命名空间,这样它们之间的名称可以相同,但彼此不会相互冲突,但某些资源对象是全局的,不属于任何特定的命名空间,例如节点(Node)、存储类(StorageClass)、持久卷(PersistentVolume)等。这些资源对象可以被所有命名空间中的资源对象共享和使用

Linux命名空间,Kubernetes利用Linux命名空间来实现容器之间的隔离,每个容器都运行在独立的命名空间中,包括PID(进程ID)、网络、文件系统、用户等。这意味着每个容器拥有自己的进程树、网络栈、文件系统视图和用户空间,从而避免了容器之间的干扰和资源冲突,但是内核还是共用的宿主机内核

linux命名空间解析:容器的创建是通过linux命名空间实现的,容器,其实是一种特殊的进程,在使用容器的时候,实际上还是在当前主机上创建一个应用进程,只不过在创建这些进程时,Docker 为它们加上了各种各样的 Namespace 参数,从而使得在同一系统上运行的进程之间能够拥有各自独立的视图和隔离的环境,因为是宿主机上的进程,所以多个容器之间使用的还是同一个宿主机的内核。Linux Namespace 主要用于以下几个方面的资源隔离

PID 命名空间(PID Namespace):PID 命名空间使得每个命名空间内的进程拥有独立的进程树。一个进程在其所属的命名空间内看到的进程编号(PID)与其他命名空间内的进程编号是不同的,这样就实现了进程隔离

网络命名空间(Network Namespace):网络命名空间提供了一套独立的网络栈,使得每个命名空间内的进程拥有自己独立的网络接口、IP 地址、路由表和防火墙规则等。这种隔离机制使得不同网络命名空间内的进程可以拥有独立的网络环境,从而实现了网络隔离

挂载命名空间(Mount Namespace):挂载命名空间为每个命名空间提供了独立的文件系统挂载点,使得在不同命名空间内的进程能够拥有不同的文件系统视图。这种隔离机制使得每个命名空间内的进程可以拥有独立的文件系统环境,从而实现了文件系统隔离

UTS 命名空间(UTS Namespace):UTS 命名空间提供了独立的主机名和域名标识符,使得在不同命名空间内的进程拥有独立的主机名和域名标识符。这种隔离机制使得每个命名空间内的进程可以拥有独立的系统标识符,从而实现了系统标识符隔离

IPC 命名空间(IPC Namespace):IPC 命名空间提供了独立的进程间通信(IPC)资源,包括消息队列、信号量和共享内存等,使得在不同命名空间内的进程之间的 IPC 资源不会相互干扰,从而实现了进程间通信资源的隔离

cgroup

控制组(Cgroups)是Linux内核提供的一种资源管理机制,用于限制和管理进程组的资源消耗。Kubernetes利用Cgroups来限制容器对CPU、内存、磁盘等资源的使用。通过为容器设置资源配额和限制,可以确保集群中的容器在资源利用方面得到合理的调度和管理

Kubernetes中的Resource Quota资源配额机制允许集群管理员为命名空间设置资源使用的上限。资源配额可以限制CPU、内存、存储等资源的使用量,确保各个命名空间内的资源消耗得到合理控制,防止某个应用程序占用过多资源而影响其他应用程序的正常运行,实际上还是通过resource quota的配置参数转化底层cgroup的配置去实现资源的限制

五、iptables与ipvs

iptables 在 Kubernetes 集群中扮演了重要角色,用于实现服务发现、负载均衡、网络策略、服务代理等功能。通过使用 iptables,Kubernetes 可以灵活地管理和控制集群中的网络流量,从而保障集群的安全性、稳定性和可靠性

服务发现和负载均衡:Kubernetes 中的 Service 对象提供了一种抽象,用于将一组具有相同标签的 Pod 组合成一个逻辑服务。为了实现服务的访问和负载均衡,Kubernetes 通过 iptables 规则将请求转发到 Service 对应的 Pod 上,从而实现服务发现和负载均衡的功能

网络策略:Kubernetes 中的 NetworkPolicy 对象用于定义 Pod 之间和 Pod 与外部网络之间的网络访问策略。为了实现这些策略,Kubernetes 使用 iptables 来过滤和控制流量,根据网络策略规则来允许或阻止流量的传输

服务代理:Kubernetes 中的代理组件,比如 kube-proxy,负责将服务的请求转发到后端的 Pod 上。这些代理组件通常使用 iptables 来设置转发规则,从而实现服务代理的功能

Pod 网络:Kubernetes 中的容器网络插件(CNI)负责为 Pod 分配 IP 地址,并实现 Pod 之间的通信。一些 CNI 插件使用 iptables 来实现网络地址转换(NAT)等功能,以确保 Pod 可以正常访问外部网络

iptables和ipvs都可以作为k8s的负载均衡组件,但是在大规模集群中使用ipvs会比使用iptables性能更好,因为iptables是防火墙,在大规模集群中,iptables的规则量会很大,iptables又是使用链表的方式匹配,所以使用iptables作为负载均衡组件的话,需要匹配大量的规则,这会导致性能大量的消耗,而ipvs作为专门的负载均衡组件,支持多种负载均衡调度算法,如轮询(RR)、加权轮询(WRR)、最小连接数(LC)等。这些调度算法能够更加智能地分配流量到后端服务器,从而提高了整体的负载均衡性能,还有一点就是 IPVS 是基于内核的实现,可以利用 Linux 内核提供的各种优化和功能来提高性能和可扩展性。而 iptables 是基于用户空间的实现,性能和可扩展性相对较低

相关文章:

k8s介绍

一、前言 Kubernetes(通常简称为 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序,它提供了丰富的功能使得用户能够轻松地管理大规模的容器集群,包括自动化部署和扩展、服务发现和负载均衡、存…...

K-means聚类模型:深入解析与应用指南

K-means聚类是一种广泛使用的无监督学习算法,它通过迭代过程将数据集划分为K个聚类。以下是一篇关于K-means聚类模型的技术文章,将从不同的角度进行详尽的描述。 1. 引言 K-means聚类算法是一种简单且高效的聚类方法,广泛应用于数据挖掘、市…...

CTF-密码学基础

概述 密码学(Cryptolopy):是研究信息系统安全保密的科学 密码学研究的两个方向: 密码编码学(Cryptography):主要研究对信息进行编码,实现对信息的隐蔽密码分析学(Cryptanalytics):主要研究加密信息的破译或消息的伪造…...

代码随想录算法训练营day22 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

654.最大二叉树 和构造二叉树差不多,本题使用索引的方式 class Solution:def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:return self.traversal(nums, 0, len(nums)-1)def traversal(self, nums, left, right):if left > r…...

企业信息防泄漏软件分析:盘点常用企业信息防泄漏软件

在当今数字化时代,企业信息防泄漏软件已成为保障企业数据安全不可或缺的一环。市面上众多的防泄漏软件各具特色,如何从中挑选出最适合自己企业的产品,成为了一个值得深入探讨的话题。 一、企业信息防泄漏软件分析 首先,我们需要…...

Rancher-Kubewarden-保姆级教学-含Demo测试

一、什么是Kubewarden? What is Kubewarden? | Kubewarden 1、就是容器集群的准入策略引擎。 1、使用的策略其实就是k8s原生的security context. 2、使用WebAssembly来编写策略。 1、WebAssembly,可以使用擅长的开发语言来编写策略。(下面的…...

Lumerical Script ------ array 数组类型 和 matrix 矩阵类型

Lumerical Script ------ array 数组类型 和 matrix 矩阵类型 引言正文array 数组类型matrix 矩阵类型引言 这篇仅仅用作个人笔记,因为作者本人比较擅长 Python,每次写 Lumerical Script 总是会写错代码。 正文 array 数组类型 Lumerical Script 脚本有些像 Matlab 脚本,…...

Springboot自动装配源码分析

版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --> </par…...

Visual Transformer (ViT)模型详解 动图讲解

1 Vit简介 1.1 Vit的由来 ViT是2020年Google团队提出的将Transformer应用在图像分类的模型,虽然不是第一篇将transformer应用在视觉任务的论文,但是因为其模型“简单”且效果好,可扩展性强(scalable,模型越大效果越好),成为了transformer在CV领域应用的里程碑著作,也…...

C++:完美转发(一)(std::forward)

一、理解引用折叠 &#xff08;一&#xff09;引用折叠 1. 在C中&#xff0c;“引用的引用”是非法的。像 auto& &rx x;&#xff08;注意两个&之间有空格&#xff09;这种直接定义引用的引用是不合法的&#xff0c;但是编译器在通过类型别名或模板参数推导等语境…...

西部首个全域直播基地,打造西部直播基地领军形象

天府锋巢直播产业基地作为西部直播产业的领军者&#xff0c;以其前瞻性的战略布局和卓越的服务体系&#xff0c;正加速推动全域直播的快速发展&#xff0c;助力直播产业实现新升级。该基地作为成都规模最大的直播基地&#xff0c;以加快全域直播为核心目标&#xff0c;通过促进…...

钟表——蓝桥杯十三届2022国赛大学B组真题

问题分析 这个问题的关键有两点&#xff1a;1.怎么计算时针&#xff0c;分针&#xff0c;秒针之间的夹角&#xff0c;2.时针&#xff0c;分针&#xff0c;秒针都是匀速运动的&#xff0c;并非跳跃性的。问题1很好解决看下面的代码就能明白&#xff0c;我们先考虑问题2&#xf…...

CSS 之 圆形波浪进度条效果

一、简介 ​ 本篇博客讲述了如何实现一个圆形波浪进度条的样式效果&#xff0c;具体效果参考下方GIF图。该样式的加载进度条可以用在页面跳转或数据处理等情况下的加载动画&#xff0c;比起普通的横条进度条来说&#xff0c;样式效果更生动美观。 实现思路&#xff1a; ​ 这…...

按下鼠标进行拖拽,让元素跟随鼠标进行移动,鼠标抬起,元素停止移;js鼠标拖拽 (鼠标按下事件:onmousedown、鼠标移动事件:onmousemove、鼠标抬起事件:onmouseup)

需求如下&#xff1a; 按下鼠标进行拖拽&#xff0c;让元素跟随鼠标进行移动&#xff0c;鼠标抬起&#xff0c;元素停止移动。 解析&#xff1a; 鼠标按下事件&#xff1a;onmousedown 鼠标移动事件&#xff1a;onmousemove 鼠标抬起事件&#xff1a;onmouseup <!DOCT…...

第十二章 项目采购管理

12.1 规划采购管理 12.2 实施采购 12.3 控制采购 项目经理通常没有签订合同的权限&#xff0c;但必须熟悉正规的采购流程&#xff1b; 协议是采购的核心文件&#xff0c;关于协议我们要知道&#xff1a; 协议包括&#xff1a;合同、服务水平协议、谅解、协议备忘录或采购订单 ❗…...

PSFR-GAN复现

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言快速开始安装依赖权重下载及复原 训练网络数据集训练脚本 代码详解训练BaseOptio…...

函数和数组

一、函数 1.函数使用方法 定义函数再引用函数 2.基本函数格式 基本格式1&#xff1a; function 函数名{ ​ 命令序列 } 基本格式2&#xff1a; 函数名&#xff08;&#xff09;{ 命令序列 } 基本格式3&#xff1a; function func_name &#xff08;&#xff09; {…...

docker安装时报错:Error: Nothing to do

安装docker时报以下错误 解决方法&#xff1a; 1.下载关于docker的相关依赖环境 yum -y install yum-utils device-mapper-persistent-data lvm22.设置下载Docker的镜像源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3…...

白盒测试:覆盖测试及测试用例设计

白盒测试&#xff1a;覆盖测试及测试用例设计 一、实验目的 1、掌握白盒测试的概念。 2、掌握逻辑覆盖法。 二、实验任务 某工资计算程序功能如下&#xff1a;若雇员月工作小时超过40小时&#xff0c;则超过部分按原小时工资的1.5倍的加班工资来计算。若雇员月工作小时超过…...

Java高级开发2024高频面试提问题目

1、请先简单自我介绍一下自己&#xff1f;&#xff08;一般不超过5min&#xff09; 2、你最熟悉的项目是哪一个&#xff0c;讲一下用了哪些技术栈&#xff1f;&#xff08;尽量讲出系统架构图使用到的技术组件和为什么选型这个组件&#xff1f;&#xff09; 3、你项目中使用什…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...