Skip to content

[Feature/playbook/containerd.ops] - How to automate Containerd installation #91

@piyoki

Description

@piyoki

Objective

This issue demonstrates how you can install Containerd, Nerdctl, and Buildkit altogether using a single playbook.

Steps to reproduce

Step 0 - Prepare your inventory list

# server.yml
---
server:
  hosts:
    containerd-server:
      ansible_host: 10.178.0.65
      ansible_user: packer
      ansible_ssh_private_key_file: ~/.ssh/id_rsa

Step 1 - Define your custom playbook

rootful mode

# rootful-containerd-install.yml
---
- name: Perform Containerd Installation
  hosts: all
  become: yes
  vars_files:
    - ./roles/container.ops/containerd.ops/vars/main.yml
  roles:
    - role: ./roles/container.ops/containerd.ops
      vars:
        - rootless_containerd: false

rootless mode

# rootless-containerd-install.yml
---
- name: Perform Containerd Installation
  hosts: all
  become: yes
  vars_files:
    - ./roles/container.ops/containerd.ops/vars/main.yml
  roles:
    - role: ./roles/container.ops/containerd.ops
      vars:
        - rootless_containerd: true
        - rootless_user: "packer" # target rootless user to run containerd with rootless previledge

Step 2 - Run the playbook with the pre-defined containerd role

ansible-playbook -K -i ~/.local/inventory/test.yml ~/workspace/cloud-estate/playbooks/rootful-containerd-install.yml

Step 3 - (Post Installation) Spin up a container with nerdctl

Spin up a nginx container with nerdctl

sudo nerdctl run --rm -it --name nginx -p 80:80 nginx:latest

Visit http://{ip}:80 to see if the nginx default page is properly displayed

Notes

The ansible playbook is able to catch the scenario where some of the pkgs already installed.

Ansible Logs

ansible-play.log
PLAY [Perform Containerd Installation] *****************************************

TASK [Gathering Facts] *********************************************************
ok: [test-apt]

TASK [./roles/apt.ops/set-sources.ops/ : include_tasks] ************************
included: /home/kev/workspace/cloud-estate/playbooks/roles/apt.ops/set-sources.ops/tasks/setup.yml for test-apt

TASK [./roles/apt.ops/set-sources.ops/ : Setup custom apt source] **************
ok: [test-apt]

TASK [./roles/apt.ops/set-sources.ops/ : Keep apt up-to-date with custom source] ***
ok: [test-apt]

TASK [./roles/container.ops/containerd.ops : include_tasks] ********************
included: /home/kev/workspace/cloud-estate/playbooks/roles/container.ops/containerd.ops/tasks/containerd-install.yml for test-apt

TASK [./roles/container.ops/containerd.ops : Update package source list] *******
ok: [test-apt]

TASK [./roles/container.ops/containerd.ops : Install pre-requisite apk packages] ***
ok: [test-apt]

TASK [./roles/container.ops/containerd.ops : Create a directory to store the CNI binary] ***
ok: [test-apt]

TASK [./roles/container.ops/containerd.ops : Check if Containerd is installed] ***
fatal: [test-apt]: FAILED! => changed=false
  cmd: command -v containerd
  delta: '0:00:00.001705'
  end: '2022-04-13 12:00:12.665740'
  failed_when_result: true
  msg: non-zero return code
  rc: 127
  start: '2022-04-13 12:00:12.664035'
  stderr: ''
  stderr_lines: <omitted>
  stdout: ''
  stdout_lines: <omitted>

TASK [./roles/container.ops/containerd.ops : Install CNI plugin with official script] ***
changed: [test-apt]

TASK [./roles/container.ops/containerd.ops : Create a directory to store the Containerd configuration] ***
changed: [test-apt]

TASK [./roles/container.ops/containerd.ops : Install Containerd] ***************
changed: [test-apt]

TASK [./roles/container.ops/containerd.ops : Write default configuration to /etc/contained] ***
changed: [test-apt]

TASK [./roles/container.ops/containerd.ops : Enable Contained as a daemon service] ***
ok: [test-apt]

TASK [./roles/container.ops/containerd.ops : include_tasks] ********************
included: /home/kev/workspace/cloud-estate/playbooks/roles/container.ops/containerd.ops/tasks/nerdctl-install.yml for test-apt

TASK [./roles/container.ops/containerd.ops : Check if Nerdctl is installed] ****
fatal: [test-apt]: FAILED! => changed=false
  cmd: command -v nerdctl
  delta: '0:00:00.001679'
  end: '2022-04-13 12:00:26.037003'
  failed_when_result: true
  msg: non-zero return code
  rc: 127
  start: '2022-04-13 12:00:26.035324'
  stderr: ''
  stderr_lines: <omitted>
  stdout: ''
  stdout_lines: <omitted>

TASK [./roles/container.ops/containerd.ops : Install Nerdctl with official script] ***
changed: [test-apt]

TASK [./roles/container.ops/containerd.ops : include_tasks] ********************
included: /home/kev/workspace/cloud-estate/playbooks/roles/container.ops/containerd.ops/tasks/buildkit-install.yml for test-apt

TASK [./roles/container.ops/containerd.ops : Check if Buildkit daemon is installed] ***
fatal: [test-apt]: FAILED! => changed=false
  failed_when_result: true
  stat:
    exists: false

TASK [./roles/container.ops/containerd.ops : Install Buildkitd with official script] ***
changed: [test-apt]

TASK [./roles/container.ops/containerd.ops : Create daemon service for Buildkitd] ***
changed: [test-apt]

TASK [./roles/container.ops/containerd.ops : Enable Buildkitd as a daemon service] ***
changed: [test-apt]

TASK [./roles/container.ops/containerd.ops : include_tasks] ********************
included: /home/kev/workspace/cloud-estate/playbooks/roles/container.ops/containerd.ops/tasks/ipv4_forward.yml for test-apt

TASK [./roles/container.ops/containerd.ops : Enable ipv4 port forwarding] ******
ok: [test-apt]

TASK [./roles/container.ops/containerd.ops : include_tasks] ********************
included: /home/kev/workspace/cloud-estate/playbooks/roles/container.ops/containerd.ops/tasks/reboot.yml for test-apt

TASK [./roles/container.ops/containerd.ops : Reboot machine to take effect] ****
changed: [test-apt]

PLAY RECAP *********************************************************************
test-apt                   : ok=23   changed=9    unreachable=0    failed=0    skipped=0    rescued=3    ignored=0

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions