실수로 삭제되지 않도록 Kubernetes Persistent Volume을 보호하십시오.
4905 단어 pythontutorialkubernetesdevops
따라서 다음 Python 스크립트를 사용하여 영구 볼륨의 회수 정책 패치를 자동화하거나 공식 Kubernetes 문서에 있는 다음 유용한 항목guide을 사용하여 수동으로 패치할 것을 강력히 제안합니다.
Python 스크립트는 Kubernetes 네임스페이스의 모든 영구 볼륨을 검색하고 PV 회수 정책을 업데이트할 수 있습니다. 실제로 볼 수 있듯이 어떤 영구 볼륨이 회수 정책으로 적용하려는 원하는 값의 반대 값을 가지고 있는지 보고할 수 있습니다. (pv_patch_operation).
from kubernetes import client, config
from datetime import datetime
import logging
from logging.handlers import RotatingFileHandler
from pytz import timezone
def timetz(*args):
return datetime.now(tz).timetuple()
tz = timezone('Europe/Athens') # UTC, Europe/Berlin
logging.Formatter.converter = timetz
logging.basicConfig(
level=logging.INFO,
format='[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s',
datefmt='%Y-%m-%dT%H:%M:%S',
handlers=[
RotatingFileHandler('logs/app.log', mode='w', maxBytes=100000000, backupCount=10),
logging.StreamHandler()
]
)
logging.info('Timezone: ' + str(tz))
logger = logging.getLogger(__name__)
pv_patch_operation="Retain"
def get_pvs_from_api(v1):
get_pvs_list=[]
pv_response = v1.list_persistent_volume(watch=False)
for pv in pv_response.items:
get_pvs_list.append({
"pv_name": pv.metadata.name,
"pv_retain_policy": pv.spec.persistent_volume_reclaim_policy,
"pvc_reference": {
"kind": pv.spec.claim_ref.kind,
"deploment_name": pv.spec.claim_ref.name,
"namespace": pv.spec.claim_ref.namespace
}
})
return get_pvs_list
def update_pv_reclaim_policy(v1,get_pvs_list):
for pvs in get_pvs_list:
if pvs.get('pv_retain_policy') !=pv_patch_operation:
v1.patch_persistent_volume(name=pvs.get('pv_name'), pretty=True, body={'spec': {'persistentVolumeReclaimPolicy': pv_patch_operation }})
def main():
try:
## Read The kubeconfig and show the current context
contexts, active_context = config.list_kube_config_contexts()
if not contexts:
print("Cannot find any context in kube-config file.")
return
contexts = [context['name'] for context in contexts]
config.load_kube_config(context=active_context['name'])
logger.info("Current Context: " + str(active_context['name']))
ACTION = input("Please Specify Action [get/update]: ")
logger.info('You are going to "' + str(ACTION) + '" all the pvs from the cluster "' + str(active_context['name']) + '"' )
CONFIRM = input("Do you want to Proceed[y/n]: ")
if CONFIRM.strip() in ['y','Y']:
v1 = client.CoreV1Api()
get_pvs_list=get_pvs_from_api(v1)
if len(get_pvs_list) != 0:
if ACTION.strip() not in ['get','g', 'u','update']:
logger.error('Please select one of following options ["g","get","u","update"]')
exit(1)
if ACTION.strip() in ['u','update']:
update_pv_reclaim_policy(v1, get_pvs_list)
get_pvs_list=get_pvs_from_api(v1)
logger.info(get_pvs_list)
if ACTION.strip() in ['g','get']:
logger.info(get_pvs_list)
else:
logger.error('I cannot find any persistent volumes')
elif CONFIRM in ['n','N']:
logger.info('Bye.')
exit(0)
else:
logger.error('Please select between the following valid options ["y","Y","n","N"]')
exit(1)
except Exception as e:
print(e)
if __name__ == "__main__":
main()
엄지 척을 포기한다면 튜토리얼이 마음에 드시기 바랍니다! 에서 나를 팔로우하고 내Newletter 를 구독하여 다가오는 자습서를 놓치지 않도록 할 수도 있습니다.
미디어 속성
내 게시물에서 사용하고 있는 멋진Clark Tibbs을 디자인해 준 것에 대해photo 감사합니다.
Reference
이 문제에 관하여(실수로 삭제되지 않도록 Kubernetes Persistent Volume을 보호하십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tvelmachos/protect-your-kubernetes-persistent-volumes-from-accidental-deletion-3jgj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)