示例#1
0
class KubernetesApi(object):
    def __init__(self,filename):
        self.config = KubeConfig(filename)
        self.http_client = HTTPClient(self.config)

    def get_pods(self):
        """Returns a list of the pod names"""
        return self._get_components('pods')

    def get_replication_controllers(self):
        """Returns a list of the rc names"""
        return self._get_components('replicationcontrollers')

    def get_services(self):
        """Returns a list of the service names"""
        return self._get_components('services')

    def start_pod(self, *args, **kwargs):
        filename = '{}/templates/pod.json'.format(os.path.dirname(__file__))
        with open(filename) as f:
            t = jinja2.Template(f.read())
        json_str = t.render(
            podname=kwargs.get('podname'),
            containername=kwargs.get('containername'),
            containerimage=kwargs.get('containerimage'),
            imagepullpolicy=kwargs.get('imagepullpolicy'),
            restartpolicy=kwargs.get('restartpolicy'),
            command=kwargs.get('command')
        )
        json_obj = json.loads(json_str)
        rsp = self.http_client.post(url='/pods', json=json_obj)
        if rsp.status_code != 201: raise KubernetesError

    def start_replicationcontroller(self, *args, **kwargs):
        filename = '{}/templates/rc.json'.format(os.path.dirname(__file__))
        with open(filename) as f:
            t = jinja2.Template(f.read())
        json_str = t.render(
            rcname=kwargs.get('rcname'),
            containername=kwargs.get('containername'),
            containerimage=kwargs.get('containerimage'),
            label=kwargs.get('label'),
            replicas=kwargs.get('replicas')
        )
        json_obj = json.loads(json_str)
        rsp = self.http_client.post(url='/replicationcontrollers', json=json_obj)
        if rsp.status_code != 201: raise KubernetesError


    def _get_components(self, component_type):
        rsp = self.http_client.get(url='/{}'.format(component_type))
        if rsp.status_code != 200: raise KubernetesError
        json_rsp = json.loads(rsp.text)
        if 'items' in json_rsp:
            items = [x['metadata']['name'] for x in json_rsp['items']]
            return items
        raise KubernetesError
示例#2
0
文件: kube.py 项目: xyzhaoyx/gkube
class Service(object):
    def __init__(self):
        self.client = HTTPClient(kubeconfig)

    def create_service(self, name):
        ports = list()
        port_22 = {"name": "ssh", "port": 22}
        port_80 = {"name": "http", "port": 80}
        port_443 = {"name": "https", "port": 443}
        ports.append(port_22)
        ports.append(port_80)
        ports.append(port_443)
        #for portNum in range(7000,7010):
        #    port_custom = {"name": portNum, "port": portNum}
        #    ports.append(port_custom)
        body = dict()
        body["kind"] = "Service"
        body["apiVersion"] = "v1"
        body["metadata"] = {"name": name}
        body["spec"] = {"selector": {"run": name}, "type": "NodePort"}
        body["spec"]["ports"] = ports
        data = json.dumps(body)
        service = json.loads(
            self.client.post(url="namespaces/default/services",
                             data=data).content)
        return service

    def view_service(self, name):
        url = "namespaces/{}/services/{}".format("default", name)
        service = json.loads(self.client.get(url=url).content)
        return service

    def delete_service(self, name):
        service_path = "namespaces/{}/services/{}".format("default", name)
        body = {"gracePeriodSeconds": 0}
        data = json.dumps(body)
        delete_result = json.loads(
            self.client.delete(url=service_path, data=data).content)
        return delete_result
示例#3
0
文件: kube.py 项目: xyzhaoyx/gkube
class ReplicationController(object):
    def __init__(self):
        self.client = HTTPClient(kubeconfig)

    def create_replication_controller(self, name, replicas):
        volume_gfs_name = "vol-{}".format(name)
        host_path_mount = "/mnt/{}".format(name)
        volumemount = {'name': volume_gfs_name, 'mountPath': '/apps'}
        volumemounts = [volumemount]
        container_atom = {
            'name': name,
            'image': "registry.baijiahulian.com/atom",
            'ports': [{
                'containerPort': 22
            }],
            'imagePullPolicy': 'Always',
            'volumeMounts': volumemounts,
            'dnsPolicy': 'Default',
            'resources': {
                'limits': {
                    'cpu': '500m',
                    'memory': '2000Mi'
                },
                'requests': {
                    'cpu': '10m',
                    'memory': '512Mi'
                }
            }
        }
        containers = list()
        containers.append(container_atom)
        volume_gfs = {
            'name': volume_gfs_name,
            'hostPath': {
                'path': host_path_mount
            }
        }
        volumes = list()
        volumes.append(volume_gfs)
        podtemplatespec = dict()
        podtemplatespec['metadata'] = {}
        podtemplatespec['metadata']['name'] = name
        podtemplatespec['metadata']['labels'] = {"run": name}
        podtemplatespec['spec'] = {}
        podtemplatespec['spec']['containers'] = containers
        podtemplatespec['spec']['volumes'] = volumes
        body = dict()
        body["kind"] = "ReplicationController"
        body["apiVersion"] = "v1"
        body["metadata"] = {"name": name}
        body["spec"] = {"replicas": replicas, "template": podtemplatespec}
        data = json.dumps(body)
        replicationcontroller = json.loads(
            self.client.post(url="namespaces/default/replicationcontrollers",
                             data=data).content)
        return replicationcontroller

    def delete_replication_controller(self, name):
        rc_path = "namespaces/{}/replicationcontrollers/{}".format(
            "default", name)
        body = {"gracePeriodSeconds": 0}
        data = json.dumps(body)
        delete_result = json.loads(
            self.client.delete(url=rc_path, data=data).content)
        return delete_result