Last active
May 6, 2019 07:19
-
-
Save mendaomn/98fdac90ce2c1fedd7e03c9236545917 to your computer and use it in GitHub Desktop.
Local Kubernetes cluster setup with vagrant and ansible
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: all | |
become: true | |
tasks: | |
- 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: 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 varsion | |
apt_repository: | |
repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial 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: 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: 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 create -f https://docs.projectcalico.org/v3.4/getting-started/kubernetes/installation/hosted/calico.yaml | |
- name: Generate join command | |
command: kubeadm token create --print-join-command | |
register: join_command | |
- name: Copy join command to local file | |
local_action: copy content="{{ join_command.stdout_lines[0] }}" dest="./join-command" | |
handlers: | |
- name: docker status | |
service: name=docker state=started |
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: all | |
become: true | |
tasks: | |
- 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: 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 varsion | |
apt_repository: | |
repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial 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: 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: Copy the join command to server location | |
copy: src=join-command dest=/tmp/join-command.sh mode=0777 | |
- name: Join the node to cluster | |
command: sh /tmp/join-command.sh | |
handlers: | |
- name: docker status | |
service: name=docker state=started |
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
IMAGE_NAME = "bento/ubuntu-16.04" | |
N = 2 | |
Vagrant.configure("2") do |config| | |
config.ssh.insert_key = false | |
config.vm.provider "virtualbox" do |v| | |
v.memory = 1024 | |
v.cpus = 2 | |
end | |
config.vm.define "k8s-master" do |master| | |
master.vm.box = IMAGE_NAME | |
master.vm.network "private_network", ip: "192.168.50.10" | |
master.vm.hostname = "k8s-master" | |
master.vm.provision "ansible" do |ansible| | |
ansible.playbook = "master-playbook.yml" | |
end | |
end | |
(1..N).each do |i| | |
config.vm.define "node-#{i}" do |node| | |
node.vm.box = IMAGE_NAME | |
node.vm.network "private_network", ip: "192.168.50.#{i + 10}" | |
node.vm.hostname = "node-#{i}" | |
node.vm.provision "ansible" do |ansible| | |
ansible.playbook = "node-playbook.yml" | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment