Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Translate tasks/run-application/force-delete-stateful-set-pod/ in Japanese #15835

Merged
merged 5 commits into from
Aug 14, 2019
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
---
title: StatefulSet Podの強制削除
content_template: templates/task
weight: 70
---

{{% capture overview %}}
このページでは、StatefulSetの一部であるPodを削除する方法と、削除する際に考慮すべき事項について説明します。
{{% /capture %}}

{{% capture prerequisites %}}

* これはかなり高度なタスクであり、StatefulSetに固有のいくつかの特性に反する可能性があります。
* 先に進む前に、以下に列挙されている考慮事項をよく理解してください。
{{% /capture %}}

{{% capture steps %}}

## StatefulSetに関する考慮事項

StatefulSetの通常の操作では、StatefulSet Podを強制的に削除する必要は**まったく**ありません。StatefulSetコントローラーは、StatefulSetのメンバーの作成、スケール、削除を行います。それは序数0からN-1までの指定された数のPodが生きていて準備ができていることを保証しようとします。StatefulSetは、クラスター内で実行されている特定のIDを持つ最大1つのPodがいつでも存在することを保証します。これは、StatefulSetによって提供される*最大1つの*セマンティクスと呼ばれます。

手動による強制削除は、StatefulSetに固有の最大1つのセマンティクスに違反する可能性があるため、慎重に行う必要があります。StatefulSetを使用して、安定したネットワークIDと安定した記憶域を必要とする分散型およびクラスター型アプリケーションを実行できます。これらのアプリケーションは、固定IDを持つ固定数のメンバーのアンサンブルに依存する構成を持つことがよくあります。同じIDを持つ複数のメンバーを持つことは悲惨なことになり、データの損失につながる可能性があります(例:クォーラムベースのシステムでのスプリットブレインシナリオ)。
nasa9084 marked this conversation as resolved.
Show resolved Hide resolved

## Podの削除

次のコマンドで正常なPod削除を実行できます:

```shell
kubectl delete pods <pod>
```

上記がグレースフルターミネーションにつながるためには、`pod.Spec.TerminationGracePeriodSeconds`に0を指定しては**いけません**。`pod.Spec.TerminationGracePeriodSeconds`を0秒に設定することは安全ではなく、StatefulSet Podには強くお勧めできません。グレースフル削除は安全で、kubeletがapiserverから名前を削除する前に[Podが適切にシャットダウンする](/docs/user-guide/pods/#termination-of-pods)ことを保証します。

Kubernetes(バージョン1.5以降)は、Nodeにアクセスできないという理由だけでPodを削除しません。到達不能なNodeで実行されているPodは、[タイムアウト](/docs/admin/node/#node-condition)の後に`Terminating`または`Unknown`状態になります。到達不能なNode上のPodをユーザーが適切に削除しようとすると、Podはこれらの状態に入ることもあります。そのような状態のPodをapiserverから削除することができる唯一の方法は以下の通りです:

* (ユーザーまたは[Node Controller](/docs/admin/node)によって)Nodeオブジェクトが削除されます。<br/>
* 応答していないNodeのkubeletが応答を開始し、Podを終了してapiserverからエントリーを削除します。<br/>
* ユーザーによりPodを強制削除します。

推奨されるベストプラクティスは、1番目または2番目のアプローチを使用することです。Nodeが死んでいることが確認された(例えば、ネットワークから恒久的に切断された、電源が切られたなど)場合、Nodeオブジェクトを削除します。Nodeがネットワークパーティションに苦しんでいる場合は、これを解決するか、解決するのを待ちます。パーティションが回復すると、kubeletはPodの削除を完了し、apiserverでその名前を解放します。

通常、PodがNode上で実行されなくなるか、管理者によってそのNodeが削除されると、システムは削除を完了します。あなたはPodを強制的に削除することでこれを無効にすることができます。

### 強制削除

強制削除はPodが終了したことをkubeletから確認するまで**待ちません**。強制削除がPodの削除に成功したかどうかに関係なく、apiserverから名前をすぐに解放します。これにより、StatefulSetコントローラーは、同じIDを持つ交換Podを作成できます。これは、まだ実行中のPodの複製につながる可能性があり、そのPodがまだStatefulSetの他のメンバーと通信できる場合、StatefulSetが保証するように設計されている最大1つのセマンティクスに違反します。

StatefulSetのPodを強制的に削除すると、問題のPodがStatefulSet内の他のPodと再び接触することはなく、代わりのPodを作成するためにその名前は安全に解放されると主張しています。
nasa9084 marked this conversation as resolved.
Show resolved Hide resolved

バージョン1.5以上のkubectlを使用してPodを強制的に削除する場合は、次の手順を実行します:

```shell
kubectl delete pods <pod> --grace-period=0 --force
```

バージョン1.4以下のkubectlを使用している場合、`--force`オプションを省略する必要があります:

```shell
kubectl delete pods <pod> --grace-period=0
```

これらのコマンドを実行した後でもPodが`Unknown`状態のままになっている場合は、次のコマンドを使用してPodをクラスターから削除します:

```shell
kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'
```

StatefulSet Podの強制削除は、常に慎重に、関連するリスクを完全に把握して実行してください。

{{% /capture %}}

{{% capture whatsnext %}}

[StatefulSetのデバッグ](/docs/tasks/debug-application-cluster/debug-stateful-set/)の詳細

{{% /capture %}}