Skip to content

Commit

Permalink
add k8s playbook
Browse files Browse the repository at this point in the history
sz9751210 committed Jan 16, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent 00863cc commit 2528734
Showing 13 changed files with 324 additions and 1 deletion.
68 changes: 68 additions & 0 deletions gen_k8s_gce.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
from package.generate_conf import setup_configurations, get_inventory_path, merge_and_delete_ini_files
from package.execute_command import run_ansible_playbook

default_dir = 'playbook'
project_id = 'project-id'
region = 'asia-east1'

group_vars = {
'project_id' : project_id,
'region' : region,
}

master_inventory_vars = {
'group' : 'k8s_master',
'hosts' :
[
{"hostname": "master", "IP": "10.140.0.28", "zone": "asia-east1-b"},
]
}

slave_inventory_vars = {
'group' : 'k8s_slave',
'hosts' :
[
{"hostname": "slave1", "IP": "10.140.0.29", "zone": "asia-east1-b"},
{"hostname": "slave2", "IP": "10.140.0.30", "zone": "asia-east1-b"},
]
}

instance_vars = {
'machine_type' : 'e2-medium',
'boot_disk_size' : '20',
'boot_disk_type' : 'pd-standard',
'scopes' : 'default',
'subnet' : 'projects/project-id/regions/asia-east1/subnetworks/asia-east1',
'labels': {
'env': 'dev',
},
'tags': ['dev', 'test'],
}

k8s_vars = {
'pod_cidr' : '10.244.0.0/16',
}

monitor_vars = {
'enabled_node_exporter': 'true',
}

configurations = {
'group_vars' : (group_vars, 'group_vars/all/env.j2', 'group_vars/all/env.yml'),
'master_inventory' : (master_inventory_vars, 'inventory/inventory.j2', 'inventory/master_inventory.yml'),
'slave_inventory' : (slave_inventory_vars, 'inventory/inventory.j2', 'inventory/slave_inventory.yml'),
'k8s' : (k8s_vars, 'vars/k8s/k8s_var.j2', 'vars/k8s/vars.yml'),
'instance' : (instance_vars, 'vars/instance/instance_var.j2', 'vars/instance/vars.yml'),
'monitor' : (monitor_vars, 'vars/monitor/monitor_var.j2', 'vars/monitor/vars.yml')
}

setup_configurations(configurations)
inventory_list = ['master_inventory','slave_inventory']
file_list = [configurations[config][2] for config in inventory_list]
inventory_path = f'{default_dir}/inventory/inventory.yml'
merge_and_delete_ini_files(file_list, inventory_path)

master_playbook_path = f'{default_dir}/create_k8s_master_gce.yml'
slave_playbook_path = f'{default_dir}/create_k8s_slave_gce.yml'
run_ansible_playbook(inventory_path, master_playbook_path)
run_ansible_playbook(inventory_path, slave_playbook_path)
46 changes: 46 additions & 0 deletions playbook/create_k8s_master_gce.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
- name: Create instances
hosts: k8s_master
gather_facts: no
connection: local
vars_files:
- vars/instance/vars.yml
tasks:
- include_tasks: roles/instance/tasks/create.yml
run_once: true

- name: Setup instances
hosts: k8s_master
become: yes
become_user: root
gather_facts: no
tasks:
- include_tasks: roles/instance/tasks/setup.yml

- name: Install k8s_master
hosts: k8s_master
become: yes
become_user: root
gather_facts: no
vars_files:
- vars/k8s/vars.yml
tasks:
- include_tasks: roles/k8s/tasks/main.yml

- name: Install Monitor
hosts: k8s_master
become: yes
become_user: root
gather_facts: no
vars_files:
- vars/monitor/vars.yml
tasks:
- include_tasks: roles/monitor/tasks/main.yml

- name: Install Google Ops Agent
hosts: k8s_master
become: yes
become_user: root
gather_facts: no
tasks:
- include_tasks: roles/ops_agent/tasks/main.yml
46 changes: 46 additions & 0 deletions playbook/create_k8s_slave_gce.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
- name: Create instances
hosts: k8s_slave
gather_facts: no
connection: local
vars_files:
- vars/instance/vars.yml
tasks:
- include_tasks: roles/instance/tasks/create.yml
run_once: true

- name: Setup instances
hosts: k8s_slave
become: yes
become_user: root
gather_facts: no
tasks:
- include_tasks: roles/instance/tasks/setup.yml

- name: Install k8s_slave
hosts: k8s_slave
become: yes
become_user: root
gather_facts: no
vars_files:
- vars/k8s/token
tasks:
- include_tasks: roles/k8s/tasks/main.yml

- name: Install Monitor
hosts: k8s_slave
become: yes
become_user: root
gather_facts: no
vars_files:
- vars/monitor/vars.yml
tasks:
- include_tasks: roles/monitor/tasks/main.yml

