Как использовать команды Kubectl для доступа к кластеру ранчо через Ansible - PullRequest
2 голосов
/ 18 июня 2020

В настоящее время я разрабатываю проект, в котором мне нужно получить имена модулей кластера Kubernetes, работающего на Rancher, используя Ansible. Главное здесь то, что у меня есть пара проблем, которые мешают мне продвинуться. В настоящее время я выполняю playbook, чтобы попытаться получить эту информацию, вместо запуска команды CLI, потому что я хочу управлять этими машинами Rancher позже (например, установить файл rpm). Вот учебник, который я выполняю, чтобы попытаться получить имена модулей из Rancher:

---

- hosts: localhost
  connection: local
  remote_user: root
  roles:
    - role: ansible.kubernetes-modules
    - role: hello-world
  vars:
    ansible_python_interpreter: '{{ ansible_playbook_python }}'

  collections:
    - community.kubernetes

  tasks:
    -
      name: Gather openShift Dependencies
      python_requirements_facts:
        dependencies:
        - openshift

    -
      name: Get the pods in the specific namespace
      k8s_info:
        kubeconfig: '/etc/ansible/RCCloudConfig'
        kind: Pod
        namespace: redmine
      register: pod_list

    -
      name: Print pod names 
      debug:
         msg: "pod_list: {{ pod_list | json_query('resources[*].status.podIP')  }} "

    - set_fact:
        pod_names: "{{pod_list|json_query('resources[*].metadata.name')}}"

Проблема в том, что я получаю ошибку модуля Kubernetes каждый раз, когда пытаюсь запустить playbook:

ERROR! the role 'ansible.kubernetes-modules' was not found in community.kubernetes:ansible           .legacy:/etc/ansible/roles:/home/jcp/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/           roles:/etc/ansible

The error appears to be in '/etc/ansible/GetKubectlPods': line 7, column 7, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  roles:
    - role: ansible.kubernetes-modules
      ^ here

Если я удалю эту строку в коде, где я пытаюсь получить эту роль, я все равно получаю аналогичную ошибку:

An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ModuleNotFoundError: No module named 'kubernetes'
fatal: [localhost]: FAILED! => {"changed": false, "error": "No module named 'kubernetes'", "msg": "Failed to import the required Python library (openshift) on localhost.localdomain's Python /usr/bin/python3.6. Please read module documentation and install in the appropriate location. If the required library is installed, but Ansible is using the wrong Python interpreter, please consult the documentation on ansible_python_interpreter"}

Я уже пытался установить ansible -galaxy kubernetes модуль на автомате и openshift. Не уверен, что я делаю неправильно, поскольку существует так много возможностей для того, что здесь может пойти не так.

Ansible Вывод версии:

ansible 2.9.9
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/jcp/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/jcp/.local/lib/python3.6/site-packages/ansible
  executable location = /home/jcp/.local/bin/ansible
  python version = 3.6.8 (default, Nov 21 2019, 19:31:34) [GCC 8.3.1 20190507 (Red Hat 8.3.1-4)]

Я отлаживал свой вывод python_required_info из зависимости openshift, и вот что у меня есть:

ok: [localhost] => {
    "openshift_dependencies": {
        "changed": false,
        "failed": false,
        "mismatched": {},
        "not_found": [],
        "python": "/usr/bin/python3.6",
        "python_system_path": [
            "/tmp/ansible_python_requirements_info_payload_5_kb4a7s/ansible_python_requirements_info_payloa            d.zip",
            "/usr/lib64/python36.zip",
            "/usr/lib64/python3.6",
            "/usr/lib64/python3.6/lib-dynload",
            "/home/jcp/.local/lib/python3.6/site-packages",
            "/usr/local/lib/python3.6/site-packages",
            "/usr/local/lib/python3.6/site-packages/openshift-0.10.0.dev1-py3.6.egg",
            "/usr/lib64/python3.6/site-packages",
            "/usr/lib/python3.6/site-packages"
        ],
        "python_version": "3.6.8 (default, Nov 21 2019, 19:31:34) \n[GCC 8.3.1 20190507 (Red Hat 8.3.1-4)]"            ,
        "valid": {
            "openshift": {
                "desired": null,
                "installed": "0.10.0.dev1"
            }
        }
    }
}

Заранее спасибо за вашу помощь!

1 Ответ

0 голосов
/ 18 июня 2020

Вы не должны делать ничего особенного, чтобы использовать модуль , кроме установки необходимых python зависимостей . См .: https://docs.ansible.com/ansible/latest/modules/k8s_info_module.html

  1. удалите строку - role: ansible.kubernetes-modules, если только это не ваш модуль, и в этом случае вы должны сообщить нам больше, потому что это неправильное объявление .
  2. удалить объявление коллекции
  3. Добавьте следующую задачу перед использованием модуля:
    - name: Make sure python deps are installed
      pip:
        name: openshift
    
    ваша фактическая задача python_requirement_facts не делает ничего, кроме сообщения о том, что зависимость не найдена. Зарегистрируйте результат и отлаживайте его, чтобы убедиться в этом.

Теперь используйте модуль k8s_info как обычно.

...