1
0
mirror of https://github.com/openshift/installer.git synced 2026-02-05 06:46:36 +01:00

Merge pull request #501 from abhinavdahiya/multi_az_workers

manifests: stripe workers across machinesets in each AZ for aws.
This commit is contained in:
OpenShift Merge Robot
2018-10-22 13:55:24 -07:00
committed by GitHub
2 changed files with 85 additions and 56 deletions

View File

@@ -7,12 +7,19 @@ import (
"github.com/openshift/installer/pkg/types"
)
// WorkerConfig is used to generate the worker machineset.
// WorkerConfig is used to generate the worker machinesets.
type WorkerConfig struct {
Replicas int64
Instances []WorkerMachinesetInstance
MachineConfig
}
// WorkerMachinesetInstance constains information specific to
// one worker machineset.
type WorkerMachinesetInstance struct {
Replicas int64
AvailabilityZone string
}
// MachineConfig contains fields common to worker and master
// machine configurations
type MachineConfig struct {
@@ -23,60 +30,70 @@ type MachineConfig struct {
Machine types.AWSMachinePoolPlatform
}
// WorkerMachineSetTmpl is template for worker machineset.
var WorkerMachineSetTmpl = template.Must(template.New("aws-worker-machineset").Parse(`
apiVersion: cluster.k8s.io/v1alpha1
kind: MachineSet
// WorkerMachineSetsTmpl is template for worker machinesets.
var WorkerMachineSetsTmpl = template.Must(template.New("aws-worker-machinesets").Parse(`
{{- $c := . -}}
kind: List
apiVersion: v1
metadata:
name: {{.ClusterName}}-worker-0
namespace: openshift-cluster-api
labels:
sigs.k8s.io/cluster-api-cluster: {{.ClusterName}}
sigs.k8s.io/cluster-api-machine-role: worker
sigs.k8s.io/cluster-api-machine-type: worker
spec:
replicas: {{.Replicas}}
selector:
matchLabels:
sigs.k8s.io/cluster-api-machineset: worker
sigs.k8s.io/cluster-api-cluster: {{.ClusterName}}
template:
metadata:
labels:
resourceVersion: ""
selfLink: ""
items:
{{- range $index,$instance := $c.Instances}}
- apiVersion: cluster.k8s.io/v1alpha1
kind: MachineSet
metadata:
name: {{$c.ClusterName}}-worker-{{$index}}
namespace: openshift-cluster-api
labels:
sigs.k8s.io/cluster-api-cluster: {{$c.ClusterName}}
sigs.k8s.io/cluster-api-machine-role: worker
sigs.k8s.io/cluster-api-machine-type: worker
spec:
replicas: {{$instance.Replicas}}
selector:
matchLabels:
sigs.k8s.io/cluster-api-machineset: worker
sigs.k8s.io/cluster-api-cluster: {{.ClusterName}}
sigs.k8s.io/cluster-api-machine-role: worker
sigs.k8s.io/cluster-api-machine-type: worker
spec:
providerConfig:
value:
apiVersion: aws.cluster.k8s.io/v1alpha1
kind: AWSMachineProviderConfig
ami:
id: {{.AMIID}}
instanceType: {{.Machine.InstanceType}}
placement:
region: {{.Region}}
subnet:
filters:
- name: "tag:Name"
values:
- "{{.ClusterName}}-worker-*"
iamInstanceProfile:
id: "{{.ClusterName}}-worker-profile"
tags:
{{- range $key,$value := .Tags}}
- name: "{{$key}}"
value: "{{$value}}"
{{- end}}
securityGroups:
- filters:
sigs.k8s.io/cluster-api-cluster: {{$c.ClusterName}}
template:
metadata:
labels:
sigs.k8s.io/cluster-api-machineset: worker
sigs.k8s.io/cluster-api-cluster: {{$c.ClusterName}}
sigs.k8s.io/cluster-api-machine-role: worker
sigs.k8s.io/cluster-api-machine-type: worker
spec:
providerConfig:
value:
apiVersion: aws.cluster.k8s.io/v1alpha1
kind: AWSMachineProviderConfig
ami:
id: {{$c.AMIID}}
instanceType: {{$c.Machine.InstanceType}}
placement:
region: {{$c.Region}}
availabilityZone: {{$instance.AvailabilityZone}}
subnet:
filters:
- name: "tag:Name"
values:
- "{{.ClusterName}}_worker_sg"
userDataSecret:
name: worker-user-data
versions:
kubelet: ""
controlPlane: ""
- "{{$c.ClusterName}}-worker-{{$instance.AvailabilityZone}}"
iamInstanceProfile:
id: "{{$c.ClusterName}}-worker-profile"
tags:
{{- range $key,$value := $c.Tags}}
- name: "{{$key}}"
value: "{{$value}}"
{{- end}}
securityGroups:
- filters:
- name: "tag:Name"
values:
- "{{$c.ClusterName}}_worker_sg"
userDataSecret:
name: worker-user-data
versions:
kubelet: ""
controlPlane: ""
{{- end}}
`))

View File

@@ -77,7 +77,6 @@ func (w *Worker) Generate(dependencies asset.Parents) error {
case "aws":
config := aws.WorkerConfig{}
config.ClusterName = ic.ObjectMeta.Name
config.Replicas = numOfWorkers
config.Region = ic.Platform.AWS.Region
config.Machine = defaultAWSMachinePoolPlatform()
@@ -102,7 +101,20 @@ func (w *Worker) Generate(dependencies asset.Parents) error {
}
config.AMIID = ami
w.MachineSetRaw = applyTemplateData(aws.WorkerMachineSetTmpl, config)
azs, err := aws.AvailabilityZones(config.Region)
if err != nil {
return errors.Wrap(err, "failed to fetch availability zones")
}
numOfAZs := int64(len(azs))
for idx, az := range azs {
replicas := numOfWorkers / numOfAZs
if int64(idx) < numOfWorkers%numOfAZs {
replicas++
}
config.Instances = append(config.Instances, aws.WorkerMachinesetInstance{Replicas: replicas, AvailabilityZone: az})
}
w.MachineSetRaw = applyTemplateData(aws.WorkerMachineSetsTmpl, config)
case "libvirt":
config := libvirt.Config{
ClusterName: ic.ObjectMeta.Name,