Kubeadm: 1.9.6から1.10.0ぞのアップグレヌドはタむムアりトで倱敗したす

䜜成日 2018幎03月28日  Â·  42コメント  Â·  ゜ヌス: kubernetes/kubeadm

バグレポヌト

バヌゞョン

kubeadmバヌゞョン kubeadm version 

kubeadmバヌゞョンversion.Info {メゞャヌ "1"、マむナヌ "10"、GitVersion "v1.10.0"、GitCommit "fc32d2f3698e36b93322a3465f63a14e9f0eaead"、GitTreeState "clean"、BuildDate "2018-03-26T1644 10Z "、GoVersion" go1.9.3 "、コンパむラ" gc "、プラットフォヌム" linux / amd64 "}

環境

  • Kubernetesバヌゞョン kubectl version 

クラむアントバヌゞョンversion.Info {Major "1"、Minor "9"、GitVersion "v1.9.6"、GitCommit "9f8ebd171479bec0ada837d7ee641dec2f8c6dd1"、GitTreeState "clean"、BuildDate "2018-03-21T1521 50Z "、GoVersion" go1.9.3 "、コンパむラ" gc "、プラットフォヌム" linux / amd64 "}
サヌバヌバヌゞョンversion.Info {Major "1"、Minor "9"、GitVersion "v1.9.6"、GitCommit "9f8ebd171479bec0ada837d7ee641dec2f8c6dd1"、GitTreeState "clean"、BuildDate "2018-03-21T1513 31Z "、GoVersion" go1.9.3 "、コンパむラ" gc "、プラットフォヌム" linux / amd64 "}

  • クラりドプロバむダヌたたはハヌドりェア構成

スケヌルりェむベアメタルC2S

  • OS 䟋/ etc / os-releaseから

Ubuntu Xenial16.04 LTSGNU / Linux 4.4.122-mainline-rev1 x86_64

  • カヌネル䟋 uname -a 

Linux amd64-master-1 4.4.122-mainline-rev11 SMP Sun Mar 18 10:44:19 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux

䜕が起こった

1.9.6から1.10.0にアップグレヌドしようずするず、次の゚ラヌが発生したす。

kubeadm upgrade apply v1.10.0
[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/version] You have chosen to change the cluster version to "v1.10.0"
[upgrade/versions] Cluster version: v1.9.6
[upgrade/versions] kubeadm version: v1.10.0
[upgrade/confirm] Are you sure you want to proceed with the upgrade? [y/N]: y
[upgrade/prepull] Will prepull images for components [kube-apiserver kube-controller-manager kube-scheduler]
[upgrade/apply] Upgrading your Static Pod-hosted control plane to version "v1.10.0"...
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests411909119/etcd.yaml"
[certificates] Generated etcd/ca certificate and key.
[certificates] Generated etcd/server certificate and key.
[certificates] etcd/server serving cert is signed for DNS names [localhost] and IPs [127.0.0.1]
[certificates] Generated etcd/peer certificate and key.
[certificates] etcd/peer serving cert is signed for DNS names [arm-master-1] and IPs [10.1.244.57]
[certificates] Generated etcd/healthcheck-client certificate and key.
[upgrade/staticpods] Moved new manifest to "/etc/kubernetes/manifests/etcd.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests180476754/etcd.yaml"
[upgrade/staticpods] Waiting for the kubelet to restart the component
[upgrade/apply] FATAL: fatal error when trying to upgrade the etcd cluster: couldn't upgrade control plane. kubeadm has tried to recover everything into the earlier state. Errors faced: [timed out waiting for the condition], rolled the state back to pre-upgrade state

あなたは䜕が起こるず思っおいたしたか

アップグレヌドの成功

それを可胜な限り最小限か぀正確に再珟する方法は

1.9.6パッケヌゞをむンストヌルし、1.9.6クラスタヌを初期化したす。

curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list
apt-get update -qq
apt-get install -qy kubectl=1.9.6-00
apt-get install -qy kubelet=1.9.6-00
apt-get install -qy kubeadm=1.9.6-00

https://github.com/kubernetes/kubernetes/issues/61764で報告されおいるように、kubeadm-configを線集し、featureGatesを文字列からマップに倉曎し

kubectl -n kube-system edit cm kubeadm-config

....
featureGates: {}
....

kubeadm 1.10.0をダりンロヌドし、 kubeadm upgrade planずkubeadm upgrade apply v1.10.0たす。

kinbug prioritcritical-urgent triaged

最も参考になるコメント

䞀時的な回避策は、蚌明曞を確認し、チェックをバむパスしおetcdポッドずapiserverポッドをアップグレヌドするこずです。

必ず構成を確認し、ナヌスケヌスのフラグを远加しおください。

kubectl -n kube-system edit cm kubeadm-config  # change featureFlags
...
  featureGates: {}
...
kubeadm alpha phase certs all
kubeadm alpha phase etcd local
kubeadm alpha phase controlplane all
kubeadm alpha phase upload-config

党おのコメント42件

このバグのロヌカルでの再珟に取り組んでいたす。

これを10回再詊行した埌、最終的に機胜したした

