diff options
| author | ewolinetz <ewolinet@redhat.com> | 2017-02-27 12:07:14 -0600 | 
|---|---|---|
| committer | ewolinetz <ewolinet@redhat.com> | 2017-05-22 10:40:50 -0500 | 
| commit | a8e826248539179c5ef69ec003701be608e89b70 (patch) | |
| tree | 81c9bee5969bb1e5a142c83b24383a0e1beb4143 /roles/openshift_logging_fluentd | |
| parent | 896a0c90b34217fab19160ea48c51f926fbcdeed (diff) | |
| download | openshift-a8e826248539179c5ef69ec003701be608e89b70.tar.gz openshift-a8e826248539179c5ef69ec003701be608e89b70.tar.bz2 openshift-a8e826248539179c5ef69ec003701be608e89b70.tar.xz openshift-a8e826248539179c5ef69ec003701be608e89b70.zip | |
Decomposing openshift_logging role into subcomponent roles
Diffstat (limited to 'roles/openshift_logging_fluentd')
10 files changed, 509 insertions, 0 deletions
| diff --git a/roles/openshift_logging_fluentd/defaults/main.yml b/roles/openshift_logging_fluentd/defaults/main.yml new file mode 100644 index 000000000..713962c2e --- /dev/null +++ b/roles/openshift_logging_fluentd/defaults/main.yml @@ -0,0 +1,43 @@ +--- +### General logging settings +openshift_logging_image_prefix: "{{ openshift_hosted_logging_deployer_prefix | default('docker.io/openshift/origin-') }}" +openshift_logging_image_version: "{{ openshift_hosted_logging_deployer_version | default('latest') }}" +openshift_logging_image_pull_secret: "{{ openshift_hosted_logging_image_pull_secret | default('') }}" +openshift_logging_master_url: "https://kubernetes.default.svc.{{ openshift.common.dns_domain }}" +openshift_logging_master_public_url: "{{ openshift_hosted_logging_master_public_url | default('https://' + openshift.common.public_hostname + ':' ~ (openshift_master_api_port | default('8443', true))) }}" +openshift_logging_namespace: logging + +### Common settings +openshift_logging_fluentd_nodeselector: "{{ openshift_hosted_logging_fluentd_nodeselector_label | default('logging-infra-fluentd=true') | map_from_pairs }}" +openshift_logging_fluentd_cpu_limit: 100m +openshift_logging_fluentd_memory_limit: 512Mi +openshift_logging_fluentd_hosts: ['--all'] + +# float time in seconds to wait between node labelling +openshift_logging_fluentd_label_delay: '0.5' + +# Fluentd deployment type +openshift_logging_fluentd_deployment_type: "hosted" + +### Used by "hosted" and "secure-host" deployments + +# Destination for the application based logs +openshift_logging_fluentd_app_host: "logging-es" +openshift_logging_fluentd_app_port: 9200 +# Destination for the operations based logs +openshift_logging_fluentd_ops_host: "{{ openshift_logging_fluentd_app_host }}" +openshift_logging_fluentd_ops_port: "{{ openshift_logging_fluentd_app_port }}" + +### Used by "hosted" and "secure-aggregator" deployments +openshift_logging_fluentd_use_journal: "{{ openshift_hosted_logging_use_journal | default('') }}" +openshift_logging_fluentd_journal_source: "{{ openshift_hosted_logging_journal_source | default('') }}" +openshift_logging_fluentd_journal_read_from_head: "{{ openshift_hosted_logging_journal_read_from_head | default('') }}" + + +### Deprecating in 3.6 +openshift_logging_fluentd_es_copy: false + +# following can be uncommented to provide values for configmaps -- take care when providing file contents as it may cause your cluster to not operate correctly +#fluentd_config_contents: +#fluentd_throttle_contents: +#fluentd_secureforward_contents: diff --git a/roles/openshift_logging_fluentd/files/fluentd-throttle-config.yaml b/roles/openshift_logging_fluentd/files/fluentd-throttle-config.yaml new file mode 100644 index 000000000..375621ff1 --- /dev/null +++ b/roles/openshift_logging_fluentd/files/fluentd-throttle-config.yaml @@ -0,0 +1,7 @@ +# Logging example fluentd throttling config file + +#example-project: +#  read_lines_limit: 10 +# +#.operations: +#  read_lines_limit: 100 diff --git a/roles/openshift_logging_fluentd/files/secure-forward.conf b/roles/openshift_logging_fluentd/files/secure-forward.conf new file mode 100644 index 000000000..f4483df79 --- /dev/null +++ b/roles/openshift_logging_fluentd/files/secure-forward.conf @@ -0,0 +1,24 @@ +# @type secure_forward + +# self_hostname ${HOSTNAME} +# shared_key <SECRET_STRING> + +# secure yes +# enable_strict_verification yes + +# ca_cert_path /etc/fluent/keys/your_ca_cert +# ca_private_key_path /etc/fluent/keys/your_private_key +  # for private CA secret key +# ca_private_key_passphrase passphrase + +# <server> +  # or IP +#   host server.fqdn.example.com +#   port 24284 +# </server> +# <server> +  # ip address to connect +#   host 203.0.113.8 +  # specify hostlabel for FQDN verification if ipaddress is used for host +#   hostlabel server.fqdn.example.com +# </server> diff --git a/roles/openshift_logging_fluentd/meta/main.yaml b/roles/openshift_logging_fluentd/meta/main.yaml new file mode 100644 index 000000000..2003aacb2 --- /dev/null +++ b/roles/openshift_logging_fluentd/meta/main.yaml @@ -0,0 +1,15 @@ +--- +galaxy_info: +  author: OpenShift Red Hat +  description: OpenShift Aggregated Logging Fluentd Component +  company: Red Hat, Inc. +  license: Apache License, Version 2.0 +  min_ansible_version: 2.2 +  platforms: +  - name: EL +    versions: +    - 7 +  categories: +  - cloud +dependencies: +- role: lib_openshift diff --git a/roles/openshift_logging_fluentd/tasks/determine_version.yaml b/roles/openshift_logging_fluentd/tasks/determine_version.yaml new file mode 100644 index 000000000..a1ba71b1b --- /dev/null +++ b/roles/openshift_logging_fluentd/tasks/determine_version.yaml @@ -0,0 +1,17 @@ +--- +# debating making this a module instead? +- fail: +    msg: Missing version to install provided by 'openshift_logging_image_version' +  when: not openshift_logging_image_version or openshift_logging_image_version == '' + +- set_fact: +    fluentd_version: "{{ __latest_fluentd_version }}" +  when: openshift_logging_image_version == 'latest' + +# should we just assume that we will have the correct major version? +- set_fact: fluentd_version="{{ openshift_logging_image_version | regex_replace('^v?(?P<major>\d)\.(?P<minor>\d).*$', '3_\\g<minor>') }}" +  when: openshift_logging_image_version != 'latest' + +- fail: +    msg: Invalid version specified for Fluentd +  when: fluentd_version not in __allowed_fluentd_versions diff --git a/roles/openshift_logging_fluentd/tasks/label_and_wait.yaml b/roles/openshift_logging_fluentd/tasks/label_and_wait.yaml new file mode 100644 index 000000000..e92a35f27 --- /dev/null +++ b/roles/openshift_logging_fluentd/tasks/label_and_wait.yaml @@ -0,0 +1,10 @@ +--- +- name: Label {{ node }} for Fluentd deployment +  oc_label: +    name: "{{ node }}" +    kind: node +    state: add +    labels: "{{ openshift_logging_fluentd_nodeselector | oo_dict_to_list_of_dict }}" + +# wait half a second between labels +- local_action: command sleep {{ openshift_logging_fluentd_label_delay | default('.5') }} diff --git a/roles/openshift_logging_fluentd/tasks/main.yaml b/roles/openshift_logging_fluentd/tasks/main.yaml new file mode 100644 index 000000000..0e14328c0 --- /dev/null +++ b/roles/openshift_logging_fluentd/tasks/main.yaml @@ -0,0 +1,194 @@ +--- +- fail: +    msg: Only one Fluentd nodeselector key pair should be provided +  when: "{{ openshift_logging_fluentd_nodeselector.keys() | count }} > 1" + +- fail: +    msg: Application logs destination is required +  when: not openshift_logging_fluentd_app_host or openshift_logging_fluentd_app_host == '' + +- fail: +    msg: Operations logs destination is required +  when: not openshift_logging_fluentd_ops_host or openshift_logging_fluentd_ops_host == '' + +- fail: +    msg: Invalid deployment type, one of ['hosted', 'secure-aggregator', 'secure-host'] allowed +  when: not openshift_logging_fluentd_deployment_type in __allowed_fluentd_types + +- include: determine_version.yaml + +# allow passing in a tempdir +- name: Create temp directory for doing work in +  command: mktemp -d /tmp/openshift-logging-ansible-XXXXXX +  register: mktemp +  changed_when: False + +- set_fact: +    tempdir: "{{ mktemp.stdout }}" + +- name: Create templates subdirectory +  file: +    state: directory +    path: "{{ tempdir }}/templates" +    mode: 0755 +  changed_when: False + +# we want to make sure we have all the necessary components here + +# create service account +- name: Create Fluentd service account +  oc_serviceaccount: +    state: present +    name: "aggregated-logging-fluentd" +    namespace: "{{ openshift_logging_namespace }}" +    image_pull_secrets: "{{ openshift_logging_image_pull_secret }}" +  when: openshift_logging_image_pull_secret != '' + +- name: Create Fluentd service account +  oc_serviceaccount: +    state: present +    name: "aggregated-logging-fluentd" +    namespace: "{{ openshift_logging_namespace }}" +  when: +  - openshift_logging_image_pull_secret == '' + +# set service account scc +- name: Set privileged permissions for Fluentd +  oc_adm_policy_user: +    namespace: "{{ openshift_logging_namespace }}" +    resource_kind: scc +    resource_name: privileged +    state: present +    user: "system:serviceaccount:{{ openshift_logging_namespace }}:aggregated-logging-fluentd" + +# set service account permissions +- name: Set cluster-reader permissions for Fluentd +  oc_adm_policy_user: +    namespace: "{{ openshift_logging_namespace }}" +    resource_kind: cluster-role +    resource_name: cluster-reader +    state: present +    user: "system:serviceaccount:{{ openshift_logging_namespace }}:aggregated-logging-fluentd" + +# create Fluentd configmap +- template: +    src: fluent.conf.j2 +    dest: "{{ tempdir }}/fluent.conf" +  vars: +    deploy_type: "{{ openshift_logging_fluentd_deployment_type }}" +  when: fluentd_config_contents is undefined +  changed_when: no + +- copy: +    src: fluentd-throttle-config.yaml +    dest: "{{ tempdir }}/fluentd-throttle-config.yaml" +  when: fluentd_throttle_contents is undefined +  changed_when: no + +- copy: +    src: secure-forward.conf +    dest: "{{ tempdir }}/secure-forward.conf" +  when: fluentd_securefoward_contents is undefined + +  changed_when: no + +- copy: +    content: "{{ fluentd_config_contents }}" +    dest: "{{ tempdir }}/fluent.conf" +  when: fluentd_config_contents is defined +  changed_when: no + +- copy: +    content: "{{ fluentd_throttle_contents }}" +    dest: "{{ tempdir }}/fluentd-throttle-config.yaml" +  when: fluentd_throttle_contents is defined +  changed_when: no + +- copy: +    content: "{{ fluentd_secureforward_contents }}" +    dest: "{{ tempdir }}/secure-forward.conf" +  when: fluentd_secureforward_contents is defined +  changed_when: no + +- name: Set Fluentd configmap +  oc_configmap: +    state: present +    name: "logging-fluentd" +    namespace: "{{ openshift_logging_namespace }}" +    from_file: +      fluentd.conf: "{{ tempdir }}/fluent.conf" +      throttle-config.yaml: "{{ tempdir }}/fluentd-throttle-config.yaml" +      secure-forward.conf: "{{ tempdir }}/secure-forward.conf" + +# create Fluentd secret +# TODO: add aggregation secrets if necessary +- name: Set logging-fluentd secret +  oc_secret: +    state: present +    name: logging-fluentd +    namespace: "{{ openshift_logging_namespace }}" +    files: +    - name: ca +      path: "{{ generated_certs_dir }}/ca.crt" +    - name: key +      path: "{{ generated_certs_dir }}/system.logging.fluentd.key" +    - name: cert +      path: "{{ generated_certs_dir }}/system.logging.fluentd.crt" + +# create Fluentd daemonset + +# this should change based on the type of fluentd deployment to be done... +# TODO: pass in aggregation configurations +- name: Generate logging-fluentd daemonset definition +  template: +    src: fluentd.j2 +    dest: "{{ tempdir }}/templates/logging-fluentd.yaml" +  vars: +    daemonset_name: logging-fluentd +    daemonset_component: fluentd +    daemonset_container_name: fluentd-elasticsearch +    daemonset_serviceAccount: aggregated-logging-fluentd +    app_host: "{{ openshift_logging_fluentd_app_host }}" +    app_port: "{{ openshift_logging_fluentd_app_port }}" +    ops_host: "{{ openshift_logging_fluentd_ops_host }}" +    ops_port: "{{ openshift_logging_fluentd_ops_port }}" +    fluentd_nodeselector_key: "{{ openshift_logging_fluentd_nodeselector.keys()[0] }}" +    fluentd_nodeselector_value: "{{ openshift_logging_fluentd_nodeselector.values()[0] }}" +  check_mode: no +  changed_when: no + +- name: Set logging-fluentd daemonset +  oc_obj: +    state: present +    name: logging-fluentd +    namespace: "{{ openshift_logging_namespace }}" +    kind: daemonset +    files: +    - "{{ tempdir }}/templates/logging-fluentd.yaml" +    delete_after: true + +# Scale up Fluentd +- name: Retrieve list of Fluentd hosts +  oc_obj: +    state: list +    kind: node +  when: "'--all' in openshift_logging_fluentd_hosts" +  register: fluentd_hosts + +- name: Set openshift_logging_fluentd_hosts +  set_fact: +    openshift_logging_fluentd_hosts: "{{ fluentd_hosts.results.results[0]['items'] | map(attribute='metadata.name') | list }}" +  when: "'--all' in openshift_logging_fluentd_hosts" + +- include: label_and_wait.yaml +  vars: +    node: "{{ fluentd_host }}" +  with_items: "{{ openshift_logging_fluentd_hosts }}" +  loop_control: +    loop_var: fluentd_host + +- name: Delete temp directory +  file: +    name: "{{ tempdir }}" +    state: absent +  changed_when: False diff --git a/roles/openshift_logging_fluentd/templates/fluent.conf.j2 b/roles/openshift_logging_fluentd/templates/fluent.conf.j2 new file mode 100644 index 000000000..46de94d60 --- /dev/null +++ b/roles/openshift_logging_fluentd/templates/fluent.conf.j2 @@ -0,0 +1,78 @@ +# This file is the fluentd configuration entrypoint. Edit with care. + +@include configs.d/openshift/system.conf + +# In each section below, pre- and post- includes don't include anything initially; +# they exist to enable future additions to openshift conf as needed. + +## sources +{% if deploy_type in ['hosted', 'secure-aggregator'] %} +## ordered so that syslog always runs last... +@include configs.d/openshift/input-pre-*.conf +@include configs.d/dynamic/input-docker-*.conf +@include configs.d/dynamic/input-syslog-*.conf +@include configs.d/openshift/input-post-*.conf +## +{% else %} +<source> +  @type secure_forward +  @label @INGRESS + +  self_hostname ${HOSTNAME} +  bind 0.0.0.0 +  port {{openshift_logging_fluentd_aggregating_port}} + +  shared_key {{openshift_logging_fluentd_shared_key}} + +  secure {{openshift_logging_fluentd_aggregating_secure}} +  enable_strict_verification {{openshift_logging_fluentd_aggregating_strict}} +  ca_cert_path        {{openshift_logging_fluentd_aggregating_cert_path}} +  ca_private_key_path {{openshift_logging_fluentd_aggregating_key_path}} +  ca_private_key_passphrase {{openshift_logging_fluentd_aggregating_passphrase}} + +  <client> +    host {{openshift_logging_fluentd_aggregating_host}} +  </client> +</source> +{% endif %} + +<label @INGRESS> +{% if deploy_type in ['hosted', 'secure-host'] %} +## filters +  @include configs.d/openshift/filter-pre-*.conf +  @include configs.d/openshift/filter-retag-journal.conf +  @include configs.d/openshift/filter-k8s-meta.conf +  @include configs.d/openshift/filter-kibana-transform.conf +  @include configs.d/openshift/filter-k8s-flatten-hash.conf +  @include configs.d/openshift/filter-k8s-record-transform.conf +  @include configs.d/openshift/filter-syslog-record-transform.conf +  @include configs.d/openshift/filter-viaq-data-model.conf +  @include configs.d/openshift/filter-post-*.conf +## + +## matches +  @include configs.d/openshift/output-pre-*.conf +  @include configs.d/openshift/output-operations.conf +  @include configs.d/openshift/output-applications.conf +  # no post - applications.conf matches everything left +## +{% else %} +  <match **> +    @type secure_forward + +    self_hostname ${HOSTNAME} +    shared_key {{openshift_logging_fluentd_shared_key}} + +    secure {{openshift_logging_fluentd_aggregating_secure}} +    enable_strict_verification {{openshift_logging_fluentd_aggregating_strict}} +    ca_cert_path        {{openshift_logging_fluentd_aggregating_cert_path}} +    ca_private_key_path {{openshift_logging_fluentd_aggregating_key_path}} +    ca_private_key_passphrase {{openshift_logging_fluentd_aggregating_passphrase}} + +    <server> +      host {{openshift_logging_fluentd_aggregating_host}} +      port {{openshift_logging_fluentd_aggregating_port}} +    </server> +  </match> +{% endif %} +</label> diff --git a/roles/openshift_logging_fluentd/templates/fluentd.j2 b/roles/openshift_logging_fluentd/templates/fluentd.j2 new file mode 100644 index 000000000..336d657d5 --- /dev/null +++ b/roles/openshift_logging_fluentd/templates/fluentd.j2 @@ -0,0 +1,117 @@ +apiVersion: extensions/v1beta1 +kind: "DaemonSet" +metadata: +  name: "{{ daemonset_name }}" +  labels: +    provider: openshift +    component: "{{ daemonset_component }}" +    logging-infra: "{{ daemonset_component }}" +spec: +  selector: +    matchLabels: +      provider: openshift +      component: "{{ daemonset_component }}" +  updateStrategy: +    type: RollingUpdate +    rollingUpdate: +      minReadySeconds: 600 +  template: +    metadata: +      name: "{{ daemonset_container_name }}" +      labels: +        logging-infra: "{{ daemonset_component }}" +        provider: openshift +        component: "{{ daemonset_component }}" +    spec: +      serviceAccountName: "{{ daemonset_serviceAccount }}" +      nodeSelector: +        {{ fluentd_nodeselector_key }}: "{{ fluentd_nodeselector_value }}" +      containers: +      - name: "{{ daemonset_container_name }}" +        image: "{{ openshift_logging_image_prefix }}{{ daemonset_name }}:{{ openshift_logging_image_version }}" +        imagePullPolicy: Always +        securityContext: +          privileged: true +        resources: +          limits: +            cpu: {{ openshift_logging_fluentd_cpu_limit }} +            memory: {{ openshift_logging_fluentd_memory_limit }} +        volumeMounts: +        - name: runlogjournal +          mountPath: /run/log/journal +        - name: varlog +          mountPath: /var/log +        - name: varlibdockercontainers +          mountPath: /var/lib/docker/containers +          readOnly: true +        - name: config +          mountPath: /etc/fluent/configs.d/user +          readOnly: true +        - name: certs +          mountPath: /etc/fluent/keys +          readOnly: true +        - name: dockerhostname +          mountPath: /etc/docker-hostname +          readOnly: true +        - name: localtime +          mountPath: /etc/localtime +          readOnly: true +        - name: dockercfg +          mountPath: /etc/sysconfig/docker +          readOnly: true +        env: +        - name: "K8S_HOST_URL" +          value: "{{ openshift_logging_master_url }}" +        - name: "ES_HOST" +          value: "{{ app_host }}" +        - name: "ES_PORT" +          value: "{{ app_port }}" +        - name: "ES_CLIENT_CERT" +          value: "{{ openshift_logging_es_client_cert }}" +        - name: "ES_CLIENT_KEY" +          value: "{{ openshift_logging_es_client_key }}" +        - name: "ES_CA" +          value: "{{ openshift_logging_es_ca }}" +        - name: "OPS_HOST" +          value: "{{ ops_host }}" +        - name: "OPS_PORT" +          value: "{{ ops_port }}" +        - name: "OPS_CLIENT_CERT" +          value: "{{ openshift_logging_es_ops_client_cert }}" +        - name: "OPS_CLIENT_KEY" +          value: "{{ openshift_logging_es_ops_client_key }}" +        - name: "OPS_CA" +          value: "{{ openshift_logging_es_ops_ca }}" +        - name: "ES_COPY" +          value: "false" +        - name: "USE_JOURNAL" +          value: "{{ openshift_logging_fluentd_use_journal | lower }}" +        - name: "JOURNAL_SOURCE" +          value: "{{ openshift_logging_fluentd_journal_source | default('') }}" +        - name: "JOURNAL_READ_FROM_HEAD" +          value: "{{ openshift_logging_fluentd_journal_read_from_head | lower }}" +      volumes: +      - name: runlogjournal +        hostPath: +          path: /run/log/journal +      - name: varlog +        hostPath: +          path: /var/log +      - name: varlibdockercontainers +        hostPath: +          path: /var/lib/docker/containers +      - name: config +        configMap: +          name: logging-fluentd +      - name: certs +        secret: +          secretName: logging-fluentd +      - name: dockerhostname +        hostPath: +          path: /etc/hostname +      - name: localtime +        hostPath: +          path: /etc/localtime +      - name: dockercfg +        hostPath: +          path: /etc/sysconfig/docker diff --git a/roles/openshift_logging_fluentd/vars/main.yml b/roles/openshift_logging_fluentd/vars/main.yml new file mode 100644 index 000000000..ad3fb0bdd --- /dev/null +++ b/roles/openshift_logging_fluentd/vars/main.yml @@ -0,0 +1,4 @@ +--- +__latest_fluentd_version: "3_5" +__allowed_fluentd_versions: ["3_5", "3_6"] +__allowed_fluentd_types: ["hosted", "secure-aggregator", "secure-host"] | 
