<p>kubeadm init 等待控制平面在 CentOS 7.2 和 kubeadm 1.6.1 上准备就绪</p>

创建于 2017-04-06  ·  52评论  ·  资料来源: kubernetes/kubeadm

下载 kubeadm 1.6.1 并启动 kubeadm init 后,卡在 [apiclient] Created API client,等待 control plane 准备就绪

kubeadm init --kubernetes-version v1.6.1 --apiserver-advertise-address=10.X.X.X
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.6.1
[init] Using Authorization mode: RBAC
[preflight] Running pre-flight checks
[certificates] Generated CA certificate and key.
[certificates] Generated API server certificate and key.
[certificates] API Server serving cert is signed for DNS names [<hostname> kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.X.X.X]
[certificates] Generated API server kubelet client certificate and key.
[certificates] Generated service account token signing key and public key.
[certificates] Generated front-proxy CA certificate and key.
[certificates] Generated front-proxy client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[apiclient] Created API client, waiting for the control plane to become ready

我有以下 10-kubeadm.conf

cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_DNS_ARGS=--cluster-dns=192.168.0.10 --cluster-domain=cluster.local"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_EXTRA_ARGS --cgroup-driver=systemd

因此,它不再是 cgroup 问题。 另外,我已经刷新了 iptables 规则并禁用了 selinux。 我还指定了我想用于我的主人的接口的 IP 地址,但它仍然没有通过。

从日志中,

Apr 06 12:55:55 hostname kubelet[5174]: I0406 12:55:55.087703    5174 kubelet_node_status.go:230] Setting node annotation to enable volume controller attach/detach
Apr 06 12:55:55 hostname kubelet[5174]: I0406 12:55:55.146554    5174 kubelet_node_status.go:77] Attempting to register node hostname
Apr 06 12:55:55 hostname kubelet[5174]: E0406 12:55:55.147133    5174 kubelet_node_status.go:101] Unable to register node "hostname" with API server: Post https://10.X.X.X:6443/api/v1/nodes: dial tcp 10.X.X.X:6443: getsockopt: connection refused
Apr 06 12:55:55 hostname kubelet[5174]: E0406 12:55:55.553801    5174 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:382: Failed to list *v1.Service: Get https://10.X.X.X:6443/api/v1/services?resourceVersion=0: dial tcp 10.X.X.X:6443: getsockopt: connection refused
Apr 06 12:55:55 hostname kubelet[5174]: E0406 12:55:55.555837    5174 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:390: Failed to list *v1.Node: Get https://10.X.X.X:6443/api/v1/nodes?fieldSelector=metadata.name%3Dhostname&resourceVersion=0: dial tcp 10.X.X.X:6443: getsockopt: connection refused
Apr 06 12:55:55 hostname kubelet[5174]: E0406 12:55:55.556271    5174 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/config/apiserver.go:46: Failed to list *v1.Pod: Get https://10.X.X.X:6443/api/v1/pods?fieldSelector=spec.nodeName%3Dhostname&resourceVersion=0: dial tcp 10.X.X.X:6443: getsockopt: connection refused
Apr 06 12:55:55 hostname kubelet[5174]: E0406 12:55:55.828198    5174 event.go:208] Unable to write event: 'Post https://10.X.X.X:6443/api/v1/namespaces/default/events: dial tcp 10.X.X.X:6443: getsockopt: connection refused' (may retry after sleeping)
Apr 06 12:55:56 hostname kubelet[5174]: E0406 12:55:56.555099    5174 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:382: Failed to list *v1.Service: Get https://10.X.X.X:6443/api/v1/services?resourceVersion=0: dial tcp 10.X.X.X:6443: getsockopt: connection refused
Apr 06 12:55:56 hostname kubelet[5174]: E0406 12:55:56.556772    5174 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:390: Failed to list *v1.Node: Get https://10.X.X.X:6443/api/v1/nodes?fieldSelector=metadata.name%3Dhostname&resourceVersion=0: dial tcp 10.X.X.X:6443: getsockopt: connection refused
Apr 06 12:55:56 hostname kubelet[5174]: E0406 12:55:56.557978    5174 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/config/apiserver.go:46: Failed to list *v1.Pod: Get https://10.X.X.X:6443/api/v1/pods?fieldSelector=spec.nodeName%3Dhostname&resourceVersion=0: dial tcp 10.X.X.X:6443: getsockopt: connection refused
Apr 06 12:55:56 hostname kubelet[5174]: I0406 12:55:56.760733    5174 kubelet.go:1752] skipping pod synchronization - [Failed to start ContainerManager systemd version does not support ability to start a slice as transient unit]
Apr 06 12:55:56 hostname kubelet[5174]: W0406 12:55:56.858684    5174 cni.go:157] Unable to update cni config: No networks found in /etc/cni/net.d
Apr 06 12:55:56 hostname kubelet[5174]: E0406 12:55:56.858931    5174 kubelet.go:2067] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Apr 06 12:55:57 hostname kubelet[5174]: E0406 12:55:57.556067    5174 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:382: Failed to list *v1.Service: Get https://10.X.X.X:6443/api/v1/services?resourceVersion=0: dial tcp 10.X.X.X:6443: getsockopt: connection refused
Apr 06 12:55:57 hostname kubelet[5174]: E0406 12:55:57.557441    5174 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:390: Failed to list *v1.Node: Get https://10.X.X.X:6443/api/v1/nodes?fieldSelector=metadata.name%3Dhostname&resourceVersion=0: dial tcp 10.X.X.X:6443: getsockopt: connection refused
Apr 06 12:55:57 hostname kubelet[5174]: E0406 12:55:57.558822    5174 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/config/apiserver.go:46: Failed to list *v1.Pod: Get https://10.X.X.X:6443/api/v1/pods?fieldSelector=spec.nodeName%3Dhostname&resourceVersion=0: dial tcp 10.X.X.X:6443: getsockopt: connection refused
Apr 06 12:55:58 hostname kubelet[5174]: I0406 12:55:58.347460    5174 kubelet_node_status.go:230] Setting node annotation to enable volume controller attach/detach
Apr 06 12:55:58 hostname kubelet[5174]: I0406 12:55:58.405762    5174 kubelet_node_status.go:77] Attempting to register node hostname
Apr 06 12:55:58 hostname kubelet[5174]: E0406 12:55:58.406037    5174 kubelet_node_status.go:101] Unable to register node "hostname" with API server: Post https://10.X.X.X:6443/api/v1/nodes: dial tcp 10.X.X.X:6443: getsockopt: connection refused
Apr 06 12:55:58 hostname kubelet[5174]: E0406 12:55:58.556829    5174 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:382: Failed to list *v1.Service: Get https://10.X.X.X:6443/api/v1/services?resourceVersion=0: dial tcp 10.X.X.X:6443: getsockopt: connection refused

版本

