我是 Kubernetes 的新手。我甚至不太熟悉基本的 kubernetes 命令,但安装是我学习之旅的起点。我想避免安装像 minikube 这样的东西,因为这样安装起来会容易得多。我试图弄清楚 kubernetes 的不同组件是如何组合在一起形成整体服务的。所以我试着按照这篇文章“艰难地”安装 Kubernetes:https://medium.com/@DrewViles/kubernetes-the-hard-way-on-bare-metal-vms-v1-23-2168f5fe70af
我已经完成了所有步骤,直到配置工作单元。此时,在控制器节点中运行命令“kubectl get nodes --kubeconfig admin.kubeconfig”时,我开始收到“未找到资源”异常。
我使用 1 个控制节点、1 个负载均衡节点和 2 个工作节点。每个节点都是安装了 Ubuntu22.04.1 的虚拟机。我的实验室机器是 Windows 11 笔记本电脑。每个虚拟机都有自己的静态 IP,我手动配置了这些 IP。标准解决方案似乎是围绕纠正工作节点 kubeconfig、kube-proxy kubeconfig 和 kube-apiserver.service 中的 KUBERNETES_PUBLIC_ADDRESS。我从一开始就已经将 KUBERNETES_PUBLIC_ADDRESS 硬编码为我的负载均衡器静态 IP 地址。所以,这似乎不是这里的问题。
链接中有两条指令我无法完全正确理解。链接指出文件 /etc/netplan/00-installer-config.yaml 必须使用静态 IP 进行更新。但我的虚拟机中缺少此文件。相反,我有 01-network-manager-all.yaml。我已更新此文件并应用了更改。
我担心的另一个问题是,我的实验室机器没有公共静态 IP。根据链接,工作节点证书创建过程涉及使用从中提取的外部 IP 执行命令https://ifconfig.co。我想知道这两个因素是否与我遇到的问题有关
我非常感谢任何能帮助我解决此问题的线索。
答案1
我意识到 kubectl 试图在端口 8080 上连接 Kube API 服务器,而它实际上在另一个端口上运行。所以我收到这个错误:
E1209 01:47:06.243663 1745 memcache.go:265] 无法获取当前服务器 API 组列表:获取“http://localhost:8080/api?timeout=32s”:拨号 tcp [::1]:8080:连接:连接被拒绝
我通过将 admin.kubeconfig 文件复制到 ~/.kube 并将其重命名为 config 来修复此问题。我对工作节点执行了相同操作,通过将工作节点 kubeconfig 文件复制到 ~/.kube 并将其重命名为 config。连接问题已修复。
然后我发现 /etc/systemd/system 下 kubelet.service 文件中的以下标志在 Kubernetes 的最近几个版本中不再受支持。我不知道支持这些标志的最后一个 kubernetes 版本。
--容器运行时 = 远程
–图像拉取进度截止日期=2m
–container-runtime-endpoint=unix:///var/run/containerd/containerd.sock
--network-plugin=cni。
我删除了这些标志并重新启动了 kubelet 服务。问题已解决。