Cloudify Kubernetes Plugin enables possibility of creating and deleting resources hosted by some Kubernetes cluster using Cloudify blueprints.
Plugin is using Kubernetes python client (https://github.com/kubernetes-incubator/client-python) to communicate with Kubernetes Master API.
All node types and relationships exposed by plugin are defined in plugin.yaml file.
Main entrypoints to python logic are defined in tasks.py file.
Plugin exposes two kinds of node types:
-
cloudify.kubernetes.nodes.Master
Node type describes Kubernetes maser configuration. It is responsible for handling all data required to use Kubernetes API from outside. Every blueprint using plugin has to define node template of this type. It defines two properties:
-
configuration
-
authentication
-
-
cloudify.kubernetes.resources.*
Family of node types designed to describe Kubernetes resources (e.g. Pods, Deployments, Services etc.) Plugin supports different ways of Kubernetes resources definition. Resources definition used in Cloudify blueprints are also compliant with Kubernetes YAML schema.
Plugin defines also one relationship:
cloudify.kubernetes.relationships.managed_by_master
It is required for each cloudify.kubernetes.resources.* node template to be bounded using this relationship to the cloudify.kubernetes.nodes.Master node template.
During installation of deployment for all cloudify.kubernetes.resources.* nodes plugin is looking for target of defined managed_by_master relationship to find related Master node. Data stored by Master node bounded using relationship to Resource node will be used to perform API call to create / delete this resource. Result of each operation is stored in kubernetes runtime_property for each resource node.
master:
type: cloudify.kubernetes.nodes.Master
properties:
configuration:
file_content: { get_input: kubernetes_configuration_file_content }
resource:
type: cloudify.kubernetes.resources.Pod
properties:
[...]
- type: cloudify.kubernetes.relationships.managed_by_master
target: master
There are four possible ways of cloudify.kubernetes.nodes.Master (Kubernetes API python client) configuration. Each method is associated with one key (below) and required value which you should put under configuration property of cloudify.kubernetes.nodes.Master node. For each Master node you should choose one method (one dictionary entry for configuration property should be defined):
-
blueprint_file_name - value should be relative to the blueprint path to Kubernetes config file (contained by blueprint archive)
-
manager_file_path - value should be absolute path to Kubernetes config file previously uploaded into Cloudify Manager virtual machine
-
file_content - value should be (YAML) content of Kubernetes config file
-
api_options - value should be a dictionary contains basic Kubernetes API properties:
- host (HTTP/HTTPS URL to Kubernetes API)
- ssl_ca_cert
- cert_file
- key_file
- verify_ssl
Kubernetes config file is by default stored in:
~/.kube/config
on Kubernetes Master VM. You can also obtain it executing:
kubectl config view --raw
Plugin has been designed to support different Kubernetes clusters providers. As authentication property of Master node you can specify dictionary with key and value:
- gcp_service_account - value should be (JSON) content of Google Cloud Platform Service Accout file
-
cloudify.kubernetes.resources.BlueprintDefinedResource
Simplest way to define kubernetes resource. It uses Kubernetes YAML description to define resource. Properties of cloudify.kubernetes.resources.BlueprintDefinedResource:
- definition - Kubernetes YAML resource definition
- options - Kubernetes python client operation options
Only subtypes of BlueprintDefinedResource can be used. Each subtype represents single kind of kubernetes resource. Currently supported resources:
- cloudify.kubernetes.resources.Deployment
- cloudify.kubernetes.resources.Pod
- cloudify.kubernetes.resources.ReplicaSet
- cloudify.kubernetes.resources.ReplicationController
- cloudify.kubernetes.resources.Service
- cloudify.kubernetes.resources.PersistentVolume
- cloudify.kubernetes.resources.StorageClass
- cloudify.kubernetes.resources.ConfigMap
Example blueprint:
examples/simple-blueprint_defined_resource.yaml
-
cloudify.kubernetes.resources.CustomBlueprintDefinedResource
Node type extending cloudify.kubernetes.resources.BlueprintDefinedResource. It has been introduced to support some custom kinds of Kubernetes resources which hasn't defined their own subtype definition in plugin.yaml.
This node type has the same properties like BlueprintDefinedResource and additional one: api_mapping - containing information about Kubernetes python client objects which should be used to create / delete this resource object on Kubernetes cluster.
create: api: CoreV1Api method: create_namespaced_pod payload: V1Pod read: api: CoreV1Api method: read_namespaced_pod delete: api: CoreV1Api method: delete_namespaced_pod payload: V1DeleteOptions
Detailed info about Kubernetes python client objects / methods you can find here:
https://github.com/kubernetes-incubator/client-python/tree/master/kubernetes
Example blueprint:
examples/simple-custom_blueprint_defined_resource.yaml
-
cloudify.kubernetes.resources.FileDefinedResource
It enables creation / deletion of Kubernetes resource defined in YAML file. This file may be specified using relative path to file in blueprint or external URL. It should be defined as file/resource_path property.
Example blueprint:
examples/simple-file_defined_resource.yaml
-
cloudify.kubernetes.resources.MultipleFileDefinedResources
The same like cloudify.kubernetes.resources.FileDefinedResource, but it takes list of multiple kubernetes resources to be deployed. This list should be defined as files property. Each item in this list should be one-item dictionary contains resource_path key and path / URL to file as value.
Example blueprint:
examples/simple-multiple_file_defined_resources.yaml
1. Update dashboard input file ***dashboard_input.yaml***
2. Install the dashboard: cfy install -b kubernetes-dashboard -n kubernetes-dashboard examples/dashboard.yaml -i examples/inputs/dashboard-inputs.yaml
3. Run the following command: cfy deployment outputs kubernetes-dashboard
4. The output of deployment command should generate ***dashboard_url*** && ***bearer_token***
5. Access the Dashboard using ***dashboard_url*** (https://MASTER_IP:DASHBOARD_PORT)
6. You may need to open ***DASHBOARD_PORT*** on your security group on which dashboard is running if it is not already open
7. Login to the Dashboard by selecting token authentication, use the token value of ***{{bearer_token}}***
For official blueprint examples using this Cloudify plugin, please see Cloudify Community Blueprints Examples.