K8S微服务部署及模拟故障观测

概述
本文介绍了如何在 Kubernetes (K8S) 集群中部署微服务,并模拟常见的故障场景(如 Pod 故障、节点故障、网络故障)以测试系统的容错能力。通过本实验,了解 Kubernetes 的自动恢复机制以及如何通过监控和日志分析快速定位和解决问题。
在 Kubernetes (K8S) 中,几乎所有的资源都可以通过 YAML 文件来定义和生成。YAML 文件是 Kubernetes 中最常用的资源定义方式,在本文中会通过一些yaml定义来创建服务和资源。

一.微服务部署

1.创建命名空间
为了隔离资源,首先创建一个命名空间,可以用不同的方法创建,这里分别列出来,选择其一即可。
使用命令行工具创建命名空间:
命令直接创建命名空间,操作简单但无法定义标签、注解等元数据,适合临时或快速使用。

# 通过命令直接创建命名空间
kubectl create namespace microservices# 查询当前所有命名空间
kubectl get namespaces 

在这里插入图片描述
使用 YAML 文件创建命名空间:
通过定义 YAML 文件并使用 kubectl apply 创建命名空间,支持附加标签、注解等元数据,适合需要复杂配置或长期维护的场景。

# 生成并编辑yaml文件
vi microservices.yaml# 进入vi编辑界面输入i进入编辑模式,写入下方内容后按ESC,输入wq 保存退出
apiVersion: v1
kind: Namespace
metadata:name: microservices# 退出后输入以下命令创建命名空间
kubectl apply -f microservices.yaml # 查询当前所有命名空间
kubectl get namespaces 

在这里插入图片描述
2.部署微服务
自主式 Pod 部署:
自主式 Pod 的特点是没有控制器管理,因此如果 Pod 被删除或发生故障,Kubernetes 不会自动恢复它。一般可以用于测试,生产环境不建议使用此方式。
自主式 Pod 的示例:

# 生成并编辑yaml文件
vi pod.yaml# 进入vi编辑界面输入i进入编辑模式,写入下方内容后按ESC,输入wq 保存退出
apiVersion: v1
kind: Pod
metadata:name: test-podzzsnamespace: microserviceslabels:app: tomcat
spec:containers:- name: tomcat-javaports:- containerPort: 8080image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/tomcat:9.0.67-jdk8imagePullPolicy: IfNotPresent# 退出后输入以下命令创建命名空间
kubectl apply -f pod.yaml# 查询pod状态,创建需要时间,开始是ContainerCreating,Running后才是正常
kubectl get pods -n microservices

在这里插入图片描述
控制器模式部署:
控制器模式是 Kubernetes 推荐的管理 Pod 的方式。控制器(如 Deployment、StatefulSet、DaemonSet 等)负责确保 Pod 的期望状态与实际状态一致。如果 Pod 被删除或发生故障,控制器会自动创建新的 Pod 以维持期望的副本数。
Deployment 控制器的示例

# 生成并编辑yaml文件
vi deployment.yaml# 进入vi编辑界面输入i进入编辑模式,写入下方内容后按ESC,输入wq 保存退出
apiVersion: apps/v1
kind: Deployment
metadata:name: test-podkzqnamespace: microservices
spec:replicas: 3selector:matchLabels:app: tomcattemplate:metadata:labels:app: tomcatspec:containers:- name: tomcat-javaports:- containerPort: 8081image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/tomcat:9.0.67-jdk8imagePullPolicy: IfNotPresent# 退出后输入以下命令创建命名空间
kubectl apply -f deployment.yaml# 查询pod状态,创建需要时间,开始是ContainerCreating,Running后才是正常
kubectl get pods -n microservices

在这里插入图片描述
3.暴露服务
概述:暴露服务是通过 Kubernetes 的 Service 资源为 Pod 提供一个稳定的网络访问入口,使用标签选择器(Label Selector)将一组 Pod 绑定到 Service,并通过 ClusterIP、NodePort 或 LoadBalancer 等类型为这些 Pod 分配一个固定的 IP 地址或 DNS 名称,使集群内部或外部的客户端能够可靠地访问应用程序,同时屏蔽 Pod 的动态 IP 变化和故障转移的复杂性,确保服务的高可用性和可访问性。
使用命令行工具创建 Service
通过命令式命令行快速创建 Service,仅支持关键参数配置,适合简单场景和快速测试,但灵活性和可管理性受限。自主式 Pod 没有控制器管理,因此 kubectl expose 无法自动获取其标签并生成 selector,故而不能直接使用 kubectl expose 命令创建 Service。此处用的是控制器模式的pod示例。
参数解释:
–port:定义 Kubernetes 服务(Service)对外暴露的端口,集群内部或其他服务通过该端口访问该服务。
–target-port:定义 Pod 中应用程序实际监听的端口.
NodePort:定义 Kubernetes 在每个节点上暴露的端口,用于外部访问。

