Как отредактировать / исправить развертывание Kubernetes, чтобы добавить метку с помощью Python

Я новичок в kubernetes - я разработал веб-интерфейс / API, который автоматизирует развертывание модели с помощью служб машинного обучения Azure для служб Azure Kubernetes (AKS). В качестве меры защиты я привязываю к настройке управляемой идентификации для развернутых модулей в AKS, используя эту документацию. Один из шагов - отредактировать развертывание, чтобы добавить метку функции идентификации в /spec/template/metadata/labels для развертывания (см. Параграф, начинающийся как Edit the deployment to add ... в этот раздел).

Я хочу автоматизировать этот шаг с помощью клиента python kubernetes (https://github.com/kubernetes-client/python). Просматривая доступный API, я подумал, что, возможно, patch_namespaced_deployment позволит мне отредактировать развертывание и добавить метку в /spec/template/metadata/labels. Я искал пример кода с использованием клиента python для того же - любая помощь в достижении вышеуказанного будет оценена по достоинству.


comment
будет ли развертывание из YAML-манифеста вариантом для вас?   -  person Anton Matsiuk    schedule 25.05.2020
comment
@AntonMatsiuk, развертывание в AKS происходит через службы Azure ML; поэтому создание развертывания (и манифеста YAML) не находится под моим контролем. Сказал, что такой подход, как получить yaml, а затем отредактировать его, может работать, но это может быть утомительно, то есть найти точку вставки и все такое; следовательно, я искал команду patch.   -  person VinayC    schedule 25.05.2020
comment
Находится ли аутентификация AD в docs.microsoft.com/en-us/azure/machine-learning/ к тому, что вы ищете.   -  person Ram-msft    schedule 26.05.2020
comment
@Ram, я не ищу аутентификацию веб-сервиса (мы используем аутентификацию на основе ключа). Я ищу способы, как код модели может получить доступ к лазурному или любым другим ресурсам.   -  person VinayC    schedule 26.05.2020
comment
Вы ищете код на Python, чтобы узнать, как применить исправление к кластеру Kubernetes?   -  person Atul    schedule 26.05.2020


Ответы (1)


Взгляните на этот пример:

https://github.com/kubernetes-client/python/blob/master/examples/deployment_crud.py#L62-L70

def update_deployment(api_instance, deployment):
    # Update container image
    deployment.spec.template.spec.containers[0].image = "nginx:1.16.0"
    # Update the deployment
    api_response = api_instance.patch_namespaced_deployment(
        name=DEPLOYMENT_NAME,
        namespace="default",
        body=deployment)
    print("Deployment updated. status='%s'" % str(api_response.status))

Ярлыки находятся на объекте развертывания из API приложения v1,

kind: Deployment
metadata:
  name: deployment-example
spec:
  replicas: 3
  revisionHistoryLimit: 10
  template:
    metadata:
      labels:
        app: nginx

это означает, что вам необходимо обновить следующее:

deployment.spec.template.metadata.labels.app = "nginx"

person djsly    schedule 26.05.2020
comment
Да, я видел этот пример - но как мне получить объект развертывания? В этих примерах нет примера API запроса для получения объекта развертывания. Я надеялся, что патч API требует исправления только частей, поэтому я, вероятно, смогу создать объект частичного развертывания в качестве входных данных, но я не знаю, как это сделать на данный момент .... любая помощь будет оценена - person VinayC; 26.05.2020
comment
вам нужно использовать объект read_namespaced_deployment () github.com/kubernetes-client/python/blob/ - person djsly; 26.05.2020
comment
это даст вам объект развертывания, который вы можете повторно использовать в вызове patch_namespaced_deployment. просто указав имя развертывания и пространство имен, в котором оно существует. - person djsly; 26.05.2020
comment
@VinayC, дайте мне знать, соответствует ли этот ответ вашим потребностям. - person djsly; 27.05.2020
comment
Спасибо за ответ. У меня не было времени опробовать решение. Вернусь к следующей неделе. На данный момент я не понимаю, почему вы предложили добавить имя развертывания и пространство имен в объект развертывания, предоставленный вызовом read_namespaced_deployment. - person VinayC; 27.05.2020
comment
вам необходимо прочитать содержимое развертывания, указав имя и пространство имен. так же, как если бы вы сделали kubectl get deployment <name> -n <namespace> -o yaml - person djsly; 27.05.2020
comment
Просто для обновления я использовал клиент .NET Kubernetes, чтобы добиться того же - этот клиент на данный момент не поддерживает патч стратегического слияния. Итак, я запросил развертывание, получил существующие метки, добавил новый в набор и создал патч json для замены меток. Тот же подход будет работать и в клиенте Python, но я подозреваю, что он также будет поддерживать патч слияния, что упростит работу. - person VinayC; 05.06.2020