Skip to content

Commit

Permalink
Merge pull request #83 from AdityaHonkalas/monitoring-user-defined-pr…
Browse files Browse the repository at this point in the history
…ojects

Fixes and enhancements for monitoring-user-defined-projects role
  • Loading branch information
Power Cloud Robot authored Nov 18, 2024
2 parents aee1a9a + 69e6ba6 commit eec3810
Show file tree
Hide file tree
Showing 6 changed files with 145 additions and 117 deletions.
7 changes: 4 additions & 3 deletions examples/all.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,10 @@ golang_tar_url: "" # Golang tar URL to install golang version >= 1.18

# User defined project monitoring vars
enable_user_defined_project_monitoring: false # Set true to enable role execution
user_defined_app_name: "prometheus-example-app" # User defined app name
user_defined_namespace: "test-namespace" # User defined namespace
service_monitor_name: "prometheus-example-app-monitor" # User defined name for ServiceMonitor object name
user_defined_app_name: "example-app" # User defined app name
user_defined_namespace: "test-project1" # User defined namespace
service_monitor_name: "example-app-monitor" # User defined name for ServiceMonitor object name
user_defined_app_image: "quay.io/powercloud/nginx-unprivileged:latest" # Any image for deploying the user-defined app

# Request-header identity provider vars
request_header_provider: false # Set true to enable the test execution
Expand Down
18 changes: 11 additions & 7 deletions playbooks/roles/monitoring-user-defined-projects/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,14 @@ Requirements
Role Variables
--------------

| Variable | Required | Default |Comments |
|----------------------------------------|----------|--------------------------------|----------------------------------------------------------------------------------------------------- |
| enable_user_defined_project_monitoring | no | false | Flag to be set to true to enable monitoring-user-defined-project-monitoring role execution |
| user_defined_app_name | no | prometheus-example-app | Name to create a user defined prometheus app, if not defined the default will be set |
| user_defined_namespace | no | test-namespace | Name to create user defined namespace, if not defined the default will be set |
| service_monitor_name | no | prometheus-example-app-monitor | Name for a ServiceMonitor object monitoring user defined app, if not defined the default will be set |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Variable | Required | Default | Comments |
|----------------------------------------|----------|----------------------------------------------|--------------------------------------------------------------------------------------|
| enable_user_defined_project_monitoring | no | false | Flag to enable monitoring-user-defined-project-monitoring role. |
| user_defined_app_name | no | example-app | App name for the user-defined-project. |
| user_defined_namespace | no | test-project1 | User defined project name. |
| service_monitor_name | no | example-app-monitor | Name of the ServiceMonitor for monitoring user defined app. |
| user_defined_app_image | no | quay.io/powercloud/nginx-unprivileged:latest | Container image for deploying user-defined app, user can set any other custom image. |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Dependencies
Expand Down Expand Up @@ -61,6 +62,9 @@ Sample Command

ansible-playbook -i inventory -e @all.yaml ~/ocp4-playbooks-extras/playbooks/main.yml

OR to run the specific playbook use below command:
ansible-playbook -i inventory -e @examples/all.yaml ~/ocp4-playbooks-extras/playbooks/monitoring-user-defined-projects.yml


License
-------
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---

# User defined project monitoring vars with defaults
user_defined_namespace: "test-namespace"
user_defined_app_name: "prometheus-example-app"
service_monitor_name: "prometheus-app-monitor"
enable_user_defined_project_monitoring: false # Set true to enable role execution
user_defined_app_name: "example-app" # User defined app name
user_defined_namespace: "test-project1" # User defined namespace
service_monitor_name: "example-app-monitor" # User defined name for ServiceMonitor object name
user_defined_app_image: "quay.io/powercloud/nginx-unprivileged:latest" # Any image for deploying the user-defined app
13 changes: 13 additions & 0 deletions playbooks/roles/monitoring-user-defined-projects/tasks/cleanup.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---

- name: Delete the servicemonitor instance
shell: oc delete servicemonitor {{ service_monitor_name }} -n {{ user_defined_namespace }}

- name: Delete the service
shell: oc delete service {{ user_defined_app_name }} -n {{ user_defined_namespace }}

- name: Delete the example app
shell: oc delete deploy {{ user_defined_app_name }} -n {{ user_defined_namespace }}

- name: Delete the project
shell: oc delete ns {{ user_defined_namespace }}
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
---

- name: Create a new namespace
k8s:
state: present
definition:
apiVersion: v1
kind: Namespace
metadata:
name: "{{ user_defined_namespace }}"

- name: Deploy a sample app
k8s:
state: present
definition:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: "{{ user_defined_app_name }}"
name: "{{ user_defined_app_name }}"
namespace: "{{ user_defined_namespace }}"
spec:
replicas: 1
selector:
matchLabels:
app: "{{ user_defined_app_name }}"
template:
metadata:
labels:
app: "{{ user_defined_app_name }}"
spec:
containers:
- image: "{{ user_defined_app_image }}"
imagePullPolicy: IfNotPresent
name: "{{ user_defined_app_name }}"

- name: Create a service that expose the metrics of the deployed app
k8s:
state: present
definition:
apiVersion: v1
kind: Service
metadata:
labels:
app: "{{ user_defined_app_name }}"
name: "{{ user_defined_app_name }}"
namespace: "{{ user_defined_namespace }}"
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 8080
name: web
selector:
app: "{{ user_defined_app_name }}"
type: ClusterIP

- name: Check the pod for the deployed prometheus app
shell: "oc -n {{ user_defined_namespace }} get pod --no-headers | awk '{ if($3 != 'Running') print $3 }' | wc -l"
register: pod_count
until: pod_count.stdout|int > 0
retries: 10
delay: 60

