diff options
Diffstat (limited to 'TOSCA/kubernetes-cluster-TOSCA/openstack-blueprint.yaml')
-rw-r--r-- | TOSCA/kubernetes-cluster-TOSCA/openstack-blueprint.yaml | 330 |
1 files changed, 330 insertions, 0 deletions
diff --git a/TOSCA/kubernetes-cluster-TOSCA/openstack-blueprint.yaml b/TOSCA/kubernetes-cluster-TOSCA/openstack-blueprint.yaml new file mode 100644 index 0000000000..3219791c0d --- /dev/null +++ b/TOSCA/kubernetes-cluster-TOSCA/openstack-blueprint.yaml @@ -0,0 +1,330 @@ +# ============LICENSE_START========================================== +# =================================================================== +# Copyright (c) 2017 AT&T +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#============LICENSE_END============================================ + +tosca_definitions_version: cloudify_dsl_1_3 + +description: > + This blueprint creates a Kubernetes Cluster. + It is based on this documentation: https://kubernetes.io/docs/getting-started-guides/kubeadm/ + +imports: + - https://raw.githubusercontent.com/cloudify-cosmo/cloudify-manager/4.1/resources/rest-service/cloudify/types/types.yaml + - https://raw.githubusercontent.com/cloudify-cosmo/cloudify-openstack-plugin/2.2.0/plugin.yaml + - https://raw.githubusercontent.com/cloudify-incubator/cloudify-utilities-plugin/1.2.5/plugin.yaml + - https://raw.githubusercontent.com/cloudify-cosmo/cloudify-fabric-plugin/1.5/plugin.yaml + - https://raw.githubusercontent.com/cloudify-cosmo/cloudify-diamond-plugin/1.3.5/plugin.yaml + - imports/cloud-config.yaml + - imports/kubernetes.yaml + +inputs: + + image: + description: Image to be used when launching agent VMs + default: { get_secret: centos_core_image } + + flavor: + description: Flavor of the agent VMs + default: { get_secret: large_image_flavor } + + agent_user: + description: > + User for connecting to agent VMs + default: centos + + helm_version: + description: helm version to be installed + default: v2.7.0 + +dsl_definitions: + + openstack_config: &openstack_config + username: { get_secret: keystone_username } + password: { get_secret: keystone_password } + tenant_name: { get_secret: keystone_tenant_name } + auth_url: { get_secret: keystone_url } + region: { get_secret: region } + +node_templates: + + nfs_server: + type: cloudify.nodes.SoftwareComponent + properties: + interfaces: + cloudify.interfaces.lifecycle: + start: + implementation: fabric.fabric_plugin.tasks.run_script + inputs: + script_path: scripts/nfs.sh + use_sudo: true + process: + args: + fabric_env: + host_string: { get_attribute: [ kubernetes_master_host, ip ] } + user: { get_input: agent_user } + key: { get_secret: agent_key_private } + relationships: + - type: cloudify.relationships.contained_in + target: kubernetes_master_host + + k8s_tools: + type: cloudify.nodes.SoftwareComponent + properties: + interfaces: + cloudify.interfaces.lifecycle: + start: + implementation: fabric.fabric_plugin.tasks.run_script + inputs: + script_path: scripts/k8s_tools.sh + process: + args: [{ get_input: helm_version }] + fabric_env: + host_string: { get_attribute: [ kubernetes_master_host, ip ] } + user: { get_input: agent_user } + key: { get_secret: agent_key_private } + relationships: + - type: cloudify.relationships.contained_in + target: kubernetes_master + + kubernetes_master_host: + type: cloudify.openstack.nodes.Server + properties: + openstack_config: *openstack_config + agent_config: + user: { get_input: agent_user } + install_method: remote + port: 22 + key: { get_secret: agent_key_private } + server: + key_name: '' + image: '' + flavor: '' + management_network_name: { get_property: [ public_network, resource_id ] } + interfaces: + cloudify.interfaces.lifecycle: + create: + inputs: + args: + image: { get_input: image } + flavor: { get_input: flavor } + userdata: { get_attribute: [ cloudify_host_cloud_config, cloud_config ] } + relationships: + - target: kubernetes_master_port + type: cloudify.openstack.server_connected_to_port + - type: cloudify.relationships.depends_on + target: cloudify_host_cloud_config + + kubernetes_node_host: + type: cloudify.openstack.nodes.Server + properties: + openstack_config: *openstack_config + agent_config: + user: { get_input: agent_user } + install_method: remote + port: 22 + key: { get_secret: agent_key_private } + server: + key_name: '' + image: '' + flavor: '' + management_network_name: { get_property: [ private_network, resource_id ] } + relationships: + - type: cloudify.relationships.contained_in + target: k8s_node_scaling_tier + - target: kubernetes_node_port + type: cloudify.openstack.server_connected_to_port + interfaces: + cloudify.interfaces.lifecycle: + create: + inputs: + args: + image: { get_input: image } + flavor: { get_input: flavor } + userdata: { get_attribute: [ cloudify_host_cloud_config, cloud_config ] } + cloudify.interfaces.monitoring_agent: + install: + implementation: diamond.diamond_agent.tasks.install + inputs: + diamond_config: + interval: 1 + start: diamond.diamond_agent.tasks.start + stop: diamond.diamond_agent.tasks.stop + uninstall: diamond.diamond_agent.tasks.uninstall + cloudify.interfaces.monitoring: + start: + implementation: diamond.diamond_agent.tasks.add_collectors + inputs: + collectors_config: + CPUCollector: {} + MemoryCollector: {} + LoadAverageCollector: {} + DiskUsageCollector: + config: + devices: x?vd[a-z]+[0-9]*$ + NetworkCollector: {} + ProcessResourcesCollector: + config: + enabled: true + unit: B + measure_collector_time: true + cpu_interval: 0.5 + process: + hyperkube: + name: hyperkube + + kubernetes_security_group: + type: cloudify.openstack.nodes.SecurityGroup + properties: + openstack_config: *openstack_config + security_group: + name: kubernetes_security_group + description: kubernetes master security group + rules: + - remote_ip_prefix: 0.0.0.0/0 + port_range_min: 1 + port_range_max: 65535 + protocol: tcp + direction: ingress + ethertype: IPv4 + - remote_ip_prefix: 0.0.0.0/0 + port_range_min: 1 + port_range_max: 65535 + protocol: tcp + direction: egress + ethertype: IPv4 + - remote_ip_prefix: 0.0.0.0/0 + port_range_min: 1 + port_range_max: 65535 + protocol: udp + direction: ingress + ethertype: IPv4 + - remote_ip_prefix: 0.0.0.0/0 + port_range_min: 1 + port_range_max: 65535 + protocol: udp + direction: egress + ethertype: IPv4 + + kubernetes_master_port: + type: cloudify.openstack.nodes.Port + properties: + openstack_config: *openstack_config + relationships: + - type: cloudify.relationships.contained_in + target: public_network + - type: cloudify.relationships.depends_on + target: public_subnet + - type: cloudify.openstack.port_connected_to_security_group + target: kubernetes_security_group + - type: cloudify.openstack.port_connected_to_floating_ip + target: kubernetes_master_ip + + kubernetes_node_port: + type: cloudify.openstack.nodes.Port + properties: + openstack_config: *openstack_config + relationships: + - type: cloudify.relationships.contained_in + target: k8s_node_scaling_tier + - type: cloudify.relationships.connected_to + target: private_network + - type: cloudify.relationships.depends_on + target: private_subnet + - type: cloudify.openstack.port_connected_to_security_group + target: kubernetes_security_group + + private_subnet: + type: cloudify.openstack.nodes.Subnet + properties: + openstack_config: *openstack_config + use_external_resource: true + resource_id: { get_secret: private_subnet_name } + relationships: + - target: private_network + type: cloudify.relationships.contained_in + + private_network: + type: cloudify.openstack.nodes.Network + properties: + openstack_config: *openstack_config + use_external_resource: true + resource_id: { get_secret: private_network_name } + + public_subnet: + type: cloudify.openstack.nodes.Subnet + properties: + openstack_config: *openstack_config + use_external_resource: true + resource_id: { get_secret: public_subnet_name } + relationships: + - target: public_network + type: cloudify.relationships.contained_in + - target: router + type: cloudify.openstack.subnet_connected_to_router + + public_network: + type: cloudify.openstack.nodes.Network + properties: + openstack_config: *openstack_config + use_external_resource: true + resource_id: { get_secret: public_network_name } + + router: + type: cloudify.openstack.nodes.Router + properties: + openstack_config: *openstack_config + use_external_resource: true + resource_id: { get_secret: router_name } + relationships: + - target: external_network + type: cloudify.relationships.connected_to + + external_network: + type: cloudify.openstack.nodes.Network + properties: + openstack_config: *openstack_config + use_external_resource: true + resource_id: { get_secret: external_network_name } + + k8s_node_scaling_tier: + type: cloudify.nodes.Root + + kubernetes_master_ip: + type: cloudify.openstack.nodes.FloatingIP + properties: + openstack_config: *openstack_config + floatingip: + floating_network_name: { get_property: [ external_network, resource_id ] } + +groups: + + k8s_node_group: + members: + - kubernetes_node_host + - kubernetes_node_port + +policies: + + kubernetes_node_vms_scaling_policy: + type: cloudify.policies.scaling + properties: + default_instances: 6 + targets: [k8s_node_group] + +outputs: + + kubernetes_master_public_ip: + value: { get_attribute: [ kubernetes_master_ip, floating_ip_address ] } |