kubernetes基础知识之发布未就绪pod的服务

360影视 日韩动漫 2025-03-12 05:33 2

摘要:通过由选择器的service的创建,当匹配到对应合适的pod以后,就会创建一个同名字的命名空间、一个同名字的端点对象endpoints,去记录后端pod的端点值,也就是IP地址和端口。对应的每个节点的kubelet再将端点对象同步到本节点的ipvs规则中去,就

kubernetes service和pod的关联中间层叫endpoints 服务端点。

通过由选择器的service的创建,当匹配到对应合适的pod以后,就会创建一个同名字的命名空间、一个同名字的端点对象endpoints,去记录后端pod的端点值,也就是IP地址和端口。对应的每个节点的kubelet再将端点对象同步到本节点的ipvs规则中去,就可以查看到负载均衡的局面。

公开未就绪的地址信息,也就是就绪探测readiness probe未就绪的pod,使用service进行公开pod中的应用。service如果要匹配pod的话,必须有两个指标:

①:service的标签选择器必须得是pod标签的子集。

②:pod必须是就绪状态的。

可以添加就绪状态,去保障每一个能够就绪的pod可以被访问。

Pod就绪service才关联pod是一个可选项,只有默认情况下pod必须就绪,但是我们可以修改。

创建未就绪状态pod的资源清单:

apiVersion: v1

kind: Pod

metadata:

name: readiness-httpget-pod

namespace: default

labels:

app: my-app

env: test

spec:

- name: readiness-httpget-container

path: /index1.html

protocol: TCP

以pod的资源清单创建pod:

kubectl create -f pod-xxx.yaml

以service的资源清单创建service:

kubectl create -f service-xxx.yaml

可以发现创建的pod处于running状态,但是READY是未就绪状态,默认这种情况是不会匹配到负载均衡的规则里面的。

查看pod的标签:

kubectl get pod -n $namespace_name --show-labels

创建服务:

kubectl create svc clusterip my-app --tcp=80:80

查看服务:

kubectl get svc --all-namespaces | grep my-app

curl $CLUSTER-IP:80

会发现是没有办法访问成功的,因为这个服务的真实服务器处于未就绪状态,因为不抓取未就绪状态的pod写入endpoints。

服务要调用请求到后端pod需要满足两个条件:

①:service的标签选择器是pod 标签的子集。

②:pod处于就绪状态。

如果环境要求比较高,可以不管pod是否就绪,都可以抓取到服务端点,这时可以去开启一个服务的特殊选项。这样在当前的service里可以把publishNotReadyAddresses 改成true。

修改步骤:

kubectl edit svc $svc_name -n $namespace_name

然后在spec下面添加:

publishNotReadyAddresses: true

添加publishNotReadyAddresses: true,也可以:

kubectl patch service myapp -p '{"spec":{"publishNotReadyAddresses": true}}'

然后设置这个选项生效之后,再访问服务就可以访问了。

将publishNotReadyAddresses选项开启后,可以去捕获那些未就绪的pod,只要标签匹配就可以抓取端点信息并且创建service了。

服务service的类型:

①:ClusterIP

②:NodePort

③:LoadBalancer

④:ExternalName

endpoints是pod和service的中间关联。

开启未就绪的pod的service捕获:

publishNotReadyAddresses: true

service:对已有的pod做四层负载均衡。

ingress:实现七层负载均衡。

彩虹

鼓励的话语:人生没有白走的路,每走一步都算数!

来源:小倩说科技

相关推荐