2017-09-08 3 views
0

私は、azureのコンテナエンジンを使用してkubernetesクラスタを実行しています。私はkubernetesサービスの1つ、リソース監視を行うサービスに問題がありますheapster。ポッドは、毎分、またはそのような何かを再起動します。私は、ヒープスターの展開、レプリカセット、ポッドの削除を試み、展開を再現しました。それは即座に同じ振る舞いに戻ります。 2つのレプリカセットがあるいくつかの理由についてKubernetes監視サービスヒープスターが再開し続ける

$ kubectl get deploy,rs,po -l k8s-app=heapster --namespace=kube-system 
NAME    DESIRED CURRENT UP-TO-DATE AVAILABLE AGE 
deploy/heapster 1   1   1   1   17h 

NAME      DESIRED CURRENT READY  AGE 
rs/heapster-2708163903 1   1   1   17h 
rs/heapster-867061013 0   0   0   17h 

NAME       READY  STATUS RESTARTS AGE 
po/heapster-2708163903-vvs1d 2/2  Running 0   0s 

:私はheapsterラベルでリソースを見てみると

は、それは奇妙な少し見えます。 rs/heapster-867061013という名前のリソースは、すべてのリソースを削除して再デプロイしても、再表示され続けます。上記はまた、ポッドが始まったばかりであることを示しています。これが作成され続けてから数秒間実行され、新しいものが作成されます。私はkubernetesを実行するのが初めてであるので、どのログファイルがこの問題に関連しているかわかりません。 heapsterコンテナから

ログheapster-乳母コンテナから

heapster.go:72] /heapster source=kubernetes.summary_api:"" 
heapster.go:73] Heapster version v1.3.0 
configs.go:61] Using Kubernetes client with master "https://10.0.0.1:443" and version v1 
configs.go:62] Using kubelet port 10255 
heapster.go:196] Starting with Metric Sink 
heapster.go:106] Starting heapster on port 8082 

ログ

pod_nanny.go:56] Invoked by [/pod_nanny --cpu=80m --extra-cpu=0.5m --memory=140Mi --extra-memory=4Mi --threshold=5 --deployment=heapster --container=heapster --poll-period=300000 --estimator=exponential] 
pod_nanny.go:68] Watching namespace: kube-system, pod: heapster-2708163903-mqlsq, container: heapster. 
pod_nanny.go:69] cpu: 80m, extra_cpu: 0.5m, memory: 140Mi, extra_memory: 4Mi, storage: MISSING, extra_storage: 0Gi 
pod_nanny.go:110] Resources: [{Base:{i:{value:80 scale:-3} d:{Dec:<nil>} s:80m Format:DecimalSI} ExtraPerNode:{i:{value:5 scale:-4} d:{Dec:<nil>} s: Format:DecimalSI} Name:cpu} {Base:{i:{value:146800640 scale:0} d:{Dec:<nil>} s:140Mi Format:BinarySI} ExtraPerNode:{i:{value:4194304 scale:0} d:{Dec:<nil>} s:4Mi Format:BinarySI} Name:memory}] 
+0

ヒープポッドのログには何が表示されますか?何らかのエラーのために終了しますか?また、そのポッドにはどの[restartPolicy](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy)が設定されていますか? – fishi

+0

@fishi質問にログを追加しました –

+0

ポッドには常にrestartPolicyがありました。 –

答えて

0

OKなので、Azureコンテナサービスのデフォルトのkubernetes設定では問題になることがあります。私は青空のサポーターから助けを得ました。

この問題は、addonmanager.kubernetes.io/mode: EnsureExistsというラベルをヒープスターの配置に追加することで修正されています。サポーターが参照したプルリクエストは次のとおりです。https://github.com/Azure/acs-engine/pull/1133

1

展開コントローラが行うために、古いさらにreplicaSetリソースを保持することを完全に正常かつ重要です迅速なロールバック。

Deploymentリソースは、ReplicaSetリソースを管理します。ヒープスターデプロイメントは1ポッドを実行するように設定されています。つまり、常に1ポッドで1つのレプリカセットを作成しようとします。 Deployment(たとえば、新しいヒープスターのバージョン)を更新する場合、Deploymentリソースは新しいバージョンでポッドをスケジュールする新しいReplicaSetを作成します。同時に、古いReplicaSetリソースは目的のポッドを0に設定しますが、リソース自体は簡単なロールバックのために保持されます。ご覧のとおり、古いレプリカセットrs/heapster-867061013には0個のポッドが実行されています。ロールバックを行う場合は、deploy/heapsterrs/heapster-867061013のポッド数を1に増やし、rs/heapster-2708163903の数字を0に戻します。さらに、デプロイメントコントローラについてdocumentationをチェックアウトする必要があります)。

まだ新しく作成されたDeployment Controllerがすぐに2つのReplicaSetsを作成するのは私にとっては奇妙に思えます。デプロイメントコントローラを削除した後、新しいコントローラを作成する前に、数秒(たとえば、20秒)待っていましたか?私にとっては、削除がクラスタ全体に伝播するまでに時間がかかることがあります。また、あまりにも早く再作成すると、同じリソースが再利用されます。

あなたが言及したヒープポッドレクリエーションについて:ポッドはrestartPolicyです。 Neverに設定した場合、終了する場合に備えてReplicaSetによってポッドが再作成されます(これは、新しいポッドリソースが作成され、古いポッドリソースが削除されていることを意味します)。私の推測では、あなたのヒープポッドにはこのNeverのポリシーが設定されています。何らかのエラーが原因で終了し、Failed状態になります(ログを確認する必要があります)。しばらくすると、ReplicaSetが新しいポッドを作成します。

関連する問題