Created
September 25, 2019 16:18
-
-
Save wilsonkhlam/4b4118364965597d382ba1a3d0e06268 to your computer and use it in GitHub Desktop.
Provision Single Master, Multi-nodes Kubernetes Cluster with Vagrant
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 version | |
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: Configure node ip | |
lineinfile: | |
path: /etc/systemd/system/kubelet.service.d/10-kubeadm.conf | |
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 create -f https://docs.projectcalico.org/v3.9/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" | |
become: false | |
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 version | |
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: Configure node ip | |
lineinfile: | |
path: /etc/systemd/system/kubelet.service.d/10-kubeadm.conf | |
line: KUBELET_EXTRA_ARGS=--node-ip={{ node_ip }} | |
- name: Restart kubelet | |
service: | |
name: kubelet | |
daemon_reload: yes | |
state: restarted | |
- 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" | |
ansible.extra_vars = { | |
node_ip: "192.168.50.10", | |
} | |
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" | |
ansible.extra_vars = { | |
node_ip: "192.168.50.#{i + 10}", | |
} | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment