diff --git a/scripts/ansible-playbook/k8s_deploy_fresh_machine/README.md b/scripts/ansible-playbook/k8s_deploy_fresh_machine/README.md new file mode 100644 index 0000000..f30cdfd --- /dev/null +++ b/scripts/ansible-playbook/k8s_deploy_fresh_machine/README.md @@ -0,0 +1,171 @@ +# Install k8s with Ansible use root user on ubuntu 18.04 + + +### Install python3 and etc... +`apt update` + +`sudo apt install python3-dev python3-venv libffi-dev gcc libssl-dev git` + +### Install ansible with python3 on one machine +`pip install 'ansible<=2.11'` + +### Reference the bellow link, but need to make minor adjustments +https://www.digitalocean.com/community/tutorials/how-to-create-a-kubernetes-cluster-using-kubeadm-on-ubuntu-18-04 + +___ + +## Step 1: prepare ansible and setup inventory (list of machines) + +``` +mkdir ~/kube-cluster +cd ~/kube-cluster +vim ~/kube-cluster/hosts +``` + +``` +[masters] +master ansible_host=master_ip ansible_user=root + +[workers] +worker1 ansible_host=worker_1_ip ansible_user=root +worker2 ansible_host=worker_2_ip ansible_user=root + +[all:vars] +ansible_python_interpreter=/usr/bin/python3 +``` + +___ + +## Step 2: Install K8s dependencies (include Docker) + +`vim ~/kube-cluster/kube-dependencies.yml` + +``` +- hosts: all + become: yes + tasks: + - name: install Docker + apt: + name: docker.io + state: present + update_cache: true + + - name: install APT Transport HTTPS + apt: + name: apt-transport-https + state: present + + - name: add Kubernetes apt-key + apt_key: + url: https://packages.cloud.google.com/apt/doc/apt-key.gpg + state: present + + - name: add Kubernetes' APT repository + apt_repository: + repo: deb http://apt.kubernetes.io/ kubernetes-xenial main + state: present + filename: 'kubernetes' + + - name: install kubelet + apt: + name: kubelet=1.19.4-00 + state: present + update_cache: true + + - name: install kubeadm + apt: + name: kubeadm=1.19.4-00 + state: present + +- hosts: master + become: yes + tasks: + - name: install kubectl + apt: + name: kubectl=1.19.4-00 + state: present + force: yes +``` + +### Run the above ansilbe playbook, with the host folder setuped earlier +`ansible-playbook -i hosts ~/kube-cluster/kube-dependencies.yml` + +___ + +## Step 3: Set up Master Node +`vim ~/kube-cluster/master.yml` + +``` +- hosts: master + become: yes + tasks: + - name: initialize the cluster + shell: kubeadm init --pod-network-cidr=10.244.0.0/16 >> cluster_initialized.txt + args: + chdir: $HOME + creates: cluster_initialized.txt + + - name: install Pod network, flannel + environment: + KUBECONFIG: /etc/kubernetes/admin.conf + become: yes + shell: kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml >> pod_network_setup.txt + args: + chdir: $HOME + creates: pod_network_setup.txt +``` + +### Run the above ansilbe playbook, with the host folder setuped earlier +`ansible-playbook -i hosts ~/kube-cluster/master.yml` + +### To check the installation of k8s master node + +``` +kubectl get nodes +kubectl get pods -A +``` + +___ + +## Step 4: Setup Worker Nodes + +`vim ~/kube-cluster/workers.yml` + +``` +- hosts: master + become: yes + gather_facts: false + tasks: + - name: get join command + environment: + KUBECONFIG: /etc/kubernetes/admin.conf + shell: kubeadm token create --print-join-command + register: join_command_raw + + - name: set join command + set_fact: + join_command: "{{ join_command_raw.stdout_lines[0] }}" + +- hosts: workers + become: yes + tasks: + - name: join cluster + shell: "{{ hostvars['master'].join_command }} >> node_joined.txt" + args: + chdir: $HOME + creates: node_joined.txt +``` + + +### Run the above ansilbe playbook, with the host folder setuped earlier +`ansible-playbook -i hosts ~/kube-cluster/workers.yml` + +### On k8s control node export k8s admin conf. +### Put following line in /root/.profile + +`export KUBECONFIG=/etc/kubernetes/admin.conf` + +### Then exit and log back in again + +### To verify the Cluster +`kubectl get nodes -o wide` diff --git a/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/hosts b/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/hosts new file mode 100644 index 0000000..5b9b3bc --- /dev/null +++ b/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/hosts @@ -0,0 +1,9 @@ +[masters] +master ansible_host=master_ip ansible_user=root + +[workers] +worker1 ansible_host=worker_1_ip ansible_user=root +worker2 ansible_host=worker_2_ip ansible_user=root + +[all:vars] +ansible_python_interpreter=/usr/bin/python3 \ No newline at end of file diff --git a/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/kube-dependencies.yml b/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/kube-dependencies.yml new file mode 100644 index 0000000..c2bc8c1 --- /dev/null +++ b/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/kube-dependencies.yml @@ -0,0 +1,44 @@ +- hosts: all + become: yes + tasks: + - name: install Docker + apt: + name: docker.io + state: present + update_cache: true + + - name: install APT Transport HTTPS + apt: + name: apt-transport-https + state: present + + - name: add Kubernetes apt-key + apt_key: + url: https://packages.cloud.google.com/apt/doc/apt-key.gpg + state: present + + - name: add Kubernetes' APT repository + apt_repository: + repo: deb http://apt.kubernetes.io/ kubernetes-xenial main + state: present + filename: 'kubernetes' + + - name: install kubelet + apt: + name: kubelet=1.21.4-00 + state: present + update_cache: true + + - name: install kubeadm + apt: + name: kubeadm=1.21.4-00 + state: present + +- hosts: master + become: yes + tasks: + - name: install kubectl + apt: + name: kubectl=1.21.4-00 + state: present + force: yes diff --git a/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/master.yml b/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/master.yml new file mode 100644 index 0000000..4767b39 --- /dev/null +++ b/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/master.yml @@ -0,0 +1,17 @@ +- hosts: master + become: yes + tasks: + - name: initialize the cluster + shell: kubeadm init --pod-network-cidr=10.244.0.0/16 >> cluster_initialized.txt + args: + chdir: $HOME + creates: cluster_initialized.txt + + - name: install Pod network, flannel + environment: + KUBECONFIG: /etc/kubernetes/admin.conf + become: yes + shell: kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml >> pod_network_setup.txt + args: + chdir: $HOME + creates: pod_network_setup.txt \ No newline at end of file diff --git a/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/prepare_machine.yml b/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/prepare_machine.yml new file mode 100644 index 0000000..4dff50c --- /dev/null +++ b/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/prepare_machine.yml @@ -0,0 +1,14 @@ +- hosts: workers + become: yes + tasks: + - name: install pip + apt: + name: python3-pip + state: present + - name: Install Docker python package + pip: + name: docker + - name: Install ovs + apt: + name: openvswitch-switch=2.9.8-0ubuntu0.18.04.2 + state: present diff --git a/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/pull_image.yml b/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/pull_image.yml new file mode 100644 index 0000000..20197f5 --- /dev/null +++ b/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/pull_image.yml @@ -0,0 +1,63 @@ +- hosts: workers + become: yes + tasks: + - name: pull osrg/ryu + docker_image: + name: osrg/ryu + - name: pull phudtran/aca + docker_image: + name: phudtran/aca + - name: pull yanmo96/ovs_only + docker_image: + name: yanmo96/ovs_only + - name: pull yanmo96/aca_build_standard:v2 + docker_image: + name: yanmo96/aca_build_standard:v2 + - name: pull yanmo96/network_config_manager:v1.0 + docker_image: + name: yanmo96/network_config_manager:v1.0 + - name: pull yanmo96/vpc_manager:v1.0 + docker_image: + name: yanmo96/vpc_manager:v1.0 + - name: pull yanmo96/subnet_manager:v1.0 + docker_image: + name: yanmo96/subnet_manager:v1.0 + - name: pull yanmo96/security_group_manager:v1.0 + docker_image: + name: yanmo96/security_group_manager:v1.0 + - name: pull yanmo96/route_manager:v1.0 + docker_image: + name: yanmo96/route_manager:v1.0 + - name: pull yanmo96/quota_manager:v1.0 + docker_image: + name: yanmo96/quota_manager:v1.0 + - name: pull yanmo96/private_ip_manager:v1.0 + docker_image: + name: yanmo96/private_ip_manager:v1.0 + - name: pull yanmo96/port_manager:v1.0 + docker_image: + name: yanmo96/port_manager:v1.0 + - name: pull yanmo96/node_manager:v1.0 + docker_image: + name: yanmo96/node_manager:v1.0 + - name: pull yanmo96/network_acl_manager:v1.0 + docker_image: + name: yanmo96/network_acl_manager:v1.0 + - name: pull yanmo96/mac_manager:v1.0 + docker_image: + name: yanmo96/mac_manager:v1.0 + - name: pull yanmo96/gateway_manager:v1.0 + docker_image: + name: yanmo96/gateway_manager:v1.0 + - name: pull yanmo96/elastic_ip_manager:v1.0 + docker_image: + name: yanmo96/elastic_ip_manager:v1.0 + - name: pull yanmo96/data_plane_manager:v1.0 + docker_image: + name: yanmo96/data_plane_manager:v1.0 + - name: pull yanmo96/api_gateway:v1.0 + docker_image: + name: yanmo96/api_gateway:v1.0 + - name: pull yanmo96/ignite_alcor:lib8 + docker_image: + name: yanmo96/ignite_alcor:lib8 diff --git a/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/workers.yml b/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/workers.yml new file mode 100644 index 0000000..6ee62a3 --- /dev/null +++ b/scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/workers.yml @@ -0,0 +1,22 @@ +- hosts: master + become: yes + gather_facts: false + tasks: + - name: get join command + environment: + KUBECONFIG: /etc/kubernetes/admin.conf + shell: kubeadm token create --print-join-command + register: join_command_raw + + - name: set join command + set_fact: + join_command: "{{ join_command_raw.stdout_lines[0] }}" + +- hosts: workers + become: yes + tasks: + - name: join cluster + shell: "{{ hostvars['master'].join_command }} >> node_joined.txt" + args: + chdir: $HOME + creates: node_joined.txt \ No newline at end of file