forked from cerc-io/stack-orchestrator
Multiple NodePorts and add replicas spec option
This commit is contained in:
parent
1841e89ed0
commit
7481ae8d8b
@ -34,5 +34,6 @@ volumes_key = "volumes"
|
|||||||
security_key = "security"
|
security_key = "security"
|
||||||
annotations_key = "annotations"
|
annotations_key = "annotations"
|
||||||
labels_key = "labels"
|
labels_key = "labels"
|
||||||
|
replicas_key = "replicas"
|
||||||
kind_config_filename = "kind-config.yml"
|
kind_config_filename = "kind-config.yml"
|
||||||
kube_config_filename = "kubeconfig.yml"
|
kube_config_filename = "kubeconfig.yml"
|
||||||
|
@ -78,28 +78,38 @@ class ClusterInfo:
|
|||||||
if (opts.o.debug):
|
if (opts.o.debug):
|
||||||
print(f"Env vars: {self.environment_variables.map}")
|
print(f"Env vars: {self.environment_variables.map}")
|
||||||
|
|
||||||
def get_nodeport(self):
|
def get_nodeports(self):
|
||||||
|
nodeports = []
|
||||||
for pod_name in self.parsed_pod_yaml_map:
|
for pod_name in self.parsed_pod_yaml_map:
|
||||||
pod = self.parsed_pod_yaml_map[pod_name]
|
pod = self.parsed_pod_yaml_map[pod_name]
|
||||||
services = pod["services"]
|
services = pod["services"]
|
||||||
for service_name in services:
|
for service_name in services:
|
||||||
service_info = services[service_name]
|
service_info = services[service_name]
|
||||||
if "ports" in service_info:
|
if "ports" in service_info:
|
||||||
port = int(service_info["ports"][0])
|
for raw_port in service_info["ports"]:
|
||||||
if opts.o.debug:
|
if opts.o.debug:
|
||||||
print(f"service port: {port}")
|
print(f"service port: {raw_port}")
|
||||||
service = client.V1Service(
|
if ":" in raw_port:
|
||||||
metadata=client.V1ObjectMeta(name=f"{self.app_name}-nodeport"),
|
parts = raw_port.split(":", 2)
|
||||||
spec=client.V1ServiceSpec(
|
node_port = int(parts[0])
|
||||||
type="NodePort",
|
pod_port = int(parts[1])
|
||||||
ports=[client.V1ServicePort(
|
else:
|
||||||
port=port,
|
node_port = None
|
||||||
target_port=port
|
pod_port = int(raw_port)
|
||||||
)],
|
service = client.V1Service(
|
||||||
selector={"app": self.app_name}
|
metadata=client.V1ObjectMeta(name=f"{self.app_name}-nodeport-{pod_port}"),
|
||||||
)
|
spec=client.V1ServiceSpec(
|
||||||
)
|
type="NodePort",
|
||||||
return service
|
ports=[client.V1ServicePort(
|
||||||
|
port=pod_port,
|
||||||
|
target_port=pod_port,
|
||||||
|
node_port=node_port
|
||||||
|
)],
|
||||||
|
selector={"app": self.app_name}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
nodeports.append(service)
|
||||||
|
return nodeports
|
||||||
|
|
||||||
def get_ingress(self, use_tls=False, certificate=None, cluster_issuer="letsencrypt-prod"):
|
def get_ingress(self, use_tls=False, certificate=None, cluster_issuer="letsencrypt-prod"):
|
||||||
# No ingress for a deployment that has no http-proxy defined, for now
|
# No ingress for a deployment that has no http-proxy defined, for now
|
||||||
@ -373,9 +383,12 @@ class ClusterInfo:
|
|||||||
spec=client.V1PodSpec(containers=containers, image_pull_secrets=image_pull_secrets, volumes=volumes),
|
spec=client.V1PodSpec(containers=containers, image_pull_secrets=image_pull_secrets, volumes=volumes),
|
||||||
)
|
)
|
||||||
spec = client.V1DeploymentSpec(
|
spec = client.V1DeploymentSpec(
|
||||||
replicas=1, template=template, selector={
|
replicas=self.spec.get_replicas(),
|
||||||
|
template=template, selector={
|
||||||
"matchLabels":
|
"matchLabels":
|
||||||
{"app": self.app_name}})
|
{"app": self.app_name}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
deployment = client.V1Deployment(
|
deployment = client.V1Deployment(
|
||||||
api_version="apps/v1",
|
api_version="apps/v1",
|
||||||
|
@ -246,8 +246,8 @@ class K8sDeployer(Deployer):
|
|||||||
if opts.o.debug:
|
if opts.o.debug:
|
||||||
print("No ingress configured")
|
print("No ingress configured")
|
||||||
|
|
||||||
nodeport: client.V1Service = self.cluster_info.get_nodeport()
|
nodeports: List[client.V1Service] = self.cluster_info.get_nodeports()
|
||||||
if nodeport:
|
for nodeport in nodeports:
|
||||||
if opts.o.debug:
|
if opts.o.debug:
|
||||||
print(f"Sending this nodeport: {nodeport}")
|
print(f"Sending this nodeport: {nodeport}")
|
||||||
if not opts.o.dry_run:
|
if not opts.o.dry_run:
|
||||||
@ -342,10 +342,10 @@ class K8sDeployer(Deployer):
|
|||||||
if opts.o.debug:
|
if opts.o.debug:
|
||||||
print("No ingress to delete")
|
print("No ingress to delete")
|
||||||
|
|
||||||
nodeport: client.V1Service = self.cluster_info.get_nodeport()
|
nodeports: List[client.V1Service] = self.cluster_info.get_nodeports()
|
||||||
if nodeport:
|
for nodeport in nodeports:
|
||||||
if opts.o.debug:
|
if opts.o.debug:
|
||||||
print(f"Deleting this nodeport: {ingress}")
|
print(f"Deleting this nodeport: {nodeport}")
|
||||||
try:
|
try:
|
||||||
self.core_api.delete_namespaced_service(
|
self.core_api.delete_namespaced_service(
|
||||||
namespace=self.k8s_namespace,
|
namespace=self.k8s_namespace,
|
||||||
|
@ -117,6 +117,9 @@ class Spec:
|
|||||||
def get_annotations(self):
|
def get_annotations(self):
|
||||||
return self.obj.get(constants.annotations_key, {})
|
return self.obj.get(constants.annotations_key, {})
|
||||||
|
|
||||||
|
def get_replicas(self):
|
||||||
|
return self.obj.get(constants.replicas_key, 1)
|
||||||
|
|
||||||
def get_labels(self):
|
def get_labels(self):
|
||||||
return self.obj.get(constants.labels_key, {})
|
return self.obj.get(constants.labels_key, {})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user