Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added rke support #140

Merged
merged 9 commits into from
Dec 14, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion cloudman/clusterman/clients/kube_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ def _get_job_pods_in_node(self, node_name, state):
f"spec.nodeName={node_name},status.phase={state}",
"--selector", "job-name", "-o", "yaml"])

def wait_till_jobs_complete(self, node, timeout=3600):
def wait_till_jobs_complete(self, node, timeout=3600*24*7):
name = node.get('metadata', {}).get('name')
retryer = tenacity.Retrying(
stop=tenacity.stop_after_delay(timeout),
Expand All @@ -117,6 +117,12 @@ def drain(self, node, force=True, timeout=120, ignore_daemonsets=True):
f"--ignore-daemonsets={'true' if ignore_daemonsets else 'false'}"]
)

def delete(self, node):
name = node.get('metadata', {}).get('name')
return helpers.run_command(
["kubectl", "delete", "node", name]
)


class KubeSecretService(KubeService):

Expand Down
81 changes: 0 additions & 81 deletions cloudman/clusterman/clients/rancher.py

This file was deleted.

78 changes: 34 additions & 44 deletions cloudman/clusterman/cluster_templates.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import abc
from rest_framework.exceptions import ValidationError
from .clients.rancher import RancherClient
from cloudlaunch import models as cl_models


Expand Down Expand Up @@ -32,44 +31,33 @@ def deactivate_autoscaling(self):

@staticmethod
def get_template_for(context, cluster):
if cluster.cluster_type == "KUBE_RANCHER":
return CMRancherTemplate(context, cluster)
if cluster.cluster_type == "KUBE_RKE":
return CMRKETemplate(context, cluster)
else:
raise KeyError("Cannon get cluster template for unknown cluster "
"type: %s" % cluster.cluster_type)


class CMRancherTemplate(CMClusterTemplate):
class CMRKETemplate(CMClusterTemplate):

def __init__(self, context, cluster):
super(CMRancherTemplate, self).__init__(context, cluster)
settings = cluster.connection_settings.get('rancher_config')
self._rancher_url = settings.get('rancher_url')
self._rancher_api_key = settings.get('rancher_api_key')
self._rancher_cluster_id = settings.get('rancher_cluster_id')
self._rancher_project_id = settings.get('rancher_project_id')
super(CMRKETemplate, self).__init__(context, cluster)
settings = cluster.connection_settings.get('rke_config')
self._rke_registration_server = settings.get('rke_registration_server')
self._rke_registration_token = settings.get('rke_registration_token')
self._rke_cluster_id = settings.get('rke_cluster_id')

@property
def rancher_url(self):
return self._rancher_url
def rke_registration_server(self):
return self._rke_registration_server

@property
def rancher_api_key(self):
return self._rancher_api_key
def rke_registration_token(self):
return self._rke_registration_token

@property
def rancher_cluster_id(self):
return self._rancher_cluster_id

@property
def rancher_project_id(self):
return self._rancher_project_id

@property
def rancher_client(self):
return RancherClient(self.rancher_url, self.rancher_api_key,
self.rancher_cluster_id,
self.rancher_project_id)
def rke_cluster_id(self):
return self._rke_cluster_id

