私たちは、上の話をした人工または何らかのやむを得ない理由により、ポッドが中断すること、および使用はPod Disruption Budget
、割り込みがクラスタが受け入れ可能な状態のまま発生したときにポッドで保証される可能性があります。
Wordは、PDBは、高可用性クラスタを確保するために、ポッドの同時中断の数を制限することができます。
クラスタを保護するためにPodDisruptionBudgetを使用して、
1)使用することを確認しPodDisruptionBudget (PDB)
保護するためのクラスタリングを
2)どのように中断されたクラスタの影響を検討します
3)YAMLを使用PDBファイルの定義を作成します。
4)使用YAML PDBファイルには、オブジェクトを作成しました
アプリケーションオブジェクトの保護を決定したいです
最も一般的なオブジェクトが作成されたkubernetes内蔵のコントローラアプリケーションオブジェクトの1次保護されるべき。
- 配備
- ReplicationController
- さらにreplicaSet
- StatefulSet
クラスタが応答を中断する方法を検討
(不随意割り込み制御がPDBではありません、原因私たちは自主的な中断が何であるかについて話しました前の1以上の自主的な中断に)撃墜することができますどのように多くの場合、短時間で意思決定
- ステートレスのフロントエンド
フォーカス:サービス容量が10%以上を削減することができません
ソリューション:含む使用minAvailable 90%
PDB値を
- 単一のステートフルアプリケーションの例
フォーカス:無意識の場合は中断しないでください
考えられる解決策1:PDBを使用しないでください、簡単に臨時のダウンタイム
設定し、PDBを使用:可能な解決策2 maxUnavailable=0
その後、クラスタ管理者は、ポッドを終了したい場合、彼はあなたに連絡する必要があり、休憩のために準備するために、PDBを削除して再作成します(maxUnavailable = 0は、自主的な中断できない場合。操作)
- 例としては、マルチステートアプリケーション、例えば飼育係、etcd、領事等であります
フォーカス:定足数に劣ら動作していないインスタンスの数
可能な解決策1:maxUnavailable 1の(異なるクラスタの異なる要件に応じて異なる値に設定することができる)
可能な解決策2:minAvailable定足数に。
PodDisruptionBudgetを指定します
PDBは、3つのフィールドがあります。
1)ラベル選択.spec.selector
設定する選択ポッドを指定するが、これは必須で
2).spec.minAvailable
ポッドが排出される場合には、利用可能なポッドの最小数を確保する必要がある。minAvailable
絶対値またはパーセントとすることができます
3).spec.maxUnavailable
(Kubernetes 1.7またはそれ以降)、追放の場合が発生で、コピーの最大数は利用できない場合、値は絶対値またはパーセンテージであってもよいです。
1つのPDBの定義では、あなただけ指定することができますminAvailable
かmaxUnavailable
1。maxUnavailable
ポッドで、コントローラは追放持って使用することができます。
ポッドのmaxUnavailable 0%(または0)、または100%のminAvailable値(値又は複製に等しい)が完全に防止追放されるであろう。
次の例では、選択されたラベルを含む値PDBますapp: zookeeper
のポッド
- 使用
minAvailable
例
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: zk-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: zookeeper
- 使用
maxUnavailable
例
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: zk-pdb
spec:
maxUnavailable: 1
selector:
matchLabels:
app: zookeeper
上方例えばzk-pdb
オブジェクトが選択されている状態のポッド組の数は、上記の二つの定義と同じ意味を、3であり、推奨しますmaxUnavailable
PDBは、オブジェクトを作成します
あなたは使用することができkubectl apply -f xxx.yaml
PDBオブジェクトを作成します
PDBオブジェクトを更新することはできません、あなたはそれを削除して再作成することができます。
PDBを検出する状態
PDBが作成されているかどうかを検出するために、kubectlを使用してください。
何ポッド一致しないと仮定するとapp: zookeeper
、次の情報が表示されます
kubectl get poddisruptionbudgets
NAME MIN-AVAILABLE ALLOWED-DISRUPTIONS AGE
zk-pdb 2 0 7s
(例えば3)ポッドの一致がある場合は、表示される情報は、次のようになります。
kubectl get poddisruptionbudgets
NAME MIN-AVAILABLE ALLOWED-DISRUPTIONS AGE
zk-pdb 2 1 7s
ALLOWED-DISRUPTIONS
値0は、割り込みコントローラは、一致の数を計算するためのポッドをそのポッドを発見したことを意味されていない場合、PDBのステータスを更新します
あなたはPDBのステータスに関する詳細情報を取得するには、次のコマンドを使用することができます
kubectl get poddisruptionbudgets zk-pdb -o yaml
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
creationTimestamp: 2017-08-28T02:38:26Z
generation: 1
name: zk-pdb
...
status:
currentHealthy: 3
desiredHealthy: 3
disruptedPods: null
disruptionsAllowed: 1
expectedPods: 3
observedGeneration: 1