Skip to content

Instantly share code, notes, and snippets.

@hideojoho
Created July 20, 2020 23:29
Show Gist options
  • Save hideojoho/2ad5b92e340da328ed216dbeb73cec66 to your computer and use it in GitHub Desktop.
Save hideojoho/2ad5b92e340da328ed216dbeb73cec66 to your computer and use it in GitHub Desktop.
Ansible playbook for GPU nodes
---
- hosts: all
vars:
ansible_connect_timeout: 300
become: true
tasks:
- name: Update and upgrade apt packages
apt:
update_cache: yes
upgrade: yes
- name: Install packages that allow apt to be used over HTTPS
apt:
name: "{{ packages }}"
state: present
update_cache: yes
vars:
packages:
- apt-transport-https
- ca-certificates
- curl
- gnupg-agent
- software-properties-common
- name: Install build-essential package
apt:
name: "{{ packages }}"
state: present
update_cache: yes
vars:
packages:
- build-essential
- name: Add a pin for cuda driver
get_url:
url: https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
dest: /etc/apt/preferences.d/cuda-ubuntu1804.pin
mode: '0644'
- name: Install a cuda driver repository
apt:
deb: http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
- name: Add an apt signing key for cuda driver
apt_key:
file: /var/cuda-repo-10-2-local-10.2.89-440.33.01/7fa2af80.pub
state: present
- name: Install the cuda drivers
apt:
name: cuda-drivers
state: present
update_cache: yes
- name: Add an apt signing key for Docker
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Add apt repository for stable version
apt_repository:
repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable
state: present
- name: Install docker and its dependecies
apt:
name: "{{ packages }}"
state: present
update_cache: yes
vars:
packages:
- docker-ce
- docker-ce-cli
- containerd.io
notify:
- docker status
- name: Add vagrant user to docker group
user:
name: vagrant
group: docker
- name: Reboot
reboot:
- name: Add an apt signing key for NVIDIA Docker
apt_key:
url: https://nvidia.github.io/nvidia-docker/gpgkey
state: present
- name: Add NVidia-Docker repository source
get_url:
url: https://nvidia.github.io/nvidia-docker/{{ hostvars[inventory_hostname].ansible_distribution | lower }}{{ hostvars[inventory_hostname].ansible_distribution_version }}/nvidia-docker.list
dest: /etc/apt/sources.list.d/nvidia-docker.list
mode: '0644'
- name: Install nvidia-docker2
apt:
name: nvidia-container-toolkit
state: present
update_cache: yes
- name: Reload Docker daemon
systemd:
name: docker
state: reloaded
# - name: Remove swapfile from /etc/fstab
# mount:
# name: "{{ item }}"
# fstype: swap
# state: absent
# with_items:
# - swap
# - none
# - name: Disable swap
# command: swapoff -a
# when: ansible_swaptotal_mb > 0
# - name: Add an apt signing key for Kubernetes
# apt_key:
# url: https://packages.cloud.google.com/apt/doc/apt-key.gpg
# state: present
# - name: Adding apt repository for Kubernetes
# apt_repository:
# repo: deb https://apt.kubernetes.io/ kubernetes-xenial main
# state: present
# filename: kubernetes.list
# - name: Install Kubernetes binaries
# apt:
# name: "{{ packages }}"
# state: present
# update_cache: yes
# vars:
# packages:
# - kubelet
# - kubeadm
# - kubectl
# - name: Configure node ip
# lineinfile:
# create: yes
# path: /etc/default/kubelet
# line: KUBELET_EXTRA_ARGS=--node-ip={{ node_ip }}
# - name: Restart kubelet
# service:
# name: kubelet
# daemon_reload: yes
# state: restarted
# - name: Initialize the Kubernetes cluster using kubeadm
# command: kubeadm init --apiserver-advertise-address="192.168.50.10" --apiserver-cert-extra-sans="192.168.50.10" --node-name k8s-master --pod-network-cidr=192.168.0.0/16
# - name: Setup kubeconfig for vagrant user
# command: "{{ item }}"
# with_items:
# - mkdir -p /home/vagrant/.kube
# - cp -i /etc/kubernetes/admin.conf /home/vagrant/.kube/config
# - chown vagrant:vagrant /home/vagrant/.kube/config
# - name: Install calico pod network
# become: false
# command: kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
# - name: Generate join command
# command: kubeadm token create --print-join-command
# register: join_command
# - name: Copy join command to local file
# become: false
# local_action: copy content="{{ join_command.stdout_lines[0] }}" dest="./join-command"
# - name: Add an apt signing key for helm
# apt_key:
# url: https://helm.baltorepo.com/organization/signing.asc
# state: present
# - name: Install apt-transport-https
# apt:
# name: apt-transport-https
# state: present
# update_cache: yes
# - name: Adding apt repository for helm
# apt_repository:
# repo: deb https://baltocdn.com/helm/stable/debian/ all main
# state: present
# filename: helm-stable-debian.list
# - name: Install helm
# apt:
# name: helm
# state: present
# update_cache: yes
# - name: Copy admin.conf to /vagrant/k8s-setup
# copy:
# src: /etc/kubernetes/admin.conf
# dest: /vagrant/k8s-setup/admin.conf
# mode: 0644
handlers:
- name: docker status
service: name=docker state=started
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment