Resource Propagating
The PropagationPolicy and ClusterPropagationPolicy APIs are provided to propagate resources. For the differences between the two APIs, please see here.
Here, we use PropagationPolicy as an example to describe how to propagate resources.
Before you start
Install Karmada and prepare the karmadactl command-line tool.
Deploy a simplest multi-cluster Deployment
Create a PropagationPolicy object
You can propagate a Deployment by creating a PropagationPolicy object defined in a YAML file. For example, this YAML file describes a Deployment object named nginx under default namespace need to be propagated to member1 cluster:
# propagationpolicy.yaml
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: example-policy # The default namespace is `default`.
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: nginx # If no namespace is specified, the namespace is inherited from the parent object scope.
placement:
clusterAffinity:
clusterNames:
- member1
- Create a propagationPolicy base on the YAML file:
kubectl apply -f propagationpolicy.yaml
- Create a Deployment nginx resource:
kubectl create deployment nginx --image nginx
Note: The resource exists only as a template in karmada. After being propagated to a member cluster, the behavior of the resource is the same as that of a single kubernetes cluster.
Note: Resources and PropagationPolicy are created in no sequence.
- Display information of the deployment:
karmadactl get deployment
The output is similar to this:
NAME CLUSTER READY UP-TO-DATE AVAILABLE AGE ADOPTION
nginx member1 1/1 1 1 52s Y
- List the pods created by the deployment:
karmadactl get pod -l app=nginx
The output is similar to this:
NAME CLUSTER READY STATUS RESTARTS AGE
nginx-6799fc88d8-s7vv9 member1 1/1 Running 0 52s