From a77f436878fa8f391e8239489bd660f73eedb30b Mon Sep 17 00:00:00 2001 From: adjoly Date: Tue, 12 Aug 2025 20:55:11 +0200 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=F0=9F=8F=97=EF=B8=8F=E3=80=8D=20wip:?= =?UTF-8?q?=20work=20in=20progress,=20not=20done=20yet.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- p1/Vagrantfile | 24 +++++++++++++ p1/playbooks.yml | 16 +++++++++ p1/roles/common/defaults/main.yml | 15 ++++++++ p1/roles/common/meta/main.yml | 2 ++ p1/roles/common/tasks/main.yml | 60 +++++++++++++++++++++++++++++++ p1/roles/master/tasks/main.yml | 23 ++++++++++++ p1/roles/worker/tasks/main.yml | 7 ++++ shell.nix | 1 + 8 files changed, 148 insertions(+) create mode 100644 p1/playbooks.yml create mode 100644 p1/roles/common/defaults/main.yml create mode 100644 p1/roles/common/meta/main.yml create mode 100644 p1/roles/common/tasks/main.yml create mode 100644 p1/roles/master/tasks/main.yml create mode 100644 p1/roles/worker/tasks/main.yml diff --git a/p1/Vagrantfile b/p1/Vagrantfile index 229c90e..cf0eaae 100644 --- a/p1/Vagrantfile +++ b/p1/Vagrantfile @@ -34,10 +34,34 @@ Vagrant.configure("2") do |config| config.vm.define "#{IOT_LOGIN}S" do |server| server.vm.hostname = "#{IOT_LOGIN}S" server.vm.network "private_network", ip: "192.168.56.110", auto_config: true + + server.vm.provision "ansible" do |ansible| + ansible.playbook = "playbooks.yml" + ansible.groups = { + "masters" => ["#{IOT_LOGIN}S"], + "workers" => ["#{IOT_LOGIN}SW"] + } + ansible.extra_vars = { + node_ip: "192.168.56.110", + node_name: "master", + pod_network: "192.168.56.64/26" + } + end end config.vm.define "#{IOT_LOGIN}SW" do |serverworker| serverworker.vm.hostname = "#{IOT_LOGIN}SW" serverworker.vm.network "private_network", ip: "192.168.56.111", auto_config: true + + serverworker.vm.provision "ansible" do |ansible| + ansible.playbook = "playbook.yml" + ansible.groups = { + "masters" => ["#{IOT_LOGIN}S"], + "workers" => ["#{IOT_LOGIN}SW"] + } + ansible.extra_vars = { + node_ip: "192.168.56.111", + } + end end end diff --git a/p1/playbooks.yml b/p1/playbooks.yml new file mode 100644 index 0000000..07d3d16 --- /dev/null +++ b/p1/playbooks.yml @@ -0,0 +1,16 @@ +--- + +- hosts: all + become: yes + roles: + - common + +- hosts: masters + become: yes + roles: + - master + +- hosts: workers + become: yes + roles: + - worker diff --git a/p1/roles/common/defaults/main.yml b/p1/roles/common/defaults/main.yml new file mode 100644 index 0000000..ce70e53 --- /dev/null +++ b/p1/roles/common/defaults/main.yml @@ -0,0 +1,15 @@ +gpg_keys: +- key: https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key + +repositories: +- repo: "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /" + +https_packages: +- name: apt-transport-https +- name: curl +- name: gpg + +k8s_packages: +- name: kubeadm +- name: kubelet +- name: kubectl diff --git a/p1/roles/common/meta/main.yml b/p1/roles/common/meta/main.yml new file mode 100644 index 0000000..23d65c7 --- /dev/null +++ b/p1/roles/common/meta/main.yml @@ -0,0 +1,2 @@ +--- +dependencies: [] diff --git a/p1/roles/common/tasks/main.yml b/p1/roles/common/tasks/main.yml new file mode 100644 index 0000000..a96afbe --- /dev/null +++ b/p1/roles/common/tasks/main.yml @@ -0,0 +1,60 @@ +--- + +- name: Install packages that allow apt to be used over HTTPS + apt: + name='{{ item.name }}' + state=present + update_cache=yes + with_items: "{{ https_packages | default([]) }}" + + +- name: Ensure keyrings directory exists + file: + path: /etc/apt/keyrings + state: directory + mode: '0755' + +- name: Download and install Kubernetes apt GPG key (dearmored) + shell: | + curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | gpg --dearmor | tee /etc/apt/keyrings/kubernetes-apt-keyring.gpg > /dev/null + args: + creates: /etc/apt/keyrings/kubernetes-apt-keyring.gpg + +- name: Add Kubernetes apt repository + apt_repository: + repo: "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /" + filename: kubernetes + state: present + + +- 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: Install Kubernetes binaries + apt: + name="{{ item.name }}" + state=present + update_cache=yes + with_items: "{{ k8s_packages | default([]) }}" + +- name: Configure node ip + lineinfile: + path: '/etc/systemd/system/kubelet.service.d/10-kubeadm.conf' + line: 'Environment="KUBELET_EXTRA_ARGS=--node-ip={{ node_ip }}"' + regexp: 'KUBELET_EXTRA_ARGS=' + insertafter: '\[Service\]' + state: present + notify: + - restart kubelet diff --git a/p1/roles/master/tasks/main.yml b/p1/roles/master/tasks/main.yml new file mode 100644 index 0000000..072173d --- /dev/null +++ b/p1/roles/master/tasks/main.yml @@ -0,0 +1,23 @@ +--- + +- name: Initialize the Kubernetes cluster using kubeadm + command: kubeadm init --apiserver-advertise-address="{{ node_ip }}" --apiserver-cert-extra-sans="{{ node_ip }}" --node-name="{{ node_name }}" --pod-network-cidr={{ pod_network }} + +- 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 flannel pod network + become: false + command: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml + +- 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" diff --git a/p1/roles/worker/tasks/main.yml b/p1/roles/worker/tasks/main.yml new file mode 100644 index 0000000..7e4498f --- /dev/null +++ b/p1/roles/worker/tasks/main.yml @@ -0,0 +1,7 @@ +--- + +- 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 diff --git a/shell.nix b/shell.nix index 2e5b96c..b44d423 100644 --- a/shell.nix +++ b/shell.nix @@ -8,6 +8,7 @@ pkgs.mkShell { vagrant kubectl just + ansible # Virtual Machine nixos-generators