Это клиентская библиотека предназначена для управления кластером GKE.Он не предназначен для общения с API Kubernetes.
Для этого есть клиентские библиотеки API Kubernetes .
Существует одна для nodejs, но, как яболее свободно знаком с Python. Ниже я собираюсь продемонстрировать, как я делал это с клиентской библиотекой API Python Kubernetes через GCP Cloud Functions для успешного применения вашего варианта использования.
Я имел дело с несколько громоздкой частью этогоprocess.
Вы выпустите в обычном терминале (при условии надлежащей аутентификации и авторизации) gcloud container clusters get-credentials
, и вы сможете взаимодействовать с API-интерфейсом Kubernetes кластера с помощью kubectl
.
Я пока не нашел эквивалентного метода для получения учетных данных для кластера с использованием клиентской библиотеки Python GKE API , поэтому я загрузил файл ~/.kube/config
в корзину Cloud Storage, так чточто мы можем загрузить его из Облачной функции и затем поговорить с API кластера Kubernetes.
Итак, давайте создадим корзину и загрузим файл kubeconfigк этому (обратите внимание, что это имеет далеко не идеальные последствия для безопасности в зависимости от политики IAM и ACL для рассматриваемого сегмента, но работает в целях тестирования).
MY_GCP_PROJECT=MY_GCP_PROJECT #edit accordingly
gsutil mb gs://$MY_GCP_PROJECT-configs # set location if more convenient, with '-l US' for example
gsutil cp ~/.kube/config gs://$MY_GCP_PROJECT-configs/kubeconfig
Теперь для функции облака.
needs.txt
google-cloud-storage
kubernetes
main.py
import tempfile
import json
from kubernetes import client as kubernetes_client, config as kubernetes_config
from google.cloud import storage
BUCKET, BLOB = "MY_GCP_PROJECT", "kubeconfig" #TODO EDIT accordingly
storage_client = storage.Client()
def download_gcs_object(name_bucket, name_blob):
bucket = storage_client.bucket(name_bucket)
blob = bucket.blob(name_blob)
tmp = tempfile.NamedTemporaryFile(delete=False)
blob.download_to_filename(tmp.name)
return tmp.name
def load_kube_config():
kubernetes_config.load_kube_config(config_file=download_gcs_object(BUCKET, BLOB))
def create_container_object_default():
return kubernetes_client.V1Container(name="pi", image="perl", command=["perl", "-Mbignum=bpi", "-wle", "print bpi(1000)"])
def create_job_object(container):
template = kubernetes_client.V1PodTemplateSpec(metadata=kubernetes_client.V1ObjectMeta(labels={"app": "pi"}), spec=kubernetes_client.V1PodSpec(restart_policy="Never", containers=[container]))
return kubernetes_client.V1Job(api_version="batch/v1", kind="Job", metadata=kubernetes_client.V1ObjectMeta(name="pi"), spec=kubernetes_client.V1JobSpec(template=template, backoff_limit=4))
load_kube_config()
kubernetes_api = kubernetes_client.BatchV1Api()
def hello_world(request):
job = create_job_object(create_container_object_default())
kubernetes_api.create_namespaced_job(body=job,namespace="default")
return json.dumps(job.to_dict())
Это задание (в качестве примера взято из здесь ) состоит из модуля сконтейнер (изображение perl), который использует perl для вычисления первых 999 цифр числа pi , поэтому просто измените информацию об объекте контейнера (в данном случае об объекте python) вместе с другими конфигурациями для самого задания.
Функция, выполняемая в «облачной функции»: hello_world
.