kubernetes-client를 사용하여 "kubectl apply"를 실행하는 방법
기본적으로 다음 세 가지 명령을 실행하는 파이썬 스크립트가 있습니다 .
kubectl apply -f class.yaml
kubectl apply -f rbac.yaml
kubectl apply -f deployment-arm.yaml
파이썬으로 작성된 kubernetes-client 를 사용하여 대체 하고 싶습니다 . 내 현재 코드는 yaml 파일 (사용 pyyaml
)을 로드 하고, 약간 편집하고, 파일에 삽입하고, 명령 줄 kubectl을 사용하여이 세 명령을 실행합니다. 일부 코드 :
# load files, edit them and dump into new files, part ...
result = run(['kubectl', 'apply', '-f', class_file_path])
# status check part ...
result = run(['kubectl', 'apply', '-f', rbac_file_path])
# status check part ...
result = run(['kubectl', 'apply', '-f', deployment_file_path])
# status check part ...
내가 원하는 것 :이 세 명령을 python kubernetes-client로 바꿉니다. 워드 프로세서를 읽고보고 주제를 , 내가 함께 건너 온 create_namespaced_deployment
나는 내가 사용할 필요가 있다고 생각하는 방법 deployment_file_path
파일. 하지만 다른 두 파일로 무엇을해야하는지 알아낼 수없는 것 같습니다.
이미 세 YAML 파일 (사용 pyyaml를)로드 (새 파일로 덤프없이)을 편집하고 지금 당신은 무료로 YAML의 dicts을 가지고 가정 deployment_dict
, class_dict
그리고 rbac_dict
, 어떻게 방법 위의 세 가지를 실행하는 클라이언트를 사용할 수 있습니까?
편집 : BTW 세 가지 사전을 전달할 수 없으면 파일에 다시 덤프 할 수 있지만 kubectl 대신 파이썬 클라이언트를 사용하고 싶습니다. 어떻게하나요?
답변
모든 개체와 작업에 대해 별도의 기능이 있습니다.
from kubernetes import client, config
import yaml
body = yaml.safe_load("my_deployment.yml")
config.load_kube_config()
apps_api = client.AppsV1Api()
apps_api.create_namespaced_deployment(body=body, namespace="default")
apps_api.replace_namespaced_deployment(body=body, namespace="default")
apps_api.patch_namespaced_deployment(body=body, namespace="default")
apps_api.delete_namespaced_deployment(body=body, namespace="default")
body = yaml.safe_load("my_cluster_role.yml")
rbac_api = client.RbacAuthorizationV1Api()
rbac_api.create_cluster_role(body=body)
rbac_api.patch_cluster_role(body=body)
rbac_api.replace_cluster_role(body=body)
rbac_api.delete_cluster_role(body=body)
# And so on
사용할 때 kubectl apply
객체가 이미 존재하는지, 어떤 API를 사용할지, 어떤 방법을 적용할지 신경 쓰지 않지만 클라이언트에서는해야합니다. 예에서 볼 수 있듯이 다음을 수행해야합니다.
- kube-config를로드합니다.
- 사용할 올바른 API를 선택합니다 (구성을로드 한 후에 만 개체 만들기).
- 사용할 방법을 선택하십시오. 참고
create_something
(가) 경우 작동하지 않습니다something
이미 존재합니다.
엄격한 이름 지정 패턴 덕분에 클라이언트에서 필요한 기능을 쉽게 얻을 수 있습니다.
getattr(some_k8s_api, f"{verb}_{namespaced_or_not}_{kind.lower()}")
라이브러리가 제공 하는 예제 를 살펴 보는 것이 좋습니다. 실제로 배우는 것이 좋습니다.
나는 모르겠지만 어딘가에서 이것을 보았다.
cat <<EOF | kubectl apply -f -
<<here the content of the yaml>>
EOF
그리고 그게 효과가 있다고 생각하면 효과가 있습니까?
cat class.yaml rbac.yaml deployment-arm.yaml | kubectl apply -f -