小ネタ。
以下のドキュメントの通りですが少しハマったのでメモ
基本的には以下のようにやれば良い
Change the Reclaim Policy of a PersistentVolume
kubectl patch pv -p ‘{“spec”:{“persistentVolumeReclaimPolicy”:“Retain”}}’
ただ上記はそのままコピペするとエラーになった
# JSON のパースでエラーとなる模様
$kubectl patch pv pvc-3fdc5920-8595-11e8-a565-06fc7dc53c2c -p ‘{“spec”:{“persistentVolumeReclaimPolicy”:“Delete”}}’
Error from server (BadRequest): json: cannot unmarshal string into Go value of type map[string]interface {}
# コピペのJSONはダメ
$echo ‘{“spec”:{“persistentVolumeReclaimPolicy”:“Delete”}}’ | jq .
parse error: Invalid numeric literal at line 1, column 4
# 少し変えて JSON がパースできることを確認
$echo '{"spec": {"persistentVolumeReclaimPolicy":"Delete"}}' | jq .
{
"spec": {
"persistentVolumeReclaimPolicy": "Delete"
}
}
# 一応指定する JSON が合っているかも確認したが良さそう
$kubectl get pv pvc-3fdc5920-8595-11e8-a565-06fc7dc53c2c --output json |less
(一部略)
"spec": {
"accessModes": [
"ReadWriteOnce"
],
"awsElasticBlockStore": {
"fsType": "ext4",
"volumeID": "aws://us-west-2c/vol-03c4886d59252eb54"
},
"capacity": {
"storage": "20Gi"
},
"claimRef": {
"apiVersion": "v1",
"kind": "PersistentVolumeClaim",
"name": "mysql-pv-claim-6",
"namespace": "default",
"resourceVersion": "4636186",
"uid": "04449e69-8558-11e8-a565-06fc7dc53c2c"
},
"mountOptions": [
"debug"
],
"persistentVolumeReclaimPolicy": "Retain",
"storageClassName": "gp2"
},
"status": {
"phase": "Released"
}
}
これで準備OK
やってみる
# patch が無事成功
$kubectl patch pv pvc-3fdc5920-8595-11e8-a565-06fc7dc53c2c -p '{"spec": {"persistentVolumeReclaimPolicy":"Delete"}}'
persistentvolume "pvc-3fdc5920-8595-11e8-a565-06fc7dc53c2c" patched
# policy が Retain から Delete に変わっていることを確認
$kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-3fdc5920-8595-11e8-a565-06fc7dc53c2c 20Gi RWO Delete Bound default/mysql-pv-claim-3 gp2-2 2d
pvc-41fbc5b0-8595-11e8-971c-022ca775d168 20Gi RWO Delete Bound default/mysql-pv-claim-4 gp2-2 2d
pvc-440b8688-8595-11e8-a565-06fc7dc53c2c 20Gi RWO Delete Bound default/mysql-pv-claim-5 gp2-2 2d
OK.
なお、PullRequest しようかと思ったが Github 上のコードだと抜けてしまっている「your-pv-name」というのもあり「'{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'」もJSONパース出来て問題ない。
Hugoにする時の問題?
整理できたらIssue切るか。。。。