Browse Source

Merge pull request #190 from jwhonce/wip/containers

Infrastructure - Deploy services in cluster

@twiest All comments covered.
Jhon Honce 9 years ago
parent
commit
433e3c77ad

+ 1 - 1
README_OSE.md

@@ -80,7 +80,7 @@ ansible_ssh_user=root
 deployment_type=enterprise
 
 # Pre-release registry URL
-openshift_registry_url=docker-buildvm-rhose.usersys.redhat.com:5000/openshift3_beta/ose-${component}:${version}
+oreg_url=docker-buildvm-rhose.usersys.redhat.com:5000/openshift3_beta/ose-${component}:${version}
 
 # Pre-release additional repo
 openshift_additional_repos=[{'id': 'ose-devel', 'name': 'ose-devel',

+ 1 - 1
inventory/byo/hosts

@@ -17,7 +17,7 @@ ansible_ssh_user=root
 deployment_type=enterprise
 
 # Pre-release registry URL
-openshift_registry_url=docker-buildvm-rhose.usersys.redhat.com:5000/openshift3_beta/ose-${component}:${version}
+oreg_url=docker-buildvm-rhose.usersys.redhat.com:5000/openshift3_beta/ose-${component}:${version}
 
 # Pre-release additional repo
 #openshift_additional_repos=[{'id': 'ose-devel', 'name': 'ose-devel', 'baseurl': 'http://buildvm-devops.usersys.redhat.com/puddle/build/OpenShiftEnterprise/3.0/latest/RH7-RHOSE-3.0/$basearch/os', 'enabled': 1, 'gpgcheck': 0}]

+ 8 - 0
playbooks/aws/openshift-cluster/launch.yml

@@ -25,6 +25,14 @@
       cluster: "{{ cluster_id }}"
       type: "{{ k8s_type }}"
 
+  - set_fact:
+      a_master: "{{ master_names[0] }}"
+  - add_host: name={{ a_master }} groups=service_master
+
 - include: update.yml
 
+- include: ../../common/openshift-cluster/create_services.yml
+  vars:
+     g_svc_master: "{{ service_master }}"
+
 - include: list.yml

+ 8 - 0
playbooks/common/openshift-cluster/create_services.yml

@@ -0,0 +1,8 @@
+---
+- name: Deploy OpenShift Services
+  hosts: "{{ g_svc_master }}"
+  connection: ssh
+  gather_facts: yes
+  roles:
+  - openshift_registry
+  - openshift_router

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

@@ -6,6 +6,7 @@
   roles:
   - openshift_master
   - { role: openshift_sdn_master, when: openshift.common.use_openshift_sdn | bool }
+  - { role: fluentd_master, when openshift.common.use_fluentd | bool }
   tasks:
   - name: Create group for deployment type
     group_by: key=oo_masters_deployment_type_{{ openshift.common.deployment_type }}

+ 1 - 0
playbooks/common/openshift-node/config.yml

@@ -96,6 +96,7 @@
   roles:
   - openshift_node
   - { role: openshift_sdn_node, when: openshift.common.use_openshift_sdn | bool }
+  - { role: fluentd_node, when: openshift.common.use_fluentd | bool }
   tasks:
   - name: Create group for deployment type
     group_by: key=oo_nodes_deployment_type_{{ openshift.common.deployment_type }}

+ 16 - 0
playbooks/gce/openshift-cluster/launch.yml

@@ -23,6 +23,22 @@
       cluster: "{{ cluster_id }}"
       type: "{{ k8s_type }}"
 
+  - set_fact:
+      a_master: "{{ master_names[0] }}"
+  - add_host: name={{ a_master }} groups=service_master
+
 - include: update.yml
 
+- name: Deploy OpenShift Services
+  hosts: service_master
+  connection: ssh
+  gather_facts: yes
+  roles:
+  - openshift_registry
+  - openshift_router
+
+- include: ../../common/openshift-cluster/create_services.yml
+  vars:
+     g_svc_master: "{{ service_master }}"
+
 - include: list.yml

+ 1 - 1
playbooks/gce/openshift-cluster/list.yml

@@ -16,7 +16,7 @@
       ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}"
     with_items: groups[scratch_group] | default([]) | difference(['localhost']) | difference(groups.status_terminated)
 
-- name: List Hosts
+- name: List instance(s)
   hosts: oo_list_hosts
   gather_facts: no
   tasks:

+ 46 - 0
roles/fluentd_master/tasks/main.yml

@@ -0,0 +1,46 @@
+---
+# TODO: Update fluentd install and configuration when packaging is complete
+- name: download and install td-agent
+  yum:
+    name: 'http://packages.treasuredata.com/2/redhat/7/x86_64/td-agent-2.2.0-0.x86_64.rpm'
+    state: present
+
+- name: Verify fluentd plugin installed
+  command: '/opt/td-agent/embedded/bin/gem query -i fluent-plugin-kubernetes'
+  register: _fluent_plugin_check
+  ignore_errors: yes
+
+- name: install Kubernetes fluentd plugin
+  command: '/opt/td-agent/embedded/bin/gem install fluent-plugin-kubernetes'
+  when: _fluent_plugin_check.rc == 1
+
+- name: Creates directories
+  file:
+    path: "{{ item }}"
+    state: directory
+    group: 'td-agent'
+    owner: 'td-agent'
+    mode: 0755
+  with_items: ['/etc/td-agent/config.d']
+
+- name: Add include to td-agent configuration
+  lineinfile:
+    dest: '/etc/td-agent/td-agent.conf'
+    regexp: '^@include config.d'
+    line: '@include config.d/*.conf'
+    state: present
+
+- name: install Kubernetes fluentd configuration file
+  template:
+    src: kubernetes.conf.j2
+    dest: /etc/td-agent/config.d/kubernetes.conf
+    group: 'td-agent'
+    owner: 'td-agent'
+    mode: 0444
+
+- name: ensure td-agent is running
+  service:
+    name: 'td-agent'
+    state: started
+    enabled: yes
+

+ 9 - 0
roles/fluentd_master/templates/kubernetes.conf.j2

@@ -0,0 +1,9 @@
+<match kubernetes.**>
+    type file
+    path /var/log/td-agent/containers.log
+    time_slice_format %Y%m%d
+    time_slice_wait 10m
+    time_format %Y%m%dT%H%M%S%z
+    compress gzip
+    utc
+</match>

+ 54 - 0
roles/fluentd_node/tasks/main.yml

@@ -0,0 +1,54 @@
+---
+# TODO: Update fluentd install and configuration when packaging is complete
+- name: download and install td-agent
+  yum:
+    name: 'http://packages.treasuredata.com/2/redhat/7/x86_64/td-agent-2.2.0-0.x86_64.rpm'
+    state: present
+
+- name: Verify fluentd plugin installed
+  command: '/opt/td-agent/embedded/bin/gem query -i fluent-plugin-kubernetes'
+  register: _fluent_plugin_check
+  ignore_errors: yes
+
+- name: install Kubernetes fluentd plugin
+  command: '/opt/td-agent/embedded/bin/gem install fluent-plugin-kubernetes'
+  when: _fluent_plugin_check.rc == 1
+
+- name: Override td-agent configuration file
+  template:
+    src: td-agent.j2
+    dest: /etc/sysconfig/td-agent
+    group: 'td-agent'
+    owner: 'td-agent'
+    mode: 0444
+
+- name: Creates directories
+  file:
+    path: "{{ item }}"
+    state: directory
+    group: 'td-agent'
+    owner: 'td-agent'
+    mode: 0755
+  with_items: ['/etc/td-agent/config.d', '/var/log/td-agent/tmp']
+
+- name: Add include to td-agent configuration
+  lineinfile:
+    dest: '/etc/td-agent/td-agent.conf'
+    regexp: '^@include config.d'
+    line: '@include config.d/*.conf'
+    state: present
+
+- name: install Kubernetes fluentd configuration file
+  template:
+    src: kubernetes.conf.j2
+    dest: /etc/td-agent/config.d/kubernetes.conf
+    group: 'td-agent'
+    owner: 'td-agent'
+    mode: 0444
+
+- name: ensure td-agent is running
+  service:
+    name: 'td-agent'
+    state: started
+    enabled: yes
+

+ 53 - 0
roles/fluentd_node/templates/kubernetes.conf.j2

@@ -0,0 +1,53 @@
+<source>
+  type tail
+  path /var/lib/docker/containers/*/*-json.log
+  pos_file /var/log/td-agent/tmp/fluentd-docker.pos
+  time_format %Y-%m-%dT%H:%M:%S
+  tag docker.*
+  format json
+  read_from_head true
+</source>
+
+<match docker.var.lib.docker.containers.*.*.log>
+  type kubernetes
+  container_id ${tag_parts[5]}
+  tag docker.${name}
+</match>
+
+<match kubernetes>
+  type copy
+
+  <store>
+    type forward
+    send_timeout 60s
+    recover_wait 10s
+    heartbeat_interval 1s
+    phi_threshold 16
+    hard_timeout 60s
+    log_level trace
+    require_ack_response true
+    heartbeat_type tcp
+
+    <server>
+      name {{groups['oo_first_master'][0]}}
+      host {{hostvars[groups['oo_first_master'][0]].openshift.common.hostname}}
+      port 24224
+      weight 60
+    </server>
+
+    <secondary>
+      type file
+      path /var/log/td-agent/forward-failed
+    </secondary>
+  </store>
+
+  <store>
+    type file
+    path /var/log/td-agent/containers.log
+    time_slice_format %Y%m%d
+    time_slice_wait 10m
+    time_format %Y%m%dT%H%M%S%z
+    compress gzip
+    utc
+  </store>
+</match>

+ 2 - 0
roles/fluentd_node/templates/td-agent.j2

@@ -0,0 +1,2 @@
+DAEMON_ARGS=
+TD_AGENT_ARGS="/usr/sbin/td-agent --log /var/log/td-agent/td-agent.log --use-v1-config"

+ 1 - 0
roles/openshift_common/tasks/main.yml

@@ -10,6 +10,7 @@
       public_hostname: "{{ openshift_public_hostname | default(None) }}"
       public_ip: "{{ openshift_public_ip | default(None) }}"
       use_openshift_sdn: "{{ openshift_use_openshift_sdn | default(None) }}"
+      use_fluentd: "{{ openshift_use_fluentd | default(True) }}"
       deployment_type: "{{ openshift_deployment_type }}"
 - name: Set hostname
   hostname: name={{ openshift.common.hostname }}

+ 1 - 1
roles/openshift_master/README.md

@@ -17,7 +17,7 @@ From this role:
 |-------------------------------------|-----------------------|--------------------------------------------------|
 | openshift_master_debug_level        | openshift_debug_level | Verbosity of the debug logs for openshift-master |
 | openshift_node_ips                  | []                    | List of the openshift node ip addresses to pre-register when openshift-master starts up |
-| openshift_registry_url              | UNDEF                 | Default docker registry to use |
+| oreg_url                            | UNDEF                 | Default docker registry to use |
 | openshift_master_api_port           | UNDEF                 | |
 | openshift_master_console_port       | UNDEF                 | |
 | openshift_master_api_url            | UNDEF                 | |

+ 4 - 0
roles/openshift_master/defaults/main.yml

@@ -11,6 +11,10 @@ os_firewall_allow:
   port: 53/tcp
 - service: OpenShift dns udp
   port: 53/udp
+- service: Fluentd td-agent tcp
+  port: 24224/tcp
+- service: Fluentd td-agent udp
+  port: 24224/udp
 os_firewall_deny:
 - service: OpenShift api http
   port: 8080/tcp

+ 7 - 7
roles/openshift_master/tasks/main.yml

@@ -49,15 +49,15 @@
 # TODO: should probably use a template lookup for this
 # TODO: should allow for setting --etcd, --kubernetes options
 # TODO: recreate config if values change
-- name: Use enterprise default for openshift_registry_url if not set
+- name: Use enterprise default for oreg_url if not set
   set_fact:
-    openshift_registry_url: "openshift3_beta/ose-${component}:${version}"
-  when: openshift.common.deployment_type == 'enterprise' and openshift_registry_url is not defined
+    oreg_url: "openshift3_beta/ose-${component}:${version}"
+  when: openshift.common.deployment_type == 'enterprise' and oreg_url is not defined
 
-- name: Use online default for openshift_registry_url if not set
+- name: Use online default for oreg_url if not set
   set_fact:
-    openshift_registry_url: "docker-registry.ops.rhcloud.com/openshift3_beta/ose-${component}:${version}"
-  when: openshift.common.deployment_type == 'online' and openshift_registry_url is not defined
+    oreg_url: "docker-registry.ops.rhcloud.com/openshift3_beta/ose-${component}:${version}"
+  when: openshift.common.deployment_type == 'online' and oreg_url is not defined
 
 - name: Create master config
   command: >
@@ -67,7 +67,7 @@
     --master={{ openshift.master.api_url }}
     --public-master={{ openshift.master.public_api_url }}
     --listen={{ 'https' if openshift.master.api_use_ssl else 'http' }}://0.0.0.0:{{ openshift.master.api_port }}
-    {{ ('--images=' ~ openshift_registry_url) if (openshift_registry_url | default('', true) != '') else '' }}
+    {{ ('--images=' ~ oreg_url) if (oreg_url | default('', true) != '') else '' }}
     {{ ('--nodes=' ~ openshift_node_ips | join(',')) if (openshift_node_ips | default('', true) != '') else '' }}
   args:
     chdir: "{{ openshift_cert_parent_dir }}"

+ 1 - 1
roles/openshift_node/README.md

@@ -17,7 +17,7 @@ From this role:
 | Name                                     | Default value         |                                        |
 |------------------------------------------|-----------------------|----------------------------------------|
 | openshift_node_debug_level               | openshift_debug_level | Verbosity of the debug logs for openshift-node |
-| openshift_registry_url                   | UNDEF (Optional)      | Default docker registry to use |
+| oreg_url                                 | UNDEF (Optional)      | Default docker registry to use |
 
 From openshift_common:
 | Name                          |  Default Value      |                     | 

+ 7 - 7
roles/openshift_register_nodes/tasks/main.yml

@@ -6,15 +6,15 @@
 
 # TODO: use a template lookup here
 # TODO: create a failed_when condition
-- name: Use enterprise default for openshift_registry_url if not set
+- name: Use enterprise default for oreg_url if not set
   set_fact:
-    openshift_registry_url: "openshift3_beta/ose-${component}:${version}"
-  when: openshift.common.deployment_type == 'enterprise' and openshift_registry_url is not defined
+    oreg_url: "openshift3_beta/ose-${component}:${version}"
+  when: openshift.common.deployment_type == 'enterprise' and oreg_url is not defined
 
-- name: Use online default for openshift_registry_url if not set
+- name: Use online default for oreg_url if not set
   set_fact:
-    openshift_registry_url: "docker-registry.ops.rhcloud.com/openshift3_beta/ose-${component}:${version}"
-  when: openshift.common.deployment_type == 'online' and openshift_registry_url is not defined
+    oreg_url: "docker-registry.ops.rhcloud.com/openshift3_beta/ose-${component}:${version}"
+  when: openshift.common.deployment_type == 'online' and oreg_url is not defined
 
 - name: Create node config
   command: >
@@ -30,7 +30,7 @@
       --certificate-authority={{ openshift_master_ca_cert }}
       --signer-serial={{ openshift_master_ca_dir }}/serial.txt
       --node-client-certificate-authority={{ openshift_master_ca_cert }}
-      {{ ('--images=' ~ openshift_registry_url) if openshift_registry_url is defined else '' }}
+      {{ ('--images=' ~ oreg_url) if oreg_url is defined else '' }}
       --listen=https://0.0.0.0:10250
   args:
     chdir: "{{ openshift_cert_parent_dir }}"

+ 42 - 0
roles/openshift_registry/README.md

@@ -0,0 +1,42 @@
+OpenShift Container Docker Registry
+===================================
+
+OpenShift Docker Registry  service installation
+
+Requirements
+------------
+
+Running OpenShift cluster
+
+Role Variables
+--------------
+
+From this role:
+| Name               | Default value                                         |                     |
+|--------------------|-------------------------------------------------------|---------------------|
+|                    |                                                       |                     |
+
+From openshift_common:
+| Name                  | Default value |                                      |
+|-----------------------|---------------|--------------------------------------|
+| openshift_debug_level | 0             | Global openshift debug log verbosity |
+
+
+Dependencies
+------------
+
+Example Playbook
+----------------
+
+TODO
+
+License
+-------
+
+Apache License, Version 2.0
+
+Author Information
+------------------
+
+Red Hat openshift@redhat.com
+

+ 0 - 0
roles/openshift_registry/handlers/main.yml


+ 13 - 0
roles/openshift_registry/meta/main.yml

@@ -0,0 +1,13 @@
+---
+galaxy_info:
+  author: OpenShift Red Hat
+  description: OpenShift Embedded Docker Registry
+  company: Red Hat, Inc.
+  license: Apache License, Version 2.0
+  min_ansible_version: 1.7
+  platforms:
+  - name: EL
+    versions:
+    - 7
+  categories:
+  - cloud

+ 8 - 0
roles/openshift_registry/tasks/main.yml

@@ -0,0 +1,8 @@
+---
+- set_fact: _oreg_images="--images={{ oreg_url|quote }}"
+  when: oreg_url is defined
+
+- name: Deploy OpenShift Registry
+  command: openshift admin registry --create --credentials=/var/lib/openshift/openshift.local.certificates/openshift-registry/.kubeconfig {{ _oreg_images|default() }}
+  register: _oreg_results
+  changed_when: "'service exists' not in _oreg_results.stdout"

+ 2 - 0
roles/openshift_registry/vars/main.yml

@@ -0,0 +1,2 @@
+---
+

+ 41 - 0
roles/openshift_router/README.md

@@ -0,0 +1,41 @@
+OpenShift Container Router
+==========================
+
+OpenShift Router service installation
+
+Requirements
+------------
+
+Running OpenShift cluster
+
+Role Variables
+--------------
+
+From this role:
+| Name               | Default value                                         |                     |
+|--------------------|-------------------------------------------------------|---------------------|
+|                    |                                                       |                     |
+
+From openshift_common:
+| Name                  | Default value |                                      |
+|-----------------------|---------------|--------------------------------------|
+| openshift_debug_level | 0             | Global openshift debug log verbosity |
+
+Dependencies
+------------
+
+Example Playbook
+----------------
+
+TODO
+
+License
+-------
+
+Apache License, Version 2.0
+
+Author Information
+------------------
+
+Red Hat openshift@redhat.com
+

+ 0 - 0
roles/openshift_router/handlers/main.yml


+ 13 - 0
roles/openshift_router/meta/main.yml

@@ -0,0 +1,13 @@
+---
+galaxy_info:
+  author: OpenShift Red Hat
+  description: OpenShift Embedded Router
+  company: Red Hat, Inc.
+  license: Apache License, Version 2.0
+  min_ansible_version: 1.7
+  platforms:
+  - name: EL
+    versions:
+    - 7
+  categories:
+  - cloud

+ 8 - 0
roles/openshift_router/tasks/main.yml

@@ -0,0 +1,8 @@
+---
+- set_fact: _ortr_images="--images={{ oreg_url|quote }}"
+  when: oreg_url is defined
+
+- name: Deploy OpenShift Router
+  command: openshift ex router --create --credentials=/var/lib/openshift/openshift.local.certificates/openshift-router/.kubeconfig {{ _ortr_images|default() }}
+  register: _ortr_results
+  changed_when: "'service exists' not in _ortr_results.stdout"

+ 2 - 0
roles/openshift_router/vars/main.yml

@@ -0,0 +1,2 @@
+---
+