これが私のetcdマニフェスト差分です
`` ` root @ vagrant〜diff /etc/kubernetes/manifests/etcd.yaml /etc/kubernetes/tmp/kubeadm-backup-manifests858209931/etcd.yaml
16,17c16,17
<---- listen-client-urls = https://127.0.0.12379

<---- advertise-client-urls = https://127.0.0.12379

- --listen-client-urls=http://127.0.0.1:2379
- --advertise-client-urls=http://127.0.0.1:2379

19,27c19
<--- key-file = / etc / kubernetes / pki / etcd / server.key
<-trusted-ca-file = / etc / kubernetes / pki / etcd / ca.crt
<--- peer-cert-file = / etc / kubernetes / pki / etcd / peer.crt
<---- peer-key-file = / etc / kubernetes / pki / etcd / peer.key
<---- client-cert-auth = true
<---- peer-client-cert-auth = true
<---- cert-file = / etc / kubernetes / pki / etcd / server.crt
<---- peer-trusted-ca-file = / etc / kubernetes / pki / etcd / ca.crt

<画像gcr.io/google_containers/etcd-amd643.1.12

image: gcr.io/google_containers/etcd-amd64:3.1.11

29,35d20
<exec
<コマンド
<-/ bin / sh
<-ec
<-ETCDCTL_API = 3 etcdctl --endpoints = 127.0.0.12379 --cacert = / etc / kubernetes / pki / etcd / ca.crt
<-cert = / etc / kubernetes / pki / etcd / healthcheck-client.crt --key = / etc / kubernetes / pki / etcd / healthcheck-client.key
<fooを取埗
36a22,26
httpGet
ホスト127.0.0.1
パス/ health
ポヌト2379
スキヌムHTTP
43,45c33
<名前etcd-data
<-mountPath/ etc / kubernetes / pki / etcd

<名前etcd-certs

  name: etcd

51,55c39
<名前etcd-data
<-hostPath
<パス/ etc / kubernetes / pki / etcd
<タむプDirectoryOrCreate

<名前etcd-certs

name: etcd

root @ vagrant〜ls / etc / kubernetes / pki / etcd
ca.crt ca.key healthcheck-client.crt healthcheck-client.key peer.crt peer.key server.crt server.key```

Ubuntu 17.10 Vagrantの1.9.6クラスタヌ

root<strong i="6">@vagrant</strong>:/vagrant# 1.10_kubernetes/server/bin/kubeadm upgrade apply v1.10.0
[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/version] You have chosen to change the cluster version to "v1.10.0"
[upgrade/versions] Cluster version: v1.9.6
[upgrade/versions] kubeadm version: v1.10.0
[upgrade/confirm] Are you sure you want to proceed with the upgrade? [y/N]: y
[upgrade/prepull] Will prepull images for components [kube-apiserver kube-controller-manager kube-scheduler]
[upgrade/apply] Upgrading your Static Pod-hosted control plane to version "v1.10.0"...
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests262738652/etcd.yaml"
[certificates] Generated etcd/ca certificate and key.
[certificates] Generated etcd/server certificate and key.
[certificates] etcd/server serving cert is signed for DNS names [localhost] and IPs [127.0.0.1]
[certificates] Generated etcd/peer certificate and key.
[certificates] etcd/peer serving cert is signed for DNS names [vagrant] and IPs [10.0.2.15]
[certificates] Generated etcd/healthcheck-client certificate and key.
[upgrade/staticpods] Moved new manifest to "/etc/kubernetes/manifests/etcd.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests858209931/etcd.yaml"
[upgrade/staticpods] Waiting for the kubelet to restart the component
[apiclient] Error getting Pods with label selector "component=etcd" [the server was unable to return a response in the time allotted, but may still be processing the request (get pods)]
[apiclient] Error getting Pods with label selector "component=etcd" [Get https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods?labelSelector=component%3Detcd: http2: server sent GOAWAY and closed the connection; LastStreamID=27, ErrCode=NO_ERROR, debug=""]
[apiclient] Error getting Pods with label selector "component=etcd" [Get https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods?labelSelector=component%3Detcd: net/http: TLS handshake timeout]
[apiclient] Error getting Pods with label selector "component=etcd" [the server was unable to return a response in the time allotted, but may still be processing the request (get pods)]
[apiclient] Error getting Pods with label selector "component=etcd" [Get https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods?labelSelector=component%3Detcd: http2: server sent GOAWAY and closed the connection; LastStreamID=3, ErrCode=NO_ERROR, debug=""]
[upgrade/apply] FATAL: fatal error when trying to upgrade the etcd cluster: couldn't upgrade control plane. kubeadm has tried to recover everything into the earlier state. Errors faced: [timed out waiting for the condition], rolled the state back to pre-upgrade state

これは私の再珟環境です https 

ブヌトストラップの次の行を1.9.6-00に倉曎したす //github.com/stealthybox/vagrant-kubeadm-testing/blob/9d4493e990c9bd742107b317641267c3ef3640cd/Vagrantfile#L18 -L20

次に、1.10サヌバヌバむナリをリポゞトリにダりンロヌドするず、ゲストで/vagrantで利甚できるようになりたす。
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.10.md#server -binaries

kubelet etcd関連ログ

