Skip to content

Commit

Permalink
Merge branch 'gocrane:main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
alierkilic authored Jan 13, 2022
2 parents b2dbee8 + f403065 commit 3070a13
Show file tree
Hide file tree
Showing 14 changed files with 511 additions and 111 deletions.
31 changes: 31 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: kind/bug
assignees: ''

---

**What version of Crane?**

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Environment (please complete the following information):**
- K8S Version: [e.g. 1.19]
- Crane Version: [e.g. 0.1.0]
- Browser [e.g. chrome, safari]
10 changes: 10 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: kind/feature
assignees: ''

---

## Describe the feature
293 changes: 274 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,49 +76,304 @@ Crane is composed of the following components:

## Getting Started

### Prerequisites
### Installation

**Prerequisites**

- Kubernetes 1.18+
- Helm 3.1.0

### Installation

#### Installing prometheus components with helm chart
**All-In-One Installation**

> Note:
> If you already deployed prometheus, prometheus-node-exporter, then you can skip this step.
> If you already deployed prometheus, grafana, or you want to customize it then you can refer to [Customize Installation](#customize-installation).
**Helm Installation**

Please refer to Helm's [documentation](https://helm.sh/docs/intro/install/) for installation.

Export the following env if you want to use default settings, or specify customized value if you want to customize the installation.
**Installing prometheus and grafana with helm chart**

Crane use prometheus to be the default metric provider. Using following command to install prometheus components: prometheus-server, node-exporter, kube-state-metrics.

```console
export NAMESPACE=monitoring
export RELEASE_NAME=myprometheus
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus -n crane-system --set pushgateway.enabled=false --set alertmanager.enabled=false --set server.persistentVolume.enabled=false -f https://raw.githubusercontent.com/gocrane/helm-charts/main/integration/prometheus/override_values.yaml --create-namespace prometheus-community/prometheus
```

Crane use prometheus to be the default metric provider. Using following command to install prometheus components.
Fadvisor use grafana to present cost estimates. Using following command to install a grafana.

```console
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm repo add grafana https://grafana.github.io/helm-charts
helm install grafana -f https://raw.githubusercontent.com/gocrane/helm-charts/main/integration/grafana/override_values.yaml -n crane-system --create-namespace grafana/grafana
```

**Deploying Crane and Fadvisor**

helm install $RELEASE_NAME -n $NAMESPACE --set kubeStateMetrics.enabled=false --set pushgateway.enabled=false --set alertmanager.enabled=false --set server.persistentVolume.enabled=false --create-namespace prometheus-community/prometheus
Deploy `Crane` by apply YAML declaration.

```console
git checkout v0.1.0
kubectl apply -f deploy/manifests
kubectl apply -f deploy/craned
kubectl apply -f deploy/metric-adapter
```

#### Configure Prometheus Address
Deploy `Fadvisor` by helm chart.

```console
helm repo add crane https://gocrane.github.io/helm-charts
helm install cost-exporter -n crane-system --create-namespace crane/cost-exporter
```

### Customize Installation

**Configure Prometheus Address**

The following command will configure prometheus http address for crane. Specify `CUSTOMIZE_PROMETHEUS` if you have existing prometheus server.

```console
export CUSTOMIZE_PROMETHEUS=
if [ ! $CUSTOMIZE_PROMETHEUS ]; then sed -i '' "s/PROMETHEUS_ADDRESS/http:\/\/${RELEASE_NAME}-server.${NAMESPACE}.svc.cluster.local/" deploy/craned/deployment.yaml ; else sed -i '' "s/PROMETHEUS_ADDRESS/${CUSTOMIZE_PROMETHEUS}/" deploy/craned/deployment.yaml ; fi
if [ $CUSTOMIZE_PROMETHEUS ]; then sed -i '' "s/http:\/\/prometheus-server.crane-system.svc.cluster.local:8080/${CUSTOMIZE_PROMETHEUS}/" deploy/craned/deployment.yaml ; fi
```

#### Deploying Crane
### Uninstallation

You can deploy `Crane` by apply YAML declaration.
Uninstall helm charts will remove all the Kubernetes components associated with the chart and deletes the release.

```console
kubectl apply -f deploy/manifests
kubectl apply -f deploy/craned
kubectl apply -f deploy/metric-adapter
helm uninstall crane
helm uninstall mygrafana
helm uninstall fadvisor
```

Delete `crane-system` will remove all resources in crane.

```console
kubectl delete ns crane-system
```

### Get your Kubernetes Cost Report

Get the Grafana URL to visit by running these commands in the same shell:

```console
export POD_NAME=$(kubectl get pods --namespace crane-system -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace crane-system port-forward $POD_NAME 3000
```

visit [Cost Report](http://127.0.0.1:3000/dashboards) here with account(admin:admin).

### Analytics and Recommend Pod Resources

Create an **Resource** `Analytics` to give recommendation for deployment: `craned` and `metric-adapter` as a sample.

```console
kubectl apply -f https://raw.githubusercontent.com/gocrane/crane/main/examples/analytics/analytics-resource.yaml
kubectl get analytics -n crane-system
```

The output is:

```console
NAME AGE
craned-resource 15m
metric-adapter-resource 15m
```

You can get created recommendation from analytics status:

```console
kubectl get analytics craned-resource -n crane-system -o yaml
```

The output is similar to:

```console
apiVersion: analysis.crane.io/v1alpha1
kind: Analytics
metadata:
name: craned-resource
namespace: crane-system
spec:
completionStrategy:
completionStrategyType: Periodical
periodSeconds: 86400
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
labelSelector: {}
name: craned
type: Resource
status:
lastSuccessfulTime: "2022-01-12T08:40:59Z"
recommendations:
- name: craned-resource-resource-j7shb
namespace: crane-system
uid: 8ce2eedc-7969-4b80-8aee-fd4a98d6a8b6
```

The recommendation name presents on `status.recommendations[0].name`. Then you can get recommendation detail by running:

```console
kubectl get recommend -n crane-system craned-resource-resource-j7shb -o yaml
```

The output is similar to:

```console
apiVersion: analysis.crane.io/v1alpha1
kind: Recommendation
metadata:
name: craned-resource-resource-j7shb
namespace: crane-system
ownerReferences:
- apiVersion: analysis.crane.io/v1alpha1
blockOwnerDeletion: false
controller: false
kind: Analytics
name: craned-resource
uid: a9e6dc0d-ab26-4f2a-84bd-4fe9e0f3e105
spec:
completionStrategy:
completionStrategyType: Periodical
periodSeconds: 86400
targetRef:
apiVersion: apps/v1
kind: Deployment
name: craned
namespace: crane-system
type: Resource
status:
conditions:
- lastTransitionTime: "2022-01-12T08:40:59Z"
message: Recommendation is ready
reason: RecommendationReady
status: "True"
type: Ready
lastSuccessfulTime: "2022-01-12T08:40:59Z"
lastUpdateTime: "2022-01-12T08:40:59Z"
resourceRequest:
containers:
- containerName: craned
target:
cpu: 114m
memory: 120586239m
```

The `status.resourceRequest` is recommended by crane's recommendation engine.

Something you should know about Resource recommendation:
* Resource Recommendation use historic prometheus metrics to calculate and propose.
* We use **Percentile** algorithm to process metrics that also used by VPA.
* If the workload is running for a long term like several weeks, the result will be more accurate.

### Analytics and Recommend HPA

Create an **HPA** `Analytics` to give recommendation for deployment: `craned` and `metric-adapter` as an sample.

```console
kubectl apply -f https://raw.githubusercontent.com/gocrane/crane/main/examples/analytics/analytics-hpa.yaml
kubectl get analytics -n crane-system
```

The output is:

```console
NAME AGE
craned-hpa 5m52s
craned-resource 18h
metric-adapter-hpa 5m52s
metric-adapter-resource 18h

```

You can get created recommendation from analytics status:

```console
kubectl get analytics craned-hpa -n crane-system -o yaml
```

The output is similar to:

```console
apiVersion: analysis.crane.io/v1alpha1
kind: Analytics
metadata:
name: craned-hpa
namespace: crane-system
spec:
completionStrategy:
completionStrategyType: Periodical
periodSeconds: 86400
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
labelSelector: {}
name: craned
type: HPA
status:
lastSuccessfulTime: "2022-01-13T07:26:18Z"
recommendations:
- apiVersion: analysis.crane.io/v1alpha1
kind: Recommendation
name: craned-hpa-hpa-2f22w
namespace: crane-system
uid: 397733ee-986a-4630-af75-736d2b58bfac
```

The recommendation name presents on `status.recommendations[0].name`. Then you can get recommendation detail by running:

```console
kubectl get recommend -n crane-system craned-resource-resource-j7shb -o yaml
```

The output is similar to:

```console
apiVersion: analysis.crane.io/v1alpha1
kind: Recommendation
metadata:
name: craned-hpa-hpa-2f22w
namespace: crane-system
ownerReferences:
- apiVersion: analysis.crane.io/v1alpha1
blockOwnerDeletion: false
controller: false
kind: Analytics
name: craned-hpa
uid: b216d9c3-c52e-4c9c-b9e9-9d5b45165b1d
spec:
completionStrategy:
completionStrategyType: Periodical
periodSeconds: 86400
targetRef:
apiVersion: apps/v1
kind: Deployment
name: craned
namespace: crane-system
type: HPA
status:
conditions:
- lastTransitionTime: "2022-01-13T07:51:18Z"
message: 'Failed to offer recommend, Recommendation crane-system/craned-hpa-hpa-2f22w
error EHPAAdvisor prediction metrics data is unexpected, List length is 0 '
reason: FailedOfferRecommend
status: "False"
type: Ready
lastUpdateTime: "2022-01-13T07:51:18Z"
```

The `status.resourceRequest` is recommended by crane's recommendation engine. The fail reason is demo workload don't have enough run time.

Something you should know about HPA recommendation:
* HPA Recommendation use historic prometheus metrics to calculate, forecast and propose.
* We use **DSP** algorithm to process metrics.
* We recommend using Effective HorizontalPodAutoscaler to execute autoscaling, you can see [this document](./docs/tutorials/using-time-series-prediction.md) to learn more.
* The Workload need match following conditions:
* Existing at least one ready pod
* Ready pod ratio should larger that 50%
* Must provide cpu request for pod spec
* The workload should be running for at least **a week** to get enough metrics to forecast
* The workload's cpu load should be predictable, **too low** or **too unstable** workload often is unpredictable

9 changes: 7 additions & 2 deletions deploy/craned/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ spec:
---
apiVersion: v1
data:
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURWakNDQWo2Z0F3SUJBZ0lKQU9vSDdESmN5UkMxTUEwR0NTcUdTSWIzRFFFQkJRVUFNQkF4RGpBTUJnTlYKQkFNTUJXTnlZVzVsTUI0WERUSXhNVEl3T0RFd01qZzFPVm9YRFRJeU1ERXdOekV3TWpnMU9Wb3dLekVwTUNjRwpBMVVFQXd3Z2QyVmlhRzl2YXkxelpYSjJhV05sTG1OeVlXNWxMWE41YzNSbGJTNXpkbU13Z2dFaU1BMEdDU3FHClNJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURGNXhHdGhlcGJON0FoNHpvWDNqR3ZRQ3RSWm1RV0RPdXIKUFZpY3NYOENwbEtwaFdSK2NwdmljcEs1UDljWDludnkyQlBzbGVQeHNLa2txU2J3K05GNEFJMDFFMDZkdWpkUQpLVFdHbEZCNGNWaTRkQTIyVVc4VnFxQzhQMFdDYlhMRTJ6amVlQ3NXQ1pTN2dtaUdrMURlbHA0a1hNK0k0NXZiCjA2bFVJUjIvRGpDOHZaMDFEQWlTRkQxLzJQUElueG9TMHZ4MnU4QUdtMk84K3o0K044R2ExalpaK3RrTWsvZnIKelkzUEYrKzg1ZDVESWZLeG8wN3NRVFhyNUZKUWlSNzJhQjk5WnYrVlRSUDlUU2ZNdmNQVVFLZGNvdjF4dHlLbQp6b0hQVGVjVHlhN1lPWW1sNVFqSlUzSHFTYTNGQzZqMk5IKytzWVl0SCtNRkgrTHdOaW41QWdNQkFBR2pnWmN3CmdaUXdDUVlEVlIwVEJBSXdBREFMQmdOVkhROEVCQU1DQmVBd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3SUcKQ0NzR0FRVUZCd01CTUZzR0ExVWRFUVJVTUZLQ0lIZGxZbWh2YjJzdGMyVnlkbWxqWlM1amNtRnVaUzF6ZVhOMApaVzB1YzNaamdpNTNaV0pvYjI5ckxYTmxjblpwWTJVdVkzSmhibVV0YzNsemRHVnRMbk4yWXk1amJIVnpkR1Z5CkxteHZZMkZzTUEwR0NTcUdTSWIzRFFFQkJRVUFBNElCQVFDUFJnVDNEdHNCYVRmM255NDl4QXpScjlhQUV1YlgKYklWNjc1OS92djZEcldxRDhUNXRKNkJocGxiSWNHRVJxelJtd1B5anVNamNxekJVSWlGbTlXcTVTRytuN1NRdgpPeXEvTGtpUmVqWWo5YWlHd2JnMVg2S0QveGN0QThHa1dhQXlZRC9NRUhGeVR6TW9NZ0N0UVR4UEx3c3M2OHlSCm5DR3VMejVNQU9FZmdrWEJkUjBkamlPSnFEZVliaS9md0Nwam43R3ZUUUxxaDJzVWxLSkJpRmpzaURLN1YxblIKNlN2QlpIVHBWTHBWK0NYYlA4WVhjV21tcmM3VmcxaldWa3lGM2V6aUVuTktxZnZvcll3aHh6UVZGaXVVS09QRApKTEhoZXYwd3BoNXFSU2s2czBQSURLS1FQcWlYVjROSFJPTGI0ZnVVWHQraG9uZ21YbWRldDJCVQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBeGVjUnJZWHFXemV3SWVNNkY5NHhyMEFyVVdaa0ZnenJxejFZbkxGL0FxWlNxWVZrCmZuS2I0bktTdVQvWEYvWjc4dGdUN0pYajhiQ3BKS2ttOFBqUmVBQ05OUk5PbmJvM1VDazFocFJRZUhGWXVIUU4KdGxGdkZhcWd2RDlGZ20xeXhOczQzbmdyRmdtVXU0Sm9ocE5RM3BhZUpGelBpT09iMjlPcFZDRWR2dzR3dkwyZApOUXdJa2hROWY5anp5SjhhRXRMOGRydkFCcHRqdlBzK1BqZkJtdFkyV2ZyWkRKUDM2ODJOenhmdnZPWGVReUh5CnNhTk83RUUxNitSU1VJa2U5bWdmZldiL2xVMFQvVTBuekwzRDFFQ25YS0w5Y2JjaXBzNkJ6MDNuRThtdTJEbUoKcGVVSXlWTng2a210eFF1bzlqUi92ckdHTFIvakJSL2k4RFlwK1FJREFRQUJBb0lCQUZINm9pd0xhVVZZRURJNQplbnNnbzl4QTdMRFBoVzVNOCtML2lwRitSV3JIa3o1OTcxOGlBc2tQUlJCUURiM3pjT3pyN1hUM3NuRVFDVUVTCmdQc1pWMHdxamxRS0oyclhGTXEwQjJRMFZCRlFncndGOXhncks2VUNCWXQxZWtuSkpOMi9JaE9tRzlNSkxQOXYKeWZUVldZNmJQZTg2TXc0MW12NjQ4MC9TV0F3b0RZcC9CcThMWml2Y2hZcmVqUFRYeTJ4VmpWbGZsWmJhY1JVeApDOHU2WjlBaUw5aTlXWWk2RlJpZ2lyckR3TnVtTDhOc2xOdThBRm5DNjRLWEhPb1pVRG16ZnZIYUFDT1AyTlpDCjNPZ3hzbmJ2S3V6NTJ6VEo1c05XV1FsWFpaQmRQbSt1QjZnanNPZG55bXdHZGRld3A3N21pOUZ2OXlSUGJqUE0KKzRpazFnRUNnWUVBOVBNOUpITEtIeGppSStJaldMa2R0K0hMaS8wdmNwVElRcE5YUGgrdWJPYVZSQ04xRlRiUQpQQTN1eG52V2FiNUJlcWdIOGcxV3IyS0J5QXk0Zlp4UGpoNHBuaGRYSkRhNTJlcXp0TmZJNDlwc3dpbzVDeVh3Clc4enhmZ3VVZ0lGZ1dKVXc4ZUJLMmd4aTdOcFh0U1JsRlN4ZTBZaUJpUGJFbmdNVFlJbnZQRkVDZ1lFQXp0U0MKcjU3bEhJT3hweTZNMVRxdjBEZVZQMS9qNVc0TmNhaW9vVy9XbFlUNUJCQnozVm52cU5TbXUrY2hJRTg0SS84RQpNcnJZNW1WUlkrLzRIMkJrVVVKdEhzbStxcDhjM0Q3RmVhUmRKTEc3SWt6MTlWT0pRdEovWkdkcjNFSUxET09zCjFCQjdJVDQ3K29XQjdYcm9jTGE2S0ZpejJaQ3JiOU9XSnlRNk1Ta0NnWUJYeCt0N2FsK2dzVXdwUzlzYTZvd0oKMzdNUUlkV2xIRWlBQTBsYWpBUDRKdElMTHlIQVRucGxheURNcEloOE1LQktrbmoyZDIwL1FPLzlmd0dHa2tPNApUSHJobXIreHpLTGh3MGhQWUowdmVwRkxLOUp4ZWxFZXROMCtMR3cxZVNmTDF2dEpVdlhBR254QklTWVpWa2ViClJPRmQrYXRpSi96aUczd1FOcDR6WVFLQmdDblBTNXUwd3h2QWcya0lQKy9hclMrcURNR0M0TTdBTUhlSllJMUIKemw3clFtdFA2QndXMGh1TzRTV2EwMWQwckNTYXFINll4ci9NTzJlNFdxLzlERXBnNHk0V0dqVGpkVElRZmxyWQpudnVMOGdnOUJudFJKNjRhWHlZc3dlRUVlTGRpVHMyUGgxUnhBQzdrVGg5emVRbFA1dEhCSEpvZVpJbDJmQ1B0CmJ0WUJBb0dBTUpKbmVaUzhUQ01kbVJnWFlYZ3J6K0JOSFFtSHorUkJxYTZyYjN4YkpiTC9pRllNZDY0VnRtMWoKTHB2YTkxUXcrcldLY01Hb21jYTh0NllaOEVhMmlaZFRHR3JWdU5qSEEzMnVScjdjR0F5VVdUa0dndWdOVHdMYgphYmRNV25jWlBneFQ3NjY1VWx0Zjd2ejlOS3V6aFJnSEw3RUlxWVlqM1RFemVqaVdxTkU9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURWakNDQWo2Z0F3SUJBZ0lKQU9vSDdESmN5UkM2TUEwR0NTcUdTSWIzRFFFQkJRVUFNQkF4RGpBTUJnTlYKQkFNTUJXTnlZVzVsTUI0WERUSXlNREV4TWpBNU5UYzBNbG9YRFRNeU1ERXhNREE1TlRjME1sb3dLekVwTUNjRwpBMVVFQXd3Z2QyVmlhRzl2YXkxelpYSjJhV05sTG1OeVlXNWxMWE41YzNSbGJTNXpkbU13Z2dFaU1BMEdDU3FHClNJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMveVJUaU9vbnp5MXRPaEtuVk96czdjTmlub1lweCtackMKWm94enRrL2I0SEQ0RUpHaEpVT2UxSGxoaHdwM0RyTFdwbmpNZG0rZjJwSGUyRENUOUdzeDBUUXhmVlQvMUdWUApvc29heGc4Q1JkcDI4RzZTbUNKU1l2VmVjTThkVDdRN0RnOGRyMGplZE00Zk1seWg2N1YwOUtHWGY2SkpkdFU1ClBLd1FIWlNrTGRmcHAwOHYrRnhFMzc0bkhlOFBrRXRGNDNoN2c1dmVLYkpRMW9oK0R2dDB5WWpNc1c4ZGlTQngKamhLb1BabjE5Z0xEZUUwUGpXWDlTcjBFRW1HNUFURmxlNEZJMzZ3TkhZMncxZGZUbjRBdy9sTlp5OGp6elBGTApVTGtvZVJ2TWR4RXpJY3ljV3pZbUNYbXNxY202VU5jU08waFJUaDdscGRaMVpOdTBHTUNEQWdNQkFBR2pnWmN3CmdaUXdDUVlEVlIwVEJBSXdBREFMQmdOVkhROEVCQU1DQmVBd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3SUcKQ0NzR0FRVUZCd01CTUZzR0ExVWRFUVJVTUZLQ0lIZGxZbWh2YjJzdGMyVnlkbWxqWlM1amNtRnVaUzF6ZVhOMApaVzB1YzNaamdpNTNaV0pvYjI5ckxYTmxjblpwWTJVdVkzSmhibVV0YzNsemRHVnRMbk4yWXk1amJIVnpkR1Z5CkxteHZZMkZzTUEwR0NTcUdTSWIzRFFFQkJRVUFBNElCQVFCbHgxbEJXcWh2VjMwZnB5NXJ3ZnlaNjdpRmxRYUsKK0syRXE0UXhvNkJGb2JuaDZ3aGVOL2Y4cTB3YS9uYktMN1ZwS1dINjA3bHF2ejNCTEI2c2FjcjUrU29nQlVScwp3d3pHWlRQTEp4VVdiWlowaHZCanNNMHphWmRDM1JpcmEycVJpMU1ndTNBWW1maFg2OGxvVkp1ZDJ1a2RrZmJoCkZnKzlXVmhlU0lTU3M2dGdEemFybXRCVVZJWGhFOW9JWkhkeStoWDcvQkN2YjAzSnJqL04ySFBGaHpCalFtUU4KVHgzV09tWDRTSW5pd1N3RjJrMmo3ZmtoSE5NRW1zY2huaDZsUXYxelVBZFRwNDVHMldrbnQzbXdCK0p6WTRLdgpMSDBmRjQ0TGg1OVRnREpzYWlmNnJVTW4wVlphNUFsZ3JtRmFGbG1Jd1Z4L29wSEp2bis2SVJqSwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBdjhrVTRqcUo4OHRiVG9TcDFUczdPM0RZcDZHS2NmbWF3bWFNYzdaUDIrQncrQkNSCm9TVkRudFI1WVljS2R3NnkxcVo0ekhadm45cVIzdGd3ay9Sck1kRTBNWDFVLzlSbFQ2TEtHc1lQQWtYYWR2QnUKa3BnaVVtTDFYbkRQSFUrME93NFBIYTlJM25UT0h6SmNvZXUxZFBTaGwzK2lTWGJWT1R5c0VCMlVwQzNYNmFkUApML2hjUk4rK0p4M3ZENUJMUmVONGU0T2IzaW15VU5hSWZnNzdkTW1JekxGdkhZa2djWTRTcUQyWjlmWUN3M2hOCkQ0MWwvVXE5QkJKaHVRRXhaWHVCU04rc0RSMk5zTlhYMDUrQU1QNVRXY3ZJODh6eFMxQzVLSGtiekhjUk15SE0KbkZzMkpnbDVyS25KdWxEWEVqdElVVTRlNWFYV2RXVGJ0QmpBZ3dJREFRQUJBb0lCQUJtNUNKb0hLL1dNOHVRbgpHdmhFaDM5RGRXdVdXUkZNWHh0djBhcTdheDZjamNwWHZwQ1VoT3RLcURVU2ZhN1dROXBTWGFWZXhUMzFmTmNjCnUvYzhNeHh0YU1peWZMSUxkTU1ubkYvVzdMQnJXZy9WMDU3SjFPQ2o4VEVIaEYvMERzSlU4bVlTMm4wcndYR2gKdVpibUhHSmhaVU1DbFd1eENvd3d2UXMwVEhsd2lPR2JOYXQ3aFF0NGJKdHBLSTdQRWJDNElxQWtUeU9sMmt3TgpnZ0pYRThTNE9FN1N1QUZiVXJRNkVVWS82WWFoaWQrYkNoL3RxZXNlTmxPK0J2QUU1SHpsLzJ0dThQTnRvckRkCm40MXFIRnhzaXpaU084Q2lyVXFqM0lJOHlsaU5BNnZ6WllRZU9TT3ovMjR3UisyWVhLKzROYlAvazM5UWhhVmIKZnk4Z0tVRUNnWUVBOWE3K2Q2Z3lYd1VqNlI0OHlTOVk2cnk4WjQveXVwWUdXT2M2R2hjNktyZHhFa1ludjZ2dwpnYWN0YllKWlJEZFlENFdKd21JejQ3QkpZb29yQXorYytpeDJZRzU0d1dGTnp4YUZyNVR2T0hIbHo5UElqUmRUCmd1OG94bWQxUzJEemkybDRxUTB0VlRZeFlTK3J2NmgrR21YUmJPK1YzYWlLZnhRMXdMMCtkak1DZ1lFQXg5YTAKQys3MFIvUExOUmNvTmlERUZ2bUVvYWlOc29LSUxaemYvMFRYVVIvSTk5MHVWQXpucVRyajVIUlJRK2VtblVyego2SXQwbVVrM0llc3ZrNmM4MDBaMkQ5eDlDaXdzVEJLV0N1cDR4c1VScHE0YWVQOFBwNk0rU0ROdk5OdlZwVlIrCkt0cThCb0pPQTg0R0V2dzBhU1M2VUhSRGUzWDB6N2s0d2p3REhIRUNnWUVBc3FiVms5MVRBNVdSVDJzVmVKWmQKYWhSa1RFcDRqd1daQi96Y1d5eVl0NGM5U2JTS0l1NjhyUXNNRloyN204ZEMyY2FaTGlpSzR2N0Yza25xalNvcwoxQjZRMWY1L0FOL28zTFhiOEptMGVxOFlGZEJDL1pZQXZDMTgwUWxhV2IzZVczb09xNTlSWDYxUXF3TW5PTzhsCkE3MFdWTWpEaWJPTlFtdEh5eWZSeTlFQ2dZQk9uL25jekJwT2lPd0ZxbVBHMENOMmlwdVZZeFRGRERoNkFjUGIKMG9FSXlRR3dDOVRqZXVSV24vWHo5NVBWckxuUUh5SlI5elJiN3dPREU5NTNNSkJzNjhjZHZIbHgzQ2xka041NQowd0RMNjlOakNoTWVVZlFkMTh0MGF0QXhNdUVmR0Z3L2ppbjJRYVJpT05nSTlqUEV2bytUZ2ZyZkEyemJvWnRrClNHcE04UUtCZ1FDaEhVUUlnN1F0M2JyakNOTnIydVIzNWZPUEx1aElBbytSNEJhSUNQUUZSVDl0OHRMTFZoeXIKNUxtUDRtMmtnWGV6bEFRWG02VHRkZXF0ay9IbVV6UFd5L0g0OUpTUXFhcUxHYzU0Q2Zsc09ydlFibjlTdG1URAp3bzU2Z3lFUmxRMjk0VWRLUnBJakFKdGRRbURwcmpycDJqeHdJWnlOdW4rZndGa0NSTjNSdVE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
kind: Secret
metadata:
name: webhook-server-tls
Expand All @@ -83,3 +83,8 @@ data:
- targets: []
properties:
cpu-request-percentile: "0.98"
ehpa.deployment-min-replicas: "1"
ehpa.statefulset-min-replicas: "1"
ehpa.workload-min-replicas: "1"
ehpa.pod-min-ready-seconds: "30"
ehpa.pod-available-ratio: "0.5"
Loading

0 comments on commit 3070a13

Please sign in to comment.