Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ansible playbook refactoring and bugs fixing #23

Merged
merged 17 commits into from
Dec 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
7e59be9
Refactoring: add jinja2 extension to kubernetes manifest templates
ricsanfre Dec 1, 2021
807a30f
Adding CI workflow: triggering Yamllint validation with pull requests…
ricsanfre Dec 1, 2021
df46754
Making cert-manager namespace configurable, removing chart_version fr…
ricsanfre Dec 1, 2021
fbf4295
Making traefik namespace and dashboard dns configurable
ricsanfre Dec 1, 2021
b39fa8b
Moving traefik overriden helm deployment to files
ricsanfre Dec 1, 2021
7a6cb07
Putting clusterissuer resource in the proper namespace
ricsanfre Dec 2, 2021
d6c042d
Making metallb namespace configurable and updating Helm repo cache be…
ricsanfre Dec 2, 2021
046e33d
Making kibana dashboard dns endpoint configurable and updating heml r…
ricsanfre Dec 2, 2021
43c6ba1
Making longhorn dashboard dns endpoint and namespace configurable
ricsanfre Dec 2, 2021
495862b
Making prometheus dns endpoints and namespace configurable
ricsanfre Dec 2, 2021
a3e95bd
Ignore errors when cleaning pod logs and fluentd pos files
ricsanfre Dec 3, 2021
a1b200a
Fix #22. Adding monitoring of K3S controller, scheduler and proxy com…
ricsanfre Dec 8, 2021
dae52d1
Solving yamllint issue
ricsanfre Dec 11, 2021
434b9be
Fix #20. Making basic http authentication credenctials configurable
ricsanfre Dec 11, 2021
9e5355c
Adding dns variables for available services
ricsanfre Dec 11, 2021
fa3fbf8
Fix #12. Adding nftables configuration details in the documentation
ricsanfre Dec 11, 2021
ee6b984
Adding tasks names. ansible-lint issue
ricsanfre Dec 11, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
name: CI
'on':
pull_request:
push:
branches:
- master

jobs:

lint:
name: Lint
runs-on: ubuntu-latest

steps:
- name: Check out the codebase.
uses: actions/checkout@v2

- name: Set up Python 3.
uses: actions/setup-python@v2
with:
python-version: '3.x'

- name: Install test dependencies.
run: pip3 install yamllint

- name: Lint all the YAMLs.
working-directory: ./ansible
run: yamllint .
35 changes: 34 additions & 1 deletion ansible/group_vars/k3s_cluster.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,41 @@ k3s_master_ip: 10.0.0.11
k3s_token: s1cret0

# Extra arguments for k3s installation scripts
k3s_server_extra_args: "--write-kubeconfig-mode '0644' --disable 'servicelb' --node-taint 'node-role.kubernetes.io/master=true:NoSchedule'"
k3s_server_extra_args: >-
--write-kubeconfig-mode '0644'
--disable 'servicelb'
--node-taint 'node-role.kubernetes.io/master=true:NoSchedule'
--kube-controller-manager-arg 'bind-address=0.0.0.0'
--kube-controller-manager-arg 'address=0.0.0.0'
--kube-proxy-arg 'metrics-bind-address=0.0.0.0'
--kube-scheduler-arg 'bind-address=0.0.0.0'
--kube-scheduler-arg 'address=0.0.0.0'


k3s_worker_extra_args: "--node-label 'node_type=worker'"

# Namespaces
k3s_metallb_namespace: metallb-system
k3s_traefik_namespace: traefik-system
k3s_longhorn_namespace: longhorn-system
k3s_certmanager_namespace: certmanager-system
k3s_logging_namespace: k3s-logging
k3s_monitoring_namespace: k3s-monitoring

# DNS service end-points

