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:
@@ -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}}
|
||||
`))
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user