Browse Source

OpenStack provisioning -- support cns.

Jiri Mencak 7 years ago
parent
commit
4514a0ddb2

+ 5 - 0
playbooks/openstack/sample-inventory/group_vars/all.yml

@@ -7,6 +7,7 @@ openshift_openstack_dns_nameservers: []
 # # - set custom hostnames for roles by uncommenting corresponding lines
 #openshift_openstack_master_hostname: "master"
 #openshift_openstack_infra_hostname: "infra-node"
+#openshift_openstack_cns_hostname: "cns"
 #openshift_openstack_node_hostname: "app-node"
 #openshift_openstack_lb_hostname: "lb"
 #openshift_openstack_etcd_hostname: "etcd"
@@ -30,6 +31,7 @@ openshift_openstack_external_network_name: "public"
 # # - note: do not remove openshift_openstack_default_image_name definition
 #openshift_openstack_master_image_name: "centos7"
 #openshift_openstack_infra_image_name: "centos7"
+#openshift_openstack_cns_image_name: "centos7"
 #openshift_openstack_node_image_name: "centos7"
 #openshift_openstack_lb_image_name: "centos7"
 #openshift_openstack_etcd_image_name: "centos7"
@@ -37,6 +39,7 @@ openshift_openstack_default_image_name: "centos7"
 
 openshift_openstack_num_masters: 1
 openshift_openstack_num_infra: 1
+openshift_openstack_num_cns: 0
 openshift_openstack_num_nodes: 2
 
 # # Used Flavors
@@ -44,6 +47,7 @@ openshift_openstack_num_nodes: 2
 # # - note: do note remove openshift_openstack_default_flavor definition
 #openshift_openstack_master_flavor: "m1.medium"
 #openshift_openstack_infra_flavor: "m1.medium"
+#openshift_openstack_cns_flavor: "m1.medium"
 #openshift_openstack_node_flavor: "m1.medium"
 #openshift_openstack_lb_flavor: "m1.medium"
 #openshift_openstack_etcd_flavor: "m1.medium"
@@ -57,6 +61,7 @@ openshift_openstack_default_flavor: "m1.medium"
 # # - note: do not remove docker_default_volume_size definition
 #openshift_openstack_docker_master_volume_size: "15"
 #openshift_openstack_docker_infra_volume_size: "15"
+#openshift_openstack_docker_cns_volume_size: "15"
 #openshift_openstack_docker_node_volume_size: "15"
 #openshift_openstack_docker_etcd_volume_size: "2"
 #openshift_openstack_docker_lb_volume_size: "5"

+ 8 - 1
playbooks/openstack/sample-inventory/inventory.py

@@ -42,7 +42,10 @@ def build_inventory():
            if server.metadata['host-type'] == 'node' and
            server.metadata['sub-host-type'] == 'app']
 
-    nodes = list(set(masters + infra_hosts + app))
+    cns = [server.name for server in cluster_hosts
+           if server.metadata['host-type'] == 'cns']
+
+    nodes = list(set(masters + infra_hosts + app + cns))
 
     dns = [server.name for server in cluster_hosts
            if server.metadata['host-type'] == 'dns']
@@ -59,6 +62,7 @@ def build_inventory():
     inventory['nodes'] = {'hosts': nodes}
     inventory['infra_hosts'] = {'hosts': infra_hosts}
     inventory['app'] = {'hosts': app}
+    inventory['glusterfs'] = {'hosts': cns}
     inventory['dns'] = {'hosts': dns}
     inventory['lb'] = {'hosts': load_balancers}
 
@@ -93,6 +97,9 @@ def build_inventory():
             hostvars['openshift_hostname'] = server.private_v4
         hostvars['openshift_public_hostname'] = server.name
 
+        if server.metadata['host-type'] == 'cns':
+            hostvars['glusterfs_devices'] = ['/dev/nvme0n1']
+
         node_labels = server.metadata.get('node_labels')
         if node_labels:
             hostvars['openshift_node_labels'] = node_labels

+ 5 - 0
roles/openshift_openstack/defaults/main.yml

@@ -8,6 +8,7 @@ openshift_openstack_num_etcd: 0
 openshift_openstack_num_masters: 1
 openshift_openstack_num_nodes: 1
 openshift_openstack_num_infra: 1
+openshift_openstack_num_cns: 0
 openshift_openstack_dns_nameservers: []
 openshift_openstack_nodes_to_remove: []
 
@@ -57,6 +58,7 @@ openshift_openstack_stack_name: "{{ openshift_openstack_clusterid }}.{{ openshif
 openshift_openstack_subnet_prefix: "192.168.99"
 openshift_openstack_master_hostname: master
 openshift_openstack_infra_hostname: infra-node
+openshift_openstack_cns_hostname: cns
 openshift_openstack_node_hostname: app-node
 openshift_openstack_lb_hostname: lb
 openshift_openstack_etcd_hostname: etcd
@@ -66,8 +68,10 @@ openshift_openstack_etcd_flavor: "{{ openshift_openstack_default_flavor }}"
 openshift_openstack_master_flavor: "{{ openshift_openstack_default_flavor }}"
 openshift_openstack_node_flavor: "{{ openshift_openstack_default_flavor }}"
 openshift_openstack_infra_flavor: "{{ openshift_openstack_default_flavor }}"
+openshift_openstack_cns_flavor: "{{ openshift_openstack_default_flavor }}"
 openshift_openstack_master_image: "{{ openshift_openstack_default_image_name }}"
 openshift_openstack_infra_image: "{{ openshift_openstack_default_image_name }}"