# 创建Service
kubectl expose deployment test-podkzq --port=7081 --target-port=8080 --type=NodePort --namespace=microservices# 查询Service状态
kubectl get svc -n microservices# 访问测试
# 如果是内部交互可以用--port的端口及服务状态内的IP,如果外部访问就用node节点的IP和服务状态内的端口号

在这里插入图片描述
使用 YAML 文件创建Service
通过声明式 YAML 文件详细定义 Service 的所有配置,适合复杂场景和版本控制,确保灵活性和可重复性。

# 生成并编辑yaml文件
vi service.yaml# 进入vi编辑界面输入i进入编辑模式,写入下方内容后按ESC,输入wq 保存退出
apiVersion: v1
kind: Service
metadata:name: tomcat-kzq-servicenamespace: microservices
spec:selector:app: tomcatports:- protocol: TCPport: 7081targetPort: 8080type: NodePort# 退出后输入以下命令创建 Service
kubectl apply -f service.yaml# 查询及验证跟命令行创建是一样的

在这里插入图片描述

二.模拟故障观测

1.Pod故障模拟
仅适用于控制器模式部署的Pod

# 查询当前pod信息
kubectl  get pod -n microservices# 删除pod,模拟故障
kubectl delete pod test-podkzq-57c469fd46-2qvvz -n microservices# 观察恢复 Kubernetes 会自动重新创建 Pod。使用以下命令观察 Pod 状态
kubectl get pods -n microservices -w

在这里插入图片描述
2.节点故障模拟

# 查询当前pod所处节点
kubectl get pods -n microservices -o wide# 在node节点停止服务,模拟节点故障
sudo systemctl stop kubelet# 观察Pod迁移 Kubernetes 会将 Pod 调度到其他可用节点
kubectl get pods -n microservices -o wide

调度前:
在这里插入图片描述
调度后:默认情况下,Pod 会容忍节点不可用一段时间(默认是 5 分钟),会在这个时间后调度
在这里插入图片描述

部分知识点梳理
名称空间namespace
概述:
Namespace是一种用于将集群资源划分为多个虚拟集群的机制。这些虚拟集群被称为命名空间 Namespace,每个 Namespace 提供了一个独立的环境,使得不同的团队、项目或应用可以在同一个 Kubernetes 集群中运行,而不会相互干扰。
主要特点:
资源隔离(将不同的资源隔离在不同的逻辑空间,避免命名冲突)
权限控制(通过RBAC为不同的命名空间设置不同的权限,确保访问授权)
资源配额(限制每个命名空间的资源用量,防止资源过度占用)
网络隔离(通过网络策略实现不同的命名空间网络隔离)
应用场景:多团队协作,多环境管理,资源配额管理,应用生命周期管理

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenStack Yoga版安装笔记(23)Swift安装

一、官方文档 Object Storage Install Guide — Swift 2.29.3.dev5 documentation 二、环境准备 之前的实验,已经有controller, compute1, block1节点,并已经完成Keystone、Glance、Nova、Neutron、Cinder等主要OpenStack Service的安装。 此处新增…

06-libVLC的视频播放器:推流RTMP

创建媒体对象 libvlc_media_t* m = libvlc_media_new_path(m_pInstance, inputPath.toStdString().c_str()); if (!m) return -1; // 创建失败返回错误 libvlc_media_new_path:根据文件路径创建媒体对象。注意:toStdString().c_str() 在Qt中可能存在临时字符串析构问题,建议…

少儿编程路线规划

少儿编程路线规划—一文写明白 现在有很多的编程机构,五花八门的。我有幸也见识到了大家的营销策略。这些策略有黑有白吧,从业几年,沉淀下来一些客户角度的干货,分享给大家。 如果是想以很远很远的就业为目的,毕业就…

ios app的ipa文件提交最简单的方法

ipa文件是ios的app打包后生成的二级制文件,在上架app store connect或做testflight测试的时候,它提示我们需要使用xcode、transporter或xcode命令行等方式来上传。 而xcode、transporter或xcode命令行的安装都需要使用mac电脑,假如没有mac电…

怎么查看LLM Transformer 架构进行并行计算和设备映射

怎么查看LLM Transformer 架构进行并行计算和设备映射 num_hidden_layers = model.config.num_hidden_layers print(num_hidden_layers) print(model) LLM(大语言模型)通常是基于 Transformer 架构 构建的,它由多个模块化的层(Layer)堆叠组成,每个层都有其独特的作用。…

微信小程序获得当前城市,获得当前天气

// // 获取用户当前所在城市 // wx.getLocation({// type: wgs84, // 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 // success: function(res) {// console.log(获取位置成功, res); // // 使用腾讯地图API进行逆地址解析 // wx…

美国国土安全部终止资助,CVE漏洞数据库项目面临停摆危机

