Skip to content
This repository has been archived by the owner on Jan 11, 2023. It is now read-only.

Commit

Permalink
metrics server addon (#2339)
Browse files Browse the repository at this point in the history
* metrics server addon

* use addonmanager mode EnsureExists

* fix labels on metrics APIService

* enable hpa autoscale test for 1.9 clusters
  • Loading branch information
pidah authored and jackfrancis committed Mar 2, 2018
1 parent 8a0aff3 commit 64f4133
Show file tree
Hide file tree
Showing 13 changed files with 343 additions and 60 deletions.
146 changes: 146 additions & 0 deletions parts/k8s/addons/kubernetesmasteraddons-metrics-server-deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: metrics-server
namespace: kube-system
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: EnsureExists
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: system:metrics-server
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: EnsureExists
rules:
- apiGroups:
- ""
resources:
- pods
- nodes
- namespaces
verbs:
- get
- list
- watch
- apiGroups:
- "extensions"
resources:
- deployments
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: system:metrics-server
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: EnsureExists
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:metrics-server
subjects:
- kind: ServiceAccount
name: metrics-server
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
name: metrics-server-auth-reader
namespace: kube-system
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: EnsureExists
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccount
name: metrics-server
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: metrics-server:system:auth-delegator
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: EnsureExists
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:auth-delegator
subjects:
- kind: ServiceAccount
name: metrics-server
namespace: kube-system
---
apiVersion: v1
kind: Service
metadata:
name: metrics-server
namespace: kube-system
labels:
addonmanager.kubernetes.io/mode: EnsureExists
kubernetes.io/name: "Metrics-server"
kubernetes.io/cluster-service: "true"
spec:
selector:
k8s-app: metrics-server
ports:
- port: 443
protocol: TCP
targetPort: 443
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: metrics-server
namespace: kube-system
labels:
k8s-app: metrics-server
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: EnsureExists
spec:
selector:
matchLabels:
k8s-app: metrics-server
template:
metadata:
name: metrics-server
labels:
k8s-app: metrics-server
spec:
serviceAccountName: metrics-server
containers:
- name: metrics-server
image: <kubernetesMetricsServerSpec>
imagePullPolicy: Always
command:
- /metrics-server
- --source=kubernetes.summary_api:''
---
apiVersion: apiregistration.k8s.io/v1beta1
kind: APIService
metadata:
name: v1beta1.metrics.k8s.io
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: EnsureExists
spec:
service:
name: metrics-server
namespace: kube-system
group: metrics.k8s.io
version: v1beta1
insecureSkipTLSVerify: true
groupPriorityMinimum: 100
versionPriority: 100
4 changes: 4 additions & 0 deletions parts/k8s/kubernetesmastercustomdata.yml
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,10 @@ MASTER_ARTIFACTS_CONFIG_PLACEHOLDER
sed -i "s|<kubernetesReschedulerMemoryLimit>|{{WrapAsVariable "kubernetesReschedulerMemoryLimit"}}|g" "/etc/kubernetes/addons/kube-rescheduler-deployment.yaml"
{{end}}

{{if .OrchestratorProfile.IsMetricsServerEnabled}}
sed -i "s|<kubernetesMetricsServerSpec>|{{WrapAsVariable "kubernetesMetricsServerSpec"}}|g" "/etc/kubernetes/addons/kube-metrics-server-deployment.yaml"
{{end}}

{{if EnableDataEncryptionAtRest }}
ETCD_ENCRYPTION_SECRET="$(head -c 32 /dev/urandom | base64)"
sed -i "s|<etcdEncryptionSecret>|$ETCD_ENCRYPTION_SECRET|g" "/etc/kubernetes/encryption-config.yaml"
Expand Down
1 change: 1 addition & 0 deletions parts/k8s/kubernetesmastervars.t
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@
"kubernetesDashboardMemoryLimit": "[parameters('kubernetesDashboardMemoryLimit')]",
"kubernetesExecHealthzSpec": "[parameters('kubernetesExecHealthzSpec')]",
"kubernetesHeapsterSpec": "[parameters('kubernetesHeapsterSpec')]",
"kubernetesMetricsServerSpec": "[parameters('kubernetesMetricsServerSpec')]",
"kubernetesTillerSpec": "[parameters('kubernetesTillerSpec')]",
"kubernetesTillerCPURequests": "[parameters('kubernetesTillerCPURequests')]",
"kubernetesTillerMemoryRequests": "[parameters('kubernetesTillerMemoryRequests')]",
Expand Down
7 changes: 7 additions & 0 deletions parts/k8s/kubernetesparams.t
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,13 @@
},
"type": "string"
},
"kubernetesMetricsServerSpec": {
{{PopulateClassicModeDefaultValue "kubernetesMetricsServerSpec"}}
"metadata": {
"description": "The container spec for Metrics Server."
},
"type": "string"
},
"kubernetesTillerSpec": {
{{PopulateClassicModeDefaultValue "kubernetesTillerSpec"}}
"metadata": {
Expand Down
5 changes: 5 additions & 0 deletions pkg/acsengine/addons.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,11 @@ func kubernetesAddonSettingsInit(profile *api.Properties) []kubernetesFeatureSet
"azure-cloud-provider-deployment.yaml",
true,
},
{
"kubernetesmasteraddons-metrics-server-deployment.yaml",
"kube-metrics-server-deployment.yaml",
profile.OrchestratorProfile.IsMetricsServerEnabled(),
},
}
}