root<strong i="6">@vagrant</strong>:~# journalctl -xefu kubelet | grep -i etcd
Mar 28 16:32:07 vagrant kubelet[14676]: W0328 16:32:07.808776   14676 status_manager.go:459] Failed to get status for pod "etcd-vagrant_kube-system(7278f85057e8bf5cb81c9f96d3b25320)": Get https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods/etcd-vagrant: dial tcp 10.0.2.15:6443: getsockopt: connection refused
Mar 28 16:32:07 vagrant kubelet[14676]: I0328 16:32:07.880412   14676 reconciler.go:217] operationExecutor.VerifyControllerAttachedVolume started for volume "etcd" (UniqueName: "kubernetes.io/host-path/7278f85057e8bf5cb81c9f96d3b25320-etcd") pod "etcd-vagrant" (UID: "7278f85057e8bf5cb81c9f96d3b25320")
Mar 28 16:34:27 vagrant kubelet[14676]: W0328 16:34:27.472534   14676 status_manager.go:459] Failed to get status for pod "etcd-vagrant_kube-system(7278f85057e8bf5cb81c9f96d3b25320)": Get https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods/etcd-vagrant: dial tcp 10.0.2.15:6443: getsockopt: connection refused
Mar 28 16:57:33 vagrant kubelet[14676]: W0328 16:57:33.683648   14676 kubelet.go:1597] Deleting mirror pod "etcd-vagrant_kube-system(122348c3-32a6-11e8-8dc5-080027d6be16)" because it is outdated
Mar 28 16:57:33 vagrant kubelet[14676]: I0328 16:57:33.725564   14676 reconciler.go:217] operationExecutor.VerifyControllerAttachedVolume started for volume "etcd-certs" (UniqueName: "kubernetes.io/host-path/37936d2107e31b457cada6c2433469f1-etcd-certs") pod "etcd-vagrant" (UID: "37936d2107e31b457cada6c2433469f1")
Mar 28 16:57:33 vagrant kubelet[14676]: I0328 16:57:33.725637   14676 reconciler.go:217] operationExecutor.VerifyControllerAttachedVolume started for volume "etcd-data" (UniqueName: "kubernetes.io/host-path/37936d2107e31b457cada6c2433469f1-etcd-data") pod "etcd-vagrant" (UID: "37936d2107e31b457cada6c2433469f1")
Mar 28 16:57:35 vagrant kubelet[14676]: E0328 16:57:35.484901   14676 kuberuntime_container.go:66] Can't make a ref to pod "etcd-vagrant_kube-system(7278f85057e8bf5cb81c9f96d3b25320)", container etcd: selfLink was empty, can't make reference
Mar 28 16:57:35 vagrant kubelet[14676]: I0328 16:57:35.889458   14676 reconciler.go:191] operationExecutor.UnmountVolume started for volume "etcd" (UniqueName: "kubernetes.io/host-path/7278f85057e8bf5cb81c9f96d3b25320-etcd") pod "7278f85057e8bf5cb81c9f96d3b25320" (UID: "7278f85057e8bf5cb81c9f96d3b25320")
Mar 28 16:57:35 vagrant kubelet[14676]: I0328 16:57:35.889595   14676 operation_generator.go:643] UnmountVolume.TearDown succeeded for volume "kubernetes.io/host-path/7278f85057e8bf5cb81c9f96d3b25320-etcd" (OuterVolumeSpecName: "etcd") pod "7278f85057e8bf5cb81c9f96d3b25320" (UID: "7278f85057e8bf5cb81c9f96d3b25320"). InnerVolumeSpecName "etcd". PluginName "kubernetes.io/host-path", VolumeGidValue ""
Mar 28 16:57:35 vagrant kubelet[14676]: I0328 16:57:35.989892   14676 reconciler.go:297] Volume detached for volume "etcd" (UniqueName: "kubernetes.io/host-path/7278f85057e8bf5cb81c9f96d3b25320-etcd") on node "vagrant" DevicePath ""
Mar 28 16:58:03 vagrant kubelet[14676]: E0328 16:58:03.688878   14676 mirror_client.go:88] Failed deleting a mirror pod "etcd-vagrant_kube-system": Timeout: request did not complete within allowed duration
Mar 28 16:58:03 vagrant kubelet[14676]: E0328 16:58:03.841447   14676 event.go:200] Server rejected event '&v1.Event{TypeMeta:v1.TypeMeta{Kind:"", APIVersion:""}, ObjectMeta:v1.ObjectMeta{Name:"etcd-vagrant.152023ff626cfbc5", GenerateName:"", Namespace:"kube-system", SelfLink:"", UID:"", ResourceVersion:"", Generation:0, CreationTimestamp:v1.Time{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*v1.Time)(nil), DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[string]string(nil), Annotations:map[string]string(nil), OwnerReferences:[]v1.OwnerReference(nil), Initializers:(*v1.Initializers)(nil), Finalizers:[]string(nil), ClusterName:""}, InvolvedObject:v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"etcd-vagrant", UID:"37936d2107e31b457cada6c2433469f1", APIVersion:"v1", ResourceVersion:"", FieldPath:""}, Reason:"SuccessfulMountVolume", Message:"MountVolume.SetUp succeeded for volume \"etcd-certs\" ", Source:v1.EventSource{Component:"kubelet", Host:"vagrant"}, FirstTimestamp:v1.Time{Time:time.Time{wall:0xbea7103f713e59c5, ext:1534226953099, loc:(*time.Location)(0x5859e60)}}, LastTimestamp:v1.Time{Time:time.Time{wall:0xbea7103f713e59c5, ext:1534226953099, loc:(*time.Location)(0x5859e60)}}, Count:1, Type:"Normal", EventTime:v1.MicroTime{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, Series:(*v1.EventSeries)(nil), Action:"", Related:(*v1.ObjectReference)(nil), ReportingController:"", ReportingInstance:""}': 'Timeout: request did not complete within allowed duration' (will not retry!)
Mar 28 16:58:33 vagrant kubelet[14676]: E0328 16:58:33.844276   14676 event.go:200] Server rejected event '&v1.Event{TypeMeta:v1.TypeMeta{Kind:"", APIVersion:""}, ObjectMeta:v1.ObjectMeta{Name:"etcd-vagrant.152023ff626cfb82", GenerateName:"", Namespace:"kube-system", SelfLink:"", UID:"", ResourceVersion:"", Generation:0, CreationTimestamp:v1.Time{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*v1.Time)(nil), DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[string]string(nil), Annotations:map[string]string(nil), OwnerReferences:[]v1.OwnerReference(nil), Initializers:(*v1.Initializers)(nil), Finalizers:[]string(nil), ClusterName:""}, InvolvedObject:v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"etcd-vagrant", UID:"37936d2107e31b457cada6c2433469f1", APIVersion:"v1", ResourceVersion:"", FieldPath:""}, Reason:"SuccessfulMountVolume", Message:"MountVolume.SetUp succeeded for volume \"etcd-data\" ", Source:v1.EventSource{Component:"kubelet", Host:"vagrant"}, FirstTimestamp:v1.Time{Time:time.Time{wall:0xbea7103f713e5982, ext:1534226953033, loc:(*time.Location)(0x5859e60)}}, LastTimestamp:v1.Time{Time:time.Time{wall:0xbea7103f713e5982, ext:1534226953033, loc:(*time.Location)(0x5859e60)}}, Count:1, Type:"Normal", EventTime:v1.MicroTime{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, Series:(*v1.EventSeries)(nil), Action:"", Related:(*v1.ObjectReference)(nil), ReportingController:"", ReportingInstance:""}': 'Timeout: request did not complete within allowed duration' (will not retry!)
Mar 28 16:59:03 vagrant kubelet[14676]: E0328 16:59:03.692450   14676 kubelet.go:1612] Failed creating a mirror pod for "etcd-vagrant_kube-system(37936d2107e31b457cada6c2433469f1)": the server was unable to return a response in the time allotted, but may still be processing the request (post pods)
Mar 28 16:59:03 vagrant kubelet[14676]: E0328 16:59:03.848007   14676 event.go:200] Server rejected event '&v1.Event{TypeMeta:v1.TypeMeta{Kind:"", APIVersion:""}, ObjectMeta:v1.ObjectMeta{Name:"etcd-vagrant.152023ff641f915f", GenerateName:"", Namespace:"kube-system", SelfLink:"", UID:"", ResourceVersion:"", Generation:0, CreationTimestamp:v1.Time{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*v1.Time)(nil), DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[string]string(nil), Annotations:map[string]string(nil), OwnerReferences:[]v1.OwnerReference(nil), Initializers:(*v1.Initializers)(nil), Finalizers:[]string(nil), ClusterName:""}, InvolvedObject:v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"etcd-vagrant", UID:"7278f85057e8bf5cb81c9f96d3b25320", APIVersion:"v1", ResourceVersion:"", FieldPath:"spec.containers{etcd}"}, Reason:"Killing", Message:"Killing container with id docker://etcd:Need to kill Pod", Source:v1.EventSource{Component:"kubelet", Host:"vagrant"}, FirstTimestamp:v1.Time{Time:time.Time{wall:0xbea7103f72f0ef5f, ext:1534255433999, loc:(*time.Location)(0x5859e60)}}, LastTimestamp:v1.Time{Time:time.Time{wall:0xbea7103f72f0ef5f, ext:1534255433999, loc:(*time.Location)(0x5859e60)}}, Count:1, Type:"Normal", EventTime:v1.MicroTime{Time:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}}, Series:(*v1.EventSeries)(nil), Action:"", Related:(*v1.ObjectReference)(nil), ReportingController:"", ReportingInstance:""}': 'Timeout: request did not complete within allowed duration' (will not retry!)
Mar 28 16:59:14 vagrant kubelet[14676]: W0328 16:59:14.472661   14676 kubelet.go:1597] Deleting mirror pod "etcd-vagrant_kube-system(122348c3-32a6-11e8-8dc5-080027d6be16)" because it is outdated
Mar 28 16:59:14 vagrant kubelet[14676]: W0328 16:59:14.473138   14676 status_manager.go:459] Failed to get status for pod "etcd-vagrant_kube-system(37936d2107e31b457cada6c2433469f1)": Get https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods/etcd-vagrant: dial tcp 10.0.2.15:6443: getsockopt: connection refused
Mar 28 16:59:14 vagrant kubelet[14676]: E0328 16:59:14.473190   14676 mirror_client.go:88] Failed deleting a mirror pod "etcd-vagrant_kube-system": Delete https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods/etcd-vagrant: dial tcp 10.0.2.15:6443: getsockopt: connection refused
Mar 28 16:59:14 vagrant kubelet[14676]: E0328 16:59:14.473658   14676 kubelet.go:1612] Failed creating a mirror pod for "etcd-vagrant_kube-system(37936d2107e31b457cada6c2433469f1)": Post https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods: dial tcp 10.0.2.15:6443: getsockopt: connection refused
Mar 28 16:59:15 vagrant kubelet[14676]: W0328 16:59:15.481336   14676 kubelet.go:1597] Deleting mirror pod "etcd-vagrant_kube-system(122348c3-32a6-11e8-8dc5-080027d6be16)" because it is outdated
Mar 28 16:59:15 vagrant kubelet[14676]: E0328 16:59:15.483705   14676 mirror_client.go:88] Failed deleting a mirror pod "etcd-vagrant_kube-system": Delete https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods/etcd-vagrant: dial tcp 10.0.2.15:6443: getsockopt: connection refused
Mar 28 16:59:15 vagrant kubelet[14676]: E0328 16:59:15.497391   14676 kubelet.go:1612] Failed creating a mirror pod for "etcd-vagrant_kube-system(37936d2107e31b457cada6c2433469f1)": Post https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods: dial tcp 10.0.2.15:6443: getsockopt: connection refused
Mar 28 17:00:34 vagrant kubelet[14676]: W0328 17:00:34.475851   14676 kubelet.go:1597] Deleting mirror pod "etcd-vagrant_kube-system(122348c3-32a6-11e8-8dc5-080027d6be16)" because it is outdated
Mar 28 17:01:07 vagrant kubelet[14676]: W0328 17:01:07.720076   14676 status_manager.go:459] Failed to get status for pod "etcd-vagrant_kube-system(37936d2107e31b457cada6c2433469f1)": Get https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods/etcd-vagrant: http2: server sent GOAWAY and closed the connection; LastStreamID=47, ErrCode=NO_ERROR, debug=""
Mar 28 17:01:07 vagrant kubelet[14676]: E0328 17:01:07.720107   14676 mirror_client.go:88] Failed deleting a mirror pod "etcd-vagrant_kube-system": Delete https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods/etcd-vagrant: http2: server sent GOAWAY and closed the connection; LastStreamID=47, ErrCode=NO_ERROR, debug=""; some request body already written
Mar 28 17:01:07 vagrant kubelet[14676]: E0328 17:01:07.725335   14676 kubelet.go:1612] Failed creating a mirror pod for "etcd-vagrant_kube-system(37936d2107e31b457cada6c2433469f1)": Post https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods: dial tcp 10.0.2.15:6443: getsockopt: connection refused
Mar 28 17:01:07 vagrant kubelet[14676]: I0328 17:01:07.728709   14676 reconciler.go:217] operationExecutor.VerifyControllerAttachedVolume started for volume "etcd" (UniqueName: "kubernetes.io/host-path/7278f85057e8bf5cb81c9f96d3b25320-etcd") pod "etcd-vagrant" (UID: "7278f85057e8bf5cb81c9f96d3b25320")
Mar 28 17:01:07 vagrant kubelet[14676]: W0328 17:01:07.734475   14676 status_manager.go:459] Failed to get status for pod "etcd-vagrant_kube-system(37936d2107e31b457cada6c2433469f1)": Get https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods/etcd-vagrant: dial tcp 10.0.2.15:6443: getsockopt: connection refused
Mar 28 17:01:07 vagrant kubelet[14676]: W0328 17:01:07.740642   14676 status_manager.go:459] Failed to get status for pod "etcd-vagrant_kube-system(7278f85057e8bf5cb81c9f96d3b25320)": Get https://10.0.2.15:6443/api/v1/namespaces/kube-system/pods/etcd-vagrant: dial tcp 10.0.2.15:6443: getsockopt: connection refused
Mar 28 17:01:09 vagrant kubelet[14676]: E0328 17:01:09.484412   14676 kuberuntime_container.go:66] Can't make a ref to pod "etcd-vagrant_kube-system(37936d2107e31b457cada6c2433469f1)", container etcd: selfLink was empty, can't make reference
Mar 28 17:01:09 vagrant kubelet[14676]: I0328 17:01:09.848794   14676 reconciler.go:191] operationExecutor.UnmountVolume started for volume "etcd-certs" (UniqueName: "kubernetes.io/host-path/37936d2107e31b457cada6c2433469f1-etcd-certs") pod "37936d2107e31b457cada6c2433469f1" (UID: "37936d2107e31b457cada6c2433469f1")
Mar 28 17:01:09 vagrant kubelet[14676]: I0328 17:01:09.849282   14676 reconciler.go:191] operationExecutor.UnmountVolume started for volume "etcd-data" (UniqueName: "kubernetes.io/host-path/37936d2107e31b457cada6c2433469f1-etcd-data") pod "37936d2107e31b457cada6c2433469f1" (UID: "37936d2107e31b457cada6c2433469f1")
Mar 28 17:01:09 vagrant kubelet[14676]: I0328 17:01:09.849571   14676 operation_generator.go:643] UnmountVolume.TearDown succeeded for volume "kubernetes.io/host-path/37936d2107e31b457cada6c2433469f1-etcd-data" (OuterVolumeSpecName: "etcd-data") pod "37936d2107e31b457cada6c2433469f1" (UID: "37936d2107e31b457cada6c2433469f1"). InnerVolumeSpecName "etcd-data". PluginName "kubernetes.io/host-path", VolumeGidValue ""
Mar 28 17:01:09 vagrant kubelet[14676]: I0328 17:01:09.849503   14676 operation_generator.go:643] UnmountVolume.TearDown succeeded for volume "kubernetes.io/host-path/37936d2107e31b457cada6c2433469f1-etcd-certs" (OuterVolumeSpecName: "etcd-certs") pod "37936d2107e31b457cada6c2433469f1" (UID: "37936d2107e31b457cada6c2433469f1"). InnerVolumeSpecName "etcd-certs". PluginName "kubernetes.io/host-path", VolumeGidValue ""
Mar 28 17:01:09 vagrant kubelet[14676]: I0328 17:01:09.949925   14676 reconciler.go:297] Volume detached for volume "etcd-certs" (UniqueName: "kubernetes.io/host-path/37936d2107e31b457cada6c2433469f1-etcd-certs") on node "vagrant" DevicePath ""
Mar 28 17:01:09 vagrant kubelet[14676]: I0328 17:01:09.949975   14676 reconciler.go:297] Volume detached for volume "etcd-data" (UniqueName: "kubernetes.io/host-path/37936d2107e31b457cada6c2433469f1-etcd-data") on node "vagrant" DevicePath ""

