kubernetes - Kubernetes 创建服务耗时过长
问题描述
我一直在尝试部署我的 Kubernetes 服务,但它说仍然挂起并保持挂起。我等了 1 天半,但仍在等待中。
静态站点服务.yaml
apiVersion: v1
kind: Service
metadata:
name: static-site-service
annotations:
imageregistry: "https://hub.docker.com/"
labels:
app: static-site
spec:
type: LoadBalancer
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: static-site
sessionAffinity: None
解决方案
根据文档:
需要注意的是,此功能的数据路径是由 Kubernetes 集群外部的负载均衡器提供的。
当服务类型设置为 LoadBalancer 时,Kubernetes 为集群内的 pod 提供与 type equals ClusterIP 等效的功能,并通过使用 Kubernetes pod 的条目对(Kubernetes 外部的)负载均衡器进行编程来扩展它。Kubernetes 服务控制器自动创建外部负载均衡器、健康检查(如果需要)、防火墙规则(如果需要),并检索云提供商分配的外部 IP 并将其填充到服务对象中。
换句话说,您的 kubernetes 集群需要知道如何设置负载均衡器,因为它是由集群运行的环境而不是 kubernetes 本身提供的功能。
例如,如果您在 AWS 上运行 kubernetes 并且您Controller Manager
的设置正确,则每次创建Service
with type时LoadBalancer
都会为您创建一个新的 ELB。
所有其他受支持的云提供商(Azure、GCE、Digital Ocean 等)也是如此。
如果您在本地或不受支持的云提供商上运行,那么只要您不设置专用解决方案(例如仅命名随机解决方案),就没有任何东西可以LoadBalancer
为您创建,并且该服务将永远存在。pending
MetalLB
我建议阅读这篇博文以了解更多详细信息。
推荐阅读
- laravel - 如何访问这个值?
- javascript - 有没有更聪明的方法来编写这个 RegExp?
- java - 如何在 Java 中显示错误对话框?
- java - Android 应用程序在定义字节缓冲区以读取文件时崩溃
- vue.js - paypal API v2 不发货
- groovy - Groovy 的三元条件运算符在字符串表达式中有 bug 吗?
- parallel-processing - 使用并行化时自定义度量解析外部函数时出错
- sockets - ObjectInputStream readObject 意外关闭套接字
- python - 用户在 Python 中输入保留关键字。发生错误
- c++ - 从文本文件中读取数据并删除所有换行符并在 C++ 中的控制台中显示