Skip to content

Commit 13a1895

Browse files
Merge pull request #19392 from deads2k/controller-18-config
start openshift controller config
2 parents ba09302 + 4b9da8c commit 13a1895

File tree

26 files changed

+1002
-464
lines changed

26 files changed

+1002
-464
lines changed
+119
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
apiVersion: template.openshift.io/v1
2+
kind: Template
3+
parameters:
4+
- name: NAMESPACE
5+
value: openshift-controller-manager
6+
- name: KUBE_SYSTEM
7+
value: kube-system
8+
- name: OPENSHIFT_INFRA
9+
value: openshift-infra
10+
objects:
11+
12+
- apiVersion: rbac.authorization.k8s.io/v1beta1
13+
kind: ClusterRole
14+
metadata:
15+
name: system:openshift:openshift-controller-manager
16+
rules:
17+
# we run cluster resource quota, so we have to be able to see all resources
18+
- apiGroups:
19+
- "*"
20+
resources:
21+
- "*"
22+
verbs:
23+
- get
24+
- list
25+
- watch
26+
- apiGroups:
27+
- ""
28+
- events.k8s.io
29+
resources:
30+
- events
31+
verbs:
32+
- create
33+
- patch
34+
- update
35+
36+
- apiVersion: rbac.authorization.k8s.io/v1
37+
kind: ClusterRoleBinding
38+
metadata:
39+
name: system:openshift:openshift-controller-manager
40+
roleRef:
41+
kind: ClusterRole
42+
name: system:openshift:openshift-controller-manager
43+
subjects:
44+
- kind: ServiceAccount
45+
namespace: openshift-controller-manager
46+
name: openshift-controller-manager
47+
48+
# needed to get the legacy lock that we used to use
49+
- apiVersion: rbac.authorization.k8s.io/v1
50+
kind: Role
51+
metadata:
52+
name: system:openshift:leader-locking-openshift-controller-manager
53+
namespace: ${KUBE_SYSTEM}
54+
rules:
55+
- apiGroups:
56+
- ""
57+
resources:
58+
- configmaps
59+
verbs:
60+
- create
61+
- apiGroups:
62+
- ""
63+
resourceNames:
64+
- openshift-master-controllers
65+
resources:
66+
- configmaps
67+
verbs:
68+
- get
69+
- create
70+
- update
71+
- patch
72+
- apiVersion: rbac.authorization.k8s.io/v1
73+
kind: RoleBinding
74+
metadata:
75+
namespace: ${KUBE_SYSTEM}
76+
name: system:openshift:leader-locking-openshift-controller-manager
77+
roleRef:
78+
kind: Role
79+
name: system:openshift:leader-locking-openshift-controller-manager
80+
subjects:
81+
- kind: ServiceAccount
82+
namespace: ${NAMESPACE}
83+
name: openshift-controller-manager
84+
85+
# needed to support the "use separate service accounts" feature.
86+
- apiVersion: rbac.authorization.k8s.io/v1
87+
kind: Role
88+
metadata:
89+
name: system:openshift:sa-creating-openshift-controller-manager
90+
namespace: ${OPENSHIFT_INFRA}
91+
rules:
92+
- apiGroups:
93+
- ""
94+
resources:
95+
- serviceaccounts
96+
verbs:
97+
- get
98+
- create
99+
- update
100+
- apiGroups:
101+
- ""
102+
resources:
103+
- secrets
104+
verbs:
105+
- get
106+
- list
107+
- create
108+
- apiVersion: rbac.authorization.k8s.io/v1
109+
kind: RoleBinding
110+
metadata:
111+
namespace: ${OPENSHIFT_INFRA}
112+
name: system:openshift:sa-creating-openshift-controller-manager
113+
roleRef:
114+
kind: Role
115+
name: system:openshift:sa-creating-openshift-controller-manager
116+
subjects:
117+
- kind: ServiceAccount
118+
namespace: ${NAMESPACE}
119+
name: openshift-controller-manager

Diff for: pkg/cmd/openshift-controller-manager/cmd.go