(图片来源:Jerome460 / Shutterstock) 25年漏洞追踪体系即将终结 美国非营利研发组织MITRE宣布,其与美国国土安全部(DHS)签订的"通用漏洞披露(CVE)"数据库维护合同将于2…

Kafka下载和使用(Windows版)

Apache Kafka 是一个高吞吐量的分布式消息系统,广泛应用于日志收集、实时流处理等场景。本文将以 Windows 系统为例,详细介绍 Kafka 的安装和使用方法。 一、安装方式 在 Windows 系统上运行 Apache Kafka,通常有两种方式: 1.W…

RBAC的使用

1、简述RBAC的作用及工作流程 Rbac基于角色访问控制,用于管理用户对集群资源的访问权限,通过定义角色和绑定规则,将用户与权限进行关联,作用:权限精细化管理,操作便捷与统一管理,动态调整权限。…

【2025年泰迪杯数据挖掘挑战赛】A题 数据分析+问题建模与求解+Python代码直接分享

目录 2025年泰迪杯数据挖掘挑战赛A题完整论文:建模与求解Python代码1问题一的思路与求解1.1 问题一的思路1.1.1对统计数据进行必要说明:1.1.2统计流程:1.1.3特殊情况的考虑: 1.2 问题一的求解1.2.1代码实现1.2.2 问题一结果代码分…

Ethan独立开发产品日报 | 2025-04-18

1. Wiza Monitor 跟踪工作变动,并获取 Slack 和电子邮件通知。 Wiza Monitor是一款工作变动跟踪工具,可以实时追踪客户和潜在客户的职位变动,您还能通过电子邮件和Slack接收提醒,并自动更新您的客户关系管理系统(CRM…

【工具变量】A股上市公司信息披露质量KV指数测算数据集(含do代码 1991-2024年)

KV指数(Key Value Index)作为评估信息披露质量的关键指标,在证券市场,尤其是A股市场上市公司信息披露监管与评估中占据重要地位。该指数通过系统化、定量化的方法,对企业发布的信息进行全面剖析与打分,精准…

【java实现+4种变体完整例子】排序算法中【基数排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

基数排序详解及代码示例 基数排序原理 基数排序通过处理每一位数字进行排序,分为 LSD(最低位优先) 和 MSD(最高位优先) 两种方式。核心步骤: 确定最大值:计算数组中最大数的位数。逐位排序&am…

服务治理-服务发现和负载均衡

第一步:引入依赖 第二步:配置地址 改写购物车服务的代码 负载均衡成功实现。 假如有一个服务挂了,比如说8081,cart-service能不能正常访问,感知到。 再重新启动8081端口。 不管服务宕机也好,还是服务刚启动…

专题十六:虚拟路由冗余协议——VRRP

一、VRRP简介 VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议通过把几台设备联合组成一台虚拟的设备,使用一定的机制保证当主机的下一跳设备出现故障时,及时将业务切换到备份设备,从而保持通讯的连续性和…

UE5 关卡序列

文章目录 介绍创建一个关卡序列编辑动画添加一个物体编辑动画时间轴显示秒而不是帧时间轴跳转到一个确定的时间时间轴的显示范围更改关键帧的动画插值方式操作多个关键帧 播放动画 介绍 类似于Unity的Animation动画,可以用来录制场景中物体的动画 创建一个关卡序列…

openbmb/MiniCPM-V-2_6 和 AIDC-AI/Ovis2-1B 的网络结构体对比

openbmb/MiniCPM-V-2_6和Ovis2作为多模态大模型,在架构设计上既有共性也有显著差异。以下从核心模块、技术实现和任务适配三个维度展开对比分析: 一、核心模块架构对比 1. 视觉编码器 MiniCPM-V-2_6: 架构:基于SigLIP-400M轻量级…

鸿蒙学习笔记(5)-HTTP请求数据

一、Http请求数据 http模块是鸿蒙内置的一个模块,提供了网络请求的能力。不需要再写比较原始的AJAS代码。 ps:在项目中如果要访问网络资源,不管是图片文件还是网络请求,必须给项目开放权限。 (1)网络连接方式 HTTP数…

使用Redis5.X部署一个集群

文章目录 1.用Redis5.x来创建Cluste2. 查看节点信息 nodes3. 添加节点 add-node4.删除节点 del-node5.手动指定从节点 replicate6.检查集群健康状态 check 建议使用5.x版本。 首先,下载Redis,根据自己的环境选择版本。 一键启动Redis集群文件配置。 ech…

实现窗口函数

java 实现窗口函数 public class SlidingWin {public static void main(String[] args) {SlidingWin slidingWin = new SlidingWin();double v = slidingWin.SlidWin(2);System.out.println(v);}public double SlidWin(int k){int [] array =new int[]{2,4,5,6,9,10,12,23,1,…