- name: Install Google Ops Agent
hosts: k8s_slave
become: yes
become_user: root
gather_facts: no
tasks:
- include_tasks: roles/ops_agent/tasks/main.yml
2 changes: 2 additions & 0 deletions playbook/files/k8s/containerd.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
overlay
br_netfilter
8 changes: 8 additions & 0 deletions playbook/files/k8s/daemon.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
3 changes: 3 additions & 0 deletions playbook/files/k8s/kubernetes.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
7 changes: 7 additions & 0 deletions playbook/files/k8s/kubernetes.repo
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl
2 changes: 1 addition & 1 deletion playbook/inventory/inventory.j2
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[localhost]
localhost internal_ip=127.0.0.1

{% if group in ['gce', 'docker', 'logstash', 'kibana', 'filebeat'] %}
{% if group in ['gce', 'docker', 'logstash', 'kibana', 'filebeat', 'k8s_master', 'k8s_slave'] %}
[{{ group }}]
{% for host in hosts -%}
{{ host.hostname }} internal_ip={{ host.IP }} zone={{ host.zone }}
83 changes: 83 additions & 0 deletions playbook/roles/k8s/tasks/install_k8s.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
---
# tasks file for k8s
- name: Copy kubernetes.repo
copy:
src: "{{ playbook_dir }}/files/k8s/kubernetes.repo"
dest: /etc/yum.repos.d/kubernetes.repo
owner: root
group: root
mode: '0644'

- name: Clean YUM cache and update cache
shell: |
sudo yum clean all && sudo yum -y makecache
- name: "Installing Kubeadm, Kubelet, and Kubectl"
yum:
name: [ 'kubectl', 'kubeadm', 'kubelet' ]
state: present
disable_excludes: kubernetes

- name: Disable swap
shell: |
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sudo swapoff -a
- name: Configure persistent loading of modules
copy:
src: "{{ playbook_dir }}/files/k8s/containerd.conf"
dest: /etc/modules-load.d/containerd.conf
owner: root
group: root
mode: '0644'

- name: Ensure overlay is enabled.
modprobe:
name: overlay
state: present

- name: Ensure br_netfilter is enabled.
modprobe:
name: br_netfilter
state: present

- name: Copy kubernetes.conf
copy:
src: "{{ playbook_dir }}/files/k8s/kubernetes.conf"
dest: /etc/sysctl.d/kubernetes.conf
owner: root
group: root
mode: '0644'

- name: Apply sysctl changes
shell: |
sudo sysctl --system
- name: Install Docker dependencies
yum:
name:
- yum-utils
- device-mapper-persistent-data
- lvm2
state: present

- name: Add Docker repository
shell: |
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- name: Install containerd
yum:
name: containerd
state: present
update_cache: yes

- name: Configure containerd
shell: |
sudo mkdir -p /etc/containerd
sudo containerd config default > /etc/containerd/config.toml
- name: Restart containerd
service:
name: containerd
state: restarted
enabled: yes
13 changes: 13 additions & 0 deletions playbook/roles/k8s/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
- name: Install k8s
include: install_k8s.yml

- name: Set up k8s init master
include: setup_k8s_master.yml
when:
- inventory_hostname in groups["k8s_master"]

- name: Set up k8s slave
include: setup_k8s_slave.yml
when:
- inventory_hostname in groups["k8s_slave"]
36 changes: 36 additions & 0 deletions playbook/roles/k8s/tasks/setup_k8s_master.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
# tasks file for kube_master
- name: Start kubelet
systemd:
name: kubelet
enabled: yes

- name: Pull kubeadm images
shell: sudo kubeadm config images pull

- name: Initial kubernetes
shell: |
sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --cri-socket /run/containerd/containerd.sock
- name: Copy kubernetes admin config to user home directory
shell: |
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- name: Create Calico resources
command: kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/tigera-operator.yaml
register: result

- name: Create custom resources
command: kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/custom-resources.yaml
register: result

- name: Get token
shell: |
declare token
token=$(kubeadm token create --print-join-command)
echo token: $token > /tmp/token
- name: Transfer token from master to local
fetch: src=/tmp/token dest={{ playbook_dir }}/vars/k8s/token flat=yes
10 changes: 10 additions & 0 deletions playbook/roles/k8s/tasks/setup_k8s_slave.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
# tasks file for kube_slave
- name: Start kubelet
systemd:
name: kubelet
enabled: yes

- name: "Joining the cluster"
shell: "{{ token }}"
ignore_errors: True
1 change: 1 addition & 0 deletions playbook/vars/k8s/k8s_var.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pod_cidr_network: {{ pod_cidr }}

0 comments on commit 2528734

Please sign in to comment.