我的编程空间,编程开发者的网络收藏夹
学习永远不晚

k8s笔记 实例篇

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

k8s笔记 实例篇

01 金丝雀部署

金丝雀部署(Canary releases)是一种软件发布技术,可以通过将新版本的应用程序逐步部署到生产环境中的一小部分用户,来降低部署新软件版本的风险。如果新版本在初期测试中表现良好,它可以逐步推广到所有用户。
Istio控制流量的百分比

02 蓝绿部署

03 Ingress

04 istio

k8s 1.21.5 对应 istio 1.12
istio部署步骤
移除污点
kubectl taint nodes node-role.kubernetes.io/master-

001 istio中 addons是干嘛的?

在 Istio 中,“addons” 是指一组用于增强和扩展 Istio 功能的附加组件。这些附加组件提供了额外的功能和特性,可以帮助你更好地管理和监控你的服务网格。

Istio 的 “addons” 组件包括:

  1. Grafana:一个流行的开源数据可视化工具,用于监控和展示 Istio 的度量指标。

  2. Jaeger:一个分布式追踪系统,用于跟踪和调试请求在微服务架构中的流动情况。

  3. Kiali:一个图形化的控制台工具,用于可视化和理解 Istio 网格的拓扑结构、流量状况、策略等。

  4. Prometheus:一个用于监控和报警的开源系统,用于收集、存储和分析各种指标数据。

这些 “addons” 组件可以通过运行 kubectl apply -f samples/addons 命令来安装到 Istio 部署中。

通过添加这些附加组件,你可以更好地监控你的服务网格并获得更多的洞察力,同时也能够更好地管理和操作你的 Istio 部署。

002 istio功能

0001 请求路由

网页有三个版本,可以控制网页怎么刷新都只走v1版本,还有让jack用户登录后看到的是v2版本

0002 故障注入
  1. 模拟延迟:登录网站后延迟7秒网页才反应过来
  2. http异常:手动注入让 jason用户的reviews模块不可用
    delete virtual-service-all-v1.yaml即可清理全部
0003 流量转移
  1. 开始的时候,100%的流量到v1版本。50%到v1版本,50%到v3版本。然后再把100%流量发送到v3
0004 熔断 就是限流

针对某个服务

  1. 连接池的连接数大于设定值的时候就会熔断,无法访问网页
  2. 在多少秒之内,当网关的错误数超过设定值,熔断
  3. 可以设置比如3分钟静默期,不在接收任何其他请求
0005 流量镜像

流量镜像(Traffic mirroring)是一种网络流量管理技术,用于将实时的网络流量复制到另一个目标或目标组,以进行监控、调试、安全分析或其他目的。

通过流量镜像,网络管理员可以在不影响正常流量传输的情况下获得副本或镜像的流量,以进行深入的分析和观察。通常,这个镜像流量被发送到专门用于处理和分析的工具或系统,例如数据包分析器、入侵检测系统(IDS)、日志分析平台等。

流量镜像的主要应用包括:

  1. 监控和故障排除:通过将流量镜像到监控系统,可以实时监视网络的性能、流量模式和问题,以快速识别和解决故障。

  2. 安全分析:将流量镜像到入侵检测系统(IDS)或安全信息与事件管理系统(SIEM),可以进行实时的流量分析,发现潜在的威胁、异常行为或恶意活动。

  3. 性能优化:通过镜像流量进行性能分析,可以确定瓶颈、延迟或带宽消耗,并采取相应的优化措施。

  4. 合规性和法规要求:许多合规性标准和法规要求对网络流量进行监控和审计。流量镜像可以帮助满足这些要求,并为安全审核提供必要的数据。
    重点注意这些被流量的镜像是“即发即弃”,就是说镜像请求的响应会被丢弃

003 kubectl logs -f --tail 100 -c istio-proxy和直接kubectl logs -f --tail 100 打印出来的日志有什么不同呢?

在 Kubernetes 环境中,kubectl logs 命令用于获取集群中运行的 pod 的日志。如果一个 pod 仅运行一个容器,那么只需提供 pod 名称即可。但如果 pod 中运行多个容器,就需要指定要获取日志的容器名。

在 Istio 服务网格中,部署到集群的 pod 通常会有两个容器:

  1. 业务容器:运行您的应用程序的地方。
  2. Sidecar 容器(istio-proxy):这是由 Istio 自动注入的 Envoy 代理容器,用于处理所有进出 pod 的流量。

