Skip to content

Instantly share code, notes, and snippets.

@alexnoz
Last active February 25, 2020 23:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexnoz/00eaebe38644c02920f20b3139538026 to your computer and use it in GitHub Desktop.
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)
---
- 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