- name: Deploying ServiceMonitor resource object
k8s:
state: present
definition:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
k8s-app: "{{ service_monitor_name }}"
name: "{{ service_monitor_name }}"
namespace: "{{ user_defined_namespace }}"
spec:
endpoints:
- interval: 30s
port: web
scheme: http
selector:
matchLabels:
app: "{{ user_defined_app_name }}"

- name: Check the ServiceMonitor resource
shell: "oc -n {{ user_defined_namespace }} get servicemonitor --no-headers | wc -l"
register: service_monitor_count
until: service_monitor_count.stdout|int > 0
retries: 5
delay: 30
125 changes: 21 additions & 104 deletions playbooks/roles/monitoring-user-defined-projects/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,97 +2,13 @@

## Enabling monitoring to user-defined-projects

- name: Create a new namespace
k8s:
state: present
definition:
apiVersion: v1
kind: Namespace
metadata:
name: "{{ user_defined_namespace }}"
- name: Install the Development tools
shell: yum groupinstall -y 'Development tools'

- name: Deploy a sample app
k8s:
state: present
definition:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: "{{ user_defined_app_name }}"
name: "{{ user_defined_app_name }}"
namespace: "{{ user_defined_namespace }}"
spec:
replicas: 1
selector:
matchLabels:
app: "{{ user_defined_app_name }}"
template:
metadata:
labels:
app: "{{ user_defined_app_name }}"
spec:
containers:
- image: ghcr.io/rhobs/prometheus-example-app:0.3.0
imagePullPolicy: IfNotPresent
name: "{{ user_defined_app_name }}"
- name: Resource deployment for monitoring-user-defined-projects
include_tasks: "{{ role_path }}/tasks/deployment.yml"

- name: Create a service that expose the metrics of the deployed app
k8s:
state: present
definition:
apiVersion: v1
kind: Service
metadata:
labels:
app: "{{ user_defined_app_name }}"
name: "{{ user_defined_app_name }}"
namespace: "{{ user_defined_namespace }}"
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 8080
name: web
selector:
app: "{{ user_defined_app_name }}"
type: ClusterIP

- name: Check the pod for the deployed prometheus app
shell: "oc -n {{ user_defined_namespace }} get pod --no-headers | awk '{ if($3 != 'Running') print $3 }' | wc -l"
register: pod_count
until: pod_count.stdout|int > 0
retries: 10
delay: 60

- name: Deploying ServiceMonitor resource object
k8s:
state: present
definition:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
k8s-app: "{{ service_monitor_name }}"
name: "{{ service_monitor_name }}"
namespace: "{{ user_defined_namespace }}"
spec:
endpoints:
- interval: 30s
port: web
scheme: http
selector:
matchLabels:
app: "{{ user_defined_app_name }}"

- name: Check the ServiceMonitor resource
shell: "oc -n {{ user_defined_namespace }} get servicemonitor --no-headers | wc -l"
register: service_monitor_count
until: service_monitor_count.stdout|int > 0
retries: 5
delay: 30

- name: Create and deploy cluster-monitering-config ConfigMap instance
- name: Create cluster-monitering-config ConfigMap for enabling the user-workload-monitoring
k8s:
state: present
definition:
Expand All @@ -105,25 +21,17 @@
config.yaml: |
enableUserWorkload: true
- name: Create and deploy user-workload-monitoring-config ConfigMap instance
k8s:
state: present
definition:
apiVersion: v1
kind: ConfigMap
metadata:
name: user-workload-monitoring-config
namespace: openshift-user-workload-monitoring
data:
config.yaml: |
- name: Check if the pods are running in openshift-user-workload-monitoring namespace
shell: oc get po -n openshift-user-workload-monitoring --no-headers | awk '{ print $3 }' | grep 'Running' | wc -l
register: user_workload_monitoring_pods
until: user_workload_monitoring_pods.stdout|int == 5
retries: 5
delay: 30

- name: Wait for another three minutes
wait_for:
timeout: 180

- name: Accessing metrics outside the cluster
block:
- name: Extract the secret used to retrieve the token
Expand All @@ -145,9 +53,8 @@
register: thanos_querier_route_host

- name: Query the metrics of user defined services in the command line
shell: "curl -X GET -kG 'https://{{ THANOS_QUERIER_HOST }}/api/v1/query?' --data-urlencode \"query=up{namespace='{{ NAMESPACE }}'}\" -H 'Authorization: Bearer {{ TOKEN }}'"
args:
warn: false
shell: |
curl -X GET -kG "https://{{ THANOS_QUERIER_HOST }}/api/v1/query?" --data-urlencode "query=up{namespace='{{ NAMESPACE }}'}" -H "Authorization: Bearer {{ TOKEN }}"
vars:
THANOS_QUERIER_HOST: "{{ thanos_querier_route_host.resources[0].spec.host }}"
TOKEN: "{{ access_token.stdout.strip('\"') }}"
Expand All @@ -170,3 +77,13 @@
{{ query_output.stdout_lines }}
dest: "~/{{ user_defined_app_name }}/output.txt"

- name: Clean up the resources for monitoring user defined projects
include_tasks: "{{ role_path }}/tasks/cleanup.yml"

- name: Disable the user-workload-monitoring
shell: |
oc patch configmap cluster-monitoring-config \
-n openshift-monitoring --type='json' \
-p '[{"op": "replace", "path": "/data/config.yaml", "value": "enabledUserWorkload: false\n"}]'
ignore_errors: true

0 comments on commit eec3810

Please sign in to comment.