IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 《Kubernetes,锁机制(本地锁+分布式锁)超全分析 -> 正文阅读

[大数据]《Kubernetes,锁机制(本地锁+分布式锁)超全分析

既然是一个资源,那么我们就可以获取到

img

[](

)负载分发

我们上面已经成功的实现了通过 Service 访问到Pod 资源,那么我们再做一些修改,分别进入3个pod编辑 usr/share/nginx/index.html 文件:


# pod01 Pod01 :  ip - 10.244.1.73 # pod02 Pod01 :  ip - 10.244.1.73 # pod03 Pod03 :  ip - 10.244.2.63 

然后我们再次尝试通过 curl 10.96.10.10:80命令查看结果:

img

眼尖的你是否有发现,这种负载分发策略不就是轮询吗!对于 Service 的访问,k8s提供了两种负载分发策略:

  • 如果未定义分发策略,默认使用 kube-proxy 的策略,比如随机、轮询

  • 基于客户端地址的会话保持模式,即来自同一个客户端发起的所有请求都会转发到固定的一个pod上。而这里就需要用到我们上面提到的没有见过的东西 sessionAffinity

之前我们用 ipvsadm -Ln 命令查看分发策略的时候,里面有个 rr 字段不知道你有没有注意到,没错,这个 rr 值得就是轮询的意思

img

如果我们想要开启会话保持的分发策略,那么只需要在spec中添加 sessionAffinity:ClientIP 选项

img

再次通过 ipvsadm -Ln 命令查看分发策略就可以发现结果已经发生变化了

img

我们简单测试一下:

img

这样子就已经实现了会话保持的分发策略!

注意:ClusterIp 的 Service,不支持外部访问,也就是说通过浏览器访问是不生效的,只能在集群内部访问

[](

)2. HeadLiness

很多服务都需要支持定制化,如果将产品定位为服务,那么这个产品毋庸是成功。在某些场景中,开发人员并不想要使用 service 提供的负载均衡功能,而是希望自己来控制负载均衡策略。针对这种情况的发生,k8s也是很好的支持了,引入了 HeadLiness Service,这类 Service 不会分配 ClusterIp,如果想要访问 service,只能通过 Service 域名进行查询。

我们来看下 HeadLiness 的资源清单模板:

img

唯一跟 ClusterIp 不同的便是 clusterIP: None 属性的变化。

img

通过创建后可以发现,ClusterIP并未分配,我们继续查看 Service 的详情

img

通过详情我们可以发现 Endpoints 已经生效了,然后我们任意进入到一个pod中,查看域名解析情况:

img

可以看到域名也已经解析完成,默认域名为service名称.命名空间.svc.cluster.local

img

[](

)3. NodePort

上面的两个service类型,都是只能在集群内部才能访问,但是我们部署服务肯定是想让用户通过集群外部可以使用的。那么这个时候就需要用到我们开头创建的service类型,那就是 NodePort service。

这种类型的Service的工作原理也不难,其实 就是将 service的端口映射到 Node 的一个端口上,然后通过 NodeIp+NodePort进行访问

img

看了原理图是不是感觉豁然开朗啦。那么来看看是怎么通过资源清单创建的:

img

我们通过以上资源清单创建service,然后访问:

img

可以看出通过两种方式都是可以访问的,我们也可以在浏览器试试看:

img

这结果也是如我们所愿!

不要感觉到这里就已经心满意足了哦,虽然说已经可以成功让用户访问到了我们趁热打铁继续再了解剩下的两种类型

[](

)4. LoadBalancer

LoadBalancer 听名字就知道跟负载均衡有关。这个类型与 NodePort 很相似,目的都是向外部暴露一个端口,主要的区别在于 LoadBalancer 会在集群的外部再做一个负载均衡器,而这个设备是需要外部环境支持的,外部环境发送到这个设备的请求,会被设备负载之后转发到集群中。

img

图中有个Vip的概念,这里的Vip指的是 Vitual IP,也就是虚拟IP,外部用户通过访问这个虚拟IP,可以负载到我们不同的service上,达到负载均衡和高可用的特点

[](

)5. ExternalName

ExternalName 类型的service 是用于引入集群外部的服务,它通过 externalName 属性指定外部一个服务的地址,然后在集群内部访问此service就可以访问到外部服务了。

img

资源清单:

img

创建后我们可以查看域名解析,发现已经解析成功:


dig @10.96.0.10 svc-externalname.cbuc-test.svc.cluster.local 

img

[](

)二、Ingress

1)工作模式

上面我们已经讲完了 Service几种类型的用法,我们已经知晓了想让外部用户访问到我们pod中的服务有两种类型的service是支持的,分别是:NodePort和LoadBalancer,但是其实认真分析一下,我们不难发现这两种service 的缺点:

NodePort:会占用集群机器的很多端口,当集群服务变多的时候,这个缺点就越发明显

LoadBalancer:每个Service都需要一个LB,比较麻烦和浪费资源,并且需要 k8s之外的负载均衡设备支持

这种缺点当然不只是我们能够发现,作为k8s的启动者早已意识到了,紧接着便推出了 Ingress 的概念。Ingress 仅需要一个 NodePort或 LB 就可以满足暴露多个Service的需求:

img

实际上,Ingress就相当于一个7层的负载均衡器,是 K8s 对反向代理的一个抽象,它的工作原理类似于 Nginx,可以理解成在 Ingress 里 建立诸多的隐射规则,然后 Ingress Controller通过监听这些配置规则转化成 Nginx 的反向代理配置,然后对外提供该服务。这边涉及到了两个重要的概念:

  • Ingress:K8s 中的一个资源对象,作用是定义请求如何转发到 service 的规则

  • Ingress Controller:具体实现反向代理及负载均衡的程序,对Ingress定义的规则进行解析,根据配置的规则来实现请求转发,有很多种实现方式,如 Nginx、Contor、Haproxy等

Ingress 控制器 有很多中可以实现请求转发的方式,我们通常上也会选择我们比较熟悉的 Nginx 作为负载,接下来我们就以 Nginx 为例,我们先来了解一下其工作原理:

img

  • 用户编写 Ingress Service规则, 说明每个域名对应 K8s集群中的哪个Service

  • Ingress控制器会动态感知到 Ingress 服务规则的变化,然后生成一段对应的Nginx反向代理配置

  • Ingress控制器会将生成的Nginx配置写入到一个运行中的Nginx服务中,并动态更新

  • 然后客户端通过访问域名,实际上Nginx会将请求转发到具体的Pod中,到此就完成了整个请求的过程

了解了工作原理,我们就来落地实现~

2)Ingress使用

1. 环境搭建

在使用 Ingress之前,我们需要先搭建一个 Ingress 环境

步骤一:


# 拉取我们需要的资源清单 wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml  wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml 

步骤二:


# 创建资源 kubectl apply -f ./ 

步骤三:

查看资源是否创建成功

img

到这里我们就已经准备好了 Ingress 环境,接下来来到测试环节~

我们准备了两个Service,两个 Deployment,和创建了6个副本的Pod

img

如果到现在还准备不出这些资源的小伙伴得回头做功课了哦~

大致结构图如下:

img

那我们现在就准备一个 Ingress 来达到以下的结果

img

总结

面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。

此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!

给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”

image

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。

计模式+数据结构与算法等”

[外链图片转存中…(img-90ANqYoP-1630394470454)]

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。

image

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章           查看所有文章
加:2021-09-01 12:00:29  更:2021-09-01 12:02:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:54:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码