+13-4
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ import (
2323
const RecommendedStartControllerManagerName = "openshift-controller-manager"
2424

2525
type OpenShiftControllerManager struct {
26-
ConfigFile string
27-
Output io.Writer
26+
ConfigFile string
27+
KubeConfigFile string
28+
Output io.Writer
2829
}
2930

3031
var longDescription = templates.LongDesc(`
@@ -59,9 +60,11 @@ func NewOpenShiftControllerManagerCommand(name, basename string, out, errout io.
5960

6061
flags := cmd.Flags()
6162
// This command only supports reading from config
62-
flags.StringVar(&options.ConfigFile, "config", "", "Location of the master configuration file to run from.")
63+
flags.StringVar(&options.ConfigFile, "config", options.ConfigFile, "Location of the master configuration file to run from.")
6364
cmd.MarkFlagFilename("config", "yaml", "yml")
6465
cmd.MarkFlagRequired("config")
66+
flags.StringVar(&options.KubeConfigFile, "kubeconfig", options.KubeConfigFile, "Location of the master configuration file to run from.")
67+
cmd.MarkFlagFilename("kubeconfig", "kubeconfig")
6568

6669
return cmd
6770
}
@@ -101,5 +104,11 @@ func (o *OpenShiftControllerManager) RunControllerManager() error {
101104
return kerrors.NewInvalid(configapi.Kind("MasterConfig"), "master-config.yaml", validationResults.Errors)
102105
}
103106

104-
return RunOpenShiftControllerManager(masterConfig)
107+
config := ConvertMasterConfigToOpenshiftControllerConfig(masterConfig)
108+
clientConfig, err := configapi.GetKubeConfigOrInClusterConfig(o.KubeConfigFile, config.ClientConnectionOverrides)
109+
if err != nil {
110+
return err
111+
}
112+
113+
return RunOpenShiftControllerManager(config, clientConfig)
105114
}

Diff for: pkg/cmd/openshift-controller-manager/controller/apps.go

+51-15
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,94 @@
11
package controller
22

33
import (
4-
"k8s.io/apimachinery/pkg/runtime"
4+
"path"
5+
6+
"k8s.io/apimachinery/pkg/runtime/schema"
7+
"k8s.io/client-go/kubernetes"
8+
"k8s.io/kubernetes/pkg/api/legacyscheme"
59
kapi "k8s.io/kubernetes/pkg/apis/core"
10+
serviceaccountadmission "k8s.io/kubernetes/plugin/pkg/admission/serviceaccount"
611

712
deployercontroller "github.com/openshift/origin/pkg/apps/controller/deployer"
813
deployconfigcontroller "github.com/openshift/origin/pkg/apps/controller/deploymentconfig"
914
"github.com/openshift/origin/pkg/cmd/server/bootstrappolicy"
15+
"github.com/openshift/origin/pkg/cmd/util/variable"
1016
)
1117

12-
type DeployerControllerConfig struct {
13-
ImageName string
14-
ClientEnvVars []kapi.EnvVar
18+
func envVars(host string, caData []byte, insecure bool, bearerTokenFile string) []kapi.EnvVar {
19+
envvars := []kapi.EnvVar{
20+
{Name: "KUBERNETES_MASTER", Value: host},
21+
{Name: "OPENSHIFT_MASTER", Value: host},
22+
}
1523

16-
Codec runtime.Codec
17-
}
24+
if len(bearerTokenFile) > 0 {
25+
envvars = append(envvars, kapi.EnvVar{Name: "BEARER_TOKEN_FILE", Value: bearerTokenFile})
26+
}
1827

19-
type DeploymentConfigControllerConfig struct {
20-
Codec runtime.Codec
28+
if len(caData) > 0 {
29+
envvars = append(envvars, kapi.EnvVar{Name: "OPENSHIFT_CA_DATA", Value: string(caData)})
30+
} else if insecure {
31+
envvars = append(envvars, kapi.EnvVar{Name: "OPENSHIFT_INSECURE", Value: "true"})
32+
}
33+
34+
return envvars
2135
}
2236

23-
func (c *DeployerControllerConfig) RunController(ctx ControllerContext) (bool, error) {
24-
kubeClient, err := ctx.ClientBuilder.Client(bootstrappolicy.InfraDeployerControllerServiceAccountName)
37+
func RunDeployerController(ctx ControllerContext) (bool, error) {
38+
clientConfig, err := ctx.ClientBuilder.Config(bootstrappolicy.InfraDeployerControllerServiceAccountName)
39+
if err != nil {
40+
return true, err
41+
}
42+
43+
kubeClient, err := kubernetes.NewForConfig(clientConfig)
2544
if err != nil {
2645
return true, err
2746
}
2847

48+
vars := envVars(
49+
clientConfig.Host,
50+
clientConfig.CAData,
51+
clientConfig.Insecure,
52+
path.Join(serviceaccountadmission.DefaultAPITokenMountPath, kapi.ServiceAccountTokenKey),
53+
)
54+
55+
groupVersion := schema.GroupVersion{Group: "", Version: "v1"}
56+
annotationCodec := legacyscheme.Codecs.LegacyCodec(groupVersion)
57+
58+
imageTemplate := variable.NewDefaultImageTemplate()
59+
imageTemplate.Format = ctx.OpenshiftControllerConfig.Deployer.ImageTemplateFormat.Format
60+
imageTemplate.Latest = ctx.OpenshiftControllerConfig.Deployer.ImageTemplateFormat.Latest
61+
2962
go deployercontroller.NewDeployerController(
3063
ctx.ExternalKubeInformers.Core().V1().ReplicationControllers(),
3164
ctx.ExternalKubeInformers.Core().V1().Pods(),
3265
kubeClient,
3366
bootstrappolicy.DeployerServiceAccountName,
34-
c.ImageName,
35-
c.ClientEnvVars,
36-
c.Codec,
67+
imageTemplate.ExpandOrDie("deployer"),
68+
vars,
69+
annotationCodec,
3770
).Run(5, ctx.Stop)
3871

3972
return true, nil
4073
}
4174

42-
func (c *DeploymentConfigControllerConfig) RunController(ctx ControllerContext) (bool, error) {
75+
func RunDeploymentConfigController(ctx ControllerContext) (bool, error) {
4376
saName := bootstrappolicy.InfraDeploymentConfigControllerServiceAccountName
4477

4578
kubeClient, err := ctx.ClientBuilder.Client(saName)
4679
if err != nil {
4780
return true, err
4881
}
4982

83+
groupVersion := schema.GroupVersion{Group: "", Version: "v1"}
84+
annotationCodec := legacyscheme.Codecs.LegacyCodec(groupVersion)
85+
5086
go deployconfigcontroller.NewDeploymentConfigController(
5187
ctx.AppInformers.Apps().InternalVersion().DeploymentConfigs(),
5288
ctx.ExternalKubeInformers.Core().V1().ReplicationControllers(),
5389
ctx.ClientBuilder.OpenshiftInternalAppsClientOrDie(saName),
5490
kubeClient,
55-
c.Codec,
91+
annotationCodec,
5692
).Run(5, ctx.Stop)
5793

5894
return true, nil

Diff for: pkg/cmd/openshift-controller-manager/controller/autoscaling.go

+7-8
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,10 @@ import (
1616
// NB: this is funky -- it's actually a Kubernetes controller, but we run it as an OpenShift controller in order
1717
// to get a handle on OpenShift clients, so that our delegating scales getter can work.
1818

19-
type HorizontalPodAutoscalerControllerConfig struct {
20-
HeapsterNamespace string
21-
}
19+
// TODO this goes away with a truly generic autoscaler
20+
func RunHorizontalPodAutoscalerController(originCtx ControllerContext) (bool, error) {
21+
heapsterNamespace := bootstrappolicy.DefaultOpenShiftInfraNamespace
2222

23-
func (c *HorizontalPodAutoscalerControllerConfig) RunController(originCtx ControllerContext) (bool, error) {
2423
hpaClientConfig, err := originCtx.ClientBuilder.Config(bootstrappolicy.InfraHorizontalPodAutoscalerControllerServiceAccountName)
2524
if err != nil {
2625
return true, err
@@ -33,7 +32,7 @@ func (c *HorizontalPodAutoscalerControllerConfig) RunController(originCtx Contro
3332

3433
metricsClient := hpametrics.NewHeapsterMetricsClient(
3534
hpaClient,
36-
c.HeapsterNamespace,
35+
heapsterNamespace,
3736
"https",
3837
"heapster",
3938
"",
@@ -64,9 +63,9 @@ func (c *HorizontalPodAutoscalerControllerConfig) RunController(originCtx Contro
6463
restMapper,
6564
replicaCalc,
6665
originCtx.ExternalKubeInformers.Autoscaling().V1().HorizontalPodAutoscalers(),
67-
originCtx.OpenshiftControllerOptions.HPAControllerOptions.SyncPeriod.Duration,
68-
originCtx.OpenshiftControllerOptions.HPAControllerOptions.UpscaleForbiddenWindow.Duration,
69-
originCtx.OpenshiftControllerOptions.HPAControllerOptions.DownscaleForbiddenWindow.Duration,
66+
originCtx.OpenshiftControllerConfig.HPA.SyncPeriod.Duration,
67+
originCtx.OpenshiftControllerConfig.HPA.UpscaleForbiddenWindow.Duration,
68+
originCtx.OpenshiftControllerConfig.HPA.DownscaleForbiddenWindow.Duration,
7069
).Run(originCtx.Stop)
7170

7271
return true, nil

Diff for: pkg/cmd/openshift-controller-manager/controller/build.go

+17-17
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
11
package controller
22

33
import (
4-
"k8s.io/apimachinery/pkg/runtime"
4+
"k8s.io/apimachinery/pkg/runtime/schema"
5+
"k8s.io/kubernetes/pkg/api/legacyscheme"
56

67
buildcontroller "github.com/openshift/origin/pkg/build/controller/build"
78
builddefaults "github.com/openshift/origin/pkg/build/controller/build/defaults"
89
buildoverrides "github.com/openshift/origin/pkg/build/controller/build/overrides"
910
buildconfigcontroller "github.com/openshift/origin/pkg/build/controller/buildconfig"
1011
buildstrategy "github.com/openshift/origin/pkg/build/controller/strategy"
11-
configapi "github.com/openshift/origin/pkg/cmd/server/apis/config"
1212
"github.com/openshift/origin/pkg/cmd/server/bootstrappolicy"
13+
"github.com/openshift/origin/pkg/cmd/util/variable"
1314
)
1415

15-
type BuildControllerConfig struct {
16-
DockerImage string
17-
S2IImage string
18-
AdmissionPluginConfig map[string]*configapi.AdmissionPluginConfig
16+
// RunController starts the build sync loop for builds and buildConfig processing.
17+
func RunBuildController(ctx ControllerContext) (bool, error) {
18+
groupVersion := schema.GroupVersion{Group: "", Version: "v1"}
19+
annotationCodec := legacyscheme.Codecs.LegacyCodec(groupVersion)
1920

20-
Codec runtime.Codec
21-
}
21+
imageTemplate := variable.NewDefaultImageTemplate()
22+
imageTemplate.Format = ctx.OpenshiftControllerConfig.Build.ImageTemplateFormat.Format
23+
imageTemplate.Latest = ctx.OpenshiftControllerConfig.Build.ImageTemplateFormat.Latest
2224

23-
// RunController starts the build sync loop for builds and buildConfig processing.
24-
func (c *BuildControllerConfig) RunController(ctx ControllerContext) (bool, error) {
25-
buildDefaults, err := builddefaults.NewBuildDefaults(c.AdmissionPluginConfig)
25+
buildDefaults, err := builddefaults.NewBuildDefaults(ctx.OpenshiftControllerConfig.Build.AdmissionPluginConfig)
2626
if err != nil {
2727
return true, err
2828
}
29-
buildOverrides, err := buildoverrides.NewBuildOverrides(c.AdmissionPluginConfig)
29+
buildOverrides, err := buildoverrides.NewBuildOverrides(ctx.OpenshiftControllerConfig.Build.AdmissionPluginConfig)
3030
if err != nil {
3131
return true, err
3232
}
@@ -52,19 +52,19 @@ func (c *BuildControllerConfig) RunController(ctx ControllerContext) (bool, erro
5252
KubeClientExternal: externalKubeClient,
5353
BuildClientInternal: buildClient,
5454
DockerBuildStrategy: &buildstrategy.DockerBuildStrategy{
55-
Image: c.DockerImage,
55+
Image: imageTemplate.ExpandOrDie("docker-builder"),
5656
// TODO: this will be set to --storage-version (the internal schema we use)
57-
Codec: c.Codec,
57+
Codec: annotationCodec,
5858
},
5959
SourceBuildStrategy: &buildstrategy.SourceBuildStrategy{
60-
Image: c.S2IImage,
60+
Image: imageTemplate.ExpandOrDie("sti-builder"),
6161
// TODO: this will be set to --storage-version (the internal schema we use)
62-
Codec: c.Codec,
62+
Codec: annotationCodec,
6363
SecurityClient: securityClient.Security(),
6464
},
6565
CustomBuildStrategy: &buildstrategy.CustomBuildStrategy{
6666
// TODO: this will be set to --storage-version (the internal schema we use)
67-
Codec: c.Codec,
67+
Codec: annotationCodec,
6868
},
6969
BuildDefaults: buildDefaults,
7070
BuildOverrides: buildOverrides,

0 commit comments

Comments
 (0)