Update a boatload of ansible stuff

This commit is contained in:
2025-08-16 22:16:48 -03:00
parent d39b06eb12
commit 455dc27743
32 changed files with 27146 additions and 102 deletions
+8
View File
@@ -0,0 +1,8 @@
[init]
p4 ansible_host=p4.vps.nyeki.dev ansible_user=root rack=ge-dc1-rack1
[master]
p5 ansible_host=p5.vps.nyeki.dev ansible_user=root rack=ge-dc1-rack2
[worker]
p6 ansible_host=p6.vps.nyeki.dev ansible_user=root rack=ge-dc1-rack3
-2
View File
@@ -1,2 +0,0 @@
[dev]
p4 ansible_host=p4.vps.nyeki.dev ansible_user=root
File diff suppressed because it is too large Load Diff
+23
View File
@@ -0,0 +1,23 @@
apiVersion: v1
kind: Namespace
metadata:
name: scylla
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: scylla
namespace: argocd
spec:
project: default
source:
repoURL: 'https://git.nyeki.dev/payphone/payphone.git'
targetRevision: rewrite
path: k8s/argo-cd/scylla
destination:
server: 'https://kubernetes.default.svc'
namespace: scylla
syncPolicy:
automated:
prune: true
selfHeal: true
+117
View File
@@ -0,0 +1,117 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: scylladb-config
data:
scylla.yaml: |
authenticator: PasswordAuthenticator
authorizer: CassandraAuthorizer
---
apiVersion: scylla.scylladb.com/v1
kind: ScyllaCluster
metadata:
name: scylladb
spec:
repository: docker.io/scylladb/scylla
version: 2025.1.5
agentVersion: 3.5.1
developerMode: false
automaticOrphanedNodeCleanup: true
sysctls:
- fs.aio-max-nr=30000000
datacenter:
name: ge-dc1
racks:
- name: ge-dc1-rack1
members: 1
scyllaConfig: scylladb-config
storage:
capacity: 50Gi
storageClassName: scylladb-local-xfs
resources:
requests:
cpu: 1
memory: 8Gi
limits:
cpu: 1
memory: 8Gi
placement:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- ge-dc1-rack1
- key: scylla.scylladb.com/node-type
operator: In
values:
- scylla
tolerations:
- key: scylla-operator.scylladb.com/dedicated
operator: Equal
value: scyllaclusters
effect: NoSchedule
- name: ge-dc1-rack2
members: 1
scyllaConfig: scylladb-config
storage:
capacity: 50Gi
storageClassName: scylladb-local-xfs
resources:
requests:
cpu: 1
memory: 8Gi
limits:
cpu: 1
memory: 8Gi
placement:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- ge-dc1-rack2
- key: scylla.scylladb.com/node-type
operator: In
values:
- scylla
tolerations:
- key: scylla-operator.scylladb.com/dedicated
operator: Equal
value: scyllaclusters
effect: NoSchedule
- name: ge-dc1-rack3
members: 1
scyllaConfig: scylladb-config
storage:
capacity: 50Gi
storageClassName: scylladb-local-xfs
resources:
requests:
cpu: 1
memory: 8Gi
limits:
cpu: 1
memory: 8Gi
placement:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- ge-dc1-rack3
- key: scylla.scylladb.com/node-type
operator: In
values:
- scylla
tolerations:
- key: scylla-operator.scylladb.com/dedicated
operator: Equal
value: scyllaclusters
effect: NoSchedule
+9
View File
@@ -0,0 +1,9 @@
uv run ansible-playbook -i inventory-dev.ini playbooks/01-setup.yml
uv run ansible-playbook -i inventory-dev.ini playbooks/02-copy-k8s-files.yml
uv run ansible-playbook -i inventory-dev.ini playbooks/03-argo-cd.yml
uv run ansible-playbook -i inventory-dev.ini playbooks/04-secrets.yml --ask-vault-pass
uv run ansible-playbook -i inventory-dev.ini playbooks/05-cert-manager.yml
uv run ansible-playbook -i inventory-dev.ini playbooks/06-prometheus-operator.yml
uv run ansible-playbook -i inventory-dev.ini playbooks/07-scylla-operator.yml
uv run ansible-playbook -i inventory-dev.ini playbooks/08-scylla-cluster.yml
uv run ansible-playbook -i inventory-dev.ini playbooks/09-scylla-manager.yml
+116
View File
@@ -0,0 +1,116 @@
- name: Download K3s Setup Script and K8s Python Lib on All Nodes
hosts: all
become: true
strategy: linear
tasks:
- name: Install curl
ansible.builtin.apt:
name: curl
state: present
when: ansible_os_family == "Debian"
- name: Download k3s install script
ansible.builtin.get_url:
url: https://get.k3s.io
dest: /tmp/k3s_install.sh
mode: '0755'
- name: Install Python Kubernetes client
ansible.builtin.apt:
name: python3-kubernetes
state: present
- name: Disable UFW
ansible.builtin.command: ufw disable
changed_when: false
- name: Set up K3s on Init Node
hosts: init
become: true
strategy: linear
tasks:
- name: Run k3s Installer
ansible.builtin.shell: |
INSTALL_K3S_EXEC="server --tls-san {{ ansible_host }} --flannel-backend=wireguard-native --cluster-init" \
sh /tmp/k3s_install.sh
args:
creates: /usr/local/bin/k3s
- name: Ensure K3s Service is Started and Enabled
ansible.builtin.systemd:
name: k3s
enabled: true
state: started
- name: Get Joining Token
ansible.builtin.command: cat /var/lib/rancher/k3s/server/node-token
register: k3s_token
run_once: true
tags: skip_ansible_lint
changed_when: false
- name: Set up K3s on Master Nodes
hosts: master
become: true
strategy: linear
tasks:
- name: Run k3s Installer
ansible.builtin.shell: |
INSTALL_K3S_EXEC="server --flannel-backend=wireguard-native --tls-san {{ ansible_host }}" \
K3S_URL="https://{{ hostvars[groups['init'][0]].ansible_host }}:6443" \
K3S_TOKEN="{{ hostvars[groups['init'][0]].k3s_token.stdout }}" sh /tmp/k3s_install.sh
args:
creates: /usr/local/bin/k3s
- name: Ensure k3s service is started and enabled
ansible.builtin.systemd:
name: k3s
enabled: true
state: started
- name: Set up K3s on Worker Nodes
hosts: worker
become: true
strategy: linear
tasks:
- name: Run k3s Installer
ansible.builtin.shell: |
INSTALL_K3S_EXEC="agent" K3S_URL="https://{{ hostvars[groups['init'][0]].ansible_host }}:6443" \
K3S_TOKEN="{{ hostvars[groups['init'][0]].k3s_token.stdout }}" sh /tmp/k3s_install.sh
args:
creates: /usr/local/bin/k3s
- name: Ensure k3s service is started and enabled
ansible.builtin.systemd:
name: k3s-agent
enabled: true
state: started
- name: Install Helm in All Nodes
hosts: all
become: true
strategy: linear
tasks:
- name: Download Helm Installation Script
ansible.builtin.get_url:
url: https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
dest: /tmp/get_helm.sh
mode: '0755'
- name: Run helm installer
ansible.builtin.command: /tmp/get_helm.sh
args:
creates: /usr/local/bin/helm
- name: Wait for All K3s Nodes to Become Ready
hosts: init
become: true
tasks:
- name: Wait until all nodes report Ready
ansible.builtin.shell: |
kubectl wait --for=condition=Ready node --all --timeout=10m
register: wait_nodes
retries: 5
delay: 30
until: wait_nodes.rc == 0
changed_when: false
@@ -1,9 +1,10 @@
- name: Copy K8s files to node - name: Copy K8s files to node
hosts: dev hosts: init
become: true become: true
gather_facts: false
vars: vars:
k8s_files_src: "{{ playbook_dir }}/../../k8s/scylla" k8s_files_src: "{{ playbook_dir }}/../k8s"
k8s_files_dest: /tmp/k8s/scylla k8s_files_dest: /tmp/k8s
tasks: tasks:
- name: Create destination directory for K8s files - name: Create destination directory for K8s files
ansible.builtin.file: ansible.builtin.file:
@@ -12,7 +13,7 @@
mode: '0644' mode: '0644'
- name: Copy K8s files to destination - name: Copy K8s files to destination
ansible.builtin.copy: ansible.posix.synchronize:
src: "{{ k8s_files_src }}/" src: "{{ k8s_files_src }}/"
dest: "{{ k8s_files_dest }}/" dest: "{{ k8s_files_dest }}/"
mode: '0644' recursive: true
+17
View File
@@ -0,0 +1,17 @@
- name: Set up ArgoCD
hosts: init
become: true
tasks:
- name: Create ArgoCD namespace
kubernetes.core.k8s:
api_version: v1
kind: Namespace
name: argocd
kubeconfig: /etc/rancher/k3s/k3s.yaml
- name: Apply ArgoCD installation manifest
kubernetes.core.k8s:
state: present
src: /tmp/k8s/ansible/argo-cd/01-argo-cd.yml
namespace: argocd
kubeconfig: /etc/rancher/k3s/k3s.yaml
@@ -1,8 +1,9 @@
- name: Set up repository secrets - name: Set up repository secrets
hosts: dev hosts: init
become: true become: true
gather_facts: false
vars_files: vars_files:
- ../secrets.yml - 00-secrets.yml
tasks: tasks:
- name: Add private Git repo credentials to ArgoCD - name: Add private Git repo credentials to ArgoCD
kubernetes.core.k8s: kubernetes.core.k8s:
@@ -13,9 +14,11 @@
metadata: metadata:
name: payphone-repo-creds name: payphone-repo-creds
namespace: argocd namespace: argocd
annotations: labels:
argocd.argoproj.io/secret-type: repository argocd.argoproj.io/secret-type: repository
type: Opaque
stringData: stringData:
type: git
url: https://git.nyeki.dev/payphone/payphone.git url: https://git.nyeki.dev/payphone/payphone.git
username: "{{ gitlab_username }}" username: "{{ gitlab_username }}"
password: "{{ gitlab_pat }}" password: "{{ gitlab_pat }}"
@@ -1,5 +1,5 @@
- name: Set up Cert-Manager - name: Set up Cert-Manager
hosts: dev hosts: init
become: true become: true
vars: vars:
cert_manager_ns: cert-manager cert_manager_ns: cert-manager
@@ -14,7 +14,7 @@
- name: Apply Cert-Manager YAML - name: Apply Cert-Manager YAML
kubernetes.core.k8s: kubernetes.core.k8s:
state: present state: present
src: "/tmp/k8s/scylla/01-cert-manager.yml" src: "/tmp/k8s/ansible/scylla/01-cert-manager.yml"
kubeconfig: /etc/rancher/k3s/k3s.yaml kubeconfig: /etc/rancher/k3s/k3s.yaml
- name: Wait for Cert-Manager CRDs - name: Wait for Cert-Manager CRDs
@@ -1,5 +1,5 @@
- name: Set up Prometheus operator - name: Set up Prometheus operator
hosts: dev hosts: init
become: true become: true
vars: vars:
prometheus_crds: prometheus_crds:
@@ -9,7 +9,7 @@
tasks: tasks:
- name: Apply Prometheus operator server-side - name: Apply Prometheus operator server-side
ansible.builtin.command: | ansible.builtin.command: |
kubectl apply --server-side -f /tmp/k8s/scylla/02-prometheus-operator.yml -n prometheus-operator kubectl apply --server-side -f /tmp/k8s/ansible/scylla/02-prometheus-operator.yml -n prometheus-operator
environment: environment:
KUBECONFIG: /etc/rancher/k3s/k3s.yaml KUBECONFIG: /etc/rancher/k3s/k3s.yaml
changed_when: false changed_when: false
@@ -1,5 +1,5 @@
- name: Set up Scylla Operator, NodeConfig, Local CSI Driver, and Scylla Manager - name: Set up Scylla Operator, NodeConfig, and the Local CSI Driver
hosts: dev hosts: init
become: true become: true
vars: vars:
scylla_crds: scylla_crds:
@@ -13,7 +13,7 @@
tasks: tasks:
- name: Apply Scylla Operator YAML - name: Apply Scylla Operator YAML
ansible.builtin.command: | ansible.builtin.command: |
kubectl apply --server-side -f /tmp/k8s/scylla/03-scylla-operator.yml -n scylla-operator kubectl apply --server-side -f /tmp/k8s/ansible/scylla/03-scylla-operator.yml -n scylla-operator
environment: environment:
KUBECONFIG: /etc/rancher/k3s/k3s.yaml KUBECONFIG: /etc/rancher/k3s/k3s.yaml
changed_when: false changed_when: false
@@ -36,7 +36,7 @@
- name: Apply Scylla NodeConfig YAML - name: Apply Scylla NodeConfig YAML
kubernetes.core.k8s: kubernetes.core.k8s:
state: present state: present
src: "/tmp/k8s/scylla/04-scylla-node-config.yml" src: "/tmp/k8s/ansible/scylla/04-scylla-node-config.yml"
namespace: scylla-operator namespace: scylla-operator
kubeconfig: /etc/rancher/k3s/k3s.yaml kubeconfig: /etc/rancher/k3s/k3s.yaml
@@ -66,25 +66,15 @@
kubectl -n=local-csi-driver rollout status --timeout=10m daemonset.apps/local-csi-driver kubectl -n=local-csi-driver rollout status --timeout=10m daemonset.apps/local-csi-driver
changed_when: false changed_when: false
- name: Apply Scylla Manager YAML
kubernetes.core.k8s:
state: present
src: "/tmp/k8s/scylla/06-scylla-manager.yml"
kubeconfig: /etc/rancher/k3s/k3s.yaml
- name: Label current node as Scylla - name: Label current node as Scylla
loop: groups['all']
kubernetes.core.k8s: kubernetes.core.k8s:
api_version: v1 api_version: v1
kind: Node kind: Node
name: "{{ inventory_hostname }}" name: "{{ item }}"
definition: definition:
metadata: metadata:
labels: labels:
scylla.scylladb.com/node-type: scylla scylla.scylladb.com/node-type: scylla
kubeconfig: /etc/rancher/k3s/k3s.yaml kubeconfig: /etc/rancher/k3s/k3s.yaml
state: present state: present
- name: Wait for Scylla Manager Deployment
ansible.builtin.command: |
kubectl -n=scylla-manager rollout status --timeout=10m deployment.apps/scylla-manager
changed_when: false
+20
View File
@@ -0,0 +1,20 @@
- name: Set Up Scylla Cluster
hosts: init
become: true
gather_facts: false
tasks:
- name: Set Up ArgoCD Application for Scylla Cluster
kubernetes.core.k8s:
state: present
src: /tmp/k8s/ansible/argo-cd/02-scylla-app.yml
namespace: argocd
kubeconfig: /etc/rancher/k3s/k3s.yaml
- name: Wait for Scylla Cluster Application
ansible.builtin.command: |
kubectl -n scylla rollout status statefulset/{{ item }} --timeout=10m
loop:
- ge-dc1-rack1
- ge-dc1-rack2
- ge-dc1-rack3
changed_when: false
+14
View File
@@ -0,0 +1,14 @@
- name: Set Up Scylla Manager
hosts: init
become: true
tasks:
- name: Apply Scylla Manager YAML
kubernetes.core.k8s:
state: present
src: "/tmp/k8s/ansible/scylla/06-scylla-manager.yml"
kubeconfig: /etc/rancher/k3s/k3s.yaml
- name: Wait for Scylla Manager Deployment
ansible.builtin.command: |
kubectl -n=scylla-manager rollout status --timeout=10m deployment.apps/scylla-manager
changed_when: false
-42
View File
@@ -1,42 +0,0 @@
- name: Set up k3s on dev node
hosts: dev
become: true
tasks:
- name: Install curl
ansible.builtin.apt:
name: curl
state: present
when: ansible_os_family == "Debian"
- name: Download k3s install script
ansible.builtin.get_url:
url: https://get.k3s.io
dest: /tmp/k3s_install.sh
mode: '0755'
- name: Run k3s installer
ansible.builtin.command: /tmp/k3s_install.sh
args:
creates: /usr/local/bin/k3s
- name: Ensure k3s service is started and enabled
ansible.builtin.systemd:
name: k3s
enabled: true
state: started
- name: Install Python Kubernetes client
ansible.builtin.apt:
name: python3-kubernetes
state: present
- name: Download helm install script
ansible.builtin.get_url:
url: https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
dest: /tmp/get_helm.sh
mode: '0755'
- name: Run helm installer
ansible.builtin.command: /tmp/get_helm.sh
args:
creates: /usr/local/bin/helm
-30
View File
@@ -1,30 +0,0 @@
- name: Set up ArgoCD
hosts: dev
become: true
tasks:
- name: Create ArgoCD namespace
kubernetes.core.k8s:
api_version: v1
kind: Namespace
name: argocd
kubeconfig: /etc/rancher/k3s/k3s.yaml
- name: Apply ArgoCD installation manifest
kubernetes.core.k8s:
state: present
src: https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
namespace: argocd
kubeconfig: /etc/rancher/k3s/k3s.yaml
- name: Get ArgoCD initial admin password
ansible.builtin.shell: kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}"
register: encoded_pass
changed_when: false
- name: Decode ArgoCD password
ansible.builtin.set_fact:
argocd_pass: "{{ encoded_pass.stdout | b64decode }}"
- name: Show ArgoCD password
ansible.builtin.debug:
msg: "ArgoCD admin password: {{ argocd_pass }}"