Sobes.tech
Middle

Kā tiek izveidoti namespaci un uzsākti deploymenti caur API-serveri vai ar citiem rīkiem?

sobes.tech AI

Atbilde no AI

apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace # Izveidotā namespace nosaukums

Namespace izveide caur API serveri notiek, nosūtot HTTP POST pieprasījumu ar YAML vai JSON manifestu uz endpointu /api/v1/namespaces.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: my-namespace # Namespace, kurā tiks izvietots deployment
spec:
  replicas: 3 # Vēlamais podu skaits
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: app-container
        image: my-image:latest # Konteineru attēls

Deployment izvietošana caur API serveri notiek līdzīgi — nosūtot YAML vai JSON manifestu uz endpointu /apis/apps/v1/namespaces/{namespace-name}/deployments.

Dažādi rīki tiek izmantoti ar API serveri saziņai:

  • kubectl: Kubernetes komandrindas klients.
    # Namespace izveide
    kubectl create namespace my-namespace
    
    # Deployment izveide no faila my-deployment.yaml namespace'ā my-namespace
    kubectl create -f my-deployment.yaml -n my-namespace
    
  • Kubernetes klientu bibliotēkas: Dažādu programmēšanas valodu bibliotēkas (Python, Java, Go un citi), kas ļauj programmatiski sazināties ar API serveri.
    # Python klienta piemērs
    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: Kubernetes pakotņu pārvaldnieks, kas ļauj pārvaldīt izvietojumus, izmantojot Chartus.
    # Charta instalēšana, kas var ietvert namespace un deployment izveidi
    helm install my-release my-chart --create-namespace --namespace my-namespace
    
  • Kubernetes operatori: Specializēti kontrolieri, kas paplašina Kubernetes API funkcionalitāti un pārvalda sarežģītas lietojumprogrammas un pakalpojumus. Tie var automātiski izveidot namespace'us un izvietot komponentes.
  • CI/CD piltņi: Nepārtrauktās integrācijas un piegādes sistēmas (Jenkins, GitLab CI, GitHub Actions un citi), kas bieži izmanto kubectl vai klientu bibliotēkas, lai automātiski izveidotu namespace'us un izvietotu lietojumprogrammas piltina laikā.

Izvēlētais rīks ir atkarīgs no konkrētās uzdevuma, automatizācijas līmeņa un komandas vēlmēm.