mirror of https://github.com/kubernetes/kops.git
				
				
				
			Merge pull request #9233 from johngmyers/update-hpa
Prune old metrics-server and update HPA docs
This commit is contained in:
		
						commit
						7200889cf7
					
				|  | @ -42,17 +42,11 @@ Compatibility matrix: | |||
| Metrics Server | Metrics API group/version | Supported Kubernetes version | ||||
| ---------------|---------------------------|----------------------------- | ||||
| 0.3.x          | `metrics.k8s.io/v1beta1`  | 1.8+ | ||||
| 0.2.x          | `metrics.k8s.io/v1beta1`  | 1.8+ | ||||
| 0.1.x          | `metrics/v1alpha1`        | 1.7 | ||||
| 
 | ||||
| 
 | ||||
| In order to deploy metrics-server in your cluster run the following command from | ||||
| the top-level directory of this repository: | ||||
| 
 | ||||
| ```console | ||||
| # Kubernetes 1.7 | ||||
| $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/metrics-server/v1.7.x.yaml | ||||
| 
 | ||||
| # Kubernetes 1.8+ <= 1.15 | ||||
| $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/metrics-server/v1.8.x.yaml | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,11 +3,6 @@ metadata: | |||
|   name: metrics-server | ||||
| spec: | ||||
|   addons: | ||||
|   - version: 0.1.0 | ||||
|     selector: | ||||
|       k8s-addon: metrics-server.addons.k8s.io | ||||
|     manifest: v1.7.x.yaml | ||||
|     kubernetesVersion: "<1.8.0" | ||||
|   - version: 0.3.6 | ||||
|     selector: | ||||
|       k8s-addon: metrics-server.addons.k8s.io | ||||
|  |  | |||
|  | @ -1,95 +0,0 @@ | |||
| --- | ||||
| apiVersion: v1 | ||||
| kind: ServiceAccount | ||||
| metadata: | ||||
|   name: metrics-server | ||||
|   namespace: kube-system | ||||
| --- | ||||
| apiVersion: rbac.authorization.k8s.io/v1beta1 | ||||
| kind: ClusterRoleBinding | ||||
| metadata: | ||||
|   name: metrics-server:system:auth-delegator | ||||
| roleRef: | ||||
|   apiGroup: rbac.authorization.k8s.io | ||||
|   kind: ClusterRole | ||||
|   name: system:auth-delegator | ||||
| 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 | ||||
| roleRef: | ||||
|   apiGroup: rbac.authorization.k8s.io | ||||
|   kind: Role | ||||
|   name: extension-apiserver-authentication-reader | ||||
| subjects: | ||||
|   - kind: ServiceAccount | ||||
|     name: metrics-server | ||||
|     namespace: kube-system | ||||
| --- | ||||
| apiVersion: apiregistration.k8s.io/v1beta1 | ||||
| kind: APIService | ||||
| metadata: | ||||
|   name: v1alpha1.metrics | ||||
| spec: | ||||
|   service: | ||||
|     name: metrics-server | ||||
|     namespace: kube-system | ||||
|   group: metrics | ||||
|   version: v1alpha1 | ||||
|   insecureSkipTLSVerify: true | ||||
|   groupPriorityMinimum: 100 | ||||
|   versionPriority: 100 | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Service | ||||
| metadata: | ||||
|   name: metrics-server | ||||
|   namespace: kube-system | ||||
|   labels: | ||||
|     kubernetes.io/name: "Metrics-server" | ||||
| 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 | ||||
| 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: k8s.gcr.io/metrics-server-amd64:v0.1.0 | ||||
|           imagePullPolicy: Always | ||||
|           command: | ||||
|             - /metrics-server | ||||
|             - --source=kubernetes.summary_api:'' | ||||
|           resources: | ||||
|             requests: | ||||
|               cpu: 20m | ||||
|               memory: 200Mi | ||||
|             limits: | ||||
|               cpu: 100m | ||||
|               memory: 500Mi | ||||
|  | @ -1,17 +1,16 @@ | |||
| # Horizontal Pod Autoscaling | ||||
| 
 | ||||
| With Horizontal Pod Autoscaling, Kubernetes automatically scales the number of | ||||
| pods in a replication controller, deployment or replica set based on observed | ||||
| pods in a replication controller, deployment, or replica set based on observed | ||||
| CPU utilization (or, with alpha support, on some other, application-provided | ||||
| metrics). | ||||
| 
 | ||||
| The current stable version, which only includes support for CPU autoscaling, can | ||||
| be found in the `autoscaling/v1` API version. The alpha version, which includes | ||||
| support for scaling on memory and custom metrics, can be found in | ||||
| `autoscaling/v2alpha1` in 1.7 and `autoscaling/v2beta1` 1.8 and 1.9. | ||||
| `autoscaling/v2beta1` (and `autoscaling/v2beta2` in 1.12 and later). | ||||
| 
 | ||||
| Kops can assist in setting up HPA and recommends Kubernetes `1.7.x` to `1.9.x` | ||||
| and Kops `>=1.7`. Relevant reading you will need to go through: | ||||
| Kops can assist in setting up HPA. Relevant reading you will need to go through: | ||||
| 
 | ||||
| * [Extending the Kubernetes API with the aggregation layer][k8s-extend-api] | ||||
| * [Configure The Aggregation Layer][k8s-aggregation-layer] | ||||
|  | @ -35,102 +34,25 @@ Specifically: | |||
|    * [x] `--horizontal-pod-autoscaler-use-rest-clients` should be true. | ||||
|    * [x] `--kubeconfig <path-to-kubeconfig>` | ||||
| 
 | ||||
| Ensure that you use **1.8.5 at minimum for Kubernetes 1.8.x** due to [a nasty | ||||
| bug affecting the API aggregation layer][issue-1]. It was fixed in | ||||
| [kubernetes/kubernetes#55259][pr-5]. | ||||
| 
 | ||||
| ## Cluster Configuration | ||||
| 
 | ||||
| ### Support For Multiple Metrics | ||||
| 
 | ||||
| Enable API versions required to support scaling on cpu, memory and custom | ||||
| metrics: | ||||
| 
 | ||||
| ```yaml | ||||
| # On K8s 1.7 | ||||
| spec: | ||||
|   kubeAPIServer: | ||||
|     runtimeConfig: | ||||
|       autoscaling/v2alpha1: "true" | ||||
| ``` | ||||
| 
 | ||||
| ```yaml | ||||
| # On K8s 1.8 and 1.9 | ||||
| spec: | ||||
|   kubeAPIServer: | ||||
|     runtimeConfig: | ||||
|       autoscaling/v2beta1: "true" | ||||
| ``` | ||||
| 
 | ||||
| If you've set the above configuration, your cluster is now ready for the | ||||
| resource metrics API ([installation instruction here][k8s-metrics-server]). The | ||||
| To enable the resource metrics API for scaling on CPU and memory, install metrics-server | ||||
| ([installation instruction here][k8s-metrics-server]). The | ||||
| compatibility matrix is as follows: | ||||
| 
 | ||||
| Metrics Server | Metrics API group/version | Supported Kubernetes version | ||||
| ---------------|---------------------------|----------------------------- | ||||
| 0.3.x          | `metrics.k8s.io/v1beta1`  | 1.8+ | ||||
| 0.2.x          | `metrics.k8s.io/v1beta1`  | 1.8+ | ||||
| 0.1.x          | `metrics/v1alpha1`        | 1.7 | ||||
| 
 | ||||
| ### Support For Custom Metrics | ||||
| 
 | ||||
| Enable gathering custom metrics: | ||||
| 
 | ||||
| ```yaml | ||||
| spec: | ||||
|   kubelet: | ||||
|     enableCustomMetrics: true | ||||
| ``` | ||||
| 
 | ||||
| Note that the deprecated and inactive option '--enable-custom-metrics' has been removed in Kubernetes 1.11 [#60699](https://github.com/kubernetes/kubernetes/pull/60699) | ||||
| 
 | ||||
| Enable the horizontal pod autoscaler REST client: | ||||
| 
 | ||||
| ```yaml | ||||
| spec: | ||||
|   kubeControllerManager: | ||||
|     horizontalPodAutoscalerUseRestClients: true | ||||
| ``` | ||||
| 
 | ||||
| If you've set the above configuration, your cluster is now ready for the custom | ||||
| metrics API. Register it via the API aggregation layer. If you're using | ||||
| To enable the custom metrics API, register it via the API aggregation layer. If you're using | ||||
| Prometheus, checkout the [custom metrics adapter for Prometheus][k8s-prometheus-custom-metrics-adapter]. | ||||
| 
 | ||||
| ## Implementation Details | ||||
| 
 | ||||
| These are the PRs that enable the required configuration: | ||||
| 
 | ||||
| * [kubernetes/kops#3679][pr-1] - sets `--requestheader-xxx` kube-apiserver flags | ||||
|   required to enable aggregation layer | ||||
|   ``` | ||||
|   --requestheader-client-ca-file=<path to aggregator CA cert> | ||||
|   --requestheader-allowed-names=aggregator | ||||
|   --requestheader-extra-headers-prefix=X-Remote-Extra- | ||||
|   --requestheader-group-headers=X-Remote-Group | ||||
|   --requestheader-username-headers=X-Remote-User | ||||
|   ``` | ||||
| * [kubernetes/kops#3165][pr-2] - sets `--proxy-client-xxx` kube-apiserver flags | ||||
|   required to enable aggregation layer | ||||
|   ``` | ||||
|   --proxy-client-cert-file=<path to aggregator proxy cert> | ||||
|   --proxy-client-key-file=<path to aggregator proxy key> | ||||
|   ``` | ||||
| * [kubernetes/kops#3939][pr-3] - add config option to set `--horizontal-pod- | ||||
|   autoscaler-use-rest-clients` kube-controller-manager flag required to enable | ||||
|   custom metrics | ||||
| * [kubernetes/kops#1574][pr-4] - add config options to set `--enable-custom- | ||||
|   metrics` flag on master and node kubelets required to enable custom metrics | ||||
| 
 | ||||
| [k8s-aggregation-layer]: https://v1-9.docs.kubernetes.io/docs/tasks/access-kubernetes-api/configure-aggregation-layer/ | ||||
| [k8s-extend-api]: https://v1-9.docs.kubernetes.io/docs/concepts/api-extension/apiserver-aggregation/ | ||||
| [k8s-hpa]: https://v1-9.docs.kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/ | ||||
| [k8s-aggregation-layer]: https://kubernetes.io/docs/tasks/access-kubernetes-api/configure-aggregation-layer/ | ||||
| [k8s-extend-api]: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/ | ||||
| [k8s-hpa]: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/ | ||||
| [k8s-metrics-server]: https://github.com/kubernetes/kops/blob/master/addons/metrics-server/README.md | ||||
| [k8s-prometheus-custom-metrics-adapter]: https://github.com/DirectXMan12/k8s-prometheus-adapter | ||||
| 
 | ||||
| [pr-1]: https://github.com/kubernetes/kops/pull/3679 | ||||
| [pr-2]: https://github.com/kubernetes/kops/pull/3165 | ||||
| [pr-3]: https://github.com/kubernetes/kops/pull/3939 | ||||
| [pr-4]: https://github.com/kubernetes/kops/pull/1574 | ||||
| [pr-5]: https://github.com/kubernetes/kubernetes/pull/55259 | ||||
| 
 | ||||
| [issue-1]: https://github.com/kubernetes/kubernetes/issues/55022 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue