From d6a8fbddcc00cedb7adcb239500ea06f8c344bd3 Mon Sep 17 00:00:00 2001 From: Yan Mo Date: Sat, 5 Mar 2022 02:10:14 -0800 Subject: [PATCH 1/5] added readme to k8s ansible deployment process --- .../k8s_deploy_fresh_machine/README.md | 169 ++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 scripts/ansible-playbook/k8s_deploy_fresh_machine/README.md 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..cc2ad15 --- /dev/null +++ b/scripts/ansible-playbook/k8s_deploy_fresh_machine/README.md @@ -0,0 +1,169 @@ +# 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 + 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` From 8fbb134702f358db1d00f1da94a218dfeca9cdba Mon Sep 17 00:00:00 2001 From: Yan Mo Date: Thu, 17 Mar 2022 01:47:16 -0700 Subject: [PATCH 2/5] added the script files --- .../k8s_deploy_fresh_machine/README.md | 46 ++++++++++--------- .../kube-cluster/hosts | 9 ++++ .../kube-cluster/kube-dependencies.yml | 44 ++++++++++++++++++ .../kube-cluster/master.yml | 17 +++++++ .../kube-cluster/workers.yml | 22 +++++++++ 5 files changed, 116 insertions(+), 22 deletions(-) create mode 100644 scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/hosts create mode 100644 scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/kube-dependencies.yml create mode 100644 scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/master.yml create mode 100644 scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/workers.yml diff --git a/scripts/ansible-playbook/k8s_deploy_fresh_machine/README.md b/scripts/ansible-playbook/k8s_deploy_fresh_machine/README.md index cc2ad15..f30cdfd 100644 --- a/scripts/ansible-playbook/k8s_deploy_fresh_machine/README.md +++ b/scripts/ansible-playbook/k8s_deploy_fresh_machine/README.md @@ -50,32 +50,32 @@ ___ state: present update_cache: true -- name: install APT Transport HTTPS - apt: - name: apt-transport-https - state: present + - 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-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: 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 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 + - name: install kubeadm + apt: + name: kubeadm=1.19.4-00 + state: present - hosts: master become: yes @@ -137,6 +137,8 @@ ___ 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 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..d1350bf --- /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.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 \ No newline at end of file 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/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 From 40264967ce489c3dc4dec3a30c025f0d28e78d3e Mon Sep 17 00:00:00 2001 From: Yan Mo Date: Thu, 16 Jun 2022 11:15:01 -0700 Subject: [PATCH 3/5] Update kube-dependencies.yml --- .../kube-cluster/kube-dependencies.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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 index d1350bf..c2bc8c1 100644 --- 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 @@ -25,13 +25,13 @@ - name: install kubelet apt: - name: kubelet=1.19.4-00 + name: kubelet=1.21.4-00 state: present update_cache: true - name: install kubeadm apt: - name: kubeadm=1.19.4-00 + name: kubeadm=1.21.4-00 state: present - hosts: master @@ -39,6 +39,6 @@ tasks: - name: install kubectl apt: - name: kubectl=1.19.4-00 - state: present - force: yes \ No newline at end of file + name: kubectl=1.21.4-00 + state: present + force: yes From 4d9d8ad033e0cbf5f318dda363f9b9fe11c23ae5 Mon Sep 17 00:00:00 2001 From: Yan Mo Date: Thu, 16 Jun 2022 11:15:52 -0700 Subject: [PATCH 4/5] Create prepare_machine.yml --- .../kube-cluster/prepare_machine.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/prepare_machine.yml 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 From 7e2a8902405c835745b27e03fb90ba819b2594ff Mon Sep 17 00:00:00 2001 From: Yan Mo Date: Thu, 16 Jun 2022 11:16:20 -0700 Subject: [PATCH 5/5] Create pull_image.yml --- .../kube-cluster/pull_image.yml | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 scripts/ansible-playbook/k8s_deploy_fresh_machine/kube-cluster/pull_image.yml 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