Sobes.tech
Middle

Como criar espaços de nomes e lançar implantações através do servidor API ou usando outras ferramentas?

sobes.tech IA

Resposta da IA

apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace # Nome do namespace a criar

A criação de namespaces através do servidor API é feita enviando uma requisição HTTP POST com um manifesto YAML ou JSON do namespace para o endpoint /api/v1/namespaces.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: my-namespace # Namespace onde o deployment será realizado
spec:
  replicas: 3 # Número desejado de pods
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: app-container
        image: my-image:latest # Imagem do container

O deployment através do servidor API é feito de forma semelhante, enviando uma requisição HTTP POST com um manifesto YAML ou JSON do deployment para o endpoint /apis/apps/v1/namespaces/{namespace-name}/deployments.

Para interagir com o servidor API, são utilizados várias ferramentas:

  • kubectl: Cliente de linha de comandos para gerir clusters Kubernetes.
    # Criar um namespace
    kubectl create namespace my-namespace
    
    # Criar um deployment a partir do ficheiro my-deployment.yaml no namespace my-namespace
    kubectl create -f my-deployment.yaml -n my-namespace
    
  • Bibliotecas cliente do Kubernetes: Bibliotecas para várias linguagens de programação (Python, Java, Go, etc.) que permitem interagir programaticamente com o servidor API.
    # Exemplo de utilização do cliente Python
    from kubernetes import client, config
    
    config.load_kube_config()
    v1 = client.CoreV1Api()
    
    namespace_manifest = {
        "apiVersion": "v1",
        "kind": "Namespace",
        "metadata": {
            "name": "my-namespace-python"
        }
    }
    
    v1.create_namespace(body=namespace_manifest)
    
    apps_v1 = client.AppsV1Api()
    
    deployment_manifest = {
        "apiVersion": "apps/v1",
        "kind": "Deployment",
        "metadata": {
            "name": "my-app-python",
            "namespace": "my-namespace-python"
        },
        "spec": {
            "replicas": 2,
            "selector": {
                "matchLabels": {
                    "app": "my-app-python"
                }
            },
            "template": {
                "metadata": {
                    "labels": {
                        "app": "my-app-python"
                    }
                },
                "spec": {
                    "containers": [
                        {
                            "name": "app-container",
                            "image": "nginx"
                        }
                    ]
                }
            }
        }
    }
    
    apps_v1.create_namespaced_deployment(namespace="my-namespace-python", body=deployment_manifest)
    
  • Helm: Gestor de pacotes para Kubernetes, permitindo gerir o implantação de aplicações com Charts.
    # Instalar um Chart, que pode incluir a criação de um namespace e deployment
    helm install my-release my-chart --create-namespace --namespace my-namespace
    
  • Operadores Kubernetes: Controladores especializados que expandem a funcionalidade do API do Kubernetes para gerir aplicações e serviços complexos. Podem automatizar a criação de namespaces e o deployment de componentes da aplicação.
  • Pipelines CI/CD: Sistemas de integração contínua e entrega contínua (Jenkins, GitLab CI, GitHub Actions, etc.) que frequentemente usam kubectl ou bibliotecas cliente para criar automaticamente namespaces e deployar aplicações no âmbito de um pipeline.

A escolha da ferramenta depende da tarefa específica, do nível de automação e das preferências da equipa.