Sobes.tech
Middle+

How to ensure the joint operation of a cloud Kubernetes cluster and physical servers to keep some pods on physical machines?

sobes.tech AI

Answer from AI

To enable joint operation of a cloud Kubernetes cluster and physical servers, in order to keep some pods on physical machines, the following approaches can be used:

  1. Multi-cluster configuration:

    • A separate Kubernetes cluster in the cloud and a separate Kubernetes cluster on physical servers.
    • Use a service mesh (e.g., Istio, Linkerd) to ensure transparent communication between pods in different clusters.
    • For managing deployments in both clusters, solutions for multi-cluster deployment (e.g., Argo CD, Flux CD with multi-cluster support) can be used.
    • Advantages: Good isolation, ease of managing each cluster separately.
    • Disadvantages: Increased complexity in managing communication and deployments between clusters.
  2. Extending the cloud cluster to physical servers:

    • Adding physical servers as nodes to the Kubernetes cluster.
      • A cloud provider supporting hybrid configurations (e.g., GCP Anthos, Azure Arc, AWS EKS Anywhere) may be required.
      • Ensure network connectivity between cloud and physical nodes is reliable and low-latency.
    • Deploying pods on physical nodes using:
      • Node Affinity: Specifies preferences or requirements for scheduling pods on nodes with certain labels.
        // 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 and Tolerations: Mark physical nodes with "taints" and allow specific pods to "tolerate" these labels. This prevents any pods from running on physical nodes unless explicitly permitted.
        # Taint the physical node
        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: Can be used to distribute pods across specific topological domains, including physical servers.
    • Advantages: Unified cluster management, simplified communication between pods.
    • Disadvantages: Complexity in network setup and maintenance, potential latency issues between nodes.
  3. Using DaemonSets:

    • If pods need to run on every or one of the physical servers, DaemonSet can be useful. Node Selector or Node Affinity with DaemonSet can target only physical servers.
    // 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
    
    • Advantages: Simple guarantee of pod operation on specified nodes.

The choice of approach depends on specific requirements, network infrastructure, and management preferences. In most cases, extending the cloud cluster to physical servers using Node Affinity and Taints/Tolerations is a flexible and effective solution. It is important to ensure stable and secure network connectivity between the cloud and local infrastructure.

How to ensure the joint operation of a cloud… - sobes.tech