环境:OCP 3.4
做 《OpenShift_036:一键部署 mysql 主从集群》 时,发现一个问题,就是删除应用的所有对象(route、service、dc、bc、pod、pvc)后,pv 依旧不可用。
此时,运行 oc get pv,输出如下:
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
mysql-volume 1Gi RWX Retain Released applications/mysql-master 1h
状态是 Released,虽然释放了,但是下次重新创建应用时,pod 始终处于 pending 状态,原因就是 pvc 和 pv 无法绑定。
仔细检查 PV 的定义,发现有个 persistentVolumeReclaimPolicy 参数,于是把 Retain 改为 Recycle。
echo '{
"apiVersion": "v1",
"kind": "PersistentVolume",
"metadata": {
"name": "mysql-volume"
},
"spec": {
"capacity": {
"storage": "1Gi"
},
"accessModes": [ "ReadWriteMany" ],
"nfs": {
"path": "/srv/nfs/mysql-vol",
"server": "registry.example.com"
},
"persistentVolumeReclaimPolicy": "Recycle"
}
}' | oc create -f -
重新创建,发现还是不行。
运行 oc describe pv mysql-volume,发现,原来需要运行一个 pod 来做“清扫”工作,而这个 pod 需要 pull openshift3/ose-recycler:v3.4.0.39 这个镜像。
于是先去下载该镜像 (在 MAC 机器上做)
docker pull registry.access.redhat.com/openshift3/ose-recycler:v3.4.0.39
docker save -o ose-recycler-v3.4.0.39.tar.gz registry.access.redhat.com/openshift3/ose-recycler:v3.4.0.39
scp ose-recycler-v3.4.0.39.tar.gz root@192.168.56.112:/opt/ose/images/
加载该镜像 (在 Registry 机器上做)
cd /opt/ose/images/
docker load -i ose-recycler-v3.4.0.39.tar.gz
docker tag registry.access.redhat.com/openshift3/ose-recycler:v3.4.0.39 registry.example.com:5000/openshift3/ose-recycler:v3.4.0.39
docker push registry.example.com:5000/openshift3/ose-recycler:v3.4.0.39
再次运行 oc describe pv mysql-volume,这次 Volume recycled。
再次运行 oc get pv,输出如下:
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
mysql-volume 1Gi RWX Recycle Available 25m
这次状态变成了 Available。
重新创建应用时,这次成功了!
做 《OpenShift_036:一键部署 mysql 主从集群》 时,发现一个问题,就是删除应用的所有对象(route、service、dc、bc、pod、pvc)后,pv 依旧不可用。
此时,运行 oc get pv,输出如下:
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
mysql-volume 1Gi RWX Retain Released applications/mysql-master 1h
状态是 Released,虽然释放了,但是下次重新创建应用时,pod 始终处于 pending 状态,原因就是 pvc 和 pv 无法绑定。
仔细检查 PV 的定义,发现有个 persistentVolumeReclaimPolicy 参数,于是把 Retain 改为 Recycle。
echo '{
"apiVersion": "v1",
"kind": "PersistentVolume",
"metadata": {
"name": "mysql-volume"
},
"spec": {
"capacity": {
"storage": "1Gi"
},
"accessModes": [ "ReadWriteMany" ],
"nfs": {
"path": "/srv/nfs/mysql-vol",
"server": "registry.example.com"
},
"persistentVolumeReclaimPolicy": "Recycle"
}
}' | oc create -f -
重新创建,发现还是不行。
运行 oc describe pv mysql-volume,发现,原来需要运行一个 pod 来做“清扫”工作,而这个 pod 需要 pull openshift3/ose-recycler:v3.4.0.39 这个镜像。
于是先去下载该镜像 (在 MAC 机器上做)
docker pull registry.access.redhat.com/openshift3/ose-recycler:v3.4.0.39
docker save -o ose-recycler-v3.4.0.39.tar.gz registry.access.redhat.com/openshift3/ose-recycler:v3.4.0.39
scp ose-recycler-v3.4.0.39.tar.gz root@192.168.56.112:/opt/ose/images/
加载该镜像 (在 Registry 机器上做)
cd /opt/ose/images/
docker load -i ose-recycler-v3.4.0.39.tar.gz
docker tag registry.access.redhat.com/openshift3/ose-recycler:v3.4.0.39 registry.example.com:5000/openshift3/ose-recycler:v3.4.0.39
docker push registry.example.com:5000/openshift3/ose-recycler:v3.4.0.39
再次运行 oc describe pv mysql-volume,这次 Volume recycled。
再次运行 oc get pv,输出如下:
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
mysql-volume 1Gi RWX Recycle Available 25m
这次状态变成了 Available。
重新创建应用时,这次成功了!
没有评论:
发表评论