kubeadm 版本(使用kubeadm version ):
kubeadm 版本
kubeadm 版本:version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.1", GitCommit:"b0b7a323cc5a4a2019b2e9520c21c7830b7f708e", GitTreeState:"clean", BuildDate:"2017-04-03T20:33: 27Z”,GoVersion:“go1.7.5”,编译器:“gc”,平台:“linux/amd64”}

环境

  • Kubernetes 版本(使用kubectl version ):
  • 云提供商或硬件配置
    裸机节点
  • 操作系统(例如来自 /etc/os-release):
    猫 /etc/redhat-release
    CentOS Linux 版本 7.2.1511(核心)
  • 内核(例如uname -a ):
    unname -a
    Linux 主机名 3.10.0-327.18.2.el7.x86_64 #1 SMP Thu May 12 11:03:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
  • 其他
    码头工人-v
    Docker 版本 1.12.6,构建 96d83a5/1.12.6
    rpm -qa | grep 库
    kubelet-1.6.1-0.x86_64
    Kubernetes-cni-0.5.1-0.x86_64
    kubeadm-1.6.1-0.x86_64
    kubectl-1.6.1-0.x86_64

发生了什么?

Kubeadm 卡住等待控制平面准备好

你预期会发生什么?

它应该已经完成​​并完成了初始化

kinsupport statneeds-more-information

最有用的评论

我有一个 CentOS Linux 版本 7.3.1611(核心),但 KubeAdm 1.6.4 不起作用。

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://yum.kubernetes.io/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF

setenforce 0
# edit /etc/selinux/config and set SELINUX=disabled
yum install docker kubelet kubeadm kubectl kubernetes-cni
systemctl enable docker
systemctl start docker
systemctl enable kubelet
systemctl start kubelet
reboot
kubeadm init

输出:

kubeadm init
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.6.4
[init] Using Authorization mode: RBAC
[preflight] Running pre-flight checks
[preflight] WARNING: hostname "kubernet01.localdomain" could not be reached
[preflight] WARNING: hostname "kubernet01.localdomain" lookup kubernet01.localdomain on XXXXXXX:53: read udp XXXXXXX:56624->XXXXXXX:53: i/o timeout
[preflight] Starting the kubelet service
[certificates] Generated CA certificate and key.
[certificates] Generated API server certificate and key.
[certificates] API Server serving cert is signed for DNS names [kubernet01.localdomain kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.11.112.51]
[certificates] Generated API server kubelet client certificate and key.
[certificates] Generated service account token signing key and public key.
[certificates] Generated front-proxy CA certificate and key.
[certificates] Generated front-proxy client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[apiclient] Created API client, waiting for the control plane to become ready
Jun 06 17:13:12 kubernet01.localdomain kubelet[11429]: W0606 17:13:12.881451   11429 cni.go:157] Unable to update cni config: No networks found in /etc/cni/net.d
Jun 06 17:13:12 kubernet01.localdomain kubelet[11429]: E0606 17:13:12.882145   11429 kubelet.go:2067] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Jun 06 17:13:13 kubernet01.localdomain kubelet[11429]: E0606 17:13:13.519992   11429 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/config/apiserver.go:46: Failed to list *v1.Pod: Get https://10.11.112.51:6443/api/v1/pods?fieldSelector=spec.nodeName%3Dkubernet01.localdomain&resourceVersion=0: dial tcp 10.11.112.51:6443: getsockopt: connection refused
Jun 06 17:13:13 kubernet01.localdomain kubelet[11429]: E0606 17:13:13.520798   11429 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:382: Failed to list *v1.Service: Get https://10.11.112.51:6443/api/v1/services?resourceVersion=0: dial tcp 10.11.112.51:6443: getsockopt: connection refused
Jun 06 17:13:13 kubernet01.localdomain kubelet[11429]: E0606 17:13:13.521493   11429 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:390: Failed to list *v1.Node: Get https://10.11.112.51:6443/api/v1/nodes?fieldSelector=metadata.name%3Dkubernet01.localdomain&resourceVersion=0: dial tcp 10.11.112.51:6443: getsockopt: connection refused
Jun 06 17:13:14 kubernet01.localdomain kubelet[11429]: E0606 17:13:14.337588   11429 event.go:208] Unable to write event: 'dial tcp 10.11.112.51:6443: getsockopt: connection refused' (may retry after sleeping)

所有52条评论

我有同样的问题。 我还尝试按照另一个问题的建议删除网络 ARGS。 它仍然挂在waiting for control plane to be ready

进行更改后,您是否重新加载了 Daemon 并重新启动了 kubelet 服务。 它在更改驱动程序和评论网络后工作。 控制平面第一次为我准备好需要 10 到 11 分钟,我建议第一次离开它 15 分钟。

我确实重新加载了守护进程并每次都重新启动了 kubelet 服务。 我什至整晚都没有打扰设置,但它仍在等待控制平面。

我已经重新加载了守护进程( systemctl daemon-reload )并重新启动了 kubelet。 我运行kubeadm reset ,编辑服务配置,重新加载守护程序,然后运行kubeadm init

注释掉网络选项后,Apiserver 和 etcd docker 容器无法运行。 我还尝试手动安装 weave-net,以便填充 cni 配置目录,但这也不起作用。 为此,我安装了 weave,运行了weave setupweave launch 。 我真的不知道 Kubeadm 如何配置 Docker 以使用 CNI 设置,但这里可能缺少一个步骤。

看起来 kubelet 无法访问 kube api 服务器。

我注意到 etcd 无法监听 2380 端口,我再次按照这些步骤操作,我的集群启动了:

  • 运行kubeadm reset以删除对服务器所做的任何更改。
  • 将机器恢复到初始状态。 通过重新安装 kubeadm(取回原始配置文件)。
  • 删除与 Kubernetes 相关的 docker 容器(如果有)。
  • 获取并安装编织。 不要运行它。
  • 重新启动服务器。
  • 确保kubelet没有运行。
  • 运行weave setupweave launch
  • 运行kubeadm init

如果你想摆脱手工管理编织......

  • 运行weave reset
  • 为 kubernetes 1.6 应用 weave 插件。
  • 重新启动服务器。

Kubeadm join 应该可以在其他服务器上工作。

@Yengas您能否提供有关编织步骤的更多详细信息? 你是在所有节点上运行它们,还是只在主节点上运行它们?

@jruels只是主节点。 Weave 只是一个二进制文件。 没有任何参数的 setup 命令,下载 weave docker 图像并创建 CNI 配置。 不带任何参数的启动命令仅在主机上启动编织容器。

@Yengas仍然不确定,你的意思是什么 - “获取并安装 weave。不要运行它”我显然不能做 kubectl apply -f https://git.io/weave-kube-1.6那么我该如何安装 weave ?

apiserver 日志说什么?

@rushabh268
要安装 weave 在主服务器上运行以下命令
sudo curl -L git.io/weave -o /usr/local/bin/weave && chmod a+x /usr/local/bin/weave
然后运行
weave setup
完成后运行
weave launch

