【问题标题】:Automaticaly execute script inside Kuebrentes pod A when i update pod B with ansible当我用 ansible 更新 pod B 时,在 Kubernetes pod A 中自动执行脚本
【发布时间】:2023-03-24 20:00:02
【问题描述】:

我有 2 个 pod,使用 ansible 部署: - 吊舱 A - POD B。

实际上,我执行 ansible 来更新 pod B。 更新完成后,我需要在 pod A 中执行命令。

您知道自动执行此脚本的最佳方法吗?通过 ansible ? Kubernetes 配置?

谢谢

【问题讨论】:

  • “在 pod 中执行命令”通常不是最佳实践:您几乎总是拥有一个 pod 的多个副本,无论您强制执行的操作是否会在pod 被删除并重新创建(如果节点失败,可能会自动创建)。
  • 其实,当另一个pod的版本更新时,我需要执行一个脚本来更新数据库
  • 启动作业来执行此操作是一种典型的方法(Helm 等工具对此有特定的支持)。或者您的 pod B 可以在启动时自行更新数据库,但您必须防止每个副本尝试同时执行此操作,并且防止不同版本的 pod 同时运行。

标签: docker kubernetes automation ansible devops


【解决方案1】:

第一个示例是等待我更新的 pod 准备就绪。

- name: Deploy all cryoserver-ssh manifests
  kubernetes.core.k8s:
    state: present
    src: "{{ item }}"
    kubeconfig: /deployment/ansible-files/admin.conf
    namespace: "default"
  with_fileglob:
    - "/deployment/ansible-helm-deploy/cryoserver-ssh/templates/*"

- name: Remove saml config files into helm chart
  ansible.builtin.file:
    path: "/project/helm_charts/cryoserver-ssh/{{ item['metadata']['MetadataFile'] }}"
    state: absent
  loop: "{{ metadata_files }}"

- name: Wait till the pods are running
  kubernetes.core.k8s_info:
    kubeconfig: /deployment/ansible-files/admin.conf
    kind: Pod
    label_selectors:
      - "app = cryoserver-ssh"
    wait: yes
    namespace: default
    wait_sleep: 10
    wait_timeout: 360

在第二个示例中,我正在上传一个需要在 pod 中运行的脚本,使其可执行,然后执行它。

- name: Copy cryoserver-update-zookeeper.sh local file to remote pod
  kubernetes.core.k8s_cp:
    kubeconfig: /deployment/ansible-files/admin.conf
    namespace: default
    pod: "{{ helm_values['cryoserver']['serviceName'] }}-ssh-0"
    remote_path: "/project/scripts/cryoserver-update-zookeeper.sh"
    local_path: "/project/plays/templates/cryoserver-update-zookeeper.sh"
- name: Run cryoserver-update-zookeeper.sh script
  kubernetes.core.k8s_exec:
    kubeconfig: /deployment/ansible-files/admin.conf
    namespace: default
    pod: "{{ helm_values['cryoserver']['serviceName'] }}-ssh-0"
    command: "chmod +x /project/scripts/cryoserver-update-zookeeper.sh"
- name: Run cryoserver-update-zookeeper.sh script
  kubernetes.core.k8s_exec:
    kubeconfig: /deployment/ansible-files/admin.conf
    namespace: default
    pod: "{{ helm_values['cryoserver']['serviceName'] }}-ssh-0"
    command: "/bin/bash -c '/project/scripts/cryoserver-update-zookeeper.sh'"

【讨论】:

    猜你喜欢
    • 2021-02-19
    • 2021-02-19
    • 2021-06-29
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    相关资源
    最近更新 更多