Kubernetes集群Service资源异常排查思路

Kubernetes集群Service资源异常排查思路

1.Service资源的概念

在K8S集群中,Pod资源是无状态的,随时可能会被删除重建,也就是说Pod的IP随时都可能发生变化,如果服务与服务之间的调用是通过Pod的IP进行调度的,那么当Pod删除重建后,就无法正常调度了。

基于这种情况,可以在K8S集群中定义Service资源对象,充电一个负载均衡器的作用,定义一个唯一的服务访问入口,这个地址可以是域名也可以是Service资源的地址,由Service资源管理一个服务的所有Pod资源,服务之间的调用就可以通过Service资源访问到具体的Pod资源。

Service接收到请求如何分发主要是靠Kube-proxy来转发的。

最常见的Service资源异常就是标签选择器关联错误导致,下面来创建一个Deployment资源,由Service资源进行管理,模拟访问异常的故障排查流程。

2.在K8S集群中部署Deployment资源

1)编写资源编排文件

# vim knowsystem.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: knowsystem
spec:
  replicas: 3
  selector:
    matchLabels:
      app: knowsystem-pod
  template:
    metadata:
      labels:
        app: knowsystem-pod
    spec:
      containers:
      - name: know-system
        image: jiangxlrepo/know-system:v1

2)创建资源

# kubectl apply -f knowsystem.yaml
# kubectl get pod
NAME                           READY   STATUS        RESTARTS   AGE
know-system-768f8fb59d-6dqwr   1/1     Running       0          39s
know-system-768f8fb59d-x8lnf   1/1     Running       0          44s
know-system-768f8fb59d-xfhm9   1/1     Running       0          41s

3.编写Service资源模拟标签选择器关联错误的故障

1)编写资源编排文件

# vim knowsystem-svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: knowsystem-svc
  labels:
    app: knowsystem					
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:	
    app: knowsystem					#故意将标签选择器关联Pod的标签写错,模拟出访问异常的故障

2)创建资源

# kubectl apply -f knowsystem-svc.yaml
[root@k8s-master k8s-tools]# kubectl get svc
NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
knowsystem-svc   NodePort    10.100.248.6   <none>        80:30574/TCP   67s

3)访问Service资源管理的Pod提供的服务

# curl 10.100.248.6
curl: (7) Failed connect to 10.100.248.6:80; 拒绝连接

4.Service资源异常的故障排查思路

故障描述:

在前面部署完Deployment资源和Service资源后,发现通过Service资源访问Pod资源提供的服务,出现了拒绝连接的现象,访问不成功。

排查思路:

1)首先排查Pod中的应用程序是否可以正常访问。

# kubectl get pod -o wide
NAME                          READY   STATUS    RESTARTS   AGE     IP               NODE        NOMINATED NODE   READINESS GATES
knowsystem-569b887d55-kp8z7   1/1     Running   0          3m32s   100.64.169.178   k8s-node2   <none>           <none>
knowsystem-569b887d55-qztnc   1/1     Running   0          3m32s   100.111.156.73   k8s-node1   <none>           <none>
knowsystem-569b887d55-shzv5   1/1     Running   0          3m32s   100.64.169.179   k8s-node2   <none>           <none>

# curl -I 100.64.169.178
HTTP/1.1 200 OK
Server: nginx/1.16.0

2)发现Pod中的应用程序是可以正常提供服务的,紧接着去排查Service资源的详细信息。

[root@k8s-master k8s-tools]# kubectl describe svc knowsystem-svc 
Name:                     knowsystem-svc
Namespace:                default
Labels:                   app=knowsystem
Annotations:              <none>
Selector:                 app=knowsystem			#关联Pod标签的选择器
Type:                     NodePort
IP:                       10.100.248.6
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30574/TCP
Endpoints:                <none>					#没有关联到任何的Pod资源
Session Affinity:         None							
External Traffic Policy:  Cluster
Events:                   <none>

3)查看Service资源的详细信息后,发现没有关联上任何一个Pod资源,那么问题也就出在了Service资源这里,Service资源管理Pod资源是通过标签选择器进行关联的,下面我们来查看Pod定义的标签列表。

[root@k8s-master k8s-tools]# kubectl get pod --show-labels
NAME                          READY   STATUS    RESTARTS   AGE     LABELS
knowsystem-569b887d55-kp8z7   1/1     Running   0          6m27s   app=knowsystem-pod,pod-template-hash=569b887d55
knowsystem-569b887d55-qztnc   1/1     Running   0          6m27s   app=knowsystem-pod,pod-template-hash=569b887d55
knowsystem-569b887d55-shzv5   1/1     Running   0          6m27s   app=knowsystem-pod,pod-template-hash=569b887d55

4)可以看到Pod的标签是app=knowsystem-pod,而Service的标签选择器中关联的是app=knowsystem,那么问题就可以定位了,标签选择器关联错Pod的标签导致的。

5)在Service资源的编排文件中将标签选择器进行调整。

······
  selector:
    app: knowsystem-pod

6)更新Service资源。

# kubectl apply -f knowsystem-svc.yaml
service/knowsystem-svc configured

7)再次访问Service资源管理的Pod应用程序,问题解决。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44953658/article/details/126684010
今日推荐