你不需要这样做。 kubectl apply -f https://git.io/weave-kube-1.6应该足够了。

API 服务器日志与我在错误中提到的完全相同。 另外,我不能做 kubectl 因为没有安装 Kubernetes

@jruels我会尝试并更新这个线程!

在错误描述中有 kubeadm 日志和 kubelet 日志。 没有 apiserver 日志。

@mikedanese如何获取 apiserver 日志?
@jruels我可以提出 weave
@Yengas即使按照您的步骤操作,我也会在 kubelet 日志中看到以下错误:
Apr 06 12:55:56 hostname kubelet[5174]: E0406 12:55:56.858931 5174 kubelet.go:2067] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized Apr 06 12:55:57 hostname kubelet[5174]: E0406 12:55:57.556067 5174 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:382: Failed to list *v1.Service: Get https://10.X.X.X:6443/api/v1/services?resourceVersion=0: dial tcp 10.X.X.X:6443: getsockopt: connection refused Apr 06 12:55:57 hostname kubelet[5174]: E0406 12:55:57.557441 5174 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:390: Failed to list *v1.Node: Get https://10.X.X.X:6443/api/v1/nodes?fieldSelector=metadata.name%3Dhostname&resourceVersion=0: dial tcp 10.X.X.X:6443: getsockopt: connection refused Apr 06 12:55:57 hostname kubelet[5174]: E0406 12:55:57.558822 5174 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/config/apiserver.go:46: Failed to list *v1.Pod: Get https://10.X.X.X:6443/api/v1/pods?fieldSelector=spec.nodeName%3Dhostname&resourceVersion=0: dial tcp 10.X.X.X:6443: getsockopt: connection refused Apr 06 12:55:58 hostname kubelet[5174]: I0406 12:55:58.347460 5174 kubelet_node_status.go:230] Setting node annotation to enable volume controller attach/detach Apr 06 12:55:58 hostname kubelet[5174]: I0406 12:55:58.405762 5174 kubelet_node_status.go:77] Attempting to register node hostname1

另外,我已经停止了防火墙,所以不知道为什么我会拒绝连接。

我在这里报告了同样的问题。

当它被卡住时,从我的系统消息(主节点)中截取,以防万一,它指出了一些东西。 顺便说一句,我在 Linode 上执行此操作。

