Kubernetes中的优雅关闭和零停机时间部署( 三 )


Kubernetes中的优雅关闭和零停机时间部署

文章插图
2. 当部署新的Pod时会发生什么?
Kubernetes中的优雅关闭和零停机时间部署

文章插图
3. Kubernetes需要跟踪Pod及其IP地址 。服务应该将流量路由到新的端点,因此IP地址和端口应该被传播 。
Kubernetes中的优雅关闭和零停机时间部署

文章插图
4. 当另一个Pod被部署时会发生什么?
Kubernetes中的优雅关闭和零停机时间部署

文章插图
5. 是的,完全相同的过程 。在数据库中创建了新的“行”来表示新的Pod , 并将端点进行传播 。
Kubernetes中的优雅关闭和零停机时间部署

文章插图
6. 当删除一个Pod时会发生什么?
Kubernetes中的优雅关闭和零停机时间部署

文章插图
7. 服务立即移除该端点,最终该Pod也会从数据库中删除 。
Kubernetes中的优雅关闭和零停机时间部署

文章插图
8. Kubernetes对你的集群中的每一个小变化都做出反应 。
Kubernetes中的优雅关闭和零停机时间部署

文章插图
在Kubernetes中使用端点端点在Kubernetes中被多个组件使用 。
Kube-proxy使用端点来在节点上设置iptables规则 。
因此,每当端点(Endpoint对象)发生变化时,kube-proxy会获取新的IP地址和端口列表,并编写新的iptables规则 。
  1. 让我们考虑一个由三个节点组成的集群,其中有两个Pod,并且没有服务 。Pod的状态被存储在etcd中 。

Kubernetes中的优雅关闭和零停机时间部署

文章插图
2. 当你创建一个服务(Service)时会发生什么?
Kubernetes中的优雅关闭和零停机时间部署

文章插图
3. Kubernetes创建了一个Endpoint对象 , 并收集了来自Pod的所有端点(IP地址和端口对) 。
Kubernetes中的优雅关闭和零停机时间部署

文章插图
4. kube-proxy守护程序订阅对Endpoint的更改 。
Kubernetes中的优雅关闭和零停机时间部署

文章插图
5. 当Endpoint被添加、删除或更新时 , kube-proxy会获取新的端点列表 。
Kubernetes中的优雅关闭和零停机时间部署

文章插图
6. kube-proxy使用端点来在集群的每个节点上创建iptables规则 。
Kubernetes中的优雅关闭和零停机时间部署

文章插图
Ingress控制器也使用相同的端点列表 。
Ingress控制器是集群中将外部流量路由到集群内的组件 。
当你设置一个Ingress配置文件时,通常会指定Service作为目标:
入口.yaml
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: my-ingressspec:rules:- http:paths:- backend:service:name: my-serviceport:number: 80path: /pathType: Prefix
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
实际上,流量并不会直接路由到Service 。
相反,Ingress控制器建立了一个订阅,以便在Service的端点发生变化时收到通知 。
Ingress直接将流量路由到Pods,跳过了Service 。
正如你所想象的那样,每当Endpoint(对象)发生变化时,Ingress会获取新的IP地址和端口列表,并重新配置控制器以包括新的Pods 。
  1. 在这张图片中,有一个带有两个副本的Ingress控制器和一个Service的部署(Deployment) 。

Kubernetes中的优雅关闭和零停机时间部署

文章插图
2. 如果你想通过Ingress将外部流量路由到Pods,你应该创建一个Ingress配置文件(一个YAML文件) 。
Kubernetes中的优雅关闭和零停机时间部署

文章插图
3. 一旦你运行kubectl apply -f ingress.yaml命令,Ingress控制器就会从控制平面中获取配置文件 。
Kubernetes中的优雅关闭和零停机时间部署

文章插图
4. Ingress的YAML文件中有一个serviceName属性,用于描述应该使用哪个Service 。
Kubernetes中的优雅关闭和零停机时间部署

文章插图
5. Ingress控制器从Service中检索端点列表,并跳过该Service 。流量直接流向端点(Pods) 。


推荐阅读