Minikube Ingress 陷入 "Scheduled for sync"
Minikube Ingress Stuck In "Scheduled for sync"
总结
尝试使用 minikube minikube-test-ifs.com
映射到我的部署。
我做了什么
minikube start
minikube addons enable ingress
kubectl apply -f <path-to-yaml-below>
kubectl get ingress
以 <ip> minikube-test-ifs.com
形式将入口 IP 映射添加到 /etc/hosts 文件
我转到 chrome 并输入 minikube-test-ifs.com
但它没有加载。
我收到“无法访问网站,响应时间太长”
yaml 文件
注意 - 都在默认命名空间中,我不知道这是否有问题。
这个 yaml 中可能有问题,但我检查并双重检查并没有发现潜在的错误......除非我遗漏了什么
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deployment
labels:
app: test
spec:
replicas: 1
selector:
matchLabels:
app: test
template:
metadata:
labels:
app: test
spec:
containers:
- name: test
image: nginx
ports:
- name: client
containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
name: test-service
spec:
selector:
app: test
ports:
- name: client
protocol: TCP
port: 3000
targetPort: 3000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: minikube-test-ifs.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: test-service
port:
number: 3000
OS
Windows 10
其他东西
我检查了 但我已经添加到我的 /etc/hosts 并且我也尝试删除 spec.host
但这仍然不起作用...
还检查了 Minikube Ingress (Nginx Controller) not working 但那个人已经加载了他的页面,所以据我所知与我无关
有什么想法吗?
我看了很多关于这方面的 Youtube 教程,我完全按照每件事来做。我对此还是个新手,但我看不出它不起作用的原因?
编辑
当我 运行 kubectl describe ingress <ingress>
我得到:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Sync 8s (x5 over 19m) nginx-ingress-controller Scheduled for sync
如何让它同步?是不是有问题,因为它已经“Scheduled for sync”了很长时间
概览
- 使用 docker 驱动程序的 Minikube Ingress 插件仅适用于 linux
- Docker for Windows 使用 Hyper-V,因此,如果 Docker 守护程序是 运行ning,您将 无法 使用 VM 平台,例如 VirtualBox 或 VMware
- 如果您有 Windows 专业版、企业版或教育版,如果您使用 Hyper-V 作为您的 minikube 集群(请参阅解决方案 1),您可能能够让它正常工作
- 如果您不想升级 Windows,您可以在 Linux 虚拟机上打开一个 minikube 集群,然后 运行 在那里进行所有测试。这将要求您配置一些 Windows VM 设置,以使您的 VM 达到 运行(请参阅解决方案 2)。请注意,您只能 运行 Docker 或 VM 平台(Hyper-V 除外),但 不能两者都 (请参阅第二个问题了解为什么会这样)。
问题
对于那些和我情况相同的人,问题在于 minikube ingress 插件仅适用于 Linux OS when using docker 驱动程序(感谢@riovall 向我展示了这个 documentation)。
第二题
所以解决方法应该很简单吧?只需使用不同的驱动程序,它应该可以工作。这里的问题是,当 Docker 安装在 Windows 上时,它使用内置的 Hyper-V 虚拟化技术,默认情况下似乎禁用所有其他虚拟化技术。
我测试了这个假设,似乎是这样。当 Docker 守护进程处于 运行ning 时,我无法启动我拥有的任何虚拟机。例如,当我尝试 运行 我的 VM 在 VirtualBox 和 VMWare 上时出现错误。
此外,当我尝试使用 virtualbox 驱动程序启动 minikube 集群时,它卡在“正在引导内核”,然后出现 This computer doesn't have VT-X/AMD-v enabled
错误。这个错误是错误的,因为我确实启用了 VT-X(我检查了我的 BIOS)。这很可能是因为当启用 Hyper-V 时,所有其他类型的虚拟化技术 似乎 都被禁用。
对于我的个人计算机,当我搜索“打开或关闭 windows 功能”时,Docker 守护程序启用了“虚拟机平台”,然后要求我重新启动计算机。这发生在我安装 Docker 时。作为测试,我关闭了“虚拟机平台”和“Windows Hypervsor 平台”功能并重新启动了我的计算机。
当我这样做时发生了什么? Docker 守护程序停止了 运行ning,我无法再使用 docker,但是,我能够打开我的虚拟机 和 我能够以 virtualbox 作为驱动程序启动我的 minikube 集群。问题?好吧,Docker 不起作用,所以当我的集群试图拉取我正在使用的 docker 图像时,它将无法。
问题就出在这里。您启用了 VM 技术并禁用了 Docker,或者您启用了 VM 技术(Hyper-V 除外,我将很快谈到)并启用了 Docker。但你不能两者兼得。
解决方案 1(未测试)
最简单的解决方案可能是升级到 Windows 专业版、企业版或教育版。 Hyper-V 平台无法正常访问 Windows。升级后,您应该能够同时使用 Hyper-V 作为驱动程序和 Docker 守护程序。从理论上讲,这应该可以使入口正常工作。
解决方案 2(已测试)
如果你像我一样不想为这么小的东西升级系统,还有另一种解决方案。
首先,在您的计算机中搜索“打开或关闭 windows 功能”部分并禁用“虚拟机平台”和“Windows 管理程序平台”,然后重新启动您的计算机。 (一会儿见 :D)
之后,在你的电脑上安装一个虚拟机平台。我更喜欢 VirtualBox but you can also use others such as VMware.
安装 VM 平台后,添加一个新的 Linux VM。我建议 Debian or Ubuntu. If you are unfamiliar with how to set up a VM, this 视频将向您展示如何操作。这将是大多数 iso 图像的一般设置。
启动 VM 并 运行ning 后,在其上下载 minikube and Docker。确保为您的 VM 安装正确的版本(对于 Debian,安装 Debian 版本,对于 Ubuntu,安装 Ubuntu 版本。一些下载可能只是一般的 Linux,应该适用于大多数 Linux 个版本)。
一旦你安装了所有东西,创建一个以 docker 作为驱动程序的 minikube 集群,应用你的 Kubernetes 配置(部署、服务和入口)。配置您的 /etc/hosts
文件并转到您的浏览器,它应该可以工作。如果您不知道如何设置 ingress,可以观看 this 视频以了解有关什么是 ingress、其工作原理以及如何设置的示例。
总结
尝试使用 minikube minikube-test-ifs.com
映射到我的部署。
我做了什么
minikube start
minikube addons enable ingress
kubectl apply -f <path-to-yaml-below>
kubectl get ingress
以 <ip> minikube-test-ifs.com
形式将入口 IP 映射添加到 /etc/hosts 文件
我转到 chrome 并输入 minikube-test-ifs.com
但它没有加载。
我收到“无法访问网站,响应时间太长”
yaml 文件
注意 - 都在默认命名空间中,我不知道这是否有问题。
这个 yaml 中可能有问题,但我检查并双重检查并没有发现潜在的错误......除非我遗漏了什么
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deployment
labels:
app: test
spec:
replicas: 1
selector:
matchLabels:
app: test
template:
metadata:
labels:
app: test
spec:
containers:
- name: test
image: nginx
ports:
- name: client
containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
name: test-service
spec:
selector:
app: test
ports:
- name: client
protocol: TCP
port: 3000
targetPort: 3000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: minikube-test-ifs.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: test-service
port:
number: 3000
OS
Windows 10
其他东西
我检查了 spec.host
但这仍然不起作用...
还检查了 Minikube Ingress (Nginx Controller) not working 但那个人已经加载了他的页面,所以据我所知与我无关
有什么想法吗?
我看了很多关于这方面的 Youtube 教程,我完全按照每件事来做。我对此还是个新手,但我看不出它不起作用的原因?
编辑
当我 运行 kubectl describe ingress <ingress>
我得到:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Sync 8s (x5 over 19m) nginx-ingress-controller Scheduled for sync
如何让它同步?是不是有问题,因为它已经“Scheduled for sync”了很长时间
概览
- 使用 docker 驱动程序的 Minikube Ingress 插件仅适用于 linux
- Docker for Windows 使用 Hyper-V,因此,如果 Docker 守护程序是 运行ning,您将 无法 使用 VM 平台,例如 VirtualBox 或 VMware
- 如果您有 Windows 专业版、企业版或教育版,如果您使用 Hyper-V 作为您的 minikube 集群(请参阅解决方案 1),您可能能够让它正常工作
- 如果您不想升级 Windows,您可以在 Linux 虚拟机上打开一个 minikube 集群,然后 运行 在那里进行所有测试。这将要求您配置一些 Windows VM 设置,以使您的 VM 达到 运行(请参阅解决方案 2)。请注意,您只能 运行 Docker 或 VM 平台(Hyper-V 除外),但 不能两者都 (请参阅第二个问题了解为什么会这样)。
问题
对于那些和我情况相同的人,问题在于 minikube ingress 插件仅适用于 Linux OS when using docker 驱动程序(感谢@riovall 向我展示了这个 documentation)。
第二题
所以解决方法应该很简单吧?只需使用不同的驱动程序,它应该可以工作。这里的问题是,当 Docker 安装在 Windows 上时,它使用内置的 Hyper-V 虚拟化技术,默认情况下似乎禁用所有其他虚拟化技术。
我测试了这个假设,似乎是这样。当 Docker 守护进程处于 运行ning 时,我无法启动我拥有的任何虚拟机。例如,当我尝试 运行 我的 VM 在 VirtualBox 和 VMWare 上时出现错误。
此外,当我尝试使用 virtualbox 驱动程序启动 minikube 集群时,它卡在“正在引导内核”,然后出现 This computer doesn't have VT-X/AMD-v enabled
错误。这个错误是错误的,因为我确实启用了 VT-X(我检查了我的 BIOS)。这很可能是因为当启用 Hyper-V 时,所有其他类型的虚拟化技术 似乎 都被禁用。
对于我的个人计算机,当我搜索“打开或关闭 windows 功能”时,Docker 守护程序启用了“虚拟机平台”,然后要求我重新启动计算机。这发生在我安装 Docker 时。作为测试,我关闭了“虚拟机平台”和“Windows Hypervsor 平台”功能并重新启动了我的计算机。
当我这样做时发生了什么? Docker 守护程序停止了 运行ning,我无法再使用 docker,但是,我能够打开我的虚拟机 和 我能够以 virtualbox 作为驱动程序启动我的 minikube 集群。问题?好吧,Docker 不起作用,所以当我的集群试图拉取我正在使用的 docker 图像时,它将无法。
问题就出在这里。您启用了 VM 技术并禁用了 Docker,或者您启用了 VM 技术(Hyper-V 除外,我将很快谈到)并启用了 Docker。但你不能两者兼得。
解决方案 1(未测试)
最简单的解决方案可能是升级到 Windows 专业版、企业版或教育版。 Hyper-V 平台无法正常访问 Windows。升级后,您应该能够同时使用 Hyper-V 作为驱动程序和 Docker 守护程序。从理论上讲,这应该可以使入口正常工作。
解决方案 2(已测试)
如果你像我一样不想为这么小的东西升级系统,还有另一种解决方案。
首先,在您的计算机中搜索“打开或关闭 windows 功能”部分并禁用“虚拟机平台”和“Windows 管理程序平台”,然后重新启动您的计算机。 (一会儿见 :D)
之后,在你的电脑上安装一个虚拟机平台。我更喜欢 VirtualBox but you can also use others such as VMware.
安装 VM 平台后,添加一个新的 Linux VM。我建议 Debian or Ubuntu. If you are unfamiliar with how to set up a VM, this 视频将向您展示如何操作。这将是大多数 iso 图像的一般设置。
启动 VM 并 运行ning 后,在其上下载 minikube and Docker。确保为您的 VM 安装正确的版本(对于 Debian,安装 Debian 版本,对于 Ubuntu,安装 Ubuntu 版本。一些下载可能只是一般的 Linux,应该适用于大多数 Linux 个版本)。
一旦你安装了所有东西,创建一个以 docker 作为驱动程序的 minikube 集群,应用你的 Kubernetes 配置(部署、服务和入口)。配置您的 /etc/hosts
文件并转到您的浏览器,它应该可以工作。如果您不知道如何设置 ingress,可以观看 this 视频以了解有关什么是 ingress、其工作原理以及如何设置的示例。