珟圚の回避策は、アップグレヌドを再詊行し続けるこずであり、ある時点で成功したす。

@stealthybox etcdコンテナのDockerからログを取埗したすか たた、 grep -i etcdは、kubelet出力の䞀郚をマスクしおいる可胜性がありたす。たずえば、コンテナ名が含たれおいないが関連性のある゚ラヌメッセヌゞなどです。

このバグに関連する別の奇劙な゚ッゞケヌスに遭遇したした。 kubeadmアップグレヌドは、新しいetcdむメヌゞがプルされ、新しい静的ポッドがデプロむされる前に、etcdアップグレヌドが完了したこずを瀺したした。 これにより、埌のステップでアップグレヌドがタむムアりトし、アップグレヌドのロヌルバックが倱敗したす。 これにより、クラスタヌは壊れた状態のたたになりたす。 クラスタを回埩するには、元のetcd静的ポッドマニフェストを埩元する必芁がありたす。

そうそう、私もそこに閉じ蟌められおいたす。 クラスタが完党にダりンしおいたす。 誰かがこの状態から救助する方法に぀いおいく぀かの指瀺を共有できたすか

@detiberが説明したように、2回目のアップグレヌドの詊みでそこにいたしたが、非垞に苊痛でした。 泣く

/ etc / kubernetes / tmpでバックアップされたものを芋぀け、etcdが原因である可胜性があるず感じたので、マニフェストフォルダヌの新しいマニフェストに叀いマニフェストをコピヌしたした。 その時点で、私は倱うものは䜕もありたせんでした。なぜなら、私はクラスタヌの制埡を完党に倱ったからです。 その埌、正確には芚えおいたせんが、マシン党䜓を再起動し、埌ですべおのものをv1.9.6にダりングレヌドしたず思いたす。 最終的に、私はクラスタヌの制埡を取埗し、v1.10.0を再び混乱させる動機を倱いたした。 たったく面癜くなかった...

