Before you begin
For simplicity, we will assume that there is only a single primary cluster in the mesh. This simplifies the process of configuring the control plane, since changes only need to be applied to one cluster.
We will deploy several instances of the HelloWorld
application as follows:
Setup for locality load balancing tasks
This guide assumes that all clusters will be accessed through contexts in the default Kubernetes configuration file. The following environment variables will be used for the various contexts:
Create the sample
namespace
Add the sample
namespace to each cluster:
$ for CTX in "$CTX_PRIMARY" "$CTX_R1_Z1" "$CTX_R1_Z2" "$CTX_R2_Z3" "$CTX_R3_Z4"; \
kubectl --context="$CTX" apply -f sample.yaml; \
done
Generate the HelloWorld
YAML for each locality, using the locality as the version string:
$ for LOC in "region1.zone1" "region1.zone2" "region2.zone3" "region3.zone4"; \
./@samples/helloworld/gen-helloworld.sh@ \
--version "$LOC" > "helloworld-${LOC}.yaml"; \
done
Apply the HelloWorld
YAML to the appropriate cluster for each locality:
$ kubectl apply --context="${CTX_R1_Z1}" -n sample \
-f helloworld-region1.zone1.yaml
$ kubectl apply --context="${CTX_R2_Z3}" -n sample \
-f helloworld-region2.zone3.yaml
$ kubectl apply --context="${CTX_R3_Z4}" -n sample \
-f helloworld-region3.zone4.yaml
Deploy Sleep
Deploy the application to region1
zone1
:
$ kubectl apply --context="${CTX_R1_Z1}" \
-f @samples/sleep/sleep.yaml@ -n sample
Wait until the HelloWorld
pods in each zone are Running
:
-l version="region1.zone2"
NAME READY STATUS RESTARTS AGE
helloworld-region1.zone2-86f77cd7b-cpxhv 2/2 Running 0 30s
$ kubectl get pod --context="${CTX_R2_Z3}" -n sample -l app="helloworld" \
-l version="region2.zone3"
NAME READY STATUS RESTARTS AGE
helloworld-region2.zone3-86f77cd7b-cpxhv 2/2 Running 0 30s
$ kubectl get pod --context="${CTX_R3_Z4}" -n sample -l app="helloworld" \
-l version="region3.zone4"
helloworld-region3.zone4-86f77cd7b-cpxhv 2/2 Running 0 30s
Congratulations! You successfully configured the system and are now ready to begin the locality load balancing tasks!
Next steps
You can now configure one of the following load balancing options: