2016-07-22 4 views
0

지침 here에 따라 CoreOS를 사용하여 AWS에서 실행되는 작은 테스트 Kubernetes 클러스터가 있습니다. 현재 이것은 마스터 노드와 작업자 노드로만 구성됩니다. 지난 몇 주 동안 우리는 작업자 인스턴스가 때때로 실패한다는 것을 알게 된이 클러스터를 실행했습니다. 이 문제가 처음 발생했을 때 인스턴스는 자동 스케일링 그룹에 의해 강제 종료되고 다시 시작되었습니다. 오늘날에도 똑같은 일이 발생했지만 인스턴스가 종료되고 일부 정보를 검색하기 전에 인스턴스에 로그인 할 수 있었지만 남아 있습니다 이 문제를 일으킨 것이 무엇인지 정확하게 모릅니다.Kubernetes 노드가 실패합니다 (CoreOS/AWS/Kubernetes 스택)

노드 장애는 비정상적으로 발생하는 것으로 보이며, 비정상적인 상황이 발생하여 외부 부하 등이 발생한다는 증거는 없습니다.

인스턴스가 아직 실행 중이지만 kubelet 및 docker 서비스가 비활성 상태 (start failed with result 'dependency') 인 경우 실패 (kubernetes 노드 상태 준비 안 됨)입니다. flanneld 서비스가 실행 중이지만 시간이 지나면 다시 시작하여 노드 장애가 발생했습니다.

노드 장애가 발생한 시점의 로그는 장애 원인을 명확히 가리키는 것으로 보이지 않습니다.

`Jul 22 07:25:33 ip-10-0-0-92.ec2.internal kubelet-wrapper[1204]: E0722 07:25:33.121506 1204 kubelet.go:2745] Error updating node status, will retry: nodes "ip-10-0-0-92.ec2.internal" cannot be updated: the object has been modified; please apply your changes to the latest version and try again` 

`Jul 22 07:25:34 ip-10-0-0-92.ec2.internal kubelet-wrapper[1204]: E0722 07:25:34.557047 1204 event.go:193] Server rejected event '&api.Event{TypeMeta:unversioned.TypeMeta{Kind:"", APIVersion:""}, ObjectMeta:api.ObjectMeta{Name:"ip-10-0-0-92.ec2.internal.1462693ef85b56d8", GenerateName:"", Namespace:"default", SelfLink:"", UID:"", ResourceVersion:"4687622", Generation:0, CreationTimestamp:unversioned.Time{Time:time.Time{sec:0, nsec:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*unversioned.Time)(nil), DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[string]string(nil), Annotations:map[string]string(nil)}, InvolvedObject:api.ObjectReference{Kind:"Node", Namespace:"", Name:"ip-10-0-0-92.ec2.internal", UID:"ip-10-0-0-92.ec2.internal", APIVersion:"", ResourceVersion:"", FieldPath:""}, Reason:"NodeHasSufficientDisk", Message:"Node ip-10-0-0-92.ec2.internal status is now: NodeHasSufficientDisk", Source:api.EventSource{Component:"kubelet", Host:"ip-10-0-0-92.ec2.internal"}, FirstTimestamp:unversioned.Time{Time:time.Time{sec:63604448947, nsec:0, loc:(*time.Location)(0x3b1a5c0)}}, LastTimestamp:unversioned.Time{Time:time.Time{sec:63604769134, nsec:388015022, loc:(*time.Location)(0x3b1a5c0)}}, Count:2, Type:"Normal"}': 'events "ip-10-0-0-92.ec2.internal.1462693ef85b56d8" not found' (will not retry!) 
Jul 22 07:25:34 ip-10-0-0-92.ec2.internal kubelet-wrapper[1204]: E0722 07:25:34.560636 1204 event.go:193] Server rejected event '&api.Event{TypeMeta:unversioned.TypeMeta{Kind:"", APIVersion:""}, ObjectMeta:api.ObjectMeta{Name:"ip-10-0-0-92.ec2.internal.14626941554cc358", GenerateName:"", Namespace:"default", SelfLink:"", UID:"", ResourceVersion:"4687645", Generation:0, CreationTimestamp:unversioned.Time{Time:time.Time{sec:0, nsec:0, loc:(*time.Location)(nil)}}, DeletionTimestamp:(*unversioned.Time)(nil), DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[string]string(nil), Annotations:map[string]string(nil)}, InvolvedObject:api.ObjectReference{Kind:"Node", Namespace:"", Name:"ip-10-0-0-92.ec2.internal", UID:"ip-10-0-0-92.ec2.internal", APIVersion:"", ResourceVersion:"", FieldPath:""}, Reason:"NodeReady", Message:"Node ip-10-0-0-92.ec2.internal status is now: NodeReady", Source:api.EventSource{Component:"kubelet", Host:"ip-10-0-0-92.ec2.internal"}, FirstTimestamp:unversioned.Time{Time:time.Time{sec:63604448957, nsec:0, loc:(*time.Location)(0x3b1a5c0)}}, LastTimestamp:unversioned.Time{Time:time.Time{sec:63604769134, nsec:388022975, loc:(*time.Location)(0x3b1a5c0)}}, Count:2, Type:"Normal"}': 'events "ip-10-0-0-92.ec2.internal.14626941554cc358" not found' (will not retry!)` 

