Statefulset を使った障害時の動作¶
MongoDBを使って確認 Pod停止時の動作¶
Helmを使ってmongodbをデプロイします。
今回はreplicaを作ることを想定し、replicaset
を使い、ストレージをダイナミックにプロビジョニングするようにします。
Helm を使いmongodbをデプロイします。
$ helm install --name mongodb --namespace mongo-replica -f values.yaml stable/mongodb-replicaset --debug
ノード障害が発生し、別のポッドが上がった場合にもデータが永続化されていることを確認する。 確認のためのテストデータを投入します。
$ kubectl exec mongodb-mongodb-replicaset-0 -- mongo --eval="printjson(db.test.insert({key1: 'trident fail test'}))"
$ kubectl exec mongodb-mongodb-replicaset-0 -n mongo-replica -- mongo --eval="printjson(db.test.insert({key1: 'trident fail test'}))"
MongoDB shell version v3.6.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.6
{ "nInserted" : 1 }
値を確認します。
$ kubectl exec mongodb-mongodb-replicaset-0 -n mongo-replica -- mongo --eval="rs.slaveOk(); db.test.find({key1:{\$exists:true}}).forEach(printjson)"
MongoDB shell version v3.6.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.6
{
"_id" : ObjectId("5b5b0d43e521f72e61cf2f9f"),
"key1" : "trident fail test"
}
Podを停止させ、別ノードで起動することを確認します。
まずは起動状態を確認し、それぞれのPodがどのノードで稼働しているかを確認します。
mongodb-mongodb-replicaset-0 1/1 Running 0 5m 10.244.3.6 node2 │
mongodb-mongodb-replicaset-1 1/1 Running 0 5m 10.244.4.8 node3 │
mongodb-mongodb-replicaset-2 1/1 Running 0 4m 10.244.1.5 node0
ラベルを使って対象のPodをすべて削除します。
$ kubectl delete po -l "app=mongodb-replicaset,release=mongodb" -n mongo-replica
pod "mongodb-mongodb-replicaset-0" deleted
pod "mongodb-mongodb-replicaset-1" deleted
pod "mongodb-mongodb-replicaset-2" deleted
起動確認後、すべてのPodが別ノードで起動していることを確認します。
$ kubectl get po -n mongo-replica -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mongodb-mongodb-replicaset-0 1/1 Running 0 2m 10.244.4.9 node3
mongodb-mongodb-replicaset-1 1/1 Running 0 1m 10.244.3.7 node2
mongodb-mongodb-replicaset-2 1/1 Running 0 1m 10.244.2.6 node1
テスト前に保存したデータベースの値を確認します。
$ kubectl exec mongodb-mongodb-replicaset-0 -n mongo-replica -- mongo --eval="rs.slaveOk(); db.test.find({key1:{\$exists:true}}).forEach(printjson)"
MongoDB shell version v3.6.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.6
{
"_id" : ObjectId("5b5b0d43e521f72e61cf2f9f"),
"key1" : "trident fail test"
}
ポッドが削除され、再作成されたあとでもデータは永続化している状態を確認できました。