+openshift_openstack_cns_image: "{{ openshift_openstack_default_image_name }}"
 openshift_openstack_node_image: "{{ openshift_openstack_default_image_name }}"
 openshift_openstack_lb_image: "{{ openshift_openstack_default_image_name }}"
 openshift_openstack_etcd_image: "{{ openshift_openstack_default_image_name }}"
@@ -84,6 +88,7 @@ openshift_openstack_infra_server_group_policies: []
 openshift_openstack_docker_volume_size: 15
 openshift_openstack_master_volume_size: "{{ openshift_openstack_docker_volume_size }}"
 openshift_openstack_infra_volume_size: "{{ openshift_openstack_docker_volume_size }}"
+openshift_openstack_cns_volume_size: "{{ openshift_openstack_docker_volume_size }}"
 openshift_openstack_node_volume_size: "{{ openshift_openstack_docker_volume_size }}"
 openshift_openstack_etcd_volume_size: 2
 openshift_openstack_lb_volume_size: 5

+ 2 - 0
roles/openshift_openstack/tasks/check-prerequisites.yml

@@ -91,6 +91,7 @@
   with_items:
   - "{{ openshift_openstack_master_image }}"
   - "{{ openshift_openstack_infra_image }}"
+  - "{{ openshift_openstack_cns_image }}"
   - "{{ openshift_openstack_node_image }}"
   - "{{ openshift_openstack_lb_image }}"
   - "{{ openshift_openstack_etcd_image }}"
@@ -100,6 +101,7 @@
   with_items:
   - "{{ openshift_openstack_master_flavor }}"
   - "{{ openshift_openstack_infra_flavor }}"
+  - "{{ openshift_openstack_cns_flavor }}"
   - "{{ openshift_openstack_node_flavor }}"
   - "{{ openshift_openstack_lb_flavor }}"
   - "{{ openshift_openstack_etcd_flavor }}"

+ 95 - 0
roles/openshift_openstack/templates/heat_stack.yaml.j2

@@ -419,6 +419,46 @@ resources:
           port_range_min: 443
           port_range_max: 443
 
+  cns-secgrp:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      name:
+        str_replace:
+          template: openshift-ansible-cluster_id-cns-secgrp
+          params:
+            cluster_id: {{ openshift_openstack_stack_name }}
+      description:
+        str_replace:
+          template: Security group for cluster_id OpenShift cns cluster nodes
+          params:
+            cluster_id: {{ openshift_openstack_stack_name }}
+      rules:
+        # glusterfs_sshd
+        - direction: ingress
+          protocol: tcp
+          port_range_min: 2222
+          port_range_max: 2222
+        # heketi dialing backends
+        - direction: ingress
+          protocol: tcp
+          port_range_min: 10250
+          port_range_max: 10250
+        # glusterfs_management
+        - direction: ingress
+          protocol: tcp
+          port_range_min: 24007
+          port_range_max: 24007
+        # glusterfs_rdma
+        - direction: ingress
+          protocol: tcp
+          port_range_min: 24008
+          port_range_max: 24008
+        # glusterfs_bricks
+        - direction: ingress
+          protocol: tcp
+          port_range_min: 49152
+          port_range_max: 49251
+
 {% if openshift_openstack_num_masters|int > 1 %}
   lb-secgrp:
     type: OS::Neutron::SecurityGroup
@@ -764,3 +804,58 @@ resources:
     depends_on:
       - interface
 {% endif %}
+
+  cns:
+    type: OS::Heat::ResourceGroup
+    properties:
+      count: {{ openshift_openstack_num_cns }}
+      resource_def:
+        type: server.yaml
+        properties:
+          name:
+            str_replace:
+              template: sub_type_k8s_type-%index%.cluster_id
+              params:
+                cluster_id: {{ openshift_openstack_stack_name }}
+                sub_type_k8s_type: {{ openshift_openstack_cns_hostname }}
+          cluster_env: {{ openshift_openstack_public_dns_domain }}
+          cluster_id:  {{ openshift_openstack_stack_name }}
+          group:
+            str_replace:
+              template: k8s_type.cluster_id
+              params:
+                k8s_type: cns
+                cluster_id: {{ openshift_openstack_stack_name }}
+          type:        cns
+          image:       {{ openshift_openstack_cns_image }}
+          flavor:      {{ openshift_openstack_cns_flavor }}
+          key_name:    {{ openshift_openstack_keypair_name }}
+{% if openshift_openstack_provider_network_name %}
+          net:         {{ openshift_openstack_provider_network_name }}
+          net_name:    {{ openshift_openstack_provider_network_name }}
+{% else %}
+          net:         { get_resource: net }
+          subnet:      { get_resource: subnet }
+          net_name:
+            str_replace:
+              template: openshift-ansible-cluster_id-net
+              params:
+                cluster_id: {{ openshift_openstack_stack_name }}
+{% if openshift_use_flannel|default(False)|bool %}
+          attach_data_net: true
+          data_net:    { get_resource: data_net }
+          data_subnet: { get_resource: data_subnet }
+{% endif %}
+{% endif %}
+          secgrp:
+{% if openshift_openstack_flat_secgrp|default(False)|bool %}
+            - { get_resource: flat-secgrp }
+{% else %}
+            - { get_resource: node-secgrp }
+{% endif %}
+            - { get_resource: cns-secgrp }
+            - { get_resource: common-secgrp }
+{% if not openshift_openstack_provider_network_name %}
+          floating_network: {{ openshift_openstack_external_network_name }}
+{% endif %}
+          volume_size: {{ openshift_openstack_cns_volume_size }}