4 月 12 日 02:10:00 本地主机审核:SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=kubelet comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? 地址=? 终端=? 资源=成功'
4 月 12 日 02:10:00 localhost 审计:SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=kubelet comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? 地址=? 终端=? 资源=成功'
4 月 12 日 02:10:00 本地主机审核:SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=kubelet comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? 地址=? 终端=? 资源=成功'
4 月 12 日 02:10:00 localhost systemd: kubelet.service: 服务延迟时间结束,计划重启。
4 月 12 日 02:10:00 localhost systemd:停止 kubelet:Kubernetes 节点代理。
4 月 12 日 02:10:00 localhost systemd:启动 kubelet:Kubernetes 节点代理。
Apr 12 02:10:00 localhost systemd: 启动系统活动记帐工具...
4 月 12 日 02:10:00 本地主机审核:SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=sysstat-collect comm="systemd" exe="/usr/lib/systemd/systemd" hostname= ? 地址=? 终端=? 资源=成功'
Apr 12 02:10:00 localhost 审计:SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=sysstat-collect comm="systemd" exe="/usr/lib/systemd/systemd" hostname= ? 地址=? 终端=? 资源=成功'
4 月 12 日 02:10:00 localhost systemd:启动系统活动记帐工具。
4 月 12 日 02:10:00 localhost kubelet:I0412 02:10:00.924529 3445 feature_gate.go:144] 功能门:地图 []
Apr 12 02:10:00 localhost kubelet: I0412 02:10:00.928973 3445 docker.go:364] 在 unix:///var/run/docker.sock 上连接到 docker
Apr 12 02:10:00 localhost kubelet: I0412 02:10:00.929201 3445 docker.go:384] 使用请求超时=2m0s 启动 docker 客户端
Apr 12 02:10:00 localhost kubelet: W0412 02:10:00.941088 3445 cni.go:157] 无法更新 cni 配置:在 /etc/cni/net.d 中找不到网络
Apr 12 02:10:00 localhost kubelet: I0412 02:10:00.948892 3445 manager.go:143] cAdvisor 在容器中运行:“/system.slice”
Apr 12 02:10:00 localhost kubelet: W0412 02:10:00.974540 3445 manager.go:151] 无法连接到 Rkt api 服务:rkt: cannot tcp Dial rkt api service: dial tcp [::1]:15441: getsockopt:连接被拒绝
Apr 12 02:10:00 localhost kubelet: I0412 02:10:00.997599 3445 fs.go:117] 文件系统分区:map[/dev/root:{mountpoint:/var/lib/docker/devicemapper major:8 minor:0 fsType:ext4块大小:0 }]
4月12日2时10分01秒本地主机kubelet:I0412 02:10:01.001662 3445 manager.go:198]机器:{ NumCores:1周的Cpu频率:2799998 MEMOR yCapacity :1037021184机号: 5e9a9a0b58984bfb8766dba9afa8a191小号ystemUUID:5e9a9a0b58984bfb8766dba9afa8a191 BootID:7ed1a6ff-9848- 437b-9460-981eeefdfe5a文件系统:[{设备:/dev/root容量:15447539712类型:vfs Inodes:962880 HasInodes:true }] DiskMap:map [43:0:{ Name:nbd0 Major:43 Minor:0 Size:0调度程序:无} 43:11:{名称:nbd11主要:43次要:11大小:0调度程序:无} 43:12:{名称:nbd12主要:43次要:12大小:0调度程序:无} 43:15: {名称:nbd15主要:43次要:15大小:0调度程序:无} 43:7:{名称:nbd7主要:43次要:7大小:0调度程序:无} 8:0:{名称:sda主要:8次要:0大小:15728640000调度程序:cfq } 252:0:{名称:dm-0主要:252次要:0大小:107374182400调度程序:无} 43:1:{名称:nbd1主要:43次要:1大小:0调度程序:none } 43:13:{ Name:nbd13 Major:43 Minor:13 Size:0 Scheduler:none } 43:8:{ Name:nbd8 Major:43 Minor:8 Size:0 Scheduler:none } 8: 16:{名称:sdb主要:8次要:16大小:536870912调度程序:cfq } 9:0:{名称:md0主要:9次要:0大小:0调度程序:无} 43:3:{名称:nbd3主要: 43 Minor:3 Size:0 Scheduler:none } 43:9:{ Name:nbd9 Major:43 Minor:9 Size:0 Scheduler:none } 43:10:{ Name:nbd10 Major:43 Minor:10 Size:0 Scheduler :none } 43:14:{ Name:nbd14 Major:43 Minor:14 Size:0 Scheduler:none } 43:2:{ Name:nbd2 Major:43 Minor:2 Size:0 Scheduler:none } 43:4:{名称:nbd4主要:43次要:4大小:0调度:无} 43:5:{名称:nbd5主要:43次要:5大小:0调度:无} 43:6:{名称:nbd6主要:43次要: 6 Size:0 Scheduler:none }] NetworkDevices:[{ Name:dummy0 M acAddress:5a :34:bf:e4:23:cc Speed:0 Mtu:1500 } { Name:eth0 M acAddress:f2 :3c:91: 1f:cd:c3速度:-1 Mtu:1500 } {名称:gre0 M acAddress:00 :00:00:00速度:0 Mtu:1476 } {名称:gretap0 M acAddress:00 :00:00:00:00 :00速度:0 Mtu:1462 } {名称:ip6_vti0 M acAddress:00 :00:00:00:00:00:00:00:00:00:00:00:00:00:00:00速度:0 Mtu:1500 } {名称:ip6gre0 M acAddress:00 :00:00:00:00:00:00:00: 00:00:00:00:00:00:00:00速度:0 Mtu:1448 } {名称:ip6tnl0 M acAddress:00 :00:00:00:00:00:00:00:00:00:00 :00:00:00:00:00速度:0 Mtu:1452 } {名称:ip_vti0 Ma
Apr 12 02:10:01 localhost kubelet: cAddress:00 :00:00:00 Speed:0 Mtu:1428 } { Name:sit0 M acAddress:00 :00:00:00 Speed:0 Mtu:1480 } { Name: teql0 MacAddress: Speed:0 Mtu:1500 } { Name:tunl0 M acAddress:00 :00:00:00 Speed:0 Mtu:1480 }] Topology:[{Id:0 Memory:1037021184 Cores:[{Id:0 Threads :[0] 缓存:[{大小:32768类型:数据级别:1 } {大小:32768类型:指令级别:1 } {大小:4194304类型:统一级别:2 }]}] 缓存:[]}] Clou dProvider:Unknown InstanceType:Unknown InstanceID:None }
Apr 12 02:10:01 localhost kubelet: I0412 02:10:01.013353 3445 manager.go:204] 版本:{Kern elVersion:4.9.15-x86_64-linode81 Container OsVersion:Fedora 25 (Server Edition) Dock erVersion:1.12。 6 CadvisorVersion:CadvisorRevision:}
Apr 12 02:10:01 localhost kubelet: I0412 02:10:01.014086 3445 server.go:509] --cgroups-per-qos 已启用,但未指定 --cgroup-root。 默认为 /
Apr 12 02:10:01 localhost kubelet: W0412 02:10:01.016562 3445 container_manager_linux.go:218] 不支持开启交换运行,请禁用交换! 从 K8s v1.6 开始,这将是默认的致命错误! 同时,您可以通过启用 --experimental-fail-swap-on 来选择将其设为致命错误。
Apr 12 02:10:01 localhost kubelet: I0412 02:10:01.016688 3445 container_manager_linux.go:245] 容器管理器验证用户指定的 cgroup-root 存在:/
Apr 12 02:10:01 localhost kubelet: I0412 02:10:01.016717 3445 container_manager_linux.go:250] 根据节点配置创建容器管理器对象:{RuntimeCgroupsName: SystemCgroupsName: KubeletCgroupsName: Contain erRuntime: docker Cgro upsPerQOS:true CgroupRoot:/ Cgr oupDriver:cgroupfs ProtectKerne lDefaults:false EnableCRI:true NodeAllocatableConfig:{KubeReservedCgroupName: SystemReservedCgroupName: EnforceNodeAl locatable :map [pods:{}] Kub eReserved:map [] Syste mReserved:map [] HardEvictionThresholds:[{ Signal:memory.available Operator :LessThan值:{数量:100Mi 百分比:0 } Gr acePeriod:0s MinReclaim:}]} ExperimentalQO SReserved:map []}
Apr 12 02:10:01 localhost kubelet: I0412 02:10:01.016943 3445 kubelet.go:255] 添加清单文件:/etc/kubernetes/manifests
Apr 12 02:10:01 localhost kubelet: I0412 02:10:01.016966 3445 kubelet.go:265] 观看 apiserver
Apr 12 02:10:01 localhost kubelet: E0412 02:10:01.025058 3445 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:390: 无法列出 *v1.Node: 获取https: //50.116.13.214 :6443/api/v1/nodes?fieldSelector=metadata.name%3Dli471-214.members.linode.com&resourceVersion=0: dial tcp 50.116.13.214:6443: getsockopt: 连接被拒绝
Apr 12 02:10:01 localhost kubelet: E0412 02:10:01.025342 3445 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:382: 无法列出 *v1.Service: 获取https: //50.116.13.214 :6443/api/v1/services?resourceVersion=0: dial tcp 50.116.13.214:6443: getsockopt: 连接被拒绝
Apr 12 02:10:01 localhost kubelet: E0412 02:10:01.025397 3445 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/config/apiserver.go:46: 无法列出 *v1.Pod: 获取https://50.116.13.214 :6443/api/v1/pods?fieldSelector=spec.nodeName%3Dli471-214.members.linode.com&resourceVersion=0:拨号 tcp 50.116.13.214:6443:getsockopt:连接被拒绝
Apr 12 02:10:01 localhost kubelet: W0412 02:10:01.026574 3445 kubelet_network.go:70] 发夹模式设置为“promiscuous-bridge”,但未启用 kubenet,回退到“hairpin-veth”
Apr 12 02:10:01 localhost kubelet: I0412 02:10:01.026599 3445 kubelet.go:494] 发夹模式设置为“hairpin-veth”
Apr 12 02:10:01 localhost kubelet: W0412 02:10:01.026661 3445 cni.go:157] 无法更新 cni 配置:在 /etc/cni/net.d 中找不到网络
Apr 12 02:10:01 localhost kubelet: W0412 02:10:01.034194 3445 cni.go:157] 无法更新 cni 配置:在 /etc/cni/net.d 中找不到网络
Apr 12 02:10:01 localhost kubelet: W0412 02:10:01.043157 3445 cni.go:157] 无法更新 cni 配置:在 /etc/cni/net.d 中找不到网络
Apr 12 02:10:01 localhost kubelet: I0412 02:10:01.043183 3445 docker_service.go:187] 由 cni 管理的 Docker cri 网络
Apr 12 02:10:01 localhost kubelet: error: failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
4 月 12 日 02:10:01 本地主机审计:SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=kubelet comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? 地址=? 终端=? 资源=失败'
Apr 12 02:10:01 localhost systemd: kubelet.service: 主进程退出,code=exited,status=1/FAILURE
4 月 12 日 02:10:01 localhost systemd: kubelet.service: 单元进入失败状态。
4 月 12 日 02:10:01 localhost systemd:kubelet.service:失败,结果为“退出代码”。

@acloudiator我认为您需要在 kubeadm 配置中设置 cgroup-driver。

vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment="KUBELET_EXTRA_ARGS=--cgroup-driver=systemd"

然后重启kubelet服务

如果 kubeadm 能够以某种方式处理 cgroup 配置问题,那就太好了。
想法:

  • 在配置错误的情况下中止初始化
  • 事先检查 Docker 的设置并使用 Docker 正在使用的内容(不确定此处是否有任何含义)

只是一个更新,我尝试的任何解决方法都不起作用。 所以我为大师转移到 CentOS 7.3,它就像一个魅力! 不过,我在 CentOS 7.2 上保留了奴才。

@rushabh268嗨,我在 Redhat Linux 7.2 上遇到了同样的问题。 更新systemd后,这个问题就解决了。 您可以在安装前尝试更新 systemd。
yum update -y systemd
以及来自 kubelet 的错误日志:
kubelet.go:1752] skipping pod synchronization - [Failed to start ContainerManager systemd version does not support ability to start a slice as transient unit]

我在 CentOS 7.3 上遇到了这个问题。 卸载 docker-ce 然后安装 docker-io 后问题就消失了。
我不确定这是否是根本原因。 无论如何,如果上述方法不起作用,您可以尝试一下。

@ZongqiangZhang我的节点上安装了 docker 1.12.6。 @juntaoXie我也尝试更新systemd,但仍然卡住

所以我一直在许多机器上运行 Centos 7.3 w/1.6.4 而没有问题。

你确定你禁用了selinux吗?

@timothysc我有 CentOS 7.2 而不是 CentOS 7.3,并且 selinux 被禁用

我有一个 CentOS Linux 版本 7.3.1611(核心),但 KubeAdm 1.6.4 不起作用。

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://yum.kubernetes.io/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF

setenforce 0
# edit /etc/selinux/config and set SELINUX=disabled
yum install docker kubelet kubeadm kubectl kubernetes-cni
systemctl enable docker
systemctl start docker
systemctl enable kubelet
systemctl start kubelet
reboot
kubeadm init

输出:

kubeadm init
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.6.4
[init] Using Authorization mode: RBAC
[preflight] Running pre-flight checks
[preflight] WARNING: hostname "kubernet01.localdomain" could not be reached
[preflight] WARNING: hostname "kubernet01.localdomain" lookup kubernet01.localdomain on XXXXXXX:53: read udp XXXXXXX:56624->XXXXXXX:53: i/o timeout
[preflight] Starting the kubelet service
[certificates] Generated CA certificate and key.
[certificates] Generated API server certificate and key.
[certificates] API Server serving cert is signed for DNS names [kubernet01.localdomain kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.11.112.51]
[certificates] Generated API server kubelet client certificate and key.
[certificates] Generated service account token signing key and public key.
[certificates] Generated front-proxy CA certificate and key.
[certificates] Generated front-proxy client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[apiclient] Created API client, waiting for the control plane to become ready
Jun 06 17:13:12 kubernet01.localdomain kubelet[11429]: W0606 17:13:12.881451   11429 cni.go:157] Unable to update cni config: No networks found in /etc/cni/net.d
Jun 06 17:13:12 kubernet01.localdomain kubelet[11429]: E0606 17:13:12.882145   11429 kubelet.go:2067] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
Jun 06 17:13:13 kubernet01.localdomain kubelet[11429]: E0606 17:13:13.519992   11429 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/config/apiserver.go:46: Failed to list *v1.Pod: Get https://10.11.112.51:6443/api/v1/pods?fieldSelector=spec.nodeName%3Dkubernet01.localdomain&resourceVersion=0: dial tcp 10.11.112.51:6443: getsockopt: connection refused
Jun 06 17:13:13 kubernet01.localdomain kubelet[11429]: E0606 17:13:13.520798   11429 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:382: Failed to list *v1.Service: Get https://10.11.112.51:6443/api/v1/services?resourceVersion=0: dial tcp 10.11.112.51:6443: getsockopt: connection refused
Jun 06 17:13:13 kubernet01.localdomain kubelet[11429]: E0606 17:13:13.521493   11429 reflector.go:190] k8s.io/kubernetes/pkg/kubelet/kubelet.go:390: Failed to list *v1.Node: Get https://10.11.112.51:6443/api/v1/nodes?fieldSelector=metadata.name%3Dkubernet01.localdomain&resourceVersion=0: dial tcp 10.11.112.51:6443: getsockopt: connection refused
Jun 06 17:13:14 kubernet01.localdomain kubelet[11429]: E0606 17:13:14.337588   11429 event.go:208] Unable to write event: 'dial tcp 10.11.112.51:6443: getsockopt: connection refused' (may retry after sleeping)

@paulobezerr你能分享更多kube-apiserver日志吗? (评论末尾的那些)

上面你已经包含的行是否提到了相同的 IP 地址? 我最近尝试在两台新的 KVM 上运行 k8s,一台使用 Ubuntu 16.04,另一台使用 CentOS 7.3。 两者都给出了这个:

​[restful] 2017/05/30 19:31:38 log.go:30: [restful/swagger] listing is available at https://x.x.x.x:6443/swaggerapi/
[restful] 2017/05/30 19:31:38 log.go:30: [restful/swagger] https://x.x.x.x:6443/swaggerui/ is mapped to folder /swagger-ui/
​E0530 19:31:38.313090 1 reflector.go:201] k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/factory.go:70: Failed to list *rbac.RoleBinding: Get https://localhost:6443/apis/rbac.authorization.k8s.io/v1beta1/rolebindings?resourceVersion=0: dial tcp y.y.y.y:6443: getsockopt: connection refused

请注意,首先提到的 ip 地址是x.x.x.x ,然后 localhost 被解析为y.y.y.y (在我的情况下,它是位于同一物理服务器上的另一个 KVM 的公共 ip)。 我最终可以在 Ubuntu 上启动 kubeadm,但只有在以类似于https://github.com/kubernetes/kubeadm/issues/113#issuecomment -273115861 的方式安装 dnsmasq 之后。 CentOS 上的相同解决方法没有帮助。

这可能是kubedns中的错误还是什么? 有趣的是,AWS VM 上的相同步骤确实启动了 kubeadm。 但是 EC2 实例对于我的个人项目来说太贵了。

我和@paulobezer 有同样的问题。

## 版本
kubelet-1.6.4-0.x86_64
Kubernetes-cni-0.5.1-0.x86_64
kubectl-1.6.4-0.x86_64
kubeadm-1.6.4-0.x86_64
docker-client-1.12.6-28.git1398f24.el7.centos.x86_64
docker-common-1.12.6-28.git1398f24.el7.centos.x86_64
docker-1.12.6-28.git1398f24.el7.centos.x86_64

所以
uname -r > 3.10.0-229.1.2.el7.x86_64
cat /etc/redhat-release > CentOS Linux release 7.3.1611 (Core)

## 步骤如下:

    1. sudo yum install -y docker
