我可以在 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-apiserver
kube-controller-manager
kube-scheduler
etcd
如果集群已经准备好,您可以尝试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 以永久禁用交换。