apiVersion: fleet.cattle.io/v1alpha1 kind: Bundle metadata: labels: fleet.cattle.io/commit: fake name: test namespace: fleet-default spec: namespace: fleet-mc-helm-example resources: - content: | apiVersion: v2 name: guestbook description: Sample application version: 0.0.0 appVersion: 0.0.0 name: Chart.yaml - content: | # Multi-Cluster Helm Example This example will deploy the [Kubernetes sample guestbook](https://github.com/kubernetes/examples/tree/master/guestbook/) application as packaged as a Helm chart. The app will be deployed into the `fleet-mc-helm-example` namespace. The application will be customized as follows per environment: * Dev clusters: Only the redis leader is deployed and not the followers. * Test clusters: Scale the front deployment to 3 * Prod clusters: Scale the front deployment to 3 and set the service type to LoadBalancer ```yaml kind: GitRepo apiVersion: fleet.cattle.io/v1alpha1 metadata: name: helm namespace: fleet-default spec: repo: https://github.com/rancher/fleet-examples paths: - multi-cluster/helm targets: - name: dev clusterSelector: matchLabels: env: dev - name: test clusterSelector: matchLabels: env: test - name: prod clusterSelector: matchLabels: env: prod ``` name: README.md - content: | namespace: fleet-mc-helm-example targetCustomizations: - name: dev helm: values: replication: false clusterSelector: matchLabels: env: dev - name: test helm: values: replicas: 3 clusterSelector: matchLabels: env: test - name: prod helm: values: serviceType: LoadBalancer replicas: 3 clusterSelector: matchLabels: env: prod name: fleet.yaml - content: | apiVersion: apps/v1 kind: Deployment metadata: name: frontend spec: selector: matchLabels: app: guestbook tier: frontend replicas: {{ .Values.replicas }} template: metadata: labels: app: guestbook tier: frontend spec: containers: - name: php-redis image: gcr.io/google-samples/gb-frontend:v4 resources: requests: cpu: 100m memory: 100Mi ports: - containerPort: 80 name: templates/frontend-deployment.yaml - content: | apiVersion: v1 kind: Service metadata: name: frontend labels: app: guestbook tier: frontend spec: type: "{{ .Values.serviceType }}" ports: - port: 80 selector: app: guestbook tier: frontend name: templates/frontend-service.yaml - content: | apiVersion: apps/v1 kind: Deployment metadata: name: redis-master spec: selector: matchLabels: app: redis role: master tier: backend replicas: 1 template: metadata: labels: app: redis role: master tier: backend spec: containers: - name: master image: redis resources: requests: cpu: 100m memory: 100Mi ports: - containerPort: 6379 name: templates/redis-master-deployment.yaml - content: | apiVersion: v1 kind: Service metadata: name: redis-master labels: app: redis role: master tier: backend spec: ports: - port: 6379 targetPort: 6379 selector: app: redis role: master tier: backend name: templates/redis-master-service.yaml - content: | {{ if .Values.replication }} apiVersion: apps/v1 kind: Deployment metadata: name: redis-slave spec: selector: matchLabels: app: redis role: slave tier: backend replicas: 2 template: metadata: labels: app: redis role: slave tier: backend spec: containers: - name: slave image: gcr.io/google_samples/gb-redisslave:v1 resources: requests: cpu: 100m memory: 100Mi ports: - containerPort: 6379 {{ end }} name: templates/redis-slave-deployment.yaml - content: | apiVersion: v1 kind: Service metadata: name: redis-slave labels: app: redis role: slave tier: backend spec: ports: - port: 6379 selector: app: redis {{ if .Values.replication }} role: slave {{ else }} role: master {{ end }} tier: backend name: templates/redis-slave-service.yaml - content: | replication: true replicas: 1 serviceType: NodePort name: values.yaml targets: - clusterSelector: matchLabels: env: dev helm: values: replication: false name: dev - clusterSelector: matchLabels: env: test helm: values: replicas: 3 name: test - clusterSelector: matchLabels: env: prod helm: values: replicas: 3 serviceType: LoadBalancer name: prod