"Kubectl apply" yürütmek için kubernetes istemcisi nasıl kullanılır
Temel olarak aşağıdaki üç komutu çalıştıran bir python betiğim var :
kubectl apply -f class.yaml
kubectl apply -f rbac.yaml
kubectl apply -f deployment-arm.yaml
Onun yerine python ile yazılmış kubernetes istemcisini kullanmak istiyorum . Mevcut kodum, oradaki yaml dosyalarını yükler (kullanarak pyyaml
), onları biraz düzenler, bir dosyaya ekler ve bu üç komutu yürütmek için kubectl komut satırını kullanır. Kodun bir kısmı:
# 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 ...
Yapmak istediğim şey: Bu üç komutu python kubernetes istemcisi ile değiştirin. Docs okuma ve görme konuyu , beraber rastladım create_namespaced_deployment
ben için kullanmak gerektiğini düşünüyorum yöntemle deployment_file_path
dosyası. Ama diğer iki dosyayla ne yapmam gerektiğini anlayamıyorum.
Zaten üç yaml dosyaları (kullanarak PyYAML) yüklendi ve (yeni dosyalar halinde damping olmadan) bunları düzenlenebilir ve şimdi özgür yaml dicts sahip olduğunu varsayarsak deployment_dict
, class_dict
ve rbac_dict
, nasıl yöntemlerle yukarıdaki üç yürütmek müşteri kullanabilir?
DÜZENLEME : BTW, üç dicts'i geçmek mümkün değilse, onları tekrar dosyalara dökebilirim, ancak kubectl yerine python istemcisini kullanmak istiyorum. Nasıl yapılır?
Yanıtlar
Her nesne ve eylem için ayrı bir işlev vardır:
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
Kullandığınızda kubectl apply
nesnenin zaten var olup olmadığı, hangi API'nin kullanılacağı, hangi yöntemin uygulanacağı umurunuzda değil, ancak istemciyle birlikte yapmanız gerekecek. Örnekte gördüğünüz gibi, yapmanız gerekenler:
- Kube-config'i yükleyin.
- Kullanılacak doğru API'yi seçin (yalnızca yapılandırmayı yükledikten sonra bir nesne oluşturun).
- Kullanmak istediğiniz yöntemi seçin. Zaten varsa
create_something
çalışmayacağını unutmayınsomething
.
Sıkı adlandırma modeli sayesinde, gerekli işlevi istemciden almak kolaydır.
getattr(some_k8s_api, f"{verb}_{namespaced_or_not}_{kind.lower()}")
Kütüphanenin sağladığı örneklerden geçmenizi tavsiye ederim , bir şeyi öğrenmek gerçekten harikadır.
Hiçbir fikrim yok ama bir yerde şunu gördüm:
cat <<EOF | kubectl apply -f -
<<here the content of the yaml>>
EOF
Ve işe yaradığına bakılırsa, bu işe yarar mı?
cat class.yaml rbac.yaml deployment-arm.yaml | kubectl apply -f -