Last active
February 25, 2020 23:35
-
-
Save alexnoz/00eaebe38644c02920f20b3139538026 to your computer and use it in GitHub Desktop.
A simple Ansible playbook for yum based distributions that installs Docker & K8s and initialises the k8s cluster (with Flannel as a network add-on)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
- hosts: k8s_master,k8s_workers | |
become: true | |
remote_user: ansible | |
tasks: | |
# Docker installation | |
- name: Install helper packages | |
yum: | |
name: yum-utils,device-mapper-persistent-data,lvm2 | |
state: latest | |
- name: Set up stable Docker repo | |
command: | |
cmd: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo | |
creates: /etc/yum.repos.d/docker-ce.repo | |
- name: Install Docker Engine | |
yum: | |
name: docker-ce,docker-ce-cli,containerd.io | |
state: latest | |
- name: Start Docker service | |
service: | |
name: docker | |
state: started | |
# K8s installation | |
- name: Get kubernetes.repo info | |
register: k8s_repo | |
stat: | |
path: /etc/yum.repos.d/kubernetes.repo | |
- name: Write k8s repo | |
when: not k8s_repo.stat.exists | |
blockinfile: | |
create: true | |
path: /etc/yum.repos.d/kubernetes.repo | |
block: | | |
[kubernetes] | |
name=Kubernetes | |
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 | |
enabled=1 | |
gpgcheck=1 | |
repo_gpgcheck=1 | |
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg | |
- name: Set SELinux in permissive mode | |
selinux: | |
policy: targeted | |
state: permissive | |
- name: Install k8s | |
yum: | |
name: kubelet,kubeadm,kubectl | |
state: latest | |
disable_excludes: kubernetes | |
- name: Enable and start kubelet | |
service: | |
name: kubelet | |
enabled: true | |
state: started | |
- name: Turn net.bridge.bridge-nf-call-iptables on | |
sysctl: | |
name: net.bridge.bridge-nf-call-iptables | |
value: '1' | |
- name: Turn net.bridge.bridge-nf-call-ip6tables on | |
sysctl: | |
name: net.bridge.bridge-nf-call-ip6tables | |
value: '1' | |
- name: Remove swapfile from /etc/fstab | |
mount: | |
name: swap | |
fstype: swap | |
state: absent | |
- name: Disable swap | |
command: swapoff -a | |
when: ansible_swaptotal_mb > 0 | |
# Cluster initialization | |
- hosts: k8s_master | |
become: true | |
remote_user: ansible | |
tasks: | |
- name: Initialize cluster (Flannel) | |
command: | |
cmd: kubeadm init --pod-network-cidr=10.244.0.0/16 | |
creates: /etc/kubernetes/admin.conf | |
notify: kubernetes initialized | |
- name: Export KUBECONFIG environment variable | |
lineinfile: | |
path: /etc/environment | |
line: export KUBECONFIG=/etc/kubernetes/admin.conf | |
handlers: | |
- name: Initialize Flannel | |
command: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml | |
listen: kubernetes initialized | |
- name: Save `kubeadm join` command | |
command: kubeadm token create --print-join-command | |
register: kubeadm_join | |
listen: kubernetes initialized | |
# Nodes' joining | |
- hosts: k8s_workers | |
become: true | |
remote_user: ansible | |
tasks: | |
- name: Join the cluster | |
command: | |
cmd: "{{ hostvars.k8s_master.kubeadm_join.stdout }}" | |
creates: /etc/kubernetes/kubelet.conf |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment