Sobes.tech
Middle+

Ako zabezpečiť spoluprácu medzi cloudovým Kubernetes clusterom a fyzickými servermi, aby niektoré pody zostali na fyzických strojoch?

sobes.tech AI

Odpoveď od AI

Na zabezpečenie spolupráce medzi cloudovým Kubernetes klastrom a fyzickými servermi, aby ste mohli ponechať niektoré pody na fyzických strojoch, môžete použiť nasledujúce prístupy:

  1. Multi-klastrová konfigurácia:

    • Samostatný Kubernetes klaster v cloude a samostatný Kubernetes klaster na fyzických serveroch.
    • Použitie service-mesh (napríklad Istio, Linkerd) na zabezpečenie transparentnej komunikácie medzi podmi v rôznych klastroch.
    • Na správu nasadení v oboch klastroch môžete použiť riešenia pre multi-klastrové nasadenie (napríklad Argo CD, Flux CD s podporou multi-klastrovosti).
    • Výhody: Dobrá izolácia, jednoduchá správa každého klastru samostatne.
    • Nevýhody: Zvýšená zložitosť správy komunikácie a nasadení medzi klastrami.
  2. Rozšírenie cloudového klastru na fyzické servery:

    • Pridanie fyzických serverov ako uzlov do Kubernetes klastru.
      • Môže byť potrebný poskytovateľ cloudových služieb podporujúci hybridné konfigurácie (napríklad GCP Anthos, Azure Arc, AWS EKS Anywhere).
      • Uistite sa, že sieťová konektivita medzi cloudovými a fyzickými uzlami je spoľahlivá a s nízkou latenciou.
    • Umiestnenie podov na fyzických uzloch s použitím:
      • Node Affinity: Určuje preferencie alebo požiadavky na plánovanie podov na uzloch s určitými značkami.
        // pod.yaml
        apiVersion: v1
        kind: Pod
        metadata:
          name: my-pod
        spec:
          containers:
          - name: my-container
            image: my-image
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: node-location
                    operator: In
                    values:
                    - physical-server
        
      • Taints a tolerations: Označuje fyzické uzly "taints" a umožňuje konkrétnym podom "preniesť" tieto značky (tolerations). To zabraňuje spusteniu akýchkoľvek podov na fyzických uzloch, okrem tých, ktorým je to výslovne povolené.
        # Označiť fyzický uzol
        kubectl taint nodes physical-server-node node-location=physical:NoSchedule
        
        // pod.yaml
        apiVersion: v1
        kind: Pod
        metadata:
          name: my-pod
        spec:
          containers:
          - name: my-container
            image: my-image
          tolerations:
          - key: "node-location"
            operator: "Equal"
            value: "physical"
            effect: "NoSchedule"
        
      • Topology Spread Constraints: Môže byť použitá na rozloženie podov podľa určitých topologických domén, vrátane fyzických serverov.
    • Výhody: Jednotná správa klastru, zjednodušená komunikácia medzi podmi.
    • Nevýhody: Zložitosť nastavenia a podpory sieťovej konektivity, potenciálne problémy s oneskorením medzi uzlami.
  3. Použitie DaemonSets:

    • Ak majú pody pracovať na každom alebo jednom z fyzických serverov, môže byť DaemonSet užitočný. Môžete použiť Node Selector alebo Node Affinity s DaemonSet na cielenie iba na fyzické servery.
    // daemonset.yaml
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: physical-server-agent
    spec:
      selector:
        matchLabels:
          app: physical-agent
      template:
        metadata:
          labels:
            app: physical-agent
        spec:
          containers:
          - name: agent-container
            image: my-agent-image
          nodeSelector:
            node-location: physical-server
    
    • Výhody: Jednoduchá záruka práce podu na požadovanom uzle.

Výber prístupu závisí od konkrétnych požiadaviek, sieteovej infraštruktúry a preferencií v správe. Vo väčšine prípadov je rozšírenie cloudového klastru na fyzické servery pomocou Node Affinity a Taints/Tolerations flexibilným a efektívnym riešením. Je dôležité zabezpečiť stabilné a bezpečné sieťové spojenie medzi cloudovou a lokálnou infraštruktúrou.