traefik_dashboard_dns: traefik.picluster.ricsanfre.com
longhorn_dashboard_dns: storage.picluster.ricsanfre.com
kibana_dashboard_dns: kibana.picluster.ricsanfre.com
grafana_dashboard_dns: grafana.picluster.ricsanfre.com
prometheus_dashboard_dns: prometheus.picluster.ricsanfre.com
alertmanager_dashboard_dns: alertmanager.picluster.ricsanfre.com

# MetalLB configuration
# k3s external ip range: Metal LB pool configuration
k3s_external_ip_range: "10.0.0.100-10.0.0.200"

# Traefik configuration
# HTTP Basic auth credentials
traefik_basic_auth_user: admin
traefik_basic_auth_passwd: s1cret0
9 changes: 6 additions & 3 deletions ansible/roles/basic_setup/tasks/remove_snap_packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,12 @@
register: snap_remove_output
with_items: "{{ snap_packages.stdout_lines }}"
rescue:
- fail:
- name: Check number of retries and fail if greater that 3
fail:
msg: Maximum retries of grouped tasks reached
when: retry_count | int == 3
- debug:
- name: printing retry message
debug:
msg: "Removing snap package failed, let's give it another shot"
- include_tasks: remove_snap_packages.yml
- name: retrying deletion
include_tasks: remove_snap_packages.yml
3 changes: 3 additions & 0 deletions ansible/roles/certmanager/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
# Namespace for cert-manager
k3s_certmanager_namespace: certmanager-system
8 changes: 4 additions & 4 deletions ansible/roles/certmanager/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
- name: Create cert-manager namespace.
kubernetes.core.k8s:
name: certmanager-system
name: "{{ k3s_certmanager_namespace }}"
api_version: v1
kind: Namespace
state: present
Expand All @@ -15,8 +15,8 @@
kubernetes.core.helm:
name: certmanager
chart_ref: jetstack/cert-manager
chart_version: "1.5.3"
release_namespace: certmanager-system
update_repo_cache: true
release_namespace: "{{ k3s_certmanager_namespace }}"
state: present
release_values:
installCRDs: true
Expand All @@ -26,4 +26,4 @@
definition: "{{ lookup('template', 'templates/' + item ) }}"
state: present
with_items:
- selfsigned_issuer.yml
- selfsigned_issuer.yml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@ apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: self-signed-issuer
namespace: {{ k3s_certmanager_namespace }}
spec:
selfSigned: {}
3 changes: 3 additions & 0 deletions ansible/roles/logging/k3s/defaults/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,6 @@ efk_fluentd_image: "fluent/fluentd-kubernetes-daemonset:v1.14-debian-elasticsear

# Configured Timezone
efk_node_timezone: "Europe/Madrid"

# Endpoint Service DNS name
kibana_dashboard_dns: kibana.picluster.ricsanfre.com
13 changes: 7 additions & 6 deletions ansible/roles/logging/k3s/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# namespace for hosting EFK stack
- name: Create k3s-logging namespace.
kubernetes.core.k8s:
name: k3s-logging
name: "{{ k3s_logging_namespace }}"
api_version: v1
kind: Namespace
state: present
Expand All @@ -25,15 +25,16 @@
name: elastic-operator
chart_ref: elastic/eck-operator
release_namespace: elastic-system
update_repo_cache: true
state: present

- name: Deploy elasticsearch, kibana and fluentd
kubernetes.core.k8s:
definition: "{{ lookup('template', 'templates/' + item ) }}"
state: present
with_items:
- elasticsearch_secret.yml
- elasticsearch.yml
- kibana.yml
- fluentd.yml
- kibana_ingress.yml
- elasticsearch_secret.yml.j2
- elasticsearch.yml.j2
- kibana.yml.j2
- fluentd.yml.j2
- kibana_ingress.yml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ metadata:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: kibana.picluster.ricsanfre.com
- host: {{ kibana_dashboard_dns }}
http:
paths:
- path: /
Expand Down
6 changes: 6 additions & 0 deletions ansible/roles/longhorn/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
# Namespace for Longhorn
k3s_longhorn_namespace: longhorn-system

# Endpoint Service DNS name
longhorn_dashboard_dns: storage.picluster.ricsanfre.com
6 changes: 3 additions & 3 deletions ansible/roles/longhorn/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
- name: Create longhorn namespace.
kubernetes.core.k8s:
name: longhorn-system
name: "{{ k3s_longhorn_namespace }}"
api_version: v1
kind: Namespace
state: present
Expand All @@ -16,7 +16,7 @@
name: longhorn
chart_ref: longhorn/longhorn
update_repo_cache: true
release_namespace: longhorn-system
release_namespace: "{{ k3s_longhorn_namespace }}"
state: present
release_values:
defaultSettings:
Expand All @@ -27,7 +27,7 @@
definition: "{{ lookup('template', 'templates/' + item ) }}"
state: present
with_items:
- longhorn_ingress.yml
- longhorn_ingress.yml.j2

- name: Remove Local-Path as default storage class
command:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,24 @@ apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: longhorn-ingress
namespace: longhorn-system
namespace: {{ k3s_longhorn_namespace }}
annotations:
# HTTPS as entry point
traefik.ingress.kubernetes.io/router.entrypoints: websecure
# Enable TLS
traefik.ingress.kubernetes.io/router.tls: "true"
# Use Basic Auth Midleware configured
traefik.ingress.kubernetes.io/router.middlewares: traefik-system-basic-auth@kubernetescrd
traefik.ingress.kubernetes.io/router.middlewares: {{ k3s_traefik_namespace }}-basic-auth@kubernetescrd
# Enable cert-manager to create automatically the SSL certificate and store in Secret
cert-manager.io/cluster-issuer: self-signed-issuer
cert-manager.io/common-name: longhorn
spec:
tls:
- hosts:
- storage.picluster.ricsanfre.com
- {{ longhorn_dashboard_dns }}
secretName: storage-tls
rules:
- host: storage.picluster.ricsanfre.com
- host: {{ longhorn_dashboard_dns }}
http:
paths:
- path: /
Expand All @@ -38,15 +38,15 @@ kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: longhorn-redirect
namespace: longhorn-system
namespace: {{ k3s_longhorn_namespace }}
annotations:
# Use redirect Midleware configured
traefik.ingress.kubernetes.io/router.middlewares: traefik-system-redirect@kubernetescrd
traefik.ingress.kubernetes.io/router.middlewares: {{ k3s_traefik_namespace }}-redirect@kubernetescrd
# HTTP as entrypoint
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: storage.picluster.ricsanfre.com
- host: {{ longhorn_dashboard_dns }}
http:
paths:
- path: /
Expand Down
6 changes: 6 additions & 0 deletions ansible/roles/metallb/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
# Namespace for metallb
k3s_metallb_namespace: metallb-system

# k3s external ip range: Metal LB pool configuration
k3s_external_ip_range:
5 changes: 3 additions & 2 deletions ansible/roles/metallb/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
- name: Create Metal LB namespace.
kubernetes.core.k8s:
name: metallb-system
name: "{{ k3s_metallb_namespace }}"
api_version: v1
kind: Namespace
state: present
Expand All @@ -15,7 +15,8 @@
kubernetes.core.helm:
name: metallb
chart_ref: metallb/metallb
release_namespace: metallb-system
release_namespace: "{{ k3s_metallb_namespace }}"
update_repo_cache: true
state: present
release_values:
configInline:
Expand Down
7 changes: 7 additions & 0 deletions ansible/roles/prometheus/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
---

k3s_monitoring_namespace: k3s-monitoring

# Endpoint Service DNS name
grafana_dashboard_dns: grafana.picluster.ricsanfre.com
prometheus_dashboard_dns: prometheus.picluster.ricsanfre.com
alertmanager_dashboard_dns: alertmanager.picluster.ricsanfre.com

# Storage Settings
prometheus_storage_size: "5Gi"
prometheus_storage_class: "longhorn"
Expand Down
Loading