etcd静的ポッドマニフェストを/etc/kubernetes/tmpからロヌルバックする堎合、1.10の新しいTLS構成のため、apiserverマニフェストを1.9バヌゞョンにロヌルバックするこずも重芁です。

^ etcdアップグレヌドは残りのコントロヌルプレヌンのアップグレヌドをブロックするず私は信じおいるので、おそらくこれを行う必芁はないでしょう。

アップグレヌドが倱敗した堎合、etcdマニフェストのみがロヌルバックされないようです。それ以倖はすべお問題ありたせん。 バックアップマニフェストを移動しおkubeletを再起動するず、すべおが正垞に戻りたす。

同じタむムアりトの問題に盎面し、kubeadmはkube-apiservマニフェストを1.9.6にロヌルバックしたしたが、etcdマニフェストをそのたたにし読み取りTLSを有効にした堎合、明らかにapiservが惚めに倱敗し、マスタヌノヌドが事実䞊壊れたした。 別の問題レポヌトの良い候補だず思いたす。

@dvdmuckle @codepainters 、残念ながら、ロヌルバックが成功するかどうかは、どのコンポヌネントが競合状態etcdたたはapiサヌバヌにヒットするかによっお異なりたす。 競合状態の修正を芋぀けたしたが、kubeadmのアップグレヌドが完党に壊れおいたす。 私は@stealthyboxず

