Created
September 25, 2019 13:50
-
-
Save hi1280/69a76141450ff047764801a3d3db05b4 to your computer and use it in GitHub Desktop.
Kubernetes Setup Using Ansible and 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: | |
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/v3.9/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" | |
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: | |
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: 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 = "kubernetes-setup/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 = "kubernetes-setup/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
fatal: [k8s-master]: FAILED! => {"changed": false, "msg": "Failed to update apt cache: W:The repository 'http://archive.ubuntu.com/ubuntu xenial Release' does not have a Release file., W:Data from such a repository can't be authenticated and is therefore potentially dangerous to use., W:See apt-secure(8) manpage for repository creation and user configuration details., W:The repository 'http://archive.ubuntu.com/ubuntu xenial-updates Release' does not have a Release file., W:Data from such a repository can't be authenticated and is therefore potentially dangerous to use., W:See apt-secure(8) manpage for repository creation and user configuration details., W:The repository 'http://archive.ubuntu.com/ubuntu xenial-backports Release' does not have a Release file., W:Data from such a repository can't be authenticated and is therefore potentially dangerous to use., W:See apt-secure(8) manpage for repository creation and user configuration details., W:The repository 'http://security.ubuntu.com/ubuntu xenial-security Release' does not have a Release file., W:Data from such a repository can't be authenticated and is therefore potentially dangerous to use., W:See apt-secure(8) manpage for repository creation and user configuration details., W:Failed to fetch https://download.docker.com/linux/ubuntu/dists/xenial/InRelease Failed to connect to download.docker.com port 443: No route to host, W:Failed to fetch https://apt.kubernetes.io/dists/kubernetes-xenial/InRelease Failed to connect to apt.kubernetes.io port 443: No route to host, E:Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-backports/restricted/binary-amd64/Packages Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8001::24). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8001::24 80], E:Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial/main/binary-amd64/Packages Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8001::24). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8001::24 80], E:Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/binary-amd64/Packages Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8001::24). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8001::24 80], E:Failed to fetch http://security.ubuntu.com/ubuntu/dists/xenial-security/main/binary-amd64/Packages Cannot initiate the connection to security.ubuntu.com:80 (2001:67c:1562::18). - connect (101: Network is unreachable) [IP: 2001:67c:1562::18 80], W:Some index files failed to download. They have been ignored, or old ones used instead."}