Преглед изворни кода

added new openshift-metrics service

Jose David Martin Nieto пре 9 година
родитељ
комит
55e36e3768

+ 2 - 0
playbooks/common/openshift-cluster/additional_config.yml

@@ -52,3 +52,5 @@
   - role: openshift_registry
     registry_volume_claim: "{{ openshift.hosted.registry.storage.volume.name }}-claim"
     when: deploy_infra | bool and attach_registry_volume | bool
+  - role: openshift_metrics
+    when: openshift.hosted.metrics.deploy | bool

+ 8 - 0
playbooks/common/openshift-master/config.yml

@@ -35,6 +35,14 @@
   - set_fact:
       openshift_master_debug_level: "{{ t_oo_option_master_debug_level }}"
     when: openshift_master_debug_level is not defined and t_oo_option_master_debug_level != ""
+    
+  - set_fact:
+      openshift_master_default_subdomain: "{{ lookup('oo_option', 'openshift_master_default_subdomain') | default(None) }}"
+    when: openshift_master_default_subdomain is not defined
+  - set_fact:
+      openshift_hosted_metrics_deploy: "{{ lookup('oo_option', 'openshift_hosted_metrics_deploy') | default(false, true) }}"
+    when: openshift_hosted_metrics_deploy is not defined
+    
   roles:
   - openshift_facts
   post_tasks:

+ 0 - 1
playbooks/openstack/openshift-cluster/files/heat_stack.yaml

@@ -350,7 +350,6 @@ resources:
           port_range_min: 10250
           port_range_max: 10250
           remote_mode: remote_group_id
-          remote_group_id: { get_resource: master-secgrp }
         - direction: ingress
           protocol: udp
           port_range_min: 4789

+ 16 - 0
roles/openshift_facts/library/openshift_facts.py