2. sudo groupadd docker
3. sudo usermod -aG docker $(whoami)
4. curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
5. chmod +x ./kubectl
6. sudo mv ./kubectl /usr/local/bin/kubectl
7. echo "source <(kubectl completion bash)" >> ~/.bashrc
8. sudo -i
9. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
10. setenforce 0
11. yum install -y docker kubelet kubeadm kubectl kubernetes-cni
12. systemctl enable docker && systemctl start docker
13. systemctl enable kubelet && systemctl start kubelet
    14. echo -e "net.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.d/99-sysctl.conf && sudo service network restart
    15. firewall-cmd --zone=public --add-port=6443/tcp --permanent && sudo firewall-cmd --zone=public --add-port=10250/tcp --permanent  && sudo systemctl restart firewalld
    16. firewall-cmd --permanent --zone=trusted --change-interface=docker0

## api 服务器日志:
--> 37.247.XX.XXX 是公网 IP

[restful] 2017/06/08 10:45:19 log.go:30: [restful/swagger] 列表可在https://37.247.XX.XXX :6443/swaggerapi/
[restful] 2017/06/08 10:45:19 log.go:30: [restful/swagger] https://37.247.XX.XXX :6443/swaggerui/ 映射到文件夹 /swagger-ui/
E0608 10:45:19.429839 1 reflector.go:201] k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/factory.go:70: 无法列出 *api.Secret: 获取https://localhost : 6443/api/v1/secrets?resourceVersion=0:拨号 tcp 108.59.253.109:6443:getsockopt:连接被拒绝
E0608 10:45:19.430419 1 reflector.go:201] k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/factory.go:70: 未能列出 *api.ResourceQuota: 获取https://localhost : 6443/api/v1/resourcequotas?resourceVersion=0:拨号 tcp 108.59.253.109:6443:getsockopt:连接被拒绝
E0608 10:45:19.430743 1 reflector.go:201] k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/factory.go:70: 无法列出 *api.ServiceAccount: 获取https://localhost : 6443/api/v1/serviceaccounts?resourceVersion=0:拨号 tcp 108.59.253.109:6443:getsockopt:连接被拒绝
E0608 10:45:19.431076 1 reflector.go:201] k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/factory.go:70:无法列出 *storage.StorageClass:获取https://localhost : 6443/apis/storage.k8s.io/v1beta1/storageclasses?resourceVersion=0:拨号 tcp 108.59.253.109:6443:getsockopt:连接被拒绝
E0608 10:45:19.431377 1 reflector.go:201] k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/factory.go:70: 无法列出 *api.LimitRange: 获取https://localhost : 6443/api/v1/limitranges?resourceVersion=0:拨号 tcp 108.59.253.109:6443:getsockopt:连接被拒绝
E0608 10:45:19.431678 1 reflector.go:201] k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/factory.go:70: 未能列出 *rbac.RoleBinding: 获取https://localhost : 6443/apis/rbac.authorization.k8s.io/v1beta1/rolebindings?resourceVersion=0:拨号 tcp 108.59.253.109:6443:getsockopt:连接被拒绝
E0608 10:45:19.431967 1 reflector.go:201] k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/factory.go:70: 未能列出 *rbac.ClusterRoleBinding: 获取https://localhost : 6443/apis/rbac.authorization.k8s.io/v1beta1/clusterrolebindings?resourceVersion=0:拨号 tcp 108.59.253.109:6443:getsockopt:连接被拒绝
E0608 10:45:19.432165 1 reflector.go:201] k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/factory.go:70:无法列出 *api.Namespace:获取https://localhost : 6443/api/v1/namespaces?resourceVersion=0:拨号 tcp 108.59.253.109:6443:getsockopt:连接被拒绝
E0608 10:45:19.432386 1 reflector.go:201] k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/factory.go:70: 无法列出 *rbac.ClusterRole: 获取https://localhost : 6443/apis/rbac.authorization.k8s.io/v1beta1/clusterroles?resourceVersion=0:拨号 tcp 108.59.253.109:6443:getsockopt:连接被拒绝
E0608 10:45:19.432619 1 reflector.go:201] k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion/factory.go:70: 未能列出 *rbac.Role: 获取https://localhost : 6443/apis/rbac.authorization.k8s.io/v1beta1/roles?resourceVersion=0:拨号 tcp 108.59.253.109:6443:getsockopt:连接被拒绝
I0608 10:45:19.481612 1 serve.go:79] 在 0.0.0.0:6443 上安全服务
W0608 10:45:19.596770 1 storage_extensions.go:127] 第三方资源同步失败:获取https://localhost :6443/apis/extensions/v1beta1/thirdpartyresources:拨打 tcp 108.59.253.109:6443:getsockopt:连接被拒绝
E0608 10:45:19.596945 1 client_ca_hook.go:58] 发布https://localhost :6443/api/v1/namespaces:拨打 tcp 108.59.253.109:6443:getsockopt:连接被拒绝
F0608 10:45:19.597174 1 controller.go:128] 无法执行初始 IP 分配检查:无法刷新服务 IP 块:获取https://localhost :6443/api/v1/services:拨打 tcp 108.59.253.109: 6443:getsockopt:连接被拒绝

@albpal一周前我遇到了完全相同的问题: dial tcp X.X.X.X显示一个奇怪的 IP 地址,即使在安装 dnsmasq 并从我的托管服务提供商那里切换到谷歌 DNS 服务器而不是 DNS 之后,我也无法在 CentOS 上解决这个问题。 只是出于好奇:您能否检查一下您看到的错误 IP 地址是否与您的虚拟机位于同一数据中心? 您可以使用http://ipinfo.io以某种程度的确定性或只是跟踪路由来估计。

在我的情况下,错误的 IP 地址指的是同一物理服务器上的另一个 KVM。 可能与物理机上的 DNS 有关,这可能需要在 kube api 或 kube dns 中进行解决,否则启动集群对许多新手来说是一个巨大的痛苦! 我浪费了几个晚上才注意到dial tcp在日志中的 IP 错误,这是一个非常悲伤的第一次 k8s 体验。 在我的托管服务提供商 ( firstvds.ru ) 上,仍然没有针对 CentOS KVM 的良好开箱即用解决方案。

什么会导致 IP 地址出现这种非常奇怪的不匹配?

@albpal请打开一个新问题,您所描述的和这个问题是关于什么是单独的问题(我认为,基于该信息)

@kachkaev我刚刚检查了您的建议。

我发现错误的 IP 以 CPANEL 结尾:vps-1054290-4055.manage.myhosting.com。

另一方面,我的 VPS 的公共 IP 来自意大利,而这个错误的 IP 来自美国……所以尽管错误的 IP 与托管(CPANEL)有关,但它似乎并没有指代另一个 KVM相同的物理服务器。

你能安装k8s吗?

@luxas我有同样的行为,但我复制了 docker 日志输出也。

/var/log/messages 和 kubeadm init 的输出与原始问题相同。