def _find_matching_vm_type(self, zone_model=None, default_vm_type=None,
min_vcpus=0, min_ram=0, vm_family=""):
Expand Down Expand Up @@ -114,30 +102,33 @@ def add_node(self, name, vm_type=None, zone=None, min_vcpus=0, min_ram=0, vm_fam
target_zone=zone)
params = {
'name': name,
'application': 'cm_rancher_kubernetes_plugin',
'application': 'cm_rke_kubernetes_plugin',
'deployment_target_id': deployment_target.id,
'application_version': '0.1.0',
'config_app': {
'rancher_action': 'add_node',
'config_rancher_kube': {
'rancher_url': self.rancher_url,
'rancher_api_key': self.rancher_api_key,
'rancher_cluster_id': self.rancher_cluster_id,
'rancher_project_id': self.rancher_project_id,
'rancher_node_command': (
self.rancher_client.get_cluster_registration_command()
+ " --worker")
'action': 'add_node',
'config_kube_rke': {
'rke_registration_server': self.rke_registration_server,
'rke_registration_token': self.rke_registration_token,
'rke_cluster_id': self.rke_cluster_id
},
"config_appliance": {
"sshUser": "ubuntu",
"runner": "ansible",
"repository": "https://github.com/CloudVE/ansible-docker-boot",
"inventoryTemplate": "${host}\n\n"
"[all:vars]\n"
"ansible_ssh_port=22\n"
"ansible_user='${user}'\n"
"ansible_ssh_private_key_file=pk\n"
"ansible_ssh_extra_args='-o StrictHostKeyChecking=no'\n"
"repository": "https://github.com/CloudVE/cloudman-boot",
"inventoryTemplate":
"[controllers]\n\n"
"[agents]\n"
"${host}\n\n"
"[rke_cluster:children]\n"
"controllers\n"
"agents\n\n"
"[all:vars]\n"
"ansible_ssh_port=22\n"
"ansible_user='${user}'\n"
"ansible_ssh_private_key_file=pk\n"
"ansible_ssh_extra_args='-o StrictHostKeyChecking=no"
" -o ControlMaster=no'\n"
},
'config_cloudlaunch': (settings.get('app_config', {})
.get('config_cloudlaunch', {})),
Expand Down Expand Up @@ -166,4 +157,3 @@ def add_node(self, name, vm_type=None, zone=None, min_vcpus=0, min_ram=0, vm_fam
def remove_node(self, node):
return self.context.cloudlaunch_client.deployments.tasks.create(
action='DELETE', deployment_pk=node.deployment.pk)

16 changes: 8 additions & 8 deletions cloudman/clusterman/fixtures/rancher_app_def.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
[
{
"model": "cloudlaunch.application",
"pk": "cm_rancher_kubernetes_plugin",
"pk": "cm_rke_kubernetes_plugin",
"fields": {
"added": "2016-06-27T22:10:17.212Z",
"updated": "2017-12-22T21:38:44.060Z",
"name": "Rancher Kubernetes Plugin",
"name": "RKE Kubernetes Plugin",
"status": "LIVE",
"summary": "A rancher kubernetes plugin for cloudman",
"summary": "A RKE kubernetes plugin for cloudman",
"maintainer": "cloudve.org",
"description": "A rancher kubernetes plugin for cloudman",
"description": "A RKE kubernetes plugin for cloudman",
"info_url": "",
"icon_url": "https://upload.wikimedia.org/wikipedia/commons/3/3a/Logo-ubuntu_no%28r%29-black_orange-hex.svg?download",
"icon_url": "https://docs.rke2.io/assets/logo-horizontal-rke.svg",
"default_launch_config": "",
"default_version": 1,
"display_order": 1000,
Expand All @@ -22,12 +22,12 @@
"model": "cloudlaunch.applicationversion",
"pk": 1,
"fields": {
"application": "cm_rancher_kubernetes_plugin",
"application": "cm_rke_kubernetes_plugin",
"version": "0.1.0",
"frontend_component_path": "",
"frontend_component_name": "",
"backend_component_name": "clusterman.plugins.rancher_kubernetes_app.RancherKubernetesApp",
"default_launch_config": "{\r\n \"config_cloudlaunch\":{\r\n \"firewall\":[\r\n {\r\n \"securityGroup\":\"cloudlaunch-vm\",\r\n \"rules\":[\r\n {\r\n \"protocol\":\"tcp\",\r\n \"from\":\"22\",\r\n \"to\":\"22\",\r\n \"cidr\":\"0.0.0.0/0\"\r\n },\r\n {\r\n \"protocol\":\"tcp\",\r\n \"from\":\"443\",\r\n \"to\":\"443\",\r\n \"cidr\":\"0.0.0.0/0\"\r\n },\r\n {\r\n \"protocol\":\"udp\",\r\n \"from\":\"8472\",\r\n \"to\":\"8472\",\r\n \"cidr\":\"0.0.0.0/0\"\r\n },\r\n {\r\n \"protocol\":\"tcp\",\r\n \"from\":\"9099\",\r\n \"to\":\"9099\",\r\n \"cidr\":\"0.0.0.0/0\"\r\n },\r\n {\r\n \"protocol\":\"tcp\",\r\n \"from\":\"10254\",\r\n \"to\":\"10254\",\r\n \"cidr\":\"0.0.0.0/0\"\r\n },\r\n {\r\n \"protocol\":\"tcp\",\r\n \"from\":\"6443\",\r\n \"to\":\"6443\",\r\n \"cidr\":\"0.0.0.0/0\"\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n}",
"backend_component_name": "clusterman.plugins.rke_kubernetes_app.RKEKubernetesApp",
"default_launch_config": "{\r\n \"config_cloudlaunch\":{\r\n \"firewall\":[\r\n {\r\n \"securityGroup\":\"cloudlaunch-vm\",\r\n \"rules\":[\r\n {\r\n \"protocol\":\"tcp\",\r\n \"from\":\"22\",\r\n \"to\":\"22\",\r\n \"cidr\":\"0.0.0.0/0\"\r\n },\r\n {\r\n \"protocol\":\"tcp\",\r\n \"from\":\"443\",\r\n \"to\":\"443\",\r\n \"cidr\":\"0.0.0.0/0\"\r\n },\r\n ]\r\n }\r\n ]\r\n }\r\n}",
"default_target": null
}
}
Expand Down
2 changes: 1 addition & 1 deletion cloudman/clusterman/management/commands/create_cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

class Command(BaseCommand):
help = 'Creates a CloudMan cluster. Currently supported cluster' \
'types: RANCHER_KUBE. Specify rancher connection settings in yaml' \
'types: KUBE_RKE. Specify RKE connection settings in yaml' \
'format in the settings_file.'

def add_arguments(self, parser):
Expand Down
4 changes: 2 additions & 2 deletions cloudman/clusterman/management/commands/import_cloud_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,9 @@ def load_cloud_data(json_data):
image_obj, _ = cl_models.Image.objects.get_or_create(
name=name, defaults={**image, "region": region_obj})

# connect rancher app as target
# connect rke app as target
version = cl_models.ApplicationVersion.objects.filter(
application='cm_rancher_kubernetes_plugin').first()
application='cm_rke_kubernetes_plugin').first()
target = cl_models.CloudDeploymentTarget.objects.filter(
target_zone=zone_obj).first()
cl_models.ApplicationVersionCloudConfig.objects.create(
Expand Down
Loading