2017年1月26日星期四

OpenShift_039:删除应用所有对象后 PV 依旧不可用的问题

环境: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。

重新创建应用时,这次成功了!

没有评论: