125 lines
3.7 KiB
YAML
125 lines
3.7 KiB
YAML
---
|
|
# tasks file for master
|
|
- name: Initialize K8s cluster
|
|
shell: >
|
|
kubeadm init
|
|
--apiserver-advertise-address={{ master_apiserver_address }}
|
|
--pod-network-cidr={{ master_pod_network_cidr }}
|
|
args:
|
|
creates: /etc/kubernetes/admin.conf
|
|
|
|
- name: Setup kubeconfig for {{ master_user }}
|
|
shell: |
|
|
mkdir -p /home/{{ master_user }}/.kube
|
|
cp -i /etc/kubernetes/admin.conf /home/{{ master_user }}/.kube/config
|
|
chown {{ master_user }}:{{ master_user }} /home/{{ master_user }}/.kube/config
|
|
args:
|
|
creates: "/home/{{ master_user }}/.kube/config"
|
|
|
|
- name: Wait for API server to be ready
|
|
become: false
|
|
shell: kubectl cluster-info
|
|
register: api_check
|
|
until: api_check.rc == 0
|
|
retries: 30
|
|
delay: 10
|
|
changed_when: false
|
|
|
|
- name: Install Flannel CNI
|
|
become: false
|
|
shell: "kubectl apply -f {{ flannel_manifest_url }}"
|
|
|
|
- name: Check if metrics server is installed
|
|
become: false
|
|
shell: kubectl get deployment metrics-server -n kube-system -o name
|
|
register: metrics_check
|
|
failed_when: false
|
|
changed_when: false
|
|
|
|
- name: Remove taint
|
|
become: false
|
|
shell: "kubectl taint nodes {{ inventory_hostname }} node-role.kubernetes.io/control-plane:NoSchedule-"
|
|
register: taint_result
|
|
failed_when: taint_result.rc != 0 and 'not found' not in taint_result.stderr
|
|
changed_when: taint_result.rc == 0
|
|
when: master_remove_taint
|
|
|
|
- name: Install metrics server
|
|
become: false
|
|
shell: "kubectl apply -f {{ metrics_server_manifest_url }}"
|
|
when: metrics_check.rc != 0
|
|
|
|
- name: Check if insecure-tls flag is already set
|
|
become: false
|
|
shell: >
|
|
kubectl get deployment metrics-server -n kube-system
|
|
-o jsonpath='{.spec.template.spec.containers[0].args}'
|
|
register: metrics_args
|
|
changed_when: false
|
|
when: metrics_server_insecure_tls
|
|
|
|
- name: Patch metrics server to allow insecure TLS
|
|
become: false
|
|
shell: >
|
|
kubectl patch deployment metrics-server -n kube-system --type='json'
|
|
-p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--kubelet-insecure-tls"}]'
|
|
when:
|
|
- metrics_server_insecure_tls
|
|
- "'--kubelet-insecure-tls' not in metrics_args.stdout"
|
|
|
|
- name: Wait for metrics server to be ready
|
|
become: false
|
|
shell: kubectl get deployment metrics-server -n kube-system -o jsonpath='{.status.readyReplicas}'
|
|
register: ready_replicas
|
|
until: ready_replicas.stdout == "1"
|
|
retries: "{{ metrics_server_ready_retries }}"
|
|
delay: "{{ metrics_server_ready_delay }}"
|
|
changed_when: false
|
|
|
|
- name: Get join command
|
|
shell: kubeadm token create --print-join-command
|
|
register: join_command_raw
|
|
|
|
- name: Set join command fact
|
|
set_fact:
|
|
join_command: "{{ join_command_raw.stdout }}"
|
|
|
|
- name: Install Helm
|
|
shell: curl {{ install_helm }} | bash
|
|
args:
|
|
creates: /usr/local/bin/helm
|
|
|
|
- name: Install local-path-provisioner
|
|
become: false
|
|
shell: kubectl apply -f {{ local_path_provisioner_url }}
|
|
|
|
- name: Set local-path as default StorageClass
|
|
become: false
|
|
shell: >
|
|
kubectl patch storageclass local-path
|
|
-p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
|
|
|
|
- name: Create argocd namespace
|
|
become: false
|
|
shell: kubectl create namespace argocd
|
|
register: argocd_ns
|
|
failed_when: argocd_ns.rc != 0 and 'already exists' not in argocd_ns.stderr
|
|
changed_when: argocd_ns.rc == 0
|
|
|
|
- name: Install ArgoCD
|
|
become: false
|
|
shell: kubectl apply -n argocd -f {{ argocd_manifest_url }} --server-side
|
|
|
|
- name: Patch ArgoCD server to NodePort
|
|
become: false
|
|
shell: >
|
|
kubectl patch svc argocd-server -n argocd
|
|
-p '{"spec": {"type": "NodePort"}}'
|
|
|
|
- name: Clone Git repository
|
|
git:
|
|
repo: "{{ git_repo_url }}"
|
|
dest: /home/{{ master_user }}/K8s_project
|
|
version: main
|
|
become: false
|