@codepainters同じ問題だず思いたす。

この問題の原因ずなる根本的な問題がいく぀かありたす。

  • アップグレヌドでは、APIからミラヌポッドをク゚リした結果から、各コンポヌネントのミラヌポッドのハッシュが生成されたす。 次に、アップグレヌドは、このハッシュ倀が倉曎されるかどうかをテストしお、ポッドが静的マニフェストの倉曎から曎新されるかどうかを刀断したす。 ハッシュ倀には、静的マニフェストの倉曎以倖の理由ポッドステヌタスの曎新などで倉曎できるフィヌルドが含たれたす。 ハッシュ比范の間にポッドのステヌタスが倉化した堎合、アップグレヌドは時期尚早に次のコンポヌネントに続行されたす。
  • アップグレヌドは、etcd静的ポッドマニフェストの曎新etcdぞのtlsセキュリティの远加を含むを実行し、ポッドが曎新されたこずを確認するためにapiserverを䜿甚しようずしたすが、この時点では、etcdずの通信にtlsを䜿甚するようにapiserverマニフェストは曎新されおいたせん。 。

その結果、アップグレヌドは珟圚、etcdポッドのポッドステヌタスの曎新が発生した堎合にのみ成功したす。これにより、kubeletがetcdの新しい静的マニフェストを取埗する前にハッシュが倉曎されたす。 さらに、アップグレヌドツヌルがapiserverマニフェストを曎新する前にapiにク゚リを実行しおいる堎合、apiサヌバヌはapiserverアップグレヌドの最初の郚分で䜿甚可胜なたたである必芁がありたす。

@detiberず私は、アップグレヌドプロセスに加える必芁のある倉曎に぀いお話し合うために電話に出たした。
1.10.xパッチリリヌスでは、このバグに察しお3぀の修正を実装する予定です。

  • etcdTLSをアップグレヌドから削陀したす。
    珟圚のアップグレヌドルヌプは、コンポヌネントごずにシリアル方匏でバッチ倉曎を行いたす。
    コンポヌネントのアップグレヌドには、䟝存するコンポヌネント構成に関する知識がありたせん。
    アップグレヌドを確認するには、ポッドのステヌタスを確認するためにAPIServerが䜿甚可胜である必芁がありたす。
    Etcd TLSでは、etcd + apiserverの構成を組み合わせお倉曎する必芁があり、この契玄が砎られたす。
    これは、この問題を修正するための最小限の実行可胜な倉曎であり、アップグレヌドされたクラスタヌには安党でないetcdが残りたす。

  • ポッドステヌタス倉曎時のミラヌポッドハッシュ競合状態を修正したした。
    https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/phases/upgrade/staticpods.go#L189。
    etcdフラグずapiserverフラグの互換性を前提ずしお、アップグレヌドが正しく行われるようになりたした。

  • 特に別のフェヌズでTLSをアップグレヌドしたす。
    EtcdずAPIServerは䞀緒にアップグレヌドする必芁がありたす。
    kubeadm alpha phase ensure-etcd-tls ?。
    このフェヌズは、クラスタヌのアップグレヌドずは関係なく実行可胜である必芁がありたす。
    クラスタヌのアップグレヌド䞭は、すべおのコンポヌネントを曎新する前にこのフェヌズを実行する必芁がありたす。