일부 etcd 오류가 생겼는지 다음 : 오류가 보였다 대해 당시 kubelet - 래퍼 오류가 몇있다 이러한 오류는 아마도 노드에 관련되어 있지만

`Jul 22 07:27:04 ip-10-0-0-92.ec2.internal rkt[1214]: 2016-07-22 07:27:04,721 [WARNING][1305/140149086452400] calico.etcddriver.driver 810: etcd watch returned bad HTTP status topoll on index 5237916: 400 
Jul 22 07:27:04 ip-10-0-0-92.ec2.internal rkt[1214]: 2016-07-22 07:27:04,721 [ERROR][1305/140149086452400] calico.etcddriver.driver 852: Error from etcd for index 5237916: {u'errorCode': 401, u'index': 5239005, u'message': u'The event in requested index is outdated and cleared', u'cause': u'the requested history has been cleared [5238006/5237916]'}; triggering a resync. 
Jul 22 07:27:04 ip-10-0-0-92.ec2.internal rkt[1214]: 2016-07-22 07:27:04,721 [INFO][1305/140149086452400] calico.etcddriver.driver 916: STAT: Final watcher etcd response time: 0 in 630.6s (0.000/s) min=0.000ms mean=0.000ms max=0.000ms 
Jul 22 07:27:04 ip-10-0-0-92.ec2.internal rkt[1214]: 2016-07-22 07:27:04,721 [INFO][1305/140149086452400] calico.etcddriver.driver 916: STAT: Final watcher processing time: 7 in 630.6s (0.011/s) min=90066.312ms mean=90078.569ms max=90092.505ms 
Jul 22 07:27:04 ip-10-0-0-92.ec2.internal rkt[1214]: 2016-07-22 07:27:04,721 [INFO][1305/140149086452400] calico.etcddriver.driver 919: Watcher thread finished. Signalled to resync thread. Was at index 5237916. Queue length is 1. 
Jul 22 07:27:04 ip-10-0-0-92.ec2.internal rkt[1214]: 2016-07-22 07:27:04,743 [WARNING][1305/140149192694448] calico.etcddriver.driver 291: Watcher died; resyncing.` 

and a few minutes later a large number of failed connections to the master (10.0.0.50): 

`Jul 22 07:36:41 ip-10-0-0-92.ec2.internal rkt[1214]: 2016-07-22 07:36:37,641 [WARNING][1305/140149086452400] urllib3.connectionpool 647: Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f7700b85b90>: Failed to establish a new connection: [Errno 113] Host is unreachable',)': http://10.0.0.50:2379/v2/keys/calico/v1?waitIndex=5239006&recursive=true&wait=true 
Jul 22 07:36:41 ip-10-0-0-92.ec2.internal rkt[1214]: 2016-07-22 07:36:37,641 [INFO][1305/140149086452400] urllib3.connectionpool 213: Starting new HTTP connection (2): 10.0.0.50` 

가/인스턴스 실패, 이것은 실제로 내게 많은 의미가 아니며, 근본적인 원인을 제안하는 것처럼 보이지 않습니다. 그러나 노드/인스턴스 실패의 가능한 원인을 제안하는 사람이 있으면 여기를 볼 수 있습니다 이것에 대한 정정에 대해) 크게 감사하겠습니다!

+0

어떤 크기의 인스턴스를 사용하고 있습니까? 너무 작은 인스턴스를 사용할 때 클러스터가 실제로 작을 때 안정적으로 유지되지 않는 것을 보았습니다 (즉, 작업자 1 명). –

답변

0

설명과 로그의 어떤 점이 나를 혼란스럽게합니다. 로그에 rkt가있는 도커 런타임을 사용한다고 말했습니다. 당신은 당신의 로그에 옥양목이있는 당신의 군집에서 플란넬을 사용한다고 말했습니다 ...

어쨌든, 당신이 제공하는 로그에서, 당신의 etcd가 내려간 것 같아서 ... kubelet와 옥양목은 업데이트 할 수 없습니다. 그들의 주 (state), 그리고 apiserver (apiserver)는 그들이 다운되었다고 간주 할 것이다. 여기에 충분한 정보가 없으므로 다음에이 파일을 볼 때 다음 번에 etcd의 로그를 백업해야한다고 제안 할 수 있습니다 ...

또 다른 제안은 kubenetes 클러스터와 calico 모두에 대해 동일한 etcd를 사용하지 않는 것이 좋습니다 ...