现在,让我们区分这两个命令:

kubectl logs -f --tail 100 <pod-name> -c istio-proxy

这个命令将会:

  • 打印出名为 的 pod 中的 istio-proxy 容器的实时日志。
  • 由于使用了 -f,如果在日志末尾添加新行,它将继续打印,这意味着您正在“跟踪”日志输出。
  • --tail 100 表示您只想查看最后的 100 行日志。
  • 这些日志主要关注入站和出站流量的信息,错误,警告和其他 Envoy 代理活动。

总之,直接使用 kubectl logs -f --tail 100 通常会获取您的应用容器的日志,而不是 sidecar 的 istio-proxy 容器的日志。 若要获取特定于 Istio 功能和流量管理的日志,您需要指定 -c istio-proxy

关于出站和入站流量的控制
在Istio服务网格中,"入站"和"出站"流量指的是流经每个服务实例边车(sidecar)代理的网络流量。具体来说:

  1. 入站流量
    例如,如果服务A调用服务B,那么对于服务B的sidecar代理来说,从服务A到服务B的流量被视为入站流量。

  2. 出站流量
    例如,如果服务B需要查询数据库或调用外部API,它将通过它的sidecar代理发送请求,这些请求被认为是出站流量。

Istio的Envoy sidecar利用这些信息来提供丰富的功能集,例如:

  • 流量路由控制:基于HTTP请求信息(如头信息)将流量引导至不同的服务版本(例如,A/B测试或蓝/绿部署)。
  • 重试和超时:为了提高服务的健壮性和可靠性,对失败的服务调用进行重试,设置请求的超时限制。
  • 故障注入:故意制造失败场景,例如延迟或错误响应,以测试系统的弹性。
  • 安全通信:使用mTLS(相互TLS)确保服务之间的通信安全。
  • 访问控制:限制哪些服务可以访问您的服务实例。
  • 遥测数据收集:收集有关系统流量模式、效率和安全的详细指标、日志和追踪数据。

通过分析这些入站和出站流量的日志和指标,开发者和运维团队能够更好地理解其系统的行为和性能,从而能够更加有效地响应问题、调整资源分配和计划未来的需求。

004 jager的意义–谁调谁,谁耗时多都能查出来

