Kubeadm: 在HA k8s / etcd群集上将Kubeadm更新到1.10失败

创建于 2018-05-20  ·  13评论  ·  资料来源: kubernetes/kubeadm

错误报告

版本号

kubeadm版本:1.10.2

环境

  • Kubernetes版本:1.9.3
  • 云提供商或硬件配置:3 x k8s master HA
  • 作业系统:RHEL7
  • 内核:3.10.0-693.11.6.el7.x86_64

发生了什么?

几个月前,按照“官方”文档https://kubernetes.io/docs/setup/independent/high-availability/ ,我使用kubeadm 1.9.3创建了一个kubernetes 1.9.3 HA集群, etcd HA群集使用静态Pod将其托管在主节点上

我想使用最新的kubeadm将群集升级到k8s 1.10.2 kubeadm ; 更新kubeadm ,运行kubeadm upgrade plan ,出现以下错误:

[root@shared-cob-01 tmp]# kubeadm upgrade plan
[preflight] Running pre-flight checks.
[upgrade] Making sure the cluster is healthy:
[upgrade/config] Making sure the configuration is correct:
[upgrade/config] Reading configuration from the cluster...
[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[upgrade/plan] computing upgrade possibilities
[upgrade] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.9.3
[upgrade/versions] kubeadm version: v1.10.2
[upgrade/versions] Latest stable version: v1.10.2
[upgrade/versions] FATAL: context deadline exceeded

我对此问题进行了调查,发现了两个根本原因:

1) kubeadm无法将etcd集群标识为启用TLS

指南指示在etcd静态窗格中使用以下命令

- etcd --name <name> \
  - --data-dir /var/lib/etcd \
  - --listen-client-urls http://localhost:2379 \
  - --advertise-client-urls http://localhost:2379 \
  - --listen-peer-urls http://localhost:2380 \
  - --initial-advertise-peer-urls http://localhost:2380 \
  - --cert-file=/certs/server.pem \
  - --key-file=/certs/server-key.pem \
  - --client-cert-auth \
  - --trusted-ca-file=/certs/ca.pem \
  - --peer-cert-file=/certs/peer.pem \
  - --peer-key-file=/certs/peer-key.pem \
  - --peer-client-cert-auth \
  - --peer-trusted-ca-file=/certs/ca.pem \
  - --initial-cluster etcd0=https://<etcd0-ip-address>:2380,etcd1=https://<etcd1-ip-address>:2380,etcd2=https://<etcd2-ip-address>:2380 \
  - --initial-cluster-token my-etcd-token \
  - --initial-cluster-state new

kubeadm >= 1.10检查(这里:https://github.com/kubernetes/kubernetes/blob/release-1.10/cmd/kubeadm/app/util/etcd/etcd.go#L56)如果etcd通过检查static pod命令中是否存在以下标志来启用TLS。

"--cert-file=",
"--key-file=",
"--trusted-ca-file=",
"--client-cert-auth=",
"--peer-cert-file=",
"--peer-key-file=",
"--peer-trusted-ca-file=",
"--peer-client-cert-auth=",

但由于指令中使用了标记--client-cert-auth--peer-client-cert-auth而没有任何参数(布尔值),因此kubeadm无法识别etcd群集具有TLS已启用。

个人修复:
我将etcd静态pod命令更新为使用- --client-cert-auth=true- --peer-client-cert-auth=true

一般修复:
更新说明以使用--client-cert-auth=true--peer-client-cert-auth=true并使用"--peer-cert-file""--peer-key-file"放松kubeadm检查(不包含等号)

2) kubeadm没有使用正确的证书

在修复点1之后,问题仍然存在,因为kubeadm没有使用正确的证书。
通过遵循kubeadm HA指南,实际上,创建的证书为ca.pem ca-key.pem peer.pem peer-key.pem client.pem client-key.pem但最新的kubeadm期望ca.crt ca.key``peer.crt peer.key``healthcheck-client.crt healthcheck-client.key
kubeadm-config MasterConfiguration键etcd.caFileetcd.certFileetcd.keyFile被忽略。

个人修复:
.pem证书重命名为其等效的.crt.key并更新了etcd静态pod配置以使用它们。

一般修复:
使用kubeadm-config data.caFiledata.certFiledata.keyFile值,从etcd静态pod定义(pod路径+卷hostPath)推断正确的证书和/或创建升级期间要使用的新的临时客户端证书。

您预期会发生什么?

升级计划应已正确执行

如何重现(尽可能少且精确)?

按照https://kubernetes.io/docs/setup/independent/high-availability/使用kubeadm 1.9.3创建一个k8s ha集群,并尝试使用最新的kubeadm将其更新为k8s >= 1.10 kubeadm

areHA areUX areupgrades documentatioimprovement kinbug prioritimportant-soon

所有13条评论

此问题似乎已在kubeadm 1.10.3修复,即使它不会自动更新静态etcd吊舱,因为它将其识别为“外部”

我正在使用kubeadm 1.10.3并有相同的问题。 我的集群是1.10.2,带有外部安全etcd

@brokenmass您个人修正的值是否会引起您注意到的第二个原因,如下所示:

  caFile: /etc/kubernetes/pki/etcd/ca.crt
  certFile: /etc/kubernetes/pki/etcd/healthcheck-client.crt
  keyFile: /etc/kubernetes/pki/etcd/healthcheck-client.key

@detiber可以帮忙吗?

@FloMedja
在我的情况下,值看起来像:

  caFile: /etc/kubernetes/pki/etcd/ca.pem
  certFile: /etc/kubernetes/pki/etcd/client.pem
  keyFile: /etc/kubernetes/pki/etcd/client-key.pem

并且1.10.3正常工作

@brokenmass因此,使用kubeadm 1.10.3可以正常运行,而无需您进行个人修复。 在这种情况下,我有点困惑。 我有kubeadm 1.10.3,但与您在此错误报告中提到的错误消息相同。 我将仔细检查我的配置,可能是我在其他地方犯了一些错误

在此处添加(或加入kubernetes slack并给我发送直接消息)您的kubeadm-config,etcd静态pod yml和kubeadm upgrade plan的完整输出

抱歉,我现在才看到这一点。 @chuckha为static-pod HA etcd文档做了原始工作,接下来的几天我将与他合作,看看我们是否可以帮助您解决HA升级问题。

@detiber谢谢。 升级计划终于生效了。 但是在尝试升级群集时,我遇到了一些竞赛条件问题。 有时它可以正常工作,有时我会遇到

我今天遇到了一些障碍,需要为此设置测试环境,而在周末开始之​​前我已经没有时间了。 下周初我会再讲。

/分配@chuckha @detiber

@chuckha @detiber @stealthybox对此有任何更新吗?

因此,1.9-> 1.10 HA升级不是受支持或经过审查的路径。

我们目前正在更新维护我们的文档(1.11-> 1.12),我们计划继续维护这些文档。

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