docker - 意外耗尽了 Kubernetes 中的所有节点(甚至是主节点)。我怎样才能把我的 Kubernetes 带回来?
问题描述
我不小心耗尽了 Kubernetes 中的所有节点(甚至是主节点)。我怎样才能把我的 Kubernetes 带回来?kubectl 不再工作:
kubectl get nodes
结果:
The connection to the server 172.16.16.111:6443 was refused - did you specify the right host or port?
这是systemctl status kubelet
主节点(node1)上的输出:
● kubelet.service - Kubernetes Kubelet Server
Loaded: loaded (/etc/systemd/system/kubelet.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-06-23 21:42:39 UTC; 25min ago
Docs: https://github.com/GoogleCloudPlatform/kubernetes
Main PID: 15541 (kubelet)
Tasks: 0 (limit: 4915)
CGroup: /system.slice/kubelet.service
└─15541 /usr/local/bin/kubelet --logtostderr=true --v=2 --node-ip=172.16.16.111 --hostname-override=node1 --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --config=/etc/kubernetes/kubelet-config.yaml --kubeconfig=/etc/kubernetes/kubelet.conf --pod-infra-container-image=gcr.io/google_containers/pause-amd64:3.1 --runtime-cgroups=/systemd/system.slice --cpu-manager-policy=static --kube-reserved=cpu=1,memory=2Gi,ephemeral-storage=1Gi --system-reserved=cpu=1,memory=2Gi,ephemeral-storage=1Gi --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin
Jun 23 22:08:34 node1 kubelet[15541]: I0623 22:08:34.330009 15541 kubelet_node_status.go:286] Setting node annotation to enable volume controller attach/detach
Jun 23 22:08:34 node1 kubelet[15541]: I0623 22:08:34.330201 15541 setters.go:73] Using node IP: "172.16.16.111"
Jun 23 22:08:34 node1 kubelet[15541]: I0623 22:08:34.331475 15541 kubelet_node_status.go:472] Recording NodeHasSufficientMemory event message for node node1
Jun 23 22:08:34 node1 kubelet[15541]: I0623 22:08:34.331494 15541 kubelet_node_status.go:472] Recording NodeHasNoDiskPressure event message for node node1
Jun 23 22:08:34 node1 kubelet[15541]: I0623 22:08:34.331500 15541 kubelet_node_status.go:472] Recording NodeHasSufficientPID event message for node node1
Jun 23 22:08:34 node1 kubelet[15541]: I0623 22:08:34.331661 15541 policy_static.go:244] [cpumanager] static policy: RemoveContainer (container id: 6dd59735cabf973b6d8b2a46a14c0711831daca248e918bfcfe2041420931963)
Jun 23 22:08:34 node1 kubelet[15541]: E0623 22:08:34.332058 15541 pod_workers.go:191] Error syncing pod 93ff1a9840f77f8b2b924a85815e17fe ("kube-apiserver-node1_kube-system(93ff1a9840f77f8b2b924a85815e17fe)"), skipping: failed to "StartContainer" for "kube-apiserver" with CrashLoopBackOff: "back-off 5m0s restarting failed container=kube-apiserver pod=kube-apiserver-node1_kube-system(93ff1a9840f77f8b2b924a85815e17fe)"
Jun 23 22:08:34 node1 kubelet[15541]: E0623 22:08:34.427587 15541 kubelet.go:2267] node "node1" not found
Jun 23 22:08:34 node1 kubelet[15541]: E0623 22:08:34.506152 15541 reflector.go:123] k8s.io/kubernetes/pkg/kubelet/kubelet.go:450: Failed to list *v1.Service: Get https://172.16.16.111:6443/api/v1/services?limit=500&resourceVersion=0: dial tcp 172.16.16.111:6443: connect: connection refused
Jun 23 22:08:34 node1 kubelet[15541]: E0623 22:08:34.527813 15541 kubelet.go:2267] node "node1" not found
我使用的是 Ubuntu 18.04,我的集群中有 7 个计算节点。全部耗尽(不小心,有点!)!我已经使用 Kubespray 安装了我的 K8s 集群。
有没有办法解开这些节点中的任何一个?这样可以调度 k8s 必要的 pod。
任何帮助,将不胜感激。
更新:
我在这里问了一个关于如何连接到 etcd 的单独问题:Can't connect to the ETCD of Kubernetes
解决方案
如果您有生产或“实时”工作负载,最好的安全方法是配置一个新集群并逐步切换工作负载。
Kubernetes 将其状态保存在etcd中,因此您可能会连接到 etcd 并清除“已耗尽”状态,但您可能必须查看源代码并查看发生的位置以及特定键/值存储在 etcd 中的位置。
您共享的日志基本上显示 kube-apiserver 无法启动,因此很可能它正在尝试连接到 etcd/startup 并且 etcd 告诉它:“您无法在此节点上启动,因为它已被耗尽”。
master 的典型启动顺序是这样的:
- 等
- kube-apiserver
- kube-控制器-管理器
- kube-调度器
您还可以按照任何指南连接到 etcd 并查看是否可以进一步排除故障。比如这个。然后,您可以自担风险检查/删除一些节点密钥:
/registry/minions/node-x1
/registry/minions/node-x2
/registry/minions/node-x3
推荐阅读
- php - 如何防止mysql查询中的$result循环错误
- javascript - Firebase Cloud Function database.ServerValue.TIMESTAMP 不返回时间戳
- youtube-api - Google YouTube Data API 配额限制增加需要多长时间才能审核请求?
- android - Android - 无法检查editText是否为空
- scala - 如何在不使用表单的情况下发送 POST 请求
- java - Kafka consumer.poll 返回空
- python-3.x - numpy中的任何剪切功能?
- selenium-webdriver - 当数据集包含不特定于此测试用例的数据时,如何将 dataprovider 传递给 testNG 中的任何测试
- html - 滚动条包含刷新后属于网页的内容
- sql - How to to get maximum sequence number in SQL