diff --git a/ansible/roles/kubernetes_control_plane/tasks/longhorn.yaml b/ansible/roles/kubernetes_control_plane/tasks/longhorn.yaml new file mode 100644 index 0000000..4093402 --- /dev/null +++ b/ansible/roles/kubernetes_control_plane/tasks/longhorn.yaml @@ -0,0 +1,13 @@ +- name: Ensure Longhorn repository exists + kubernetes.core.helm_repository: + name: longhorn + url: https://charts.longhorn.io + +- name: Ensure Longhorn is installed + kubernetes.core.helm: + release_name: longhorn + release_namespace: longhorn-system + chart_ref: longhorn/longhorn + chart_version: 1.12.0 + create_namespace: true + run_once: true diff --git a/ansible/roles/kubernetes_control_plane/tasks/main.yaml b/ansible/roles/kubernetes_control_plane/tasks/main.yaml index 7a1512e..12bf677 100644 --- a/ansible/roles/kubernetes_control_plane/tasks/main.yaml +++ b/ansible/roles/kubernetes_control_plane/tasks/main.yaml @@ -1,65 +1,63 @@ -- name: Install kube-vip +- name: Install kube-vip static pod ansible.builtin.import_tasks: kube-vip.yaml +- name: Copy kubeadm config + ansible.builtin.template: + src: kubeadm-config.yaml.j2 + dest: /tmp/kubeadm-config.yaml + mode: "0600" + - name: Initialise Kubernetes cluster - ansible.builtin.command: - argv: - - kubeadm - - init - - --pod-network-cidr=172.16.0.0/16 - - --control-plane-endpoint={{ vip_address }}:6443 - - --upload-certs + ansible.builtin.command: kubeadm init --config /tmp/kubeadm-config.yaml args: creates: /etc/kubernetes/admin.conf run_once: true +- name: Copy Kubernetes Admin Configuration + ansible.builtin.include_tasks: copy-config.yaml + run_once: true + + - name: Generate Join Command - ansible.builtin.command: - argv: - - kubeadm - - token - - create - - --print-join-command + ansible.builtin.command: kubeadm token create --print-join-command register: kubernetes_control_plane_join_command run_once: true changed_when: true - name: Get Certificate Key - ansible.builtin.shell: - cmd: set -o pipefail && kubeadm init phase upload-certs --upload-certs | tail -n 1 + ansible.builtin.shell: set -o pipefail && kubeadm init phase upload-certs --upload-certs | tail -n 1 register: kubernetes_control_plane_certificate_key run_once: true changed_when: true - name: Join Additional Control Planes - ansible.builtin.command: - cmd: "{{ kubernetes_control_plane_join_command.stdout }} --control-plane --certificate-key {{ kubernetes_control_plane_certificate_key.stdout }}" + ansible.builtin.command: >- + {{ kubernetes_control_plane_join_command.stdout }} + --control-plane + --certificate-key + {{ kubernetes_control_plane_certificate_key.stdout }} args: creates: /etc/kubernetes/admin.conf -- name: Copy Kubernetes Admin Config - ansible.builtin.command: "{{ item }}" - loop: - - mkdir -p $HOME/.kube - - cp /etc/kubernetes/admin.conf $HOME/.kube/config - - chown $(id -u):$(id -g) $HOME/.kube/config - args: - creates: $HOME/.kube/config + +- name: Copy Kubernetes Admin Configuration + ansible.builtin.include_tasks: copy-config.yaml + - name: Untaint control planes ansible.builtin.import_tasks: untaint.yaml -- name: Install Kubernetes CLI - ansible.builtin.apt: - pkg: - - kubectl - state: present -- name: Install Helm - ansible.builtin.import_tasks: helm.yaml +- name: Install Tools + ansible.builtin.import_tasks: tools.yaml + - name: Install Cilium CNI ansible.builtin.import_tasks: cilium.yaml + + +# - name: Install Longhorn CSI +# ansible.builtin.import_tasks: longhorn.yaml diff --git a/ansible/roles/kubernetes_control_plane/tasks/helm.yaml b/ansible/roles/kubernetes_control_plane/tasks/tools.yaml similarity index 83% rename from ansible/roles/kubernetes_control_plane/tasks/helm.yaml rename to ansible/roles/kubernetes_control_plane/tasks/tools.yaml index aedfbeb..999ca3a 100644 --- a/ansible/roles/kubernetes_control_plane/tasks/helm.yaml +++ b/ansible/roles/kubernetes_control_plane/tasks/tools.yaml @@ -8,8 +8,11 @@ signed_by: https://packages.buildkite.com/helm-linux/helm-debian/gpgkey state: present -- name: Install Helm + +- name: Install Kubernetes Tools ansible.builtin.apt: - name: helm + pkg: + - kubectl + - helm state: present update_cache: true diff --git a/ansible/roles/kubernetes_control_plane/templates/kubeadm-config.yaml.j2 b/ansible/roles/kubernetes_control_plane/templates/kubeadm-config.yaml.j2 new file mode 100644 index 0000000..e1e3069 --- /dev/null +++ b/ansible/roles/kubernetes_control_plane/templates/kubeadm-config.yaml.j2 @@ -0,0 +1,15 @@ +# Configuration reference can be found at https://kubernetes.io/docs/reference/config-api/kubeadm-config.v1beta4/ +apiVersion: kubeadm.k8s.io/v1beta4 +kind: InitConfiguration +--- +apiVersion: kubeadm.k8s.io/v1beta4 +kind: ClusterConfiguration +clusterName: aeon +controlPlaneEndpoint: "{{ vip_address }}" +--- +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +cgroupDriver: systemd +failSwapOn: false +memorySwap: + swapBehaviour: LimitedSwap