在 Ubuntu 上安装 Kubernetes - 重启时服务器连接被拒绝

在 Ubuntu 上安装 Kubernetes - 重启时服务器连接被拒绝

我可以在 Ubuntu 16 服务器上成功安装 Kubernetes,并使主节点进入就绪状态。但是如果我重新启动/重启,当我尝试使用时,我会收到标题中的错误消息KUBECTL

我是否需要将最初运行时给出的以下命令放入KUBEADM INIT我的个人资料中以保留下来?

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

我按照O'Reilly Kubernetes 手册,同时使用 Google 的 K8S 文档和 Serverfault。

我可以成功让所有系统 Pod 运行,也可以成功让主服务器和单个工作服务器以就绪状态运行。但它们在重启后不会继续存在。

NAMESPACE     NAME                                 READY     STATUS    RESTARTS   AGE
kube-system   etcd-k8s-master                      1/1       Running   0          1m
kube-system   kube-apiserver-k8s-master            1/1       Running   0          2m
kube-system   kube-controller-manager-k8s-master   1/1       Running   0          2m
kube-system   kube-dns-86f4d74b45-phphd            3/3       Running   0          3m
kube-system   kube-proxy-25mtq                     1/1       Running   0          3m
kube-system   kube-scheduler-k8s-master            1/1       Running   0          2m
kube-system   weave-net-rfb6z                      2/2       Running   0          50s

NAME          STATUS     ROLES     AGE       VERSION
k8s-master    Ready      master    9m        v1.10.3
k8s-worker1   Ready     <none>     14s       v1.10.3

答案1

首先检查你的集群是否启动并正在运行:

$ ps aux | grep apiserver
$ ps aux | grep etcd
$ docker ps

您应该看到所有必要的 kubernetes 进程正在运行,如kube-proxy、、、、。kube-apiserverkube-controller-managerkube-scheduleretcd

如果集群已经准备好,您可以尝试kube-apiserver使用kubectl工具进行访问。

默认情况下,库布克从文件中获取配置$HOME/.kube/config

可以通过设置环境变量来更改默认行为KUBECONFIG
读取kubectl此变量中列出的所有配置文件并合并它们的配置设置。
这样,您可以在单独的文件中配置多个集群,以便于维护。
在这种情况下,您应该KUBECONFIG在用户配置文件中设置变量,以确保下次登录后它具有正确的值。

使用特定配置文件的另一种方法是--kubeconfig在命令行中设置参数

$ kubectl --kubeconfig config_file_path <other_command_line_arguments>

您可以通过运行以下命令检查可用的配置(敏感信息将被抑制):

# kubectl config view

可以在一个配置文件中配置多个上下文,并通过在命令行中指定其名称来切换上下文。如果您使用同一个用户帐户管理多个集群(或同一集群的不同服务帐户),这将非常有用。

$ kubectl config --kubeconfig=config-demo use-context exp-scratch <other_command_line_arguments>

查看文档了解详情。

当您使用该命令创建集群时kubeadm init,它会将的连接配置添加到kubectl文件中/etc/kubernetes/admin.conf

-rw-------   1 root root 5446 May 1 11:11 admin.conf

如果您使用的是 root 帐户,则可以kubectl直接将其指定为配置文件。
要将其用于不同的用户帐户,您需要将其复制到用户$HOME/.kube/config文件中,并使用户可以访问它。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

对于您计划用于集群管理的每个用户帐户,只需执行一次即可。这是一个常规文件,重启后不会消失,因此您仍然应该能够访问 Kubernetes 集群运行kubectl命令。

如果您重置集群kubeadm reset并再次创建它,则需要kubectl在用户配置文件中更新连接配置,因为以前的集群凭据不适用于新集群。

答案2

我没有检查日志。Ubuntu 16.04 通过 systemd 记录日志,因此当我记得通过 journalctl 检查日志时,立即就清楚 Kubernetes 抱怨交换已启用。在原始安装中,我已禁用每台服务器上的交换 - 但我没有修改 /etc/fstab 以永久禁用交换。

相关内容