Expand Down
2 changes: 2 additions & 0 deletions pkg/acsengine/const.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ const (
DefaultReschedulerImage = "rescheduler:v0.3.1"
// DefaultReschedulerAddonName is the name of the rescheduler addon deployment
DefaultReschedulerAddonName = "rescheduler"
// DefaultMetricsServerAddonName is the name of the kubernetes Metrics server addon deployment
DefaultMetricsServerAddonName = "metrics-server"
// DefaultKubernetesKubeletMaxPods is the max pods per kubelet
DefaultKubernetesKubeletMaxPods = 110
// DefaultMasterEtcdServerPort is the default etcd server port for Kubernetes master nodes
Expand Down
21 changes: 21 additions & 0 deletions pkg/acsengine/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,17 @@ var (
},
},
}

// DefaultMetricsServerAddonsConfig is the default metrics-server Kubernetes addon Config
DefaultMetricsServerAddonsConfig = api.KubernetesAddon{
Name: DefaultMetricsServerAddonName,
Enabled: pointerToBool(api.DefaultMetricsServerAddonEnabled),
Containers: []api.KubernetesContainerSpec{
{
Name: DefaultMetricsServerAddonName,
},
},
}
)

// SetPropertiesDefaults for the container Properties, returns true if certs are generated
Expand Down Expand Up @@ -292,6 +303,7 @@ func setOrchestratorDefaults(cs *api.ContainerService) {
DefaultACIConnectorAddonsConfig,
DefaultDashboardAddonsConfig,
DefaultReschedulerAddonsConfig,
DefaultMetricsServerAddonsConfig,
}
} else {
// For each addon, provide default configuration if user didn't provide its own config
Expand All @@ -315,6 +327,11 @@ func setOrchestratorDefaults(cs *api.ContainerService) {
// Provide default acs-engine config for Rescheduler
o.KubernetesConfig.Addons = append(o.KubernetesConfig.Addons, DefaultReschedulerAddonsConfig)
}
m := getAddonsIndexByName(o.KubernetesConfig.Addons, DefaultMetricsServerAddonName)
if m < 0 {
// Provide default acs-engine config for Metrics Server
o.KubernetesConfig.Addons = append(o.KubernetesConfig.Addons, DefaultMetricsServerAddonsConfig)
}
}
if o.KubernetesConfig.KubernetesImageBase == "" {
o.KubernetesConfig.KubernetesImageBase = cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase
Expand Down Expand Up @@ -409,6 +426,10 @@ func setOrchestratorDefaults(cs *api.ContainerService) {
if a.OrchestratorProfile.KubernetesConfig.Addons[r].IsEnabled(api.DefaultReschedulerAddonEnabled) {
a.OrchestratorProfile.KubernetesConfig.Addons[r] = assignDefaultAddonVals(a.OrchestratorProfile.KubernetesConfig.Addons[r], DefaultReschedulerAddonsConfig)
}
m := getAddonsIndexByName(a.OrchestratorProfile.KubernetesConfig.Addons, DefaultMetricsServerAddonName)
if a.OrchestratorProfile.KubernetesConfig.Addons[m].IsEnabled(api.DefaultMetricsServerAddonEnabled) {
a.OrchestratorProfile.KubernetesConfig.Addons[m] = assignDefaultAddonVals(a.OrchestratorProfile.KubernetesConfig.Addons[m], DefaultMetricsServerAddonsConfig)
}

if "" == a.OrchestratorProfile.KubernetesConfig.EtcdDiskSizeGB {
a.OrchestratorProfile.KubernetesConfig.EtcdDiskSizeGB = DefaultEtcdDiskSize
Expand Down
19 changes: 19 additions & 0 deletions pkg/acsengine/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -621,6 +621,15 @@ func getParameters(cs *api.ContainerService, isClassicMode bool, generatorCode s
addValue(parametersMap, "kubernetesReschedulerSpec", cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase+KubeConfigs[k8sVersion][DefaultReschedulerAddonName])
}
}
metricsServerAddon := getAddonByName(properties.OrchestratorProfile.KubernetesConfig.Addons, DefaultMetricsServerAddonName)
c = getAddonContainersIndexByName(metricsServerAddon.Containers, DefaultMetricsServerAddonName)
if c > -1 {
if metricsServerAddon.Containers[c].Image != "" {
addValue(parametersMap, "kubernetesMetricsServerSpec", metricsServerAddon.Containers[c].Image)
} else {
addValue(parametersMap, "kubernetesMetricsServerSpec", cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase+KubeConfigs[k8sVersion][DefaultMetricsServerAddonName])
}
}
addValue(parametersMap, "kubernetesKubeDNSSpec", cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase+KubeConfigs[k8sVersion]["dns"])
addValue(parametersMap, "kubernetesPodInfraContainerSpec", cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase+KubeConfigs[k8sVersion]["pause"])
addValue(parametersMap, "cloudProviderBackoff", strconv.FormatBool(properties.OrchestratorProfile.KubernetesConfig.CloudProviderBackoff))
Expand Down Expand Up @@ -1283,6 +1292,8 @@ func (t *TemplateGenerator) getTemplateFuncMap(cs *api.ContainerService) templat
dC := getAddonContainersIndexByName(dashboardAddon.Containers, DefaultDashboardAddonName)
reschedulerAddon := getAddonByName(cs.Properties.OrchestratorProfile.KubernetesConfig.Addons, DefaultReschedulerAddonName)
rC := getAddonContainersIndexByName(reschedulerAddon.Containers, DefaultReschedulerAddonName)
metricsServerAddon := getAddonByName(cs.Properties.OrchestratorProfile.KubernetesConfig.Addons, DefaultMetricsServerAddonName)
mC := getAddonContainersIndexByName(metricsServerAddon.Containers, DefaultMetricsServerAddonName)
switch attr {
case "kubernetesHyperkubeSpec":
val = cs.Properties.OrchestratorProfile.KubernetesConfig.KubernetesImageBase + KubeConfigs[k8sVersion]["hyperkube"]
Expand Down Expand Up @@ -1464,6 +1475,14 @@ func (t *TemplateGenerator) getTemplateFuncMap(cs *api.ContainerService) templat
} else {
val = "0"
}
case "kubernetesMetricsServerSpec":
if mC > -1 {
if metricsServerAddon.Containers[mC].Image != "" {
val = metricsServerAddon.Containers[mC].Image
}
} else {
val = cloudSpecConfig.KubernetesSpecConfig.KubernetesImageBase + KubeConfigs[k8sVersion][DefaultMetricsServerAddonName]
}
case "kubernetesReschedulerSpec":
if rC > -1 {
if reschedulerAddon.Containers[rC].Image != "" {
Expand Down
Loading

0 comments on commit 64f4133

Please sign in to comment.