def test_hpa_walkthrough(self): """ https://kubernetes.io/docs/user-guide/horizontal-pod-autoscaling/walkthrough/ https://github.com/kubernetes/community/blob/master/contributors/design-proposals/horizontal-pod-autoscaler.md """ k8s_dep = _utils.create_deployment(name="php-apache") k8s_dep.model = Deployment(_constants.hpa_example_deployment()) k8s_svc = _utils.create_service(name="php-apache") k8s_svc.model = Service(_constants.hpa_example_service()) k8s_hpa = _utils.create_hpa(name="php-apache") k8s_hpa.model = HorizontalPodAutoscaler( _constants.hpa_example_autoscaler()) if _utils.is_reachable(k8s_hpa.config): # //--- Step One: Run & expose php-apache server k8s_dep.create() k8s_svc.create() # // --- Step Two: Create Horizontal Pod Autoscaler k8s_hpa.create() # // --- Step Three: Increase Load # $ kubectl run -i --tty load-generator --image=busybox /bin/sh # $ while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done # watch 'kubectl config current-context; echo; kubectl get deployments; echo; kubectl get replicasets; echo; kubectl get pods; echo; kubectl top nodes; echo; kubectl top pods' time.sleep(10) # wait for 10 secs; set a breakpoint if you need.
def get_by_name(config=None, name=None): service_list = [] data = {'labelSelector': 'name={}'.format(name)} services = K8sService(config=config, name=name).get_with_params(data=data) for svc in services: service_name = Service(svc).metadata.name service_list.append(K8sService(config=config, name=service_name).get()) return service_list
def list(self, pattern=None, labels=None): ls = super(K8sService, self).list(labels=labels) svcs = list(map(lambda x: Service(x), ls)) if pattern is not None: svcs = list(filter(lambda x: pattern in x.name, svcs)) k8s = [] for x in svcs: j = K8sService(config=self.config, name=x.name).from_model(m=x) k8s.append(j) return k8s
def test_stateful_nginx(self): svc = Service(headless_service()) sset = StatefulSet(stateful_set()) k8s_svc = K8sService(name='headless') k8s_sset = K8sStatefulSet(name='sset') k8s_svc.model = svc k8s_sset.model = sset if utils.is_reachable(k8s_svc.config.api_host): k8s_svc.create() k8s_sset.create()
def test_update_with_full_model(self): data = { "kind": "Service", "apiVersion": "v1", "metadata": { "name": "frontend", "namespace": "default", "labels": { "name": "frontend" } }, "spec": { "ports": [ { "protocol": "TCP", "port": 8082, "targetPort": "feport", "nodePort": 8082 } ], "selector": { "name": "frontend" }, "clusterIP": "10.250.1.27", "type": "NodePort", "sessionAffinity": "None" }, "status": { "loadBalancer": {} } } svc = Service(data) k8s_service = utils.create_service(name=svc.name) k8s_service.model = svc k8s_service.add_port( name="frontend", port=8082, target_port="feport", node_port=8082, protocol='tcp' ) self.assertEqual(1, len(k8s_service.ports))
def test_cassandra_setup(self): svc = Service(utils.cassandra_service()) k8s_service = utils.create_service(name="cassandra") k8s_service.model = svc rc = ReplicationController(utils.cassandra_rc()) k8s_rc = utils.create_rc(name="cassandra") k8s_rc.model = rc ds = DaemonSet(utils.cassandra_daemonset()) k8s_ds = utils.create_daemonset(name="cassandra") k8s_ds.model = ds if utils.is_reachable(k8s_rc.config.api_host): k8s_service.create() k8s_rc.create() self.assertIsInstance(k8s_service, K8sService) self.assertIsInstance(k8s_rc, K8sReplicationController)
def get(self): self.model = Service(self.get_model()) return self