假设您在Istio服务网格中运行了一个在线零售网站的微服务架构。这个架构包括以下服务:

  1. 前端界面(frontend
  2. 订单处理(orders
  3. 产品目录(catalog
  4. 付款处理(payment

用户通过frontend服务浏览产品,下单购买,这个请求流会涉及其他服务的调用。比如,用户下单可能就需要orders服务记录订单,catalog服务确认产品信息,payment服务处理支付。

在这样的系统中使用Jaeger的例子如下:

场景:用户报告说,当他们尝试下单时,经常会遇到延迟,有时甚至会失败。

问题定位与解决

  1. 启动追踪:您在Istio中启用了Jaeger分布式追踪系统,系统开始收集通过服务网格的请求的追踪数据。

  2. 发现性能瓶颈:通过Jaeger的界面,您可以看到用户下单的请求流程。在这个流程中,每个请求通过frontend传递到orderscatalog、然后是payment服务。您注意到payment服务响应时间长,而且有时会失败。

  3. 深入分析:通过Jaeger,您能够深入到每个单独的追踪,查看payment服务处理请求的详细信息。您发现,每当请求延迟或失败时,都是因为与第三方支付网关的通信延迟。

  4. 优化与修复:了解了问题原因后,您决定实施一些更改,比如增加对第三方支付网关调用的超时时间,并且设置重试逻辑。或者,您可能会与支付网关提供商讨论优化他们的服务性能。

  5. 持续监控:更改上线后,您继续使用Jaeger监控服务调用。随着时间的推移,您注意到支付请求的性能有所改善,用户体验也得到提高。

在此示例中,Jaeger使您能够可视化请求在系统中的流动,发现性能瓶颈,并针对具体问题采取行动。没有分布式追踪,这种级别的问题解析和微调将会非常具有挑战性和耗时。

005 kiali 能看到吞吐量,ops

Kiali和Jaeger的组合使用为服务网格中的问题诊断、配置管理和优化提供了全方位的支持。Kiali提供了宏观视角和操作能力,而Jaeger提供了更细粒度的事务分析。

05 CRDs

deployment,statfulset,daemonset只是控制pod,要是控制其他资源用什么?用CRDs

001 自定义的todo

apiVersion: apiextensions.k8s.io/v1kind: CustomResourceDefinitionmetadata:  name: todos.sample.comspec:  group: sample.com  versions:    - name: v1      served: true      storage: true      schema:        openAPIV3Schema:          type: object          properties:            spec:              type: object              properties:                task:                  type: string                priority:                  type: string  scope: Namespaced  names:    plural: todos    singular: todo    kind: Todo

在上述示例中,我们在 CRD 定义的 spec.versions[0] 下添加了 schema 部分,并定义了一个简单的模式。该模式指定了 spec.taskspec.priority 字段的类型为字符串。

请根据你的实际需要调整模式的定义。一旦添加了正确的模式后,再次运行 kubectl apply 命令来应用 CRD 定义:

kubectl apply -f todo-crd.yaml
  1. 创建一个 Todo 实例。假设我们有一个名为 todo-instance.yaml 的 YAML 文件,其中包含了要创建的 Todo 实例的信息。例如,内容如下:
apiVersion: sample.com/v1   kind: Todo   metadata:     name: my-todo   spec:     task: 购买杂货     priority:

在这个例子中,我们创建了一个名为 my-todoTodo 实例,具有购买杂货的任务和高优先级。

运行以下命令来创建这个 Todo 实例:

kubectl apply -f todo-instance.yaml

Kubernetes 将会在集群中创建一个名为 my-todoTodo 实例。

  1. 使用 kubectl 或其他 Kubernetes 工具管理 Todo 实例。例如,可以通过以下命令获取所有的 Todo 实例列表:
kubectl get todos

你还可以使用类似的命令进行创建、更新或删除 Todo 实例。

002 istio中

通过使用VirtualService和DestinationRule,Istio可以动态地改变服务网格中的流量规则和通信策略,而无需改动任何实际的服务代码。这种灵活性和控制力是通过Istio控制平面到数据平面(Envoy代理)的紧密协作实现的

003 GPU

没有gpu的crd,k8s怎么知道每台机器上都有哪些gpu,都有几块,知道了才能自动调度过去

Problems

01 K8s Ingress 解决 “长连接” 负载不均衡的问题

在 Kubernetes (k8s) 环境中,长连接可能导致的负载不均衡问题是一个关键议题。长连接,即持久连接,是指客户端和服务器之间建立的TCP连接在传输完成后依然保持打开状态,以便后续的请求可以使用同一连接。这种机制对于减少建立连接的开销、提高性能很有帮助,但在负载均衡方面,可能会出现问题。

  1. 问题描述:

    当使用基于连接的负载均衡(例如最简单的轮询机制)时,新的连接会被均匀分配到后端的各个服务器。但是,对于长连接的场景,一旦连接被建立并分配给了某个服务器,它会持续一段相对较长的时间。如果在这段时间内,有大量的请求沿着这些现存的连接发送,那么,即使某些服务器可能已经过载,新的请求还是会发送到这些服务器,因为连接已经建立。

    这种情况下,新启动的 pod 或者相对空闲的服务器可能接收不到足够的流量,因为它们没有与客户端建立足够的长连接。这就导致了不均衡的负载分配。

  2. 举例说明:

    比如,一个在线游戏的后端运行在 Kubernetes 集群上,游戏客户端与服务器之间维持着长连接。在高峰期,成千上万的玩家同时在线。初始情况下,当玩家数量较少时,系统中的每个 pod 可能只处理少量的连接,但随着更多的玩家上线,新的连接会被创建,并可能会全部分配到某些 pod。

    假设此时扩展了集群,增加了更多的 pod。理想情况下,新的玩家应该连接到新的 pod 上,以实现负载均衡。但由于长连接的存在,现有的玩家仍连接在原有的 pod 上,继续给这些 pod 带来高负载,而新的 pod 可能却处于空闲状态,因为它们还没有收到新的连接。即使负载均衡器介入,但由于长连接已经建立,新的请求(游戏内的操作)仍然会沿着已有的连接发送,不会引导到新的 pod。

  3. 解决方案:

    解决这种长连接导致的负载不均衡问题的一种方法是引入更智能的负载均衡机制,比如基于请求的负载均衡或者使用一些算法(如最少连接方法)动态地重新分配连接。

    另外,可以在应用层面上做一些优化,例如,通过在应用程序中实现断线重连逻辑,定期让客户端重新连接服务器,这样新的连接就有机会被重新均衡分配到不同的服务器上。

在使用 Kubernetes 和长连接时,理解这些挑战并采取适当的策略是非常重要的,以确保系统可以高效、公平地处理不同的负载。

来源地址:https://blog.csdn.net/qq_41834780/article/details/134004647

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

k8s笔记 实例篇

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

docker笔记25-k8s-service资源

service是要通过coreDNS来管理pod的。 kube-proxy始终监视着apiserver,获取与service资源的变动状态。一旦发现有service资源发生变动,kube-proxy都要把它转变为当前节点之上的
2023-06-04

Flutter学习笔记 —— WebSocket篇

Flutter学习笔记 —— WebSocket篇 前言 WebSocket 大家都不陌生了,我们今天来看看怎么在Flutter中使用WebSocket! 开发环境 Android StudioAndroid SD
2023-08-22

Android 基础笔记 04 篇:数据存储篇

存储模式 Android 提供了四种存储模式: 专属空间存储:以该模式存储的数据只允许特定的应用程序访问。共享空间存储:以该模式存储的数据,所有应用都可以访问。首选项存储:常用于保存键值对数据。本地数据库存储:常用于保存结构体数据。 专属空
2022-06-06

k8s 实战篇 - mysql部署 - 1

在项目的开发中肯定是需要使用数据库进行数据化持久操作。在JAVA项目中使用比较多的数据库是mysql,这篇文章主要描述怎么在k8s中安装mysql数据库。 mysql部署 1、获取mysql镜像 可以在dockerhub中搜索镜像地址
2023-08-19

Nodejs学习笔记之入门篇

分享第一篇,关于 NodeJS —— Javascript 的常用知识以及如何从 Javascript 开发者过渡到 NodeJS 开发者(不会介绍具体的框架)。在读本文前,希望你对 javascript 有一些初步的认识。 Javascr
2022-06-04

萌新Android笔记----IntentFilter匹配篇

开个头 101要从黄铜调回黑铁了,太难了呀,都怪匹配给到的队友天天拉胯。。。(上单头铁盖伦打wn)。。Android的匹配机制也是给萌新当头一棒。但萌新突出一个莽字,不知道的东西就冲塔搞他。。首先我们萌新知道的启动activity分为两种,
2022-06-06

Python学习笔记(办公篇Excel)

简介:     今日接了个小单,把数据从xlsx读取到本地生成散点图,在读取日期数据时发现,读取下来的日期是数字,不是日期的格式   所要用的库:xlrd :1.1.0time:datetime:解决方法: 代码 1 import xlr
2023-01-30

Android 开发笔记 07-02 篇:OpenCV 人脸检测篇

OpenCV 库导入可参考:https://blog.csdn.net/zhrjyl/article/details/104442030 Demo:链接:https://pan.baidu.com/s/1z0WsF0nI5GuXilcBHn
2022-06-06

docker笔记30-k8s dashboard认证及分级授权

Dashboard官方地址:https://github.com/kubernetes/dashboard dashbord是作为一个pod来运行,需要serviceaccount账号来登录。 先给dashboad创建
2023-06-04

python学习笔记-利器篇1:IPyt

子曰:工欲善其事必先利其器偶然在一篇谈pyhon的文章中看到了IPython。第一感觉就是这和苹果有啥关系吧,兴起一搜才发现原来是一个代替python默认命令行终端的玩样儿。它家网站上贴出来的宣传图真是好看阿,又是彩色高亮又是直接在终端里面
2023-01-31

Elam的caffe笔记之配置篇(一)

配置要求:系统:centos6.5 目标:基于CUDA8.0+Opencv3.1+Cudnnv5.1+python3.6接口的caffe框架gcc是linux编译安装必备的编译器CentOS6.5自带的gcc版本是4.4.7,并不支持C++
2023-01-31

docker笔记22-k8s资源清单定义入门

资源分类: 1)workload型资源:service,pod,Redeployment(控制器,我们很少直接操作pod,而是通过控制器来操作Pod)、ReplicaSet、StatefilSet、Job、Cronjob
2023-06-04

Elam的caffe笔记之配置篇(四)

配置要求:系统:centos6.5 目标:基于CUDA8.0+Opencv3.1+Cudnnv5.1+python3.6接口的caffe框架放弃了兼容性最好的2.7版本,准备配置3.6的python版本。如果要单独配置python实际上步骤
2023-01-31

笔记本win10安装实例分析

这篇“笔记本win10安装实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“笔记本win10安装实例分析”文章吧。1.将
2023-07-01

编程热搜

目录