trying to make a more generic sidecar
This commit is contained in:
parent
681656cbb7
commit
cfcae65f4c
|
|
@ -21,3 +21,14 @@ spec:
|
||||||
foo: zalando
|
foo: zalando
|
||||||
postgresql:
|
postgresql:
|
||||||
version: "10"
|
version: "10"
|
||||||
|
|
||||||
|
sideCars:
|
||||||
|
- name: "pghero"
|
||||||
|
dockerImage: "ankane/pghero"
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 10m
|
||||||
|
memory: 100Mi
|
||||||
|
limits:
|
||||||
|
cpu: 300m
|
||||||
|
memory: 3000Mi
|
||||||
|
|
|
||||||
|
|
@ -318,8 +318,9 @@ func (c *Cluster) generatePodTemplate(
|
||||||
patroniParameters *spec.Patroni,
|
patroniParameters *spec.Patroni,
|
||||||
cloneDescription *spec.CloneDescription,
|
cloneDescription *spec.CloneDescription,
|
||||||
dockerImage *string,
|
dockerImage *string,
|
||||||
customPodEnvVars map[string]string,
|
sidecars *[]spec.Sidecar,
|
||||||
) *v1.PodTemplateSpec {
|
customPodEnvVars map[string]string
|
||||||
|
) (*v1.PodTemplateSpec, error) {
|
||||||
spiloConfiguration := c.generateSpiloJSONConfiguration(pgParameters, patroniParameters)
|
spiloConfiguration := c.generateSpiloJSONConfiguration(pgParameters, patroniParameters)
|
||||||
|
|
||||||
envVars := []v1.EnvVar{
|
envVars := []v1.EnvVar{
|
||||||
|
|
@ -525,6 +526,16 @@ func (c *Cluster) generatePodTemplate(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if sidecars != nil && len(*sidecars) > 0 {
|
||||||
|
for index, sidecar := range *sidecars {
|
||||||
|
sc, err := c.getSidecarContainer(sidecar, index, volumeMounts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
podSpec.Containers = append(podSpec.Containers, *sc)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template := v1.PodTemplateSpec{
|
template := v1.PodTemplateSpec{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Labels: c.labelsSet(true),
|
Labels: c.labelsSet(true),
|
||||||
|
|
@ -536,7 +547,71 @@ func (c *Cluster) generatePodTemplate(
|
||||||
template.Annotations = map[string]string{constants.KubeIAmAnnotation: c.OpConfig.KubeIAMRole}
|
template.Annotations = map[string]string{constants.KubeIAmAnnotation: c.OpConfig.KubeIAMRole}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &template
|
return &template, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Cluster) getSidecarContainer(sidecar spec.Sidecar, index int, volumeMounts []v1.VolumeMount) (*v1.Container, error) {
|
||||||
|
name := sidecar.Name
|
||||||
|
if name == "" {
|
||||||
|
name = fmt.Sprintf("sidecar-%d", index)
|
||||||
|
}
|
||||||
|
resources, err := c.resourceRequirements(
|
||||||
|
makeResources(
|
||||||
|
sidecar.Resources.ResourceRequest.CPU,
|
||||||
|
sidecar.Resources.ResourceRequest.Memory,
|
||||||
|
sidecar.Resources.ResourceLimits.CPU,
|
||||||
|
sidecar.Resources.ResourceLimits.Memory,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
env := []v1.EnvVar{
|
||||||
|
{
|
||||||
|
Name: "POD_NAME",
|
||||||
|
ValueFrom: &v1.EnvVarSource{
|
||||||
|
FieldRef: &v1.ObjectFieldSelector{
|
||||||
|
APIVersion: "v1",
|
||||||
|
FieldPath: "metadata.name",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "POD_NAMESPACE",
|
||||||
|
ValueFrom: &v1.EnvVarSource{
|
||||||
|
FieldRef: &v1.ObjectFieldSelector{
|
||||||
|
APIVersion: "v1",
|
||||||
|
FieldPath: "metadata.namespace",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "POSTGRES_USER",
|
||||||
|
Value: c.OpConfig.SuperUsername,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "POSTGRES_PASSWORD",
|
||||||
|
ValueFrom: &v1.EnvVarSource{
|
||||||
|
SecretKeyRef: &v1.SecretKeySelector{
|
||||||
|
LocalObjectReference: v1.LocalObjectReference{
|
||||||
|
Name: c.credentialSecretName(c.OpConfig.SuperUsername),
|
||||||
|
},
|
||||||
|
Key: "password",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if len(sidecar.Env) > 0 {
|
||||||
|
env = append(env, sidecar.Env...)
|
||||||
|
}
|
||||||
|
return &v1.Container{
|
||||||
|
Name: name,
|
||||||
|
Image: sidecar.DockerImage,
|
||||||
|
ImagePullPolicy: v1.PullIfNotPresent,
|
||||||
|
Resources: *resources,
|
||||||
|
VolumeMounts: volumeMounts,
|
||||||
|
Env: env,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getBucketScopeSuffix(uid string) string {
|
func getBucketScopeSuffix(uid string) string {
|
||||||
|
|
@ -583,7 +658,10 @@ func (c *Cluster) generateStatefulSet(spec *spec.PostgresSpec) (*v1beta1.Statefu
|
||||||
customPodEnvVars = cm.Data
|
customPodEnvVars = cm.Data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
podTemplate := c.generatePodTemplate(c.Postgresql.GetUID(), resourceRequirements, resourceRequirementsScalyrSidecar, &spec.Tolerations, &spec.PostgresqlParam, &spec.Patroni, &spec.Clone, &spec.DockerImage, customPodEnvVars)
|
podTemplate, err := c.generatePodTemplate(c.Postgresql.GetUID(), resourceRequirements, resourceRequirementsScalyrSidecar, &spec.Tolerations, &spec.PostgresqlParam, &spec.Patroni, &spec.Clone, &spec.DockerImage, &spec.Sidecars customPodEnvVars)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not generate pod template: %v", err)
|
||||||
|
}
|
||||||
volumeClaimTemplate, err := generatePersistentVolumeClaimTemplate(spec.Volume.Size, spec.Volume.StorageClass)
|
volumeClaimTemplate, err := generatePersistentVolumeClaimTemplate(spec.Volume.Size, spec.Volume.StorageClass)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not generate volume claim template: %v", err)
|
return nil, fmt.Errorf("could not generate volume claim template: %v", err)
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,15 @@ type CloneDescription struct {
|
||||||
EndTimestamp string `json:"timestamp,omitempty"`
|
EndTimestamp string `json:"timestamp,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sidecar defines a container to be run in the same pod as the Postgres container.
|
||||||
|
type Sidecar struct {
|
||||||
|
Resources `json:"resources,omitempty"`
|
||||||
|
Name string `json:"name,omitempty"`
|
||||||
|
DockerImage string `json:"dockerImage,omitempty"`
|
||||||
|
Ports []v1.ContainerPort `json:"ports,omitempty"`
|
||||||
|
Env []v1.EnvVar `json:"env,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
type UserFlags []string
|
type UserFlags []string
|
||||||
|
|
||||||
// PostgresStatus contains status of the PostgreSQL cluster (running, creation failed etc.)
|
// PostgresStatus contains status of the PostgreSQL cluster (running, creation failed etc.)
|
||||||
|
|
@ -124,6 +133,7 @@ type PostgresSpec struct {
|
||||||
ClusterName string `json:"-"`
|
ClusterName string `json:"-"`
|
||||||
Databases map[string]string `json:"databases,omitempty"`
|
Databases map[string]string `json:"databases,omitempty"`
|
||||||
Tolerations []v1.Toleration `json:"tolerations,omitempty"`
|
Tolerations []v1.Toleration `json:"tolerations,omitempty"`
|
||||||
|
Sidecars []Sidecar `json:"sideCars,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// PostgresqlList defines a list of PostgreSQL clusters.
|
// PostgresqlList defines a list of PostgreSQL clusters.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue