一千萬個為什麽

搜索

Ansible Remote provisioning在Docker容器內部版本中不起作用



我有一個Packer模板,以一個Docker容器開始並配置它。 shell腳本提供者似乎正在工作,但是,雖然劇本運行並似乎成功,不像shell提供者,它似乎不適用於Docker容器。

封隔器template.json

{
  "builders": [
        {
            "type": "docker",
            "image": "chenjr0719/ubuntu-unity-novnc",
            "commit": "true"
        }
    ],
   "provisioners": [
        {
            "type": "shell",
            "inline": ["sudo apt-get update"]
        },
        {
            "type": "shell",
            "script": "setup_ansible.sh"
        },
        {
            "type": "shell",
            "script": "add_ansible_roles.sh"
        },
        {
            "type": "ansible",
            "playbook_file": "./kubeadm.yml"
        }
   ]
}

setup_ansible.sh

sudo apt-get install software-properties-common -y
sudo apt-add-repository ppa:ansible/ansible -y
sudo apt-get update
sudo apt-get install ansible -y

add_ansible_roles.sh

sudo ansible-galaxy install djx339.k8s-kubeadm-master

kubeadm.yml

- name: install kubeadm
  hosts: localhost
  roles:
    - { role: djx339.k8s-kubeadm-install }

從劇本中輸出

docker: PLAY [install kubeadm] *********************************************************
docker:
docker: TASK [Gathering Facts] *********************************************************
docker: ok: [localhost]
docker:
docker: TASK [djx339.k8s-kubeadm-install : include_tasks] ******************************
docker: included: /home/dw/.ansible/roles/djx339.k8s-kubeadm-install/tasks/setup-Debian.yml for localhost
docker:
docker: TASK [djx339.k8s-kubeadm-install : Sysctl] *************************************
docker: ok: [localhost] => (item={u'name': u'net.bridge.bridge-nf-call-iptables', u'value': 1})
docker:
docker: TASK [djx339.k8s-kubeadm-install : Add kuebeadm apt key] ***********************
docker: ok: [localhost]
docker:
docker: TASK [djx339.k8s-kubeadm-install : Add kubeadm apt repo] ***********************
docker: ok: [localhost]
docker:
docker: TASK [djx339.k8s-kubeadm-install : Install kubeadm] ****************************
docker: ok: [localhost] => (item=[u'kubelet', u'kubeadm', u'kubectl', u'kubernetes-cni'])
docker:
docker: PLAY RECAP *********************************************************************
docker: localhost                  : ok=6    changed=0    unreachable=0    failed=0

在docker容器中運行 kubeadm 會引發錯誤。

為什麽沒有應用劇本?它在本地運行時起作用。

我得到的錯誤是:

未找到kubeadm

所以基本上它不會安裝 kubeadm


註意:只是註意到我添加到 add_ansible_roles.sh 腳本和劇本中的角色不匹配。

轉載註明原文: Ansible Remote provisioning在Docker容器內部版本中不起作用

一共有 1 個回答:

看起來您正試圖在容器內本地運行,而不是在運行打包程序的計算機上(本地配置)在本地運行它。

要在本地模式下運行,您需要更新您的打包程序文件:

    {
        "type": "ansible-local",
        "playbook_file": "./kubeadm.yml"
    }

另外,我建議將 connection:local 添加到您的ansible playbook中,以避免不必要的ssh連接嘗試。

- name: install kubeadm
  hosts: localhost
  connection: local
  roles:
    - { role: djx339.k8s-kubeadm-install }