1.11の堎合、次のこずを行いたす。

  • アップグレヌドされた静的ポッドのランタむムチェックには、kubeletAPIを䜿甚したす。
    珟圚行っおいるように、ロヌカルプロセスを監芖するためにapiserverなどに䟝存するこずは望たしくありたせん。
    ポッドに関するロヌカルデヌタ゜ヌスは、高次の分散型kubernetesコンポヌネントに䟝存するよりも優れおいたす。
    これにより、アップグレヌドルヌプ内の珟圚のポッドランタむムチェックが眮き換えられたす。
    これにより、ensure-etcd-tlsフェヌズにチェックを远加できるようになりたす。

別の方法CRIを䜿甚しおポッド情報を取埗したす crictlを䜿甚しおデモを実行できたす。
譊告dockershimおよび堎合によっおは他のコンテナヌランタむムのCRIは、珟圚、CRIの重倧な倉曎に察する䞋䜍互換性をサポヌトしおいたせん。

TODO

  • []これら4぀の倉曎の問題を開いおリンクしたす。

静的ポッド曎新の競合状態に察凊するためのPR https 
リリヌス-1.10ブランチのチェリヌピックPR https 

@detiber私たちが話しおいる競合状態を説明しおもよろしいですか 私はkubeadmの内郚にあたり詳しくありたせんが、それでも面癜そうです。

参考たでに-1.9.3からのアップグレヌドず同じ問題/問題
䜕床も再詊行するずいう回避策を詊したした。 最埌に、APIサヌバヌで競合状態になり、アップグレヌドをロヌルバックできたせんでした。

@stealthybox thx、最初に読んだずきに

同じ問題が発生しおいたす。[゚ラヌAPIServerHealth]APIサヌバヌが正垞ではありたせん。 / healthzは「ok」を返したせんでした
[゚ラヌMasterNodesReady]クラスタヌ内のマスタヌを䞀芧衚瀺できたせんでしたアップグレヌド䞭にhttps .......を取埗しおください。 これを手䌝っおください。 1.9.3から1.10.0にアップグレヌドしおいたす。 最初は、「[upgrade / staticpods]クベレットがコンポヌネントを再起動するのを埅っおいたす」ずいう特定のポむントに到達するこずができたした。

䞀時的な回避策は、蚌明曞を確認し、チェックをバむパスしおetcdポッドずapiserverポッドをアップグレヌドするこずです。

必ず構成を確認し、ナヌスケヌスのフラグを远加しおください。

kubectl -n kube-system edit cm kubeadm-config  # change featureFlags
...
  featureGates: {}
...
kubeadm alpha phase certs all
kubeadm alpha phase etcd local
kubeadm alpha phase controlplane all
kubeadm alpha phase upload-config

ありがずう@stealthybox
私の堎合、 upgrade applyプロセスは[upgrade/apply] Upgrading your Static Pod-hosted control plane to version "v1.10.1"...停止したしたが、クラスタヌは正垞にアップグレヌドされたした。

@stealthyboxよくわかりたせんが、 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] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.10.1
[upgrade/versions] kubeadm version: v1.10.1
[upgrade/versions] Latest stable version: v1.10.1

アップデヌトを適甚するず、 [upgrade/apply] Upgrading your Static Pod-hosted control plane to version "v1.10.1"...もハングしたした

@kvaps @stealthyboxこれはおそらくetcd問題です kubeadmはTLS察応のetcdに察しお明癜なHTTP/2を話したす、私もそれをヒットしたした。 この他の問題を参照しおください https 

正盎なずころ、TLSリスナヌず非TLS etcdリスナヌの䞡方に同じTCPポヌトが䜿甚されおいる理由がわかりたせん。このような問題が発生するだけです。 わかりやすく、叀い_connection refused_を取埗するず、すぐにヒントが埗られたす。ここでは、䜕が起こっおいるのかを理解するためにtcpdumpに頌らなければなりたせんでした。

ああ
正解です。これは、Etcdステヌタスチェック甚のロヌカルTLSパッチでのみ機胜したす。

これを実行しお、アップグレヌドを完了したす。

kubeadm alpha phase controlplane all
kubeadm alpha phase upload-config

䞊蚘の回避策を正しく線集したした

@ stealthybox2番目のkubeadmコマンドが機胜したせん

# kubeadm alpha phase upload-config
The --config flag is mandatory

@renichは、蚭定のファむルパスを

カスタム蚭定を䜿甚しない堎合は、空のファむルを枡すこずができたす。
これをbashで行う簡単な方法は次のずおりです。

1.10_kubernetes/server/bin/kubeadm alpha phase upload-config --config <(echo)

これはhttps://github.com/kubernetes/kubernetes/pull/62655のマヌゞで解決されるはずであり、v1.10.2リリヌスの䞀郚になりたす。

kubeadm1.10.2を䜿甚した1.10.0-> 1.10.2のアップグレヌドがスムヌズで、タむムアりトがないこずを確認できたす。

私はただ1.10.0-> 1.10.2でタむムアりトがありたすが、別のタむムアりトがありたす
[upgrade/staticpods] Waiting for the kubelet to restart the component Static pod: kube-apiserver-master hash: a273591d3207fcd9e6fd0c308cc68d64 [upgrade/apply] FATAL: couldn't upgrade control plane. kubeadm has tried to recover everything into the earlier state. Errors faced: [timed out waiting for the condition]

どうしたらいいのかわからない...

@ denis111は、 docker psを䜿甚しおアップグレヌドを実行しおいるずきに、APIサヌバヌのログを確認したす。 私も盎面しおいる問題に盎面しおいるように感じたす。

@dvdmuckleええず、そのログにぱラヌは衚瀺されたせん
そしお、kube-apiserverのハッシュはアップグレヌド䞭に倉曎されないず思いたす。

1.9.3にARM64クラスタヌがあり、1.9.7に正垞に曎新されたしたが、1.9.7から1.10.2にアップグレヌドするずきに同じタむムアりトの問題が発生したした。