@@ -1576,6 +1576,22 @@ class OpenShiftFacts(object):
 
         if 'hosted' in roles or self.role == 'hosted':
             defaults['hosted'] = dict(
+                metrics=dict(
+                    deploy=False,
+                    storage=dict(
+                        kind=None,
+                        volume=dict(
+                            name='metrics',
+                            size='10Gi'
+                        ),
+                        nfs=dict(
+                            directory='/exports',
+                            options='*(rw,root_squash)'),
+                        host=None,
+                        access_modes=['ReadWriteMany'],
+                        create_pv=True
+                    )
+                ),
                 registry=dict(
                     storage=dict(
                         kind=None,

+ 51 - 0
roles/openshift_metrics/README.md

@@ -0,0 +1,51 @@
+OpenShift Metrics with Hawkular
+====================
+
+OpenShift Metrics Installation
+
+Requirements
+------------
+It requires subdomain fqdn to be set.
+If persistence is enabled, then it also requires NFS 
+
+Role Variables
+--------------
+
+From this role:
+| Name                                            | Default value         |                                                             |
+|-------------------------------------------------|-----------------------|-------------------------------------------------------------|
+| openshift_hosted_metrics_deploy                 | False                 | If metrics should be deployed                               |
+| openshift_hosted_metrics_storage_nfs_directory  | /exports              | Root export directory.                                      |
+| openshift_hosted_metrics_storage_volume_name    | metrics               | Metrics volume within openshift_hosted_metrics_volume_dir   |
+| openshift_hosted_metrics_storage_volume_size    | 10Gi                  | Metrics volume size                                         |
+| openshift_hosted_metrics_storage_nfs_options    | *(rw,root_squash)     | NFS options for configured exports.                         |
+
+
+From openshift_common:
+| Name                                  | Default Value  |                                        |
+|---------------------------------------|----------------|----------------------------------------|
+| openshift_master_default_subdomain    | null           | Subdomain FQDN (Mandatory)             |
+
+
+Dependencies
+------------
+openshift_facts
+openshift_examples
+
+Example Playbook
+----------------
+
+- name: Configure openshift-metrics
+  hosts: oo_first_master
+  roles:
+  - role: openshift_metrics
+
+License
+-------
+
+Apache License, Version 2.0
+
+Author Information
+------------------
+
+Jose David Martín (j.david.nieto@gmail.com)

+ 3 - 0
roles/openshift_metrics/meta/main.yaml

@@ -0,0 +1,3 @@
+dependencies:
+- { role: openshift_examples }
+- { role: openshift_facts }

+ 55 - 0
roles/openshift_metrics/tasks/main.yaml

@@ -0,0 +1,55 @@
+---
+- name: Copy Configuration to temporary conf
+  command: >
+    cp {{ openshift.common.config_base }}/master/admin.kubeconfig {{hawkular_tmp_conf}}
+  changed_when: false
+
+- name: Create metrics-deployer Service Account
+  shell: >
+    echo {{ deployer_service_account | to_json | quote }} |
+    {{ openshift.common.client_binary }} create
+    -n openshift-infra
+    --config={{hawkular_tmp_conf}}
+    -f -
+  register: deployer_create_service_account
+  failed_when: "'already exists' not in deployer_create_service_account.stderr and deployer_create_service_account.rc != 0"
+  changed_when: deployer_create_service_account.rc == 0
+
+- name: Create metrics-deployer Secret
+  command: >
+    {{ openshift.common.client_binary }}
+    secrets new metrics-deployer
+    nothing=/dev/null
+    -n openshift-infra
+  register: deployer_create_secret
+  failed_when: "'already exists' not in deployer_create_secret.stderr and deployer_create_secret.rc !=0"
+  changed_when: deployer_create_secret.rc == 0
+
+- name: Configure role/user permissions
+  command: >
+    {{ openshift.common.admin_binary }} {{item}}
+    --config={{hawkular_tmp_conf}}
+  with_items: "{{hawkular_permission_oc_commands}}"
+  register: hawkular_perm_task
+  failed_when: "'already exists' not in hawkular_perm_task.stderr and hawkular_perm_task.rc != 0"
+  changed_when: hawkular_perm_task.rc == 0
+
+- name: Check openshift_master_default_subdomain
+  fail: 
+    msg: "Default subdomain should be defined"
+  when: openshift.master.default_subdomain is not defined
+
+- name: Create Heapster and Hawkular/Cassandra Services
+  shell: >
+   {{ openshift.common.client_binary }} process -f \
+   /usr/share/openshift/examples/infrastructure-templates/{{ hawkular_type }}/metrics-deployer.yaml -v \
+    HAWKULAR_METRICS_HOSTNAME=hawkular-metrics.{{ openshift.master.default_subdomain }},USE_PERSISTENT_STORAGE={{ hawkular_persistence }} | \
+    {{ openshift.common.client_binary }} create -n openshift-infra -f - 
+  register: oex_heapster_services
+  failed_when: "'already exists' not in oex_heapster_services.stderr and oex_heapster_services.rc != 0"
+  changed_when: false
+
+- name: Clean temporary config file
+  command: >
+    rm -rf {{hawkular_tmp_conf}}
+  changed_when: false

+ 19 - 0
roles/openshift_metrics/vars/main.yaml

@@ -0,0 +1,19 @@
+hawkular_permission_oc_commands:
+    - policy add-role-to-user edit system:serviceaccount:openshift-infra:metrics-deployer -n openshift-infra
+    - policy add-cluster-role-to-user cluster-admin system:serviceaccount:openshift-infra:heapster
+
+deployer_service_account:
+    apiVersion: v1
+    kind: ServiceAccount
+    metadata:
+      name: metrics-deployer
+    secrets:
+    - name: metrics-deployer
+
+
+hawkular_tmp_conf: /tmp/hawkular_admin.kubeconfig
+
+hawkular_persistence: "{% if openshift.hosted.metrics.storage.kind != None %}true{% else %}false{% endif %}"
+
+hawkular_type: "{{ 'origin' if deployment_type == 'origin' else 'enterprise' }}"
+

+ 8 - 0
roles/openshift_storage_nfs/defaults/main.yml

@@ -8,6 +8,14 @@ openshift:
           options: "*(rw,root_squash)"
         volume:
           name: "registry"
+    metrics:
+      deploy: False
+      storage:
+        nfs:
+          directory: "/exports"
+          options: "*(rw,root_squash)"
+        volume:
+          name: "metrics"
 os_firewall_use_firewalld: False
 os_firewall_allow:
 - service: nfs