@albpal所以你的虚拟机和第二台机器都在 CPANEL 上? 好兆头,因为那时我的情况是一样的! 它是同一台物理机器的事实可能只是一个巧合。

我在实验中使用了两台 KVM,一台使用 Ubuntu 16.04,另一台使用 CentOS 7.3 两者都有相同的dial tcp IP 地址问题。 通过摆脱我的提供商的 DNS 服务器,我最终能够在 Ubuntu 上启动 kubeadm。 该解决方案基于​crilozs 的建议

​apt-get install dnsmasq

rm -rf /etc/resolv.conf
echo "nameserver 127.0.0.1" > /etc/resolv.conf
chmod 444 /etc/resolv.conf
chattr +i /etc/resolv.conf

echo "server=8.8.8.8
server=8.8.4.4" > /etc/dnsmasq.conf

service dnsmasq restart
​# reboot just in case

这在 Ubuntu 上的dial tcp日志中带来了正确的 IP 地址,几分钟后 kubeadm 初始化! 我尝试以相同的方式在 CentOS 上设置 dnsmasq,但这并没有解决问题。 但我是这个操作系统的新手,所以我可能只是忘记重新启动一些服务或清理一些缓存。 试试这个想法!

无论如何,做一个额外的重新配置 DNS 的步骤感觉不对,因为它非常令人困惑(我不是服务器/devops 人,我经历的整个调查几乎让我哭了:fearful:)。 我希望 kubeadm 能够检测提供商的 DNS 服务器是否以奇怪的方式工作,并自动修复集群中需要的任何内容。

如果 k8s 团队中的任何人愿意了解正在发生的事情,我将很乐意分享几个新的 FirstVDS KVM 的 root 访问权限。 只需在推特上给我发电子邮件或 DM!

谢谢@kachkaev ! 我明天试试

cc @kubernetes/sig-network-bugs 你知道为什么上面的 DNS 解析失败了吗?

谢谢@kachkaev ,我们会尝试调查它。 我不认为这真的是 kubeadm 本身的错,但是如果许多用户被困在同一个错误配置上,我们可能会将其添加到故障排除文档中......

我的日志很可能是@albpal日志。
但我会试试dnsmasq。 谢谢你们!

@kachkaev ,它不起作用。 同样的问题😢
附上完整的日志。

日志.txt

我已经能够修复它了!! 非常感谢@kachkaev的提示!

我认为问题是:

### 设想:
具有以下配置架构的 VPS:

解析.conf
[ root@apalau ~]# cat resolv.conf
名称服务器 8.8.8.8
名称服务器 8.8.4.4
名称服务器 2001:4860:4860::8888
名称服务器 2001:4860:4860::8844

没有任何搜索域!

主机
[ root@apalau ~]# cat /etc/hosts
127.0.0.1 localhost.localdomain 本地主机
37.XXX.XX.XXX 名称.vpshosting.com

根据日志,kubernetes 容器尝试连接到:

获取https://localhost :6443/api/v1/secrets?resourceVersion=0

当我要求:
$ nslookup "localhost.$(hostname -d)"
我得到的IP是错误的,即108.59.253.109。

所以我认为这些容器正在尝试解析 localhost(没有域)并且他们得到了错误的 IP。 可能是因为“localhost.$(hostname -d)”正在解析该 IP,我认为这几乎会发生在任何 VPS 服务上。

## 我为解决 VPS CentOS 7.3 上的问题所做的工作(除了在 https://kubernetes.io/docs/setup/independent/install-kubeadm/#installing-kubelet-and-kubeadm 中显示的这些步骤):

作为根:

  1. kubeadm 重置
  2. 百胜安装 dnsmasq
  3. cp /etc/resolv.conf ~/resolv.conf_bck
  4. rm -rf /etc/resolv.conf
  5. echo -e "nameserver 127.0.0.1\nnameserver $(hostname -i)" >> /etc/resolv.conf
  6. chmod 444 /etc/resolv.conf
  7. chattr +i /etc/resolv.conf
  8. echo -e "服务器=8.8.8.8\n服务器=8.8.4.4" > /etc/dnsmasq.conf
  9. echo -e "$(hostname -i)\tlocalhost.$(hostname -d)" >> /etc/hosts
  10. 服务 dnsmasq 重启
  11. firewall-cmd --zone=public --add-port=6443/tcp --permanent && sudo firewall-cmd --zone=public --add-port=10250/tcp --permanent && sudo systemctl restart firewalld
  12. kubeadm 初始化

我在第 5 步添加了主机名 -i,因为如果我不这样做,docker 会将 8.8.8.8 添加到容器上的 resolv.conf 中。

我希望它对其他人也有帮助。

谢谢!!

很高兴听到@albpal! 我在kubeadm init之前完成了您的步骤,集群最终在我的测试 FirstVDS KVM 中使用 CentOS 7.3 初始化! 我唯一需要做的就是停止并禁用 firewalld,因为它阻止了到端口 6443 的外部连接:

systemctl disable firewalld
systemctl stop firewalld

_我不建议这样做,因为我不知道后果 - 这只是帮助我完成了我通常不使用的操作系统的测试。_

现在我想知道可以做些什么来简化像我这样的新手的安装过程。 卡在Created API client, waiting for the control plane to become ready和解决问题之间的路径仍然很长,特别是如果我们考虑到挖掘这个问题并阅读所有评论所需的时间。 __你们有什么建议?__

@paulobezerr从我在您的附件中看到的我相信您的问题略有不同。 我的 apiserver 日志包含以下内容:

reflector.go:190] k8s.io/kubernetes/pkg/kubelet/config/apiserver.go:46: Failed to list *v1.Pod:
Get https://localhost:6443/api/v1/pods?fieldSelector=spec.nodeName%3Dhostname&resourceVersion=0:
dial tcp RANDOM_IP:6443: getsockopt: connection refused

而你的说:

reflector.go:190] k8s.io/kubernetes/pkg/kubelet/config/apiserver.go:46: Failed to list *v1.Pod:
Get https://10.X.X.X:6443/api/v1/pods?fieldSelector=spec.nodeName%3Dhostname&resourceVersion=0:
dial tcp 10.X.X.X:6443: getsockopt: connection refused

(在第一种情况下它是localhost / RANDOM_IP ,而在第二种情况下它总是10.X.X.X

不幸的是,除了在 $#$ kubeadm init --apiserver-advertise-address=???之外,我不知道有什么建议(请参阅文档)。 我的 k8s 上手体验刚到 10 天,大部分都是徒劳地尝试在 FirstVDS 上启动单节点集群 :-)

希望您对此进行排序并与他人分享解决方案!

@kachkaev我忘了提到我已经应用了以下防火墙规则:

$ firewall-cmd --zone=public --add-port=6443/tcp --permanent && sudo firewall-cmd --zone=public --add-port=10250/tcp --permanent && sudo systemctl restart firewalld

当应用此规则而不停用防火墙时,它在我的环境中运行良好。 我会将其添加到我之前的评论中以收集所有需要的步骤。

@juntaoXie谢谢。 根据您的评论更新 systemd 版本对我有用。

现在两天仍然遇到这个问题,我在代理后面运行所有这些,似乎没有问题。
kubeadm init 等待控制平面准备就绪。 当我执行 docker ps 时,容器被拉出并运行,但没有分配端口(我不知道它是否应该但可以)。 etcd 也运行良好。 但是,当我查看我的 kubelet 服务时,它说 Unable to update cni config: No networks found in /etc/cni/net.d https://github.com/kubernetes/kubernetes/issues/43815说没问题,你需要申请一个cni网络。
我按照https://www.weave.works/docs/net/latest/kubernetes/kube-addon/ 做的。 现在,kubectl 说 8080 被拒绝 - 你指定了正确的主机或端口吗? 好像是先有鸡还是先有蛋的问题,当我的 kubeadm init 挂起时,如何应用 cni 网络??? 这太令人困惑了

这也不是 cgroup 问题,docker 和我的 kubelet 服务都使用 systemd。

FWIW,我在 GCP 上遇到了同样的问题,我尝试在一个干净的项目中使用以下命令使用 Ubuntu 16.04 和 CentOS:

$ gcloud 计算实例创建 test-api-01 --zone us-west1-a --image-family ubuntu-1604-lts --image-project ubuntu-os-cloud --machine-type f1-micro --description '用于 api 测试的节点 1'

$ gcloud 计算实例创建 test-api-02 --zone us-west1-b --image-family ubuntu-1604-lts --image-project ubuntu-os-cloud --machine-type f1-micro --description '用于 api 测试的节点 2'

$ gcloud 计算实例创建 test-api-03 --zone us-west1-c --image-family ubuntu-1604-lts --image-project ubuntu-os-cloud --machine-type f1-micro --description '用于 api 测试的节点 3'

$ apt-get 更新

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key 添加 -

$ apt-get update && apt-get install -qy docker.io && apt-get install -y apt-transport-https

$ echo "deb http://apt.kubernetes.io/kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list

$ apt-get update && apt-get install -y kubelet kubeadm kubernetes-cni

$ systemctl 重启 kubelet

$ kubeadm 初始化

因此,在用头撞了几个小时后,我最终选择了:

$ gcloud beta container --project "weather-177507" clusters create "weather-api-cluster-1" --zone "us-west1-a" --username="admin" --cluster-version "1.6.7" --machine-type "f1-micro" --image-type "COS" --disk-size "100" --scopes " https://www.googleapis.com/auth/compute "," https:// www.googleapis.com/auth/devstorage.read_only "," https://www.googleapis.com/auth/logging.write "," https://www.googleapis.com/auth/monitoring.write "," https://www.googleapis.com/auth/servicecontrol "," https://www.googleapis.com/auth/service.management.readonly "," https://www.googleapis.com/auth/trace。附加“--num-nodes “3”--network“默认”--enable-cloud-logging --no-enable-cloud-monitoring --enable-legacy-authorization

我能够从空白图像中启动并运行集群。

即使我在使用 Kubeadm 版本时也面临同样的问题:
image
它陷入困境
[apiclient] Created API client, waiting for the control plane to become ready
image

@paulobezerr相同的问题 - 我的环境:CentOS 7.4.1708 kubeadm 版本:&version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"6e937839ac04a38cac63e6a7a306c5d035fe7b0a", GitTreeState:"clean ", BuildDate:"2017-09-28T22:46:41Z", GoVersion:"go1.8.3", 编译器:"gc", 平台:"linux/amd64"}

对我来说,这个问题不是在禁用 SELinux 的情况下运行的。 线索是他的脚步,评论:

编辑 /etc/selinux/config 并设置 SELINUX=disabled

CentOS 的安装步骤 (https://kubernetes.io/docs/setup/independent/install-kubeadm/) 说:
“需要通过运行 setenforce 0 禁用 SELinux 以允许容器访问主机文件系统”
但它没有提到(至少在 CentOS/RHEL/Fedora 选项卡上)您应该编辑 /etc/selinux/config 并设置 SELINUX=disabled

对我来说,即使我运行了 setenforce 0,我仍然遇到同样的错误。 编辑 /etc/selinux/config 并设置 SELINUX=disabled,然后重新启动为我修复了它。

这里似乎有很多(可能是正交的)问题在起作用,所以我希望我们不要让事情发生分歧。 到目前为止,我们似乎已经查明了 3 个问题:

  1. DNS 无法在某些机器上正确解析 localhost。 @kachkaev @paulobezerr你有没有解决这个问题? 我想知道如何在我们的要求中更明确地说明这一点,有什么想法吗?

  2. kubelet 和 Docker 之间的cgroup-driver匹配不正确。 我们应该将此添加到我们的需求列表中。

  3. SELinux 未被禁用。 我们应该将此添加到我们的需求列表中。

一旦这三个问题都用 PR 解决了,也许我们应该关闭它,让未来遇到问题的人创建他们自己的问题。 这将使我们能够接收更多结构化信息并提供更精细的支持,而不是在一个线程中处理很多事情。 你怎么看@luxas?

对我来说,我选择了 docker 17.06(推荐 17.03,但在 docker.io 上不可用)并遇到了同样的问题。 升级到 17.09 神奇地解决了这个问题。

由于这个线程已经很长了,并且可能有很多完全不同的问题,除了@jamiehannaford的优秀评论之外,我可以添加的最有成效的事情是,请打开所有相关日志/信息的新的、有针对性的问题,以防万一_使用最新的 kubeadm v1.8_ 失败,它自动检测故障状态比早期版本好得多。 我们还改进了围绕需求和边缘案例的文档,希望能为人们节省时间。

谢谢大家!

我在 CENTOS 7 中的 1.8 和 1.8 有同样的问题? 任何人都有同样的问题或知道如何解决。

@rushins如果您想就您看到的可能问题获得帮助,请在此处打开一个包含足够详细信息的新问题。

我遇到了与@rushabh268相同的问题,即connection refused而不是localhost:6443/api
最后,我通过备注域搜索search xxx.xx.xxxx.org来解决它。

vi /etc/resolv.congf

------ resolv.congf -----
# Generated by NetworkManager
#search xxx.xx.xxxx.org
nameserver 10.x.xxx.xx
nameserver 10.x.xxx.xx
nameserver 10.x.xxx.xx
--------------------------

环境:
-> CentOS-7-x86_64-Minimal-1708
-> K8s v1.9.2
-> Docker v17.12.0.ce
-> 私有网络下 xxx.xx.xxxx.org

请看在上帝的份上,将此添加到文档中。 下班后的许多晚上,我一直试图以“玩得开心和玩技术”为幌子设置我的集群,但主节点在运行 nslookup localhost 时没有获得正确的 IP。

感谢@kachkaev的解决方案。

此页面是否有帮助?
0 / 5 - 0 等级