diff --git a/Vagrantfile b/Vagrantfile index b0c53997e7722b2ff45635e18be6c73837fa184d..ce424c8bcd31cb2244dc9f79600587a67fdb8389 100755 --- a/Vagrantfile +++ b/Vagrantfile @@ -118,7 +118,10 @@ Vagrant.configure("2") do |config| vb.customize "pre-import", [ "setproperty", "machinefolder", File.join(File.dirname(__FILE__), vms.relative_machinefolder) ] vb.customize "post-boot", [ "setproperty", "machinefolder", "default" ] end + subconfig.vm.network "private_network", ip: vms.management.ip, netmask: "255.255.255.0", auto_config: true, adapter: 2 + + subconfig.vm.network "forwarded_port", guest: 8001, host: 8001 end subconfig.disksize.size = vms.management unless vms.management.hdd.to_s diff --git a/ansible/01_add_required_ansible_modules.sh b/ansible/01_add_required_ansible_modules.sh new file mode 100755 index 0000000000000000000000000000000000000000..37fdf2c81c45f3bfd490b96b6a8be304927c9c42 --- /dev/null +++ b/ansible/01_add_required_ansible_modules.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -e + +# check if docker-compose is available if it is installed exist +hash docker-compose > /dev/null 2>&1 && exit 0 || true +echo Provisioning ansible... + +SCRIPT_DIR=$(dirname "$0") +cd $SCRIPT_DIR + +export ANSIBLE_CONFIG=$SCRIPT_DIR/ansible.cfg +ansible-playbook $SCRIPT_DIR/add_required_ansible_modules/site.yaml diff --git a/ansible/01_addHostsToEtcHosts.sh b/ansible/02_hosts_from_inventory.sh similarity index 100% rename from ansible/01_addHostsToEtcHosts.sh rename to ansible/02_hosts_from_inventory.sh diff --git a/ansible/02_upgrade.sh b/ansible/03_upgrade.sh similarity index 100% rename from ansible/02_upgrade.sh rename to ansible/03_upgrade.sh diff --git a/ansible/03_epel.sh b/ansible/04_epel.sh similarity index 100% rename from ansible/03_epel.sh rename to ansible/04_epel.sh diff --git a/ansible/04_development.sh b/ansible/05_development.sh similarity index 100% rename from ansible/04_development.sh rename to ansible/05_development.sh diff --git a/ansible/05_check_macs_vagrant_eth1.sh b/ansible/06_check_macs_vagrant_eth1.sh similarity index 100% rename from ansible/05_check_macs_vagrant_eth1.sh rename to ansible/06_check_macs_vagrant_eth1.sh diff --git a/ansible/06_install_kubernetes_kubeadm_docker.sh b/ansible/07_install_kubernetes_kubeadm_docker.sh similarity index 100% rename from ansible/06_install_kubernetes_kubeadm_docker.sh rename to ansible/07_install_kubernetes_kubeadm_docker.sh diff --git a/ansible/07_bootstrap_kubernetes_kubeadm.sh b/ansible/08_bootstrap_kubernetes_kubeadm.sh similarity index 100% rename from ansible/07_bootstrap_kubernetes_kubeadm.sh rename to ansible/08_bootstrap_kubernetes_kubeadm.sh diff --git a/ansible/08_enable_kubectl_at_management.sh b/ansible/09_enable_kubectl_at_management.sh similarity index 100% rename from ansible/08_enable_kubectl_at_management.sh rename to ansible/09_enable_kubectl_at_management.sh diff --git a/ansible/10_calico_network_kubernetes.sh b/ansible/10_calico_network_kubernetes.sh new file mode 100755 index 0000000000000000000000000000000000000000..3d16a0614a9f58623688b53ee61ed1a7e195f039 --- /dev/null +++ b/ansible/10_calico_network_kubernetes.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -e + +# check if docker-compose is available if it is installed exist +hash docker-compose > /dev/null 2>&1 && exit 0 || true +echo Provisioning ansible... + +SCRIPT_DIR=$(dirname "$0") +cd $SCRIPT_DIR + +export ANSIBLE_CONFIG=$SCRIPT_DIR/ansible.cfg +ansible-playbook $SCRIPT_DIR/calico_network_kubernetes/site.yaml diff --git a/ansible/09_network_kubernetes.sh b/ansible/11_kubernetes_dashboard.sh similarity index 81% rename from ansible/09_network_kubernetes.sh rename to ansible/11_kubernetes_dashboard.sh index 7db6828551c3e9f5245dd19a18c378c3f7d71999..7049d5c642c69dedb8c0f267bebf028db941da9a 100755 --- a/ansible/09_network_kubernetes.sh +++ b/ansible/11_kubernetes_dashboard.sh @@ -9,4 +9,4 @@ SCRIPT_DIR=$(dirname "$0") cd $SCRIPT_DIR export ANSIBLE_CONFIG=$SCRIPT_DIR/ansible.cfg -ansible-playbook $SCRIPT_DIR/network_kubernetes/site.yaml +ansible-playbook $SCRIPT_DIR/kubernetes_dashboard/site.yaml diff --git a/ansible/12_enable_helm_at_management.sh b/ansible/12_enable_helm_at_management.sh new file mode 100755 index 0000000000000000000000000000000000000000..a32e24d340c595b5710c0f2c089f8532da1f0bc8 --- /dev/null +++ b/ansible/12_enable_helm_at_management.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -e + +# check if docker-compose is available if it is installed exist +hash docker-compose > /dev/null 2>&1 && exit 0 || true +echo Provisioning ansible... + +SCRIPT_DIR=$(dirname "$0") +cd $SCRIPT_DIR + +export ANSIBLE_CONFIG=$SCRIPT_DIR/ansible.cfg +ansible-playbook $SCRIPT_DIR/enable_helm_at_management/site.yaml diff --git a/ansible/13_install_metallb.sh b/ansible/13_install_metallb.sh new file mode 100755 index 0000000000000000000000000000000000000000..83762023218acdfb4327cc1f77939fbdf0749349 --- /dev/null +++ b/ansible/13_install_metallb.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -e + +# check if docker-compose is available if it is installed exist +hash docker-compose > /dev/null 2>&1 && exit 0 || true +echo Provisioning ansible... + +SCRIPT_DIR=$(dirname "$0") +cd $SCRIPT_DIR + +export ANSIBLE_CONFIG=$SCRIPT_DIR/ansible.cfg +ansible-playbook $SCRIPT_DIR/install_metallb/site.yaml -e "kubernetes_metallb_pool_start_ip=192.168.56.200" -e "kubernetes_metallb_pool_end_ip=192.168.56.210" diff --git a/ansible/14_install_nginx_ingress.sh b/ansible/14_install_nginx_ingress.sh new file mode 100755 index 0000000000000000000000000000000000000000..3260c1aecd9d53fc5af659c16a3504877225c9ce --- /dev/null +++ b/ansible/14_install_nginx_ingress.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -e + +# check if docker-compose is available if it is installed exist +hash docker-compose > /dev/null 2>&1 && exit 0 || true +echo Provisioning ansible... + +SCRIPT_DIR=$(dirname "$0") +cd $SCRIPT_DIR + +export ANSIBLE_CONFIG=$SCRIPT_DIR/ansible.cfg +ansible-playbook $SCRIPT_DIR/install_nginx_ingress/site.yaml diff --git a/ansible/add_required_ansible_modules/ansible_kubernetes/files/requirements.yaml b/ansible/add_required_ansible_modules/ansible_kubernetes/files/requirements.yaml new file mode 100755 index 0000000000000000000000000000000000000000..ca5ceb406daa1ce4170c0b9a8bec01480bc6e9c3 --- /dev/null +++ b/ansible/add_required_ansible_modules/ansible_kubernetes/files/requirements.yaml @@ -0,0 +1,4 @@ +--- +collections: +# With just the collection name +- community.kubernetes diff --git a/ansible/add_required_ansible_modules/ansible_kubernetes/tasks/main.yaml b/ansible/add_required_ansible_modules/ansible_kubernetes/tasks/main.yaml new file mode 100755 index 0000000000000000000000000000000000000000..c7dd1b766dcb7e3b8eff299dabe3dc7824c7763f --- /dev/null +++ b/ansible/add_required_ansible_modules/ansible_kubernetes/tasks/main.yaml @@ -0,0 +1,13 @@ +# https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ +--- +- block: + - name: Add ansible module requirements + # https://github.com/helm/helm/releases + shell: + cmd: ansible-galaxy install -r {{ role_path }}/files/requirements.yaml + register: add_ansible_modules + + - name: Add ansible module requirements + debug: + msg: "{{ add_ansible_modules.cmd }}" + become: yes \ No newline at end of file diff --git a/ansible/add_required_ansible_modules/site.yaml b/ansible/add_required_ansible_modules/site.yaml new file mode 100755 index 0000000000000000000000000000000000000000..f0c491fe00a0e23265b189006b54c342c30dfd93 --- /dev/null +++ b/ansible/add_required_ansible_modules/site.yaml @@ -0,0 +1,5 @@ +# modified from https://github.com/danpilch/easy-kubeadm +--- +- hosts: management + roles: + - name: ansible_kubernetes diff --git a/ansible/ansible.cfg b/ansible/ansible.cfg index 0b5ddb022944c58a58530ddc022eb9818a5df229..6fe4f641448e41c3d4cc427c0d026750b7ad60a0 100755 --- a/ansible/ansible.cfg +++ b/ansible/ansible.cfg @@ -3,3 +3,4 @@ host_key_checking = False inventory = hosts.yaml ; This is relative to ansible.cfg folder remote_user = vagrant +deprecation_warnings=False ; to remove the python version depretation warning diff --git a/ansible/bootstrap_kubernetes_kubeadm/roles/kubernetes_master/tasks/main.yaml b/ansible/bootstrap_kubernetes_kubeadm/roles/kubernetes_master/tasks/main.yaml index 1e92c6db340c326fdba04ce37ca72a96cec1245d..51932d63b15cfcf928694a876ee751eef33cfbd0 100755 --- a/ansible/bootstrap_kubernetes_kubeadm/roles/kubernetes_master/tasks/main.yaml +++ b/ansible/bootstrap_kubernetes_kubeadm/roles/kubernetes_master/tasks/main.yaml @@ -50,6 +50,6 @@ - name: Start secondary master nodes command debug: msg: "{{ kubeadm_master_join.cmd }}" - when: inventory_hostname in groups['kubernetes_masters'][1:] and is_multi_master + when: inventory_hostname in groups['kubernetes_masters'][1] become: yes \ No newline at end of file diff --git a/ansible/bootstrap_kubernetes_kubeadm/roles/kubernetes_node/tasks/main.yaml b/ansible/bootstrap_kubernetes_kubeadm/roles/kubernetes_node/tasks/main.yaml index fa581ef56f9bf902bacd2ffd9c0861314cc9692c..6ee633324e10f8829a62d9ff6c28a6460bebbadd 100755 --- a/ansible/bootstrap_kubernetes_kubeadm/roles/kubernetes_node/tasks/main.yaml +++ b/ansible/bootstrap_kubernetes_kubeadm/roles/kubernetes_node/tasks/main.yaml @@ -8,7 +8,7 @@ - name: Start secondary master nodes command debug: msg: "{{ kubeadm_node_join.cmd }}" - when: inventory_hostname in groups['kubernetes_nodes']['0'] + when: inventory_hostname in groups['kubernetes_nodes'][0] become: yes diff --git a/ansible/network_kubernetes/roles/calico/tasks/main.yaml b/ansible/calico_network_kubernetes/roles/calico/tasks/main.yaml similarity index 100% rename from ansible/network_kubernetes/roles/calico/tasks/main.yaml rename to ansible/calico_network_kubernetes/roles/calico/tasks/main.yaml diff --git a/ansible/network_kubernetes/site.yaml b/ansible/calico_network_kubernetes/site.yaml similarity index 100% rename from ansible/network_kubernetes/site.yaml rename to ansible/calico_network_kubernetes/site.yaml diff --git a/ansible/clean_kubernetes_docker/roles/clean-kubernetes/files/clean-kubernetes b/ansible/clean_kubernetes_docker/roles/clean-kubernetes/files/clean-kubernetes index d26d626f83c04f4642c8e3a64d247b50d119bd8c..d3298188dc7f0755e2fc1175103afe6c0d7dbdd6 100755 --- a/ansible/clean_kubernetes_docker/roles/clean-kubernetes/files/clean-kubernetes +++ b/ansible/clean_kubernetes_docker/roles/clean-kubernetes/files/clean-kubernetes @@ -7,5 +7,6 @@ rm -rf /var/lib/kubelet /etc/kubernetes /var/lib/etcd /etc/cni /etc/kubernetes mkdir -p /etc/kubernetes ip link | grep -q cbr0 && ip link set cbr0 down && ip link del cbr0 ip link | grep -q cni0 && ip link set cni0 down && ip link del cni0 +ip link | grep -q tunl0 && rmmod ipip systemctl start kubelet diff --git a/ansible/enable_helm_at_management/roles/helm/tasks/main.yaml b/ansible/enable_helm_at_management/roles/helm/tasks/main.yaml new file mode 100755 index 0000000000000000000000000000000000000000..a2e0c52c9feb0efde0d6056e853e422c2d1d1a50 --- /dev/null +++ b/ansible/enable_helm_at_management/roles/helm/tasks/main.yaml @@ -0,0 +1,22 @@ +# https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ +--- +- block: + - name: Retrieve helm binary archive. + # https://github.com/helm/helm/releases + unarchive: + src: https://get.helm.sh/helm-v3.6.0-linux-amd64.tar.gz + dest: /tmp + creates: /usr/bin/helm + remote_src: yes + + - name: Move helm binary into place. + command: cp /tmp/linux-amd64/helm /usr/bin/helm + args: + creates: /usr/bin/helm + become: yes + +- name: Add helm autocompletion to bashrc for user + lineinfile: + dest: "/home/{{ ansible_user }}/.bashrc" + line: "source <(helm completion bash)" + state: present diff --git a/ansible/enable_helm_at_management/site.yaml b/ansible/enable_helm_at_management/site.yaml new file mode 100755 index 0000000000000000000000000000000000000000..e899a28ae47ef30798dbe0d3a2d0278cdda70057 --- /dev/null +++ b/ansible/enable_helm_at_management/site.yaml @@ -0,0 +1,5 @@ +# modified from https://github.com/danpilch/easy-kubeadm +--- +- hosts: management + roles: + - name: helm diff --git a/ansible/enable_kubectl_at_management/roles/kubectl_user/tasks/main.yaml b/ansible/enable_kubectl_at_management/roles/kubectl_user/tasks/main.yaml index 5bd0bc3b49475bf0c986975a1404a93d6c4bbe2c..9b93030af8549705eecc6299b6ee96ec0ca6afb7 100755 --- a/ansible/enable_kubectl_at_management/roles/kubectl_user/tasks/main.yaml +++ b/ansible/enable_kubectl_at_management/roles/kubectl_user/tasks/main.yaml @@ -23,7 +23,7 @@ owner: "{{ ansible_user }}" group: "{{ ansible_user }}" -- name: Add kubectl autocompletion to bashrc for vagrant user +- name: Add kubectl autocompletion to bashrc for user lineinfile: dest: "/home/{{ ansible_user }}/.bashrc" line: "source <(kubectl completion bash)" diff --git a/ansible/enable_kubectl_at_management/site.yaml b/ansible/enable_kubectl_at_management/site.yaml index c1d1ca05ffc5d3a75c97d104435158448b058b50..72a6e89099c6a56bbb55b478067d2595c359e6e2 100755 --- a/ansible/enable_kubectl_at_management/site.yaml +++ b/ansible/enable_kubectl_at_management/site.yaml @@ -16,4 +16,7 @@ - hosts: management tasks: - name: Copy the file to {{ inventory_hostname }} - copy: src=buffer/admin.conf dest=/home/{{ ansible_user }}/.kube/config + copy: + src: buffer/admin.conf + dest: /home/{{ ansible_user }}/.kube/config + mode: '0600' \ No newline at end of file diff --git a/ansible/install_metallb/roles/metallb/tasks/main.yaml b/ansible/install_metallb/roles/metallb/tasks/main.yaml new file mode 100755 index 0000000000000000000000000000000000000000..ade07381d6ad0e7a3efe6a9de134abb8ba3bd238 --- /dev/null +++ b/ansible/install_metallb/roles/metallb/tasks/main.yaml @@ -0,0 +1,25 @@ +--- +- name: Define sysconfig kubelet + template: + src: "values.yaml.j2" + dest: "/tmp/values.yaml" + +- name: Install bitnami repo + kubernetes.core.helm_repository: + name: bitnami + repo_url: "{{ helm_chart_url }}" + +- name: Install metallb with helm + kubernetes.core.helm: + name: helm-bitnami-metallb + namespace: cluster-configuration + create_namespace: yes + chart_ref: bitnami/metallb + values_files: + - /tmp/values.yaml + register: install_metallb + +- name: Install metallb with helm command + debug: + msg: "{{ install_metallb.command }}" + diff --git a/ansible/install_metallb/roles/metallb/templates/values.yaml.j2 b/ansible/install_metallb/roles/metallb/templates/values.yaml.j2 new file mode 100755 index 0000000000000000000000000000000000000000..79ac4e479f80e9bd42be15dac5635a919832cdf5 --- /dev/null +++ b/ansible/install_metallb/roles/metallb/templates/values.yaml.j2 @@ -0,0 +1,6 @@ +configInline: + address-pools: + - name: default + protocol: layer2 + addresses: + - {{ kubernetes_metallb_pool_start_ip }}-{{ kubernetes_metallb_pool_end_ip }} \ No newline at end of file diff --git a/ansible/install_metallb/roles/metallb/vars/main.yaml b/ansible/install_metallb/roles/metallb/vars/main.yaml new file mode 100755 index 0000000000000000000000000000000000000000..44dc8aeb3b5ece182db458a3ab254cdcdea586c7 --- /dev/null +++ b/ansible/install_metallb/roles/metallb/vars/main.yaml @@ -0,0 +1,2 @@ +--- +helm_chart_url: "https://charts.bitnami.com/bitnami" \ No newline at end of file diff --git a/ansible/install_metallb/site.yaml b/ansible/install_metallb/site.yaml new file mode 100755 index 0000000000000000000000000000000000000000..4dd96d6061a5786750f8092bf0214690e6edc41f --- /dev/null +++ b/ansible/install_metallb/site.yaml @@ -0,0 +1,5 @@ +# modified from https://github.com/danpilch/easy-kubeadm +--- +- hosts: management + roles: + - name: metallb diff --git a/ansible/install_nginx_ingress/roles/nginx_ingress/tasks/main.yaml b/ansible/install_nginx_ingress/roles/nginx_ingress/tasks/main.yaml new file mode 100755 index 0000000000000000000000000000000000000000..fa2f3bc11ca13cdee912843d3be7e18cb5803be2 --- /dev/null +++ b/ansible/install_nginx_ingress/roles/nginx_ingress/tasks/main.yaml @@ -0,0 +1,18 @@ +--- +- name: Install bitnami repo + kubernetes.core.helm_repository: + name: bitnami + repo_url: "{{ helm_chart_url }}" + +- name: Install nginx ingress with helm + kubernetes.core.helm: + name: helm-bitnami-nginx-ingress + namespace: cluster-configuration + create_namespace: yes + chart_ref: bitnami/nginx-ingress-controller + register: install_nginx_ingress_controller + +- name: Install nginx ingress with helm command + debug: + msg: "{{ install_nginx_ingress_controller.command }}" + diff --git a/ansible/install_nginx_ingress/roles/nginx_ingress/vars/main.yaml b/ansible/install_nginx_ingress/roles/nginx_ingress/vars/main.yaml new file mode 100755 index 0000000000000000000000000000000000000000..44dc8aeb3b5ece182db458a3ab254cdcdea586c7 --- /dev/null +++ b/ansible/install_nginx_ingress/roles/nginx_ingress/vars/main.yaml @@ -0,0 +1,2 @@ +--- +helm_chart_url: "https://charts.bitnami.com/bitnami" \ No newline at end of file diff --git a/ansible/install_nginx_ingress/site.yaml b/ansible/install_nginx_ingress/site.yaml new file mode 100755 index 0000000000000000000000000000000000000000..a1bc3c207f1df4e8fb02d119da7d75abb13e881c --- /dev/null +++ b/ansible/install_nginx_ingress/site.yaml @@ -0,0 +1,6 @@ +# modified from https://github.com/danpilch/easy-kubeadm +--- +- hosts: management + roles: + - name: nginx_ingress + diff --git a/ansible/kubernetes_dashboard/roles/dashboard/tasks/main.yaml b/ansible/kubernetes_dashboard/roles/dashboard/tasks/main.yaml new file mode 100755 index 0000000000000000000000000000000000000000..dca4057a938a33912d03e374b5a8891b2709988c --- /dev/null +++ b/ansible/kubernetes_dashboard/roles/dashboard/tasks/main.yaml @@ -0,0 +1,9 @@ +# https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/ +# https://github.com/kubernetes/dashboard/tags +--- +- name: Install kubernetes dashboard + shell: "kubectl apply -f 'https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml'" + register: dashboard_network +- name: Install kubernetes dashboard command + debug: + msg: "{{ dashboard_network.cmd }}" \ No newline at end of file diff --git a/ansible/kubernetes_dashboard/site.yaml b/ansible/kubernetes_dashboard/site.yaml new file mode 100755 index 0000000000000000000000000000000000000000..a62720eb84154be9fb97e141445b26a5c0fb3ee8 --- /dev/null +++ b/ansible/kubernetes_dashboard/site.yaml @@ -0,0 +1,5 @@ +# modified from https://github.com/danpilch/easy-kubeadm +--- +- hosts: management + roles: + - name: dashboard diff --git a/scripts/ansible/install.sh b/scripts/ansible/install.sh index c2b65b2f82a8f2db30d6d61741b6ac146add1ed1..e1bdefa50c00e75a326218eef215faae105e53af 100755 --- a/scripts/ansible/install.sh +++ b/scripts/ansible/install.sh @@ -5,5 +5,17 @@ set -e hash ansible-playbook > /dev/null 2>&1 && exit 0 || true echo Provisioning ansible... -sudo dnf install epel-release -y -sudo dnf install ansible -y \ No newline at end of file +# this script is executed as sudo therefore no need of sudo +dnf install epel-release -y +dnf install python3-pip -y + +# https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#upgrading-ansible-with-pip +python3 -m pip install --upgrade pip +python3 -m pip install ansible + +# activamos el autocompletado para todos los comandos de python en concreto por ansible +python3 -m pip install argcomplete +/usr/local/bin/activate-global-python-argcomplete + +# Centos 8 vbox has no /usr/local/bin in root path, and is where pip install ansible executables +sed -i -e "s|\(Defaults secure_path.*\)|\1:/usr/local/bin|m" /etc/sudoers