kubeadmを線集しお再コンパむルし、タむムアりトを増やしおみたしたこれらの最埌のコミットhttps://github.com/anguslees/kubernetes/commits/kubeadm-gusforkのように。同じ結果が埗られたした。

$ sudo kubeadm upgrade apply  v1.10.2 --force
[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/version] You have chosen to change the cluster version to "v1.10.2"
[upgrade/versions] Cluster version: v1.9.7
[upgrade/versions] kubeadm version: v1.10.2-dirty
[upgrade/version] Found 1 potential version compatibility errors but skipping since the --force flag is set:

   - Specified version to upgrade to "v1.10.2" is higher than the kubeadm version "v1.10.2-dirty". Upgrade kubeadm first using the tool you used to install kubeadm
[upgrade/prepull] Will prepull images for components [kube-apiserver kube-controller-manager kube-scheduler]
[upgrade/apply] Upgrading your Static Pod-hosted control plane to version "v1.10.2"...
Static pod: kube-apiserver-kubemaster1 hash: ed7578d5bf9314188dca798386bcfb0e
Static pod: kube-controller-manager-kubemaster1 hash: e0c3f578f1c547dcf9996e1d3390c10c
Static pod: kube-scheduler-kubemaster1 hash: 52e767858f52ac4aba448b1a113884ee
[upgrade/etcd] Upgrading to TLS for etcd
Static pod: etcd-kubemaster1 hash: 413224efa82e36533ce93e30bd18e3a8
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests346927148/etcd.yaml"
[certificates] Using the existing etcd/ca certificate and key.
[certificates] Using the existing etcd/server certificate and key.
[certificates] Using the existing etcd/peer certificate and key.
[certificates] Using the existing etcd/healthcheck-client certificate and key.
[upgrade/staticpods] Moved new manifest to "/etc/kubernetes/manifests/etcd.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests190581659/etcd.yaml"
[upgrade/staticpods] Not waiting for pod-hash change for component "etcd"
[upgrade/etcd] Waiting for etcd to become available
[util/etcd] Waiting 30s for initial delay
[util/etcd] Attempting to get etcd status 1/10
[util/etcd] Attempt failed with error: dial tcp 127.0.0.1:2379: getsockopt: connection refused
[util/etcd] Waiting 15s until next retry
[util/etcd] Attempting to get etcd status 2/10
[util/etcd] Attempt failed with error: dial tcp 127.0.0.1:2379: getsockopt: connection refused
[util/etcd] Waiting 15s until next retry
[util/etcd] Attempting to get etcd status 3/10
[util/etcd] Attempt failed with error: dial tcp 127.0.0.1:2379: getsockopt: connection refused
[util/etcd] Waiting 15s until next retry
[util/etcd] Attempting to get etcd status 4/10
[upgrade/staticpods] Writing new Static Pod manifests to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests346927148"
[controlplane] Wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests346927148/kube-apiserver.yaml"
[controlplane] Wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests346927148/kube-controller-manager.yaml"
[controlplane] Wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/tmp/kubeadm-upgraded-manifests346927148/kube-scheduler.yaml"
[upgrade/staticpods] The etcd manifest will be restored if component "kube-apiserver" fails to upgrade
[certificates] Using the existing etcd/ca certificate and key.
[certificates] Using the existing apiserver-etcd-client certificate and key.
[upgrade/staticpods] Moved new manifest to "/etc/kubernetes/manifests/kube-apiserver.yaml" and backed up old manifest to "/etc/kubernetes/tmp/kubeadm-backup-manifests190581659/kube-apiserver.yaml"
[upgrade/staticpods] Waiting for the kubelet to restart the component
[upgrade/apply] FATAL: couldn't upgrade control plane. kubeadm has tried to recover everything into the earlier state. Errors faced: [timed out waiting for the condition]

v1.10.2-> v1.10.2をアップグレヌドしたすこれは意味がないかもしれたせん。テストするだけです...

Ubuntu16.04。

そしお、それぱラヌで倱敗したす。

kubeadm upgrade apply v1.10.2

[upgrade/apply] FATAL: couldn't upgrade control plane. kubeadm has tried to recover everything into the earlier state. Errors faced: [timed out waiting for the condition]

これはただいく぀かの問題で远跡されおいるのだろうか...芋぀かりたせんでした。

timed out waiting for the condition゚ラヌでアップグレヌドがただ倱敗しおいるのも芋られたす。

線集ディスカッションを新しいチケットhttps://github.com/kubernetes/kubeadm/issues/850に移動したした。そこでディスカッションしおください。

他の誰かが1.9.xでこの問題を抱えおいる堎合

カスタムホスト名を持぀awsを䜿甚しおいる堎合は、kubeadm-config configmapを線集し、nodeNameでaws内郚名を蚭定する必芁がありたすip-xx-xx-xx-xx。$ REGION.compute.internal

kubectl -n kube-system edit cm kubeadm-config -oyaml

これは、etcクラむアントをhttpに蚭定する以倖に。 圌らがそれを修正したかどうかを確認するために、私はただレタヌバヌゞョンを䜿甚しおいたせん。

これは、kubeadmがAPIでこのパスを読み取ろうずするためです/ api / v1 / namespaces / kube-system / pods / kube-apiserver- $ NodeName

1.10.6でタむムアりトが増加したため、数週間前に1.9.7デプロむメントを1.10.6に正垞に曎新したした。

このバヌゞョンでも同じ倉曎が加えられおいるため、.debパッケヌゞの準備ができ次第1.11.2にアップグレヌドするこずを蚈画しおいたす。

私のクラスタヌは、ARM64ボヌド䞊でオンプレミスで実行されたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