mirror of
https://github.com/puppetmaster/typhoon.git
synced 2025-08-28 00:38:29 +02:00
Compare commits
355 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d51da49925 | |||
| 2076a779a3 | |||
| 048094b256 | |||
| 75b063c586 | |||
| 1620d1e456 | |||
| 939bffbf98 | |||
| bc96443710 | |||
| 82a7422b3d | |||
| 132ab395a5 | |||
| 5f87eb3ec9 | |||
| b152b9f973 | |||
| 9c842395a8 | |||
| 6cb9c0341b | |||
| d4fd6d4adb | |||
| 3664dfafc2 | |||
| e535ddd15a | |||
| 5752a8f041 | |||
| 68abbf7b0d | |||
| 67047ead08 | |||
| c11e23fc50 | |||
| b647ad8806 | |||
| 2eb1ac1b4d | |||
| cb2721ef7d | |||
| fc06d28e13 | |||
| a9078cb52b | |||
| ebd9570ede | |||
| 34e8db7aae | |||
| 084e8bea49 | |||
| d73621c838 | |||
| 1a6481df04 | |||
| 798ec9a92f | |||
| 96aed4c3c3 | |||
| 7372d33af8 | |||
| 451ec771a8 | |||
| 4d9846b83e | |||
| 597ca4acce | |||
| 507c646e8b | |||
| d8f7da6873 | |||
| 048f1f514e | |||
| b825cd9afe | |||
| 796149d122 | |||
| a66bccd590 | |||
| 30b1edfcc6 | |||
| a4afe06b64 | |||
| 4d58be0816 | |||
| 170b768ad8 | |||
| 5bc1cd28c3 | |||
| 13fbac6c79 | |||
| a8fa4a9a06 | |||
| a5c1a96df1 | |||
| 6a091e245e | |||
| 590796ee62 | |||
| ec389295fe | |||
| 3c807f3478 | |||
| e76fe80b45 | |||
| 32853aaa7b | |||
| c32a54db40 | |||
| 9671b1c734 | |||
| 3b933e1ab3 | |||
| 58d8f6f505 | |||
| 56853fe222 | |||
| 18165d8076 | |||
| 50acf28ce5 | |||
| ab793eb842 | |||
| b74c958524 | |||
| 2024d3c32e | |||
| 11c434915f | |||
| 05f7df9e80 | |||
| 4220b9ce18 | |||
| 6a6af4aa16 | |||
| 3dcd10f3b8 | |||
| 22503993b9 | |||
| cf3aa8885b | |||
| ba61a137db | |||
| 646bdd78e4 | |||
| c163fbbbcd | |||
| dc7be431e0 | |||
| 86e0f806b3 | |||
| 96172ad269 | |||
| 3eb20a1f4b | |||
| ee9ce3d0ab | |||
| a8b8a9b454 | |||
| 968febb050 | |||
| bee455f83a | |||
| 3e89ea1b4a | |||
| e77dd6ecd4 | |||
| 4fd4a0f540 | |||
| 804dfea0f9 | |||
| 8ba23f364c | |||
| f6025666eb | |||
| 85eb502f19 | |||
| fa3184fb9c | |||
| 22565e57e0 | |||
| 026e1f3648 | |||
| ae548ce213 | |||
| e826b49648 | |||
| fa8f68f50e | |||
| ba8d972c76 | |||
| c0347ca0c6 | |||
| 9f94ab6bcc | |||
| 5e4f5de271 | |||
| be28495d79 | |||
| f1356fec24 | |||
| cc00afa4e1 | |||
| 5c3b5a20de | |||
| f5a83667e8 | |||
| a911367c2e | |||
| f884de847e | |||
| 1b3a0f6ebc | |||
| 1113a22f61 | |||
| 152c7d86bd | |||
| 79deb8a967 | |||
| f412f0d9f2 | |||
| eca6c4a1a1 | |||
| 133d325013 | |||
| 4b05c0180e | |||
| f49ab3a6ee | |||
| 0eef16b274 | |||
| ad1f59ce91 | |||
| 82e5ac3e7c | |||
| a8f7880511 | |||
| cda5b93b09 | |||
| 3e9f5f34de | |||
| 893d139590 | |||
| fc62e51b2a | |||
| e5ba3329eb | |||
| 7c3f3ab6d0 | |||
| a99a990d49 | |||
| df17253e72 | |||
| eda78db08e | |||
| afac46e39a | |||
| b1e680ac0c | |||
| 9fbfbdb854 | |||
| 511f5272f4 | |||
| 46ca5e8813 | |||
| 394e496cc7 | |||
| a38ec1a856 | |||
| 7881f4bd86 | |||
| d5b5b7cb02 | |||
| 759a48be7c | |||
| b39a1d70da | |||
| 901f7939b2 | |||
| d65085ce14 | |||
| 343db5b578 | |||
| 444363be2d | |||
| bc7ad25c60 | |||
| e838d4dc3d | |||
| 979c092ef6 | |||
| db8e94bb4b | |||
| eb093af9ed | |||
| 36096f844d | |||
| d236628e53 | |||
| 577b927a2b | |||
| 000c11edf6 | |||
| 29b16c3fc0 | |||
| 0c7a879bc4 | |||
| 1e654c9e4e | |||
| 28ee693e6b | |||
| 8c7d95aefd | |||
| d45dfdbf91 | |||
| d7e0536838 | |||
| 8dd221a57c | |||
| f17bb4cf61 | |||
| 44f1fe620a | |||
| a504264e24 | |||
| 88cf7273dc | |||
| 58def65a09 | |||
| cd7fd29194 | |||
| aafa38476a | |||
| 9a07f1d30b | |||
| c87db3ef37 | |||
| 342380cfa4 | |||
| 5e70d7e2c8 | |||
| aab071309f | |||
| f6ce12766b | |||
| e1d6ab2f24 | |||
| 8b3d41d6a0 | |||
| ccee5d3d89 | |||
| 8aefd4f082 | |||
| 78e6409bd0 | |||
| 2aef42d4f6 | |||
| b7d67757de | |||
| 26f5d2d753 | |||
| cd0a28904e | |||
| 618f8b30fd | |||
| 264d23a1b5 | |||
| f96e91f225 | |||
| efd4a0319d | |||
| 6df6bf904a | |||
| 5fba20d358 | |||
| a8d3d3bb12 | |||
| 9ea6d2c245 | |||
| 507aac9b78 | |||
| dfd2a0ec23 | |||
| e3bf7d8f9b | |||
| 49050320ce | |||
| 74e025c9e4 | |||
| 257a49ce37 | |||
| df3f40bcce | |||
| 32886cfba1 | |||
| 0ba2c1a4da | |||
| 430d139a5b | |||
| 7c6ab21b94 | |||
| 21178868db | |||
| 9dcf35e393 | |||
| 81b6f54169 | |||
| 7bce15975c | |||
| 1f83ae7dbb | |||
| a10a1cee9f | |||
| a79ad34ba3 | |||
| 99a11442c7 | |||
| d27f367004 | |||
| e9c8520359 | |||
| 37f00a3882 | |||
| 4cfafeaa07 | |||
| 90e23f5822 | |||
| 6234147948 | |||
| c25c59058c | |||
| bc9b808d44 | |||
| 4b0203fdb2 | |||
| 331566e1f7 | |||
| 04520e447c | |||
| 413585681b | |||
| 96711d7f17 | |||
| c9059d3fe9 | |||
| a287920169 | |||
| 8dc170b9d9 | |||
| aed1a5f33d | |||
| 31d02b0221 | |||
| 8f875f80f5 | |||
| 16c0b9152b | |||
| 99dbce67a3 | |||
| 20bfd69780 | |||
| ba44408b76 | |||
| 455175d9e6 | |||
| d45804b1f6 | |||
| 907a96916f | |||
| 187bb17d39 | |||
| abc31c3711 | |||
| 283e14f3e0 | |||
| e72f916c8d | |||
| c52f9f8d08 | |||
| ecae6679ff | |||
| 4760543356 | |||
| 09eb208b4e | |||
| 8d024d22ad | |||
| 3bdddc452c | |||
| ff4187a1fb | |||
| 2578be1f96 | |||
| 90edcd3d77 | |||
| a927c7c790 | |||
| d952576d2f | |||
| 70e389f37f | |||
| a18bd0a707 | |||
| 01905b00bc | |||
| f4194cd57a | |||
| a2db4fa8c4 | |||
| 358854e712 | |||
| b5dabcea31 | |||
| 3f0a5d2715 | |||
| 33173c0206 | |||
| 70f30d9c07 | |||
| 6afc1643d9 | |||
| e71e27e769 | |||
| 64035005d4 | |||
| 317416b316 | |||
| 2c1af917ec | |||
| 4ac2d94999 | |||
| fd044ee117 | |||
| 38a6bddd06 | |||
| d8966afdda | |||
| 84ed0a31c3 | |||
| fcbee12334 | |||
| feac94605a | |||
| 2b1b918b43 | |||
| bf22222f7d | |||
| 671eacb86e | |||
| e2d4af43be | |||
| 5c4a3f73d5 | |||
| 76ab4c4c2a | |||
| 1627ecaf27 | |||
| 1420700bc0 | |||
| 80538e2953 | |||
| 73af2f3b7c | |||
| 17ea547723 | |||
| 2b5dfece93 | |||
| d47d40b517 | |||
| 3c1be7b0e0 | |||
| bbbaf949f9 | |||
| 135c6182b8 | |||
| c53dc66d4a | |||
| 9960972726 | |||
| bac5acb3bd | |||
| 70bdc9ec94 | |||
| 144bb9403c | |||
| 5fca08064b | |||
| fc686c8fc7 | |||
| a1a5da6bc2 | |||
| 076b8e3c42 | |||
| ef5f953e04 | |||
| d25f23e675 | |||
| f100a90d28 | |||
| c3bf8bcf96 | |||
| 5d1e4ad333 | |||
| 9f702c72d2 | |||
| e556bc2167 | |||
| 1bf4f3b801 | |||
| 590d941f50 | |||
| ddc1ff5348 | |||
| 61557e89a6 | |||
| c3ef21dbf5 | |||
| 2a5dddeb9d | |||
| 75fb4e5d11 | |||
| 1a139ef6f1 | |||
| bc7902f40a | |||
| 70bf39bb9a | |||
| 4e1b8f22df | |||
| ab7913a061 | |||
| 7b0ea23cdc | |||
| c4683c5bad | |||
| 51cee6d5a4 | |||
| 87f9a2fc35 | |||
| 6de5cf5a55 | |||
| 3250994c95 | |||
| f4d260645c | |||
| d9219a6722 | |||
| 60c7eb85ee | |||
| 4c964b56a0 | |||
| 1fbd6835f2 | |||
| e4d977bfcd | |||
| 947c2c1815 | |||
| 4a38fb5927 | |||
| c4e64a9d1b | |||
| 7ca03e5219 | |||
| 362b3fac5c | |||
| 32db59b9eb | |||
| 0c53ad52e4 | |||
| 008817b0aa | |||
| 49d3b9e6b3 | |||
| 1243f395d1 | |||
| 846f11097f | |||
| ba84f86dc7 | |||
| b49a1d715d | |||
| 34c3d7cc39 | |||
| ca96a1335c | |||
| e339fbd2b6 | |||
| 8cc303c9ac | |||
| b19ba16afa | |||
| d127a7345c | |||
| 02a470d2f2 | |||
| 5643ad525f | |||
| d5b7ce8f27 | |||
| 1cda5bcd2a | |||
| bda73264f7 | |||
| dd930a2ff9 |
1
.github/FUNDING.yml
vendored
Normal file
1
.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
github: [poseidon]
|
||||||
33
.github/ISSUE_TEMPLATE.md
vendored
33
.github/ISSUE_TEMPLATE.md
vendored
@ -1,33 +0,0 @@
|
|||||||
<!-- Fill in either the 'Bug' or 'Feature Request' section -->
|
|
||||||
|
|
||||||
## Bug
|
|
||||||
|
|
||||||
### Environment
|
|
||||||
|
|
||||||
* Platform: aws, azure, bare-metal, google-cloud, digital-ocean
|
|
||||||
* OS: container-linux, flatcar-linux
|
|
||||||
* Release: Typhoon version or Git SHA (reporting latest is **not** helpful)
|
|
||||||
* Terraform: `terraform version` (reporting latest is **not** helpful)
|
|
||||||
* Plugins: Provider plugin versions (reporting latest is **not** helpful)
|
|
||||||
|
|
||||||
### Problem
|
|
||||||
|
|
||||||
Describe the problem.
|
|
||||||
|
|
||||||
### Desired Behavior
|
|
||||||
|
|
||||||
Describe the goal.
|
|
||||||
|
|
||||||
### Steps to Reproduce
|
|
||||||
|
|
||||||
Provide clear steps to reproduce the issue unless already covered.
|
|
||||||
|
|
||||||
## Feature Request
|
|
||||||
|
|
||||||
### Feature
|
|
||||||
|
|
||||||
Describe the feature and what problem it solves.
|
|
||||||
|
|
||||||
### Tradeoffs
|
|
||||||
|
|
||||||
What are the pros and cons of this feature? How will it be exercised and maintained?
|
|
||||||
39
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
39
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Report a bug to improve the project
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- READ: Issues are used to receive focused bug reports from users and to track planned future enhancements by the authors. Topics like cluster operation, support, debugging help, advice, and Kubernetes concepts are out of scope and should not use issues-->
|
||||||
|
|
||||||
|
**Description**
|
||||||
|
|
||||||
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
|
**Steps to Reproduce**
|
||||||
|
|
||||||
|
Provide clear steps to reproduce the bug.
|
||||||
|
|
||||||
|
- [ ] Relevant error messages if appropriate (concise, not a dump of everything).
|
||||||
|
- [ ] Explored using a vanilla cluster from the [tutorials](https://typhoon.psdn.io/#documentation). Ruled out [customizations](https://typhoon.psdn.io/advanced/customization/).
|
||||||
|
|
||||||
|
**Expected behavior**
|
||||||
|
|
||||||
|
A clear and concise description of what you expected to happen.
|
||||||
|
|
||||||
|
**Environment**
|
||||||
|
|
||||||
|
* Platform: aws, azure, bare-metal, google-cloud, digital-ocean
|
||||||
|
* OS: fedora-coreos, flatcar-linux (include release version)
|
||||||
|
* Release: Typhoon version or Git SHA (reporting latest is **not** helpful)
|
||||||
|
* Terraform: `terraform version` (reporting latest is **not** helpful)
|
||||||
|
* Plugins: Provider plugin versions (reporting latest is **not** helpful)
|
||||||
|
|
||||||
|
**Possible Solution**
|
||||||
|
|
||||||
|
<!-- Most bug reports should have some inkling about solutions. Otherwise, your report may be less of a bug and more of a support request (see top).-->
|
||||||
|
|
||||||
|
Link to a PR or description.
|
||||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
blank_issues_enabled: true
|
||||||
|
contact_links:
|
||||||
|
- name: Security
|
||||||
|
url: https://typhoon.psdn.io/topics/security/
|
||||||
|
about: Report security vulnerabilities
|
||||||
9
.github/dependabot.yaml
vendored
Normal file
9
.github/dependabot.yaml
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: pip
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: weekly
|
||||||
|
pull-request-branch-name:
|
||||||
|
separator: "-"
|
||||||
|
open-pull-requests-limit: 3
|
||||||
15
.github/issue_template.md
vendored
Normal file
15
.github/issue_template.md
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<!-- READ: Issues are used to receive focused bug reports from users and to track planned future enhancements by the authors. Topics like cluster operation, support, debugging help, advice, and Kubernetes concepts are out of scope and should not use issues-->
|
||||||
|
|
||||||
|
## Enhancement
|
||||||
|
|
||||||
|
### Overview
|
||||||
|
|
||||||
|
One paragraph explanation of the enhancement.
|
||||||
|
|
||||||
|
### Motivation
|
||||||
|
|
||||||
|
Describe the motivation and what problem this solves.
|
||||||
|
|
||||||
|
### Tradeoffs
|
||||||
|
|
||||||
|
What are the pros and cons of this feature? How will it be exercised and maintained?
|
||||||
718
CHANGES.md
718
CHANGES.md
@ -4,6 +4,720 @@ Notable changes between versions.
|
|||||||
|
|
||||||
## Latest
|
## Latest
|
||||||
|
|
||||||
|
## Kubernetes v1.21.0
|
||||||
|
|
||||||
|
* Kubernetes [v1.21.1](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.21.md#v1211)
|
||||||
|
* Add Terraform v0.15.x support ([#974](https://github.com/poseidon/typhoon/pull/974))
|
||||||
|
* Continue to support Terraform v0.13.x and v0.14.4+
|
||||||
|
* Update etcd from v3.4.15 to [v3.4.16](https://github.com/etcd-io/etcd/releases/tag/v3.4.16)
|
||||||
|
* Update Cilium from v1.9.5 to [v1.9.6](https://github.com/cilium/cilium/releases/tag/v1.9.6)
|
||||||
|
* Update Calico from v3.18.1 to [v3.19.0](https://github.com/projectcalico/calico/releases/tag/v3.19.0)
|
||||||
|
|
||||||
|
### AWS
|
||||||
|
|
||||||
|
* Reduce the default `disk_size` from 40GB to 30GB ([#983](https://github.com/poseidon/typhoon/pull/983))
|
||||||
|
|
||||||
|
### Azure
|
||||||
|
|
||||||
|
* Reduce the default `disk_size` from 40GB to 30GB ([#983](https://github.com/poseidon/typhoon/pull/983))
|
||||||
|
|
||||||
|
### Google Cloud
|
||||||
|
|
||||||
|
* Reduce the default `disk_size` from 40GB to 30GB ([#983](https://github.com/poseidon/typhoon/pull/983))
|
||||||
|
|
||||||
|
### Fedora CoreOS
|
||||||
|
|
||||||
|
* Update Kubelet mounts for cgroups v2 ([#978](https://github.com/poseidon/typhoon/pull/978))
|
||||||
|
|
||||||
|
### Addons
|
||||||
|
|
||||||
|
* Update kube-state-metrics from v2.0.0-rc.1 to [v2.0.0](https://github.com/kubernetes/kube-state-metrics/releases/tag/v2.0.0)
|
||||||
|
* Update Prometheus from v2.25.2 to [v2.27.0](https://github.com/prometheus/prometheus/releases/tag/v2.27.0)
|
||||||
|
* Update Grafana from v7.5.3 to [v7.5.6](https://github.com/grafana/grafana/releases/tag/v7.5.6)
|
||||||
|
* Update nginx-ingress from v0.45.0 to [v0.46.0](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v0.46.0)
|
||||||
|
|
||||||
|
## v1.21.0
|
||||||
|
|
||||||
|
* Kubernetes [v1.21.0](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.21.md#v1210)
|
||||||
|
* Enable `tokencleaner` controller ([#969](https://github.com/poseidon/typhoon/pull/969))
|
||||||
|
* Enable `kube-scheduler` and `kube-controller-manager` separate authn/z kubeconfig
|
||||||
|
* Change CNI config location from /etc/kubernetes/cni/net.d to /etc/cni/net.d ([#965](https://github.com/poseidon/typhoon/pull/965))
|
||||||
|
* Change `kube-controller-manager` to mount `/var/lib/kubelet/volumeplugins` directly
|
||||||
|
* Remove unused `cloud-provider` flags
|
||||||
|
* Update Fedora CoreOS Config version from v1.1.0 to v1.2.0 ([#970](https://github.com/poseidon/typhoon/pull/970))
|
||||||
|
* Require [poseidon/ct](https://github.com/poseidon/terraform-provider-ct) Terraform provider v0.8+ ([notes](https://typhoon.psdn.io/topics/maintenance/#upgrade-terraform-provider-ct))
|
||||||
|
* Require any [snippets](https://typhoon.psdn.io/advanced/customization/#hosts) customizations to update to v1.2.0
|
||||||
|
|
||||||
|
### AWS
|
||||||
|
|
||||||
|
* Allow setting custom initial node taints on worker pools ([#968](https://github.com/poseidon/typhoon/pull/968))
|
||||||
|
* Add `node_taints` variable to internal `workers` pool module to set initial node taints
|
||||||
|
* Add `daemonset_tolerations` so `kube-system` DaemonSets can tolerate custom taints
|
||||||
|
|
||||||
|
### Azure
|
||||||
|
|
||||||
|
* Allow setting custom initial node taints on worker pools ([#968](https://github.com/poseidon/typhoon/pull/968))
|
||||||
|
* Add `node_taints` variable to internal `workers` pool module to set initial node taints
|
||||||
|
* Add `daemonset_tolerations` so `kube-system` DaemonSets can tolerate custom taints
|
||||||
|
* Remove deprecated `azurerm_lb_backend_address_pool` field `resource_group_name` ([#972](https://github.com/poseidon/typhoon/pull/972))
|
||||||
|
|
||||||
|
### Google Cloud
|
||||||
|
|
||||||
|
* Allow setting custom initial node taints on worker pools ([#968](https://github.com/poseidon/typhoon/pull/968))
|
||||||
|
* Add `node_taints` variable to internal `workers` pool module to set initial node taints
|
||||||
|
* Add `daemonset_tolerations` so `kube-system` DaemonSets can tolerate custom taints
|
||||||
|
|
||||||
|
### Addons
|
||||||
|
|
||||||
|
* Update nginx-ingress from v0.44.0 to [v0.45.0](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v0.45.0)
|
||||||
|
* Update kube-state-metrics from v2.0.0-rc.0 to [v2.0.0-rc.1](https://github.com/kubernetes/kube-state-metrics/releases/tag/v2.0.0-rc.1)
|
||||||
|
* Update Grafana from v7.4.5 to [v7.5.3](https://github.com/grafana/grafana/releases/tag/v7.5.3)
|
||||||
|
|
||||||
|
## v1.20.5
|
||||||
|
|
||||||
|
* Kubernetes [v1.20.5](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#v1205)
|
||||||
|
* Update etcd from v3.4.14 to [v3.4.15](https://github.com/etcd-io/etcd/releases/tag/v3.4.15)
|
||||||
|
* Update Cilium from v1.9.4 to [v1.9.5](https://github.com/cilium/cilium/releases/tag/v1.9.5)
|
||||||
|
* Update Calico from v3.17.3 to [v3.18.1](https://github.com/projectcalico/calico/releases/tag/v3.18.1)
|
||||||
|
* Update CoreDNS from v1.7.0 to [v1.8.0](https://coredns.io/2020/10/22/coredns-1.8.0-release/)
|
||||||
|
* Mark bootstrap token as sensitive in Terraform plans ([#949](https://github.com/poseidon/typhoon/pull/949))
|
||||||
|
|
||||||
|
### Fedora CoreOS
|
||||||
|
|
||||||
|
* Set Kubelet `provider-id` ([#951](https://github.com/poseidon/typhoon/pull/951))
|
||||||
|
|
||||||
|
### Flatcar Linux
|
||||||
|
|
||||||
|
#### AWS
|
||||||
|
|
||||||
|
* Set Kubelet `provider-id` ([#951](https://github.com/poseidon/typhoon/pull/951))
|
||||||
|
* Remove `os_image` option `flatcar-edge` ([#943](https://github.com/poseidon/typhoon/pull/943))
|
||||||
|
|
||||||
|
#### Azure
|
||||||
|
|
||||||
|
* Remove `os_image` option `flatcar-edge` ([#943](https://github.com/poseidon/typhoon/pull/943))
|
||||||
|
|
||||||
|
#### Bare-Metal
|
||||||
|
|
||||||
|
* Remove `os_channel` option `flatcar-edge` ([#943](https://github.com/poseidon/typhoon/pull/943))
|
||||||
|
|
||||||
|
### Addons
|
||||||
|
|
||||||
|
* Update Prometheus from v2.25.0 to [v2.25.2](https://github.com/prometheus/prometheus/releases/tag/v2.25.2)
|
||||||
|
* Update kube-state-metrics from v2.0.0-alpha.3 to [v2.0.0-rc.0](https://github.com/kubernetes/kube-state-metrics/releases/tag/v2.0.0-rc.0)
|
||||||
|
* Switch image from `quay.io` to `k8s.gcr.io` ([#946](https://github.com/poseidon/typhoon/pull/946))
|
||||||
|
* Update node-exporter from v1.1.1 to [v1.1.2](https://github.com/prometheus/node_exporter/releases/tag/v1.1.2)
|
||||||
|
* Update Grafana from v7.4.2 to [v7.4.5](https://github.com/grafana/grafana/releases/tag/v7.4.5)
|
||||||
|
|
||||||
|
## v1.20.4
|
||||||
|
|
||||||
|
* Kubernetes [v1.20.4](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#v1204)
|
||||||
|
* Update Cilium from v1.9.1 to [v1.9.4](https://github.com/cilium/cilium/releases/tag/v1.9.4)
|
||||||
|
* Update Calico from v3.17.1 to [v3.17.3](https://github.com/projectcalico/calico/releases/tag/v3.17.3)
|
||||||
|
* Update flannel-cni from v0.4.1 to [v0.4.2](https://github.com/poseidon/flannel-cni/releases/tag/v0.4.2)
|
||||||
|
|
||||||
|
### Addons
|
||||||
|
|
||||||
|
* Update nginx-ingress from v0.43.0 to [v0.44.0](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v0.44.0)
|
||||||
|
* Update Prometheus from v2.24.0 to [v2.25.0](https://github.com/prometheus/prometheus/releases/tag/v2.25.0)
|
||||||
|
* Update node-exporter from v1.0.1 to [v1.1.1](https://github.com/prometheus/node_exporter/releases/tag/v1.1.1)
|
||||||
|
* Update Grafana from v7.3.7 to [v7.4.2](https://github.com/grafana/grafana/releases/tag/v7.4.2)
|
||||||
|
|
||||||
|
## v1.20.2
|
||||||
|
|
||||||
|
* Kubernetes [v1.20.2](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#v1202)
|
||||||
|
* Support Terraform v0.13.x and v0.14.4+ ([#924](https://github.com/poseidon/typhoon/pull/923))
|
||||||
|
|
||||||
|
### Addons
|
||||||
|
|
||||||
|
* Update nginx-ingress from v0.41.2 to [v0.43.0](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v0.43.0)
|
||||||
|
* Update Prometheus from v2.23.0 to [v2.24.0](https://github.com/prometheus/prometheus/releases/tag/v2.24.0)
|
||||||
|
* Update Grafana from v7.3.6 to [v7.3.7](https://github.com/grafana/grafana/releases/tag/v7.3.7)
|
||||||
|
|
||||||
|
## v1.20.1
|
||||||
|
|
||||||
|
* Kubernetes [v1.20.1](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#v1201)
|
||||||
|
|
||||||
|
### Fedora CoreOS
|
||||||
|
|
||||||
|
* Fedora CoreOS 33 has stronger crypto defaults ([**notice**](https://docs.fedoraproject.org/en-US/fedora-coreos/faq/#_why_does_ssh_stop_working_after_upgrading_to_fedora_33), [#915](https://github.com/poseidon/typhoon/issues/915))
|
||||||
|
* Use a non-RSA SSH key or add the workaround provided in upstream [Fedora docs](https://docs.fedoraproject.org/en-US/fedora-coreos/faq/#_why_does_ssh_stop_working_after_upgrading_to_fedora_33) as a [snippet](https://typhoon.psdn.io/advanced/customization/#fedora-coreos) (**action required**)
|
||||||
|
|
||||||
|
### Addons
|
||||||
|
|
||||||
|
* Update Grafana from v7.3.5 to [v7.3.6](https://github.com/grafana/grafana/releases/tag/v7.3.6)
|
||||||
|
|
||||||
|
## v1.20.0
|
||||||
|
|
||||||
|
* Kubernetes [v1.20.0](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#v1200)
|
||||||
|
* Add input variable validations ([#880](https://github.com/poseidon/typhoon/pull/880))
|
||||||
|
* Require Terraform v0.13+ ([migration guide](https://typhoon.psdn.io/topics/maintenance/#terraform-versions))
|
||||||
|
* Set output sensitive to suppress console display for some cases ([#885](https://github.com/poseidon/typhoon/pull/885))
|
||||||
|
* Add service account token [volume projection](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#service-account-token-volume-projection) ([#897](https://github.com/poseidon/typhoon/pull/897))
|
||||||
|
* Scope kube-scheduler and kube-controller-manager permissions ([#898](https://github.com/poseidon/typhoon/pull/898))
|
||||||
|
* Update etcd from v3.4.12 to [v3.4.14](https://github.com/etcd-io/etcd/releases/tag/v3.4.14)
|
||||||
|
* Update Calico from v3.16.5 to v3.17.1 ([#890](https://github.com/poseidon/typhoon/pull/890))
|
||||||
|
* Enable Calico MTU auto-detection
|
||||||
|
* Remove [workaround](https://github.com/poseidon/typhoon/pull/724) to Calico cni-plugin [issue](https://github.com/projectcalico/cni-plugin/issues/874)
|
||||||
|
* Update Cilium from v1.9.0 to [v1.9.1](https://github.com/cilium/cilium/releases/tag/v1.9.1)
|
||||||
|
* Relax `terraform-provider-ct` version constraint to v0.6+ ([#893](https://github.com/poseidon/typhoon/pull/893))
|
||||||
|
* Allow upgrading `terraform-provider-ct` to v0.7.x ([warn](https://typhoon.psdn.io/topics/maintenance/#upgrade-terraform-provider-ct))
|
||||||
|
|
||||||
|
### AWS
|
||||||
|
|
||||||
|
* Enable Network Load Balancer (NLB) dualstack ([#883](https://github.com/poseidon/typhoon/pull/883))
|
||||||
|
* NLB subnets assigned both IPv4 and IPv6 addresses
|
||||||
|
* NLB DNS name has both A and AAAA records
|
||||||
|
* NLB to target node traffic is IPv4 (no change)
|
||||||
|
|
||||||
|
### Bare-Metal
|
||||||
|
|
||||||
|
* Remove iSCSI `/etc/iscsi` and `iscsadm` mounts from Kubelet ([#912](https://github.com/poseidon/typhoon/pull/912))
|
||||||
|
|
||||||
|
### Fedora CoreOS
|
||||||
|
|
||||||
|
#### AWS
|
||||||
|
|
||||||
|
* Fix AMI query for which could fail in some regions ([#887](https://github.com/poseidon/typhoon/pull/887))
|
||||||
|
|
||||||
|
#### Bare-Metal
|
||||||
|
|
||||||
|
* Promote Fedora CoreOS to stable
|
||||||
|
* Use initramfs and rootfs images as initrd's ([#889](https://github.com/poseidon/typhoon/pull/889))
|
||||||
|
* Requires Fedora CoreOS version with rootfs images (e.g. 32.20200923.3.0+)
|
||||||
|
|
||||||
|
### Addons
|
||||||
|
|
||||||
|
* Update Prometheus from v2.22.2 to [v2.23.0](https://github.com/prometheus/prometheus/releases/tag/v2.23.0)
|
||||||
|
* Update kube-state-metrics from v2.0.0-alpha.2 to [v2.0.0-alpha.3](https://github.com/kubernetes/kube-state-metrics/releases/tag/v2.0.0-alpha.3)
|
||||||
|
* Update Grafana from v7.3.2 to [v7.3.5](https://github.com/grafana/grafana/releases/tag/v7.3.5)
|
||||||
|
|
||||||
|
## v1.19.4
|
||||||
|
|
||||||
|
* Kubernetes [v1.19.4](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.19.md#v1194)
|
||||||
|
* Update Cilium from v1.8.4 to [v1.9.0](https://github.com/cilium/cilium/releases/tag/v1.9.0)
|
||||||
|
* Update Calico from v3.16.3 to [v3.16.5](https://github.com/projectcalico/calico/releases/tag/v3.16.5)
|
||||||
|
* Remove `asset_dir` variable (defaulted off in [v1.17.0](https://github.com/poseidon/typhoon/pull/595), deprecated in [v1.18.0](https://github.com/poseidon/typhoon/pull/678))
|
||||||
|
|
||||||
|
### Fedora CoreOS
|
||||||
|
|
||||||
|
* Improve `etcd-member.service` systemd unit ([#868](https://github.com/poseidon/typhoon/pull/868))
|
||||||
|
* Allow a snippet with a systemd dropin to set an alternate image (e.g. mirror)
|
||||||
|
* Fix local node delete oneshot on node shutdown ([#856](https://github.com/poseidon/typhoon/pull/855))
|
||||||
|
|
||||||
|
#### AWS
|
||||||
|
|
||||||
|
* Add experimental Fedora CoreOS arm64 support ([docs](https://typhoon.psdn.io/advanced/arm64/), [#875](https://github.com/poseidon/typhoon/pull/875))
|
||||||
|
* Allow arm64 full-cluster or mixed/hybrid cluster with worker pools
|
||||||
|
* Add `arch` variable to cluster module
|
||||||
|
* Add `daemonset_tolerations` variable to cluster module
|
||||||
|
* Add `node_taints` variable to workers module
|
||||||
|
* Requires flannel CNI provider and use of experimental AMI (see docs)
|
||||||
|
|
||||||
|
### Flatcar Linux
|
||||||
|
|
||||||
|
* Rename `container-linux` modules to `flatcar-linux` ([#858](https://github.com/poseidon/typhoon/issues/858)) (**action required**)
|
||||||
|
* Change on-host system containers from rkt to docker
|
||||||
|
* Change `etcd-member.service` container runnner from rkt to docker ([#867](https://github.com/poseidon/typhoon/pull/867))
|
||||||
|
* Change `kubelet.service` container runner from rkt-fly to docker ([#855](https://github.com/poseidon/typhoon/pull/855))
|
||||||
|
* Change `bootstrap.service` container runner from rkt to docker ([#873](https://github.com/poseidon/typhoon/pull/873))
|
||||||
|
* Change `delete-node.service` to use docker and an inline ExecStart ([#855](https://github.com/poseidon/typhoon/pull/855))
|
||||||
|
* Fix local node delete oneshot on node shutdown ([#855](https://github.com/poseidon/typhoon/pull/855))
|
||||||
|
* Remove CoreOS Container Linux Matchbox profiles ([#859](https://github.com/poseidon/typhoon/pull/858))
|
||||||
|
|
||||||
|
### Addons
|
||||||
|
|
||||||
|
* Update nginx-ingress from v0.40.2 to [v0.41.2](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v0.41.2)
|
||||||
|
* Update Prometheus from v2.22.0 to [v2.22.1](https://github.com/prometheus/prometheus/releases/tag/v2.22.1)
|
||||||
|
* Update kube-state-metrics from v2.0.0-alpha.1 to [v2.0.0-alpha.2](https://github.com/kubernetes/kube-state-metrics/releases/tag/v2.0.0-alpha.2)
|
||||||
|
* Update Grafana from v7.2.1 to [v7.3.2](https://github.com/grafana/grafana/releases/tag/v7.3.2)
|
||||||
|
|
||||||
|
## v1.19.3
|
||||||
|
|
||||||
|
* Kubernetes [v1.19.3](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.19.md#v1193)
|
||||||
|
* Update Cilium from v1.8.3 to [v1.8.4](https://github.com/cilium/cilium/releases/tag/v1.8.4)
|
||||||
|
* Update Calico from v1.15.3 to [v1.16.3](https://github.com/projectcalico/calico/releases/tag/v3.16.3) ([#851](https://github.com/poseidon/typhoon/pull/851))
|
||||||
|
* Update flannel from v0.13.0-rc2 to v0.13.0 ([#219](https://github.com/poseidon/terraform-render-bootstrap/pull/219))
|
||||||
|
|
||||||
|
### Flatcar Linux
|
||||||
|
|
||||||
|
* Remove references to CoreOS Container Linux ([#839](https://github.com/poseidon/typhoon/pull/839))
|
||||||
|
* Fix error querying for coreos AMI on AWS ([#838](https://github.com/poseidon/typhoon/issues/838))
|
||||||
|
|
||||||
|
### Addons
|
||||||
|
|
||||||
|
* Update nginx-ingress from v0.35.0 to [v0.40.2](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v0.40.2)
|
||||||
|
* Update Grafana from v7.1.5 to [v7.2.1](https://github.com/grafana/grafana/releases/tag/v7.2.1)
|
||||||
|
* Update Prometheus from v2.21.0 to [v2.22.0](https://github.com/prometheus/prometheus/releases/tag/v2.22.0)
|
||||||
|
* Update kube-state-metrics from v1.9.7 to [v2.0.0-alpha.1](https://github.com/kubernetes/kube-state-metrics/releases/tag/v2.0.0-alpha.1)
|
||||||
|
|
||||||
|
## v1.19.2
|
||||||
|
|
||||||
|
* Kubernetes [v1.19.2](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.19.md#v1192)
|
||||||
|
* Update flannel from v0.12.0 to v0.13.0-rc2 ([#216](https://github.com/poseidon/terraform-render-bootstrap/pull/216))
|
||||||
|
* Update flannel-cni from v0.4.0 to v0.4.1
|
||||||
|
* Update CNI plugins from v0.8.6 to v0.8.7
|
||||||
|
|
||||||
|
### Addons
|
||||||
|
|
||||||
|
* Refresh Prometheus rules/alerts and Grafana dashboards ([#831](https://github.com/poseidon/typhoon/pull/831))
|
||||||
|
* Reduce apiserver metrics cardinality for non-core APIs ([#830](https://github.com/poseidon/typhoon/pull/830))
|
||||||
|
|
||||||
|
## v1.19.1
|
||||||
|
|
||||||
|
* Kubernetes [v1.19.1](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.19.md#v1191)
|
||||||
|
* Change control plane seccomp annotations to GA `seccompProfile` ([#822](https://github.com/poseidon/typhoon/pull/822))
|
||||||
|
* Update Cilium from v1.8.2 to [v1.8.3](https://github.com/cilium/cilium/releases/tag/v1.8.3)
|
||||||
|
* Promote Cilium from experimental to general availability ([#827](https://github.com/poseidon/typhoon/pull/827))
|
||||||
|
* Update Calico from v1.15.2 to [v1.15.3](https://github.com/projectcalico/calico/releases/tag/v3.15.3)
|
||||||
|
|
||||||
|
### Fedora CoreOS
|
||||||
|
|
||||||
|
* Update Fedora CoreOS Config version from v1.0.0 to v1.1.0
|
||||||
|
* Require any [snippets](https://typhoon.psdn.io/advanced/customization/#hosts) customizations to update to v1.1.0
|
||||||
|
|
||||||
|
### Addons
|
||||||
|
|
||||||
|
* Update IngressClass resources to `networking.k8s.io/v1` ([#824](https://github.com/poseidon/typhoon/pull/824))
|
||||||
|
* Update Prometheus from v2.20.0 to [v2.21.0](https://github.com/prometheus/prometheus/releases/tag/v2.21.0)
|
||||||
|
* Remove Kubernetes node name labelmap `relabel_config` from etcd, Kubelet, and CAdvisor scrape config ([#828](https://github.com/poseidon/typhoon/pull/828))
|
||||||
|
|
||||||
|
## v1.19.0
|
||||||
|
|
||||||
|
* Kubernetes [v1.19.0](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.19.md#v1190)
|
||||||
|
* Update etcd from v3.4.10 to [v3.4.12](https://github.com/etcd-io/etcd/releases/tag/v3.4.12)
|
||||||
|
* Update Calico from v3.15.1 to [v3.15.2](https://docs.projectcalico.org/v3.15/release-notes/)
|
||||||
|
|
||||||
|
### Fedora CoreOS
|
||||||
|
|
||||||
|
* Fix race condition during bootstrap of multi-controller clusters ([#808](https://github.com/poseidon/typhoon/pull/808))
|
||||||
|
* Fix SELinux label of bootstrap-secrets on non-bootstrap controllers
|
||||||
|
|
||||||
|
### Addons
|
||||||
|
|
||||||
|
* Introduce [fleetlock](https://github.com/poseidon/fleetlock) for Fedora CoreOS reboot coordination ([#814](https://github.com/poseidon/typhoon/pull/814))
|
||||||
|
* Update nginx-ingress from v0.34.1 to [v0.35.0](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v0.35.0)
|
||||||
|
* Repository changed to `k8s.gcr.io/ingress-nginx/controller`
|
||||||
|
* Update Grafana from v7.1.3 to [v7.1.5](https://github.com/grafana/grafana/releases/tag/v7.1.5)
|
||||||
|
|
||||||
|
## v1.18.8
|
||||||
|
|
||||||
|
* Kubernetes [v1.18.8](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#v1188)
|
||||||
|
* Migrate from Terraform v0.12.x to v0.13.x ([#804](https://github.com/poseidon/typhoon/pull/804)) (**action required**)
|
||||||
|
* Recommend Terraform v0.13.x ([migration guide](https://typhoon.psdn.io/topics/maintenance/#terraform-versions))
|
||||||
|
* Support automatic install of poseidon's provider plugins ([poseidon/ct](https://registry.terraform.io/providers/poseidon/ct/latest), [poseidon/matchbox](https://registry.terraform.io/providers/poseidon/matchbox/latest))
|
||||||
|
* Require Terraform v0.12.26+ (migration compatibility)
|
||||||
|
* Require `terraform-provider-ct` v0.6.1
|
||||||
|
* Require `terraform-provider-matchbox` v0.4.1
|
||||||
|
* Update etcd from v3.4.9 to [v3.4.10](https://github.com/etcd-io/etcd/releases/tag/v3.4.10)
|
||||||
|
* Update CoreDNS from v1.6.7 to [v1.7.0](https://coredns.io/2020/06/15/coredns-1.7.0-release/)
|
||||||
|
* Update Cilium from v1.8.1 to [v1.8.2](https://github.com/cilium/cilium/releases/tag/v1.8.2)
|
||||||
|
* Update [coreos/flannel-cni](https://github.com/coreos/flannel-cni) to [poseidon/flannel-cni](https://github.com/poseidon/flannel-cni) ([#798](https://github.com/poseidon/typhoon/pull/798))
|
||||||
|
* Update CNI plugins and fix CVEs with Flannel CNI (non-default)
|
||||||
|
* Transition to a poseidon maintained container image
|
||||||
|
|
||||||
|
### AWS
|
||||||
|
|
||||||
|
* Allow `terraform-provider-aws` v3.0+ ([#803](https://github.com/poseidon/typhoon/pull/803))
|
||||||
|
* Recommend updating `terraform-provider-aws` to v3.0+
|
||||||
|
* Continue to allow v2.23+, no v3.x specific features are used
|
||||||
|
|
||||||
|
### DigitalOcean
|
||||||
|
|
||||||
|
* Require `terraform-provider-digitalocean` v1.21+ for Terraform v0.13.x (unenforced)
|
||||||
|
* Require `terraform-provider-digitalocean` v1.20+ for Terraform v0.12.x
|
||||||
|
|
||||||
|
### Fedora CoreOS
|
||||||
|
|
||||||
|
* Fix support for Flannel with Fedora CoreOS ([#795](https://github.com/poseidon/typhoon/pull/795))
|
||||||
|
* Configure `flannel.1` link to select its own MAC address to solve flannel
|
||||||
|
pod-to-pod traffic drops starting with default link changes in Fedora CoreOS
|
||||||
|
32.20200629.3.0 ([details](https://github.com/coreos/fedora-coreos-tracker/issues/574#issuecomment-665487296))
|
||||||
|
|
||||||
|
#### Addons
|
||||||
|
|
||||||
|
* Update Prometheus from v2.19.2 to [v2.20.0](https://github.com/prometheus/prometheus/releases/tag/v2.20.0)
|
||||||
|
* Update Grafana from v7.0.6 to [v7.1.3](https://github.com/grafana/grafana/releases/tag/v7.1.3)
|
||||||
|
|
||||||
|
## v1.18.6
|
||||||
|
|
||||||
|
* Kubernetes [v1.18.6](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#v1186)
|
||||||
|
* Update Calico from v3.15.0 to [v3.15.1](https://docs.projectcalico.org/v3.15/release-notes/)
|
||||||
|
* Update Cilium from v1.8.0 to [v1.8.1](https://github.com/cilium/cilium/releases/tag/v1.8.1)
|
||||||
|
|
||||||
|
#### Addons
|
||||||
|
|
||||||
|
* Update nginx-ingress from v0.33.0 to [v0.34.1](https://github.com/kubernetes/ingress-nginx/releases/tag/nginx-0.34.1)
|
||||||
|
* [ingress-nginx](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v0.34.0) will publish images only to gcr.io
|
||||||
|
* Update Prometheus from v2.19.1 to [v2.19.2](https://github.com/prometheus/prometheus/releases/tag/v2.19.2)
|
||||||
|
* Update Grafana from v7.0.4 to [v7.0.6](https://github.com/grafana/grafana/releases/tag/v7.0.6)
|
||||||
|
|
||||||
|
## v1.18.5
|
||||||
|
|
||||||
|
* Kubernetes [v1.18.5](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#v1185)
|
||||||
|
* Add Cilium v1.8.0 as a (experimental) CNI provider option ([#760](https://github.com/poseidon/typhoon/pull/760))
|
||||||
|
* Set `networking` to "cilium" to enable
|
||||||
|
* Update Calico from v3.14.1 to [v3.15.0](https://docs.projectcalico.org/v3.15/release-notes/)
|
||||||
|
|
||||||
|
#### DigitalOcean
|
||||||
|
|
||||||
|
* Isolate each cluster in an independent DigitalOcean VPC ([#776](https://github.com/poseidon/typhoon/pull/776))
|
||||||
|
* Create droplets in a VPC per cluster (matches Typhoon AWS, Azure, and GCP)
|
||||||
|
* Require `terraform-provider-digitalocean` v1.16.0+ (action required)
|
||||||
|
* Output `vpc_id` for use with an attached DigitalOcean [loadbalancer](https://github.com/poseidon/typhoon/blob/v1.18.5/docs/architecture/digitalocean.md#custom-load-balancer)
|
||||||
|
|
||||||
|
### Fedora CoreOS
|
||||||
|
|
||||||
|
#### Google Cloud
|
||||||
|
|
||||||
|
* Promote Fedora CoreOS to stable
|
||||||
|
* Remove `os_image` variable deprecated in v1.18.3 ([#777](https://github.com/poseidon/typhoon/pull/777))
|
||||||
|
* Use `os_stream` to select a Fedora CoreOS image stream
|
||||||
|
|
||||||
|
### Flatcar Linux
|
||||||
|
|
||||||
|
#### Azure
|
||||||
|
|
||||||
|
* Allow using Flatcar Linux Edge by setting `os_image` to "flatcar-edge" ([#778](https://github.com/poseidon/typhoon/pull/778))
|
||||||
|
|
||||||
|
#### Addons
|
||||||
|
|
||||||
|
* Update Prometheus from v2.19.0 to [v2.19.1](https://github.com/prometheus/prometheus/releases/tag/v2.19.1)
|
||||||
|
* Update Grafana from v7.0.3 to [v7.0.4](https://github.com/grafana/grafana/releases/tag/v7.0.4)
|
||||||
|
|
||||||
|
## v1.18.4
|
||||||
|
|
||||||
|
* Kubernetes [v1.18.4](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#v1184)
|
||||||
|
* Update Kubelet image publishing ([#749](https://github.com/poseidon/typhoon/pull/749))
|
||||||
|
* Build Kubelet images internally and publish to Quay and Dockerhub
|
||||||
|
* [quay.io/poseidon/kubelet](https://quay.io/repository/poseidon/kubelet) (official)
|
||||||
|
* [docker.io/psdn/kubelet](https://hub.docker.com/r/psdn/kubelet) (fallback)
|
||||||
|
* Continue offering automated image builds with an alternate tag strategy (see [docs](https://typhoon.psdn.io/topics/security/#container-images))
|
||||||
|
* [Document](https://typhoon.psdn.io/advanced/customization/#kubelet) use of alternate Kubelet images during registry incidents
|
||||||
|
* Update Calico from v3.14.0 to [v3.14.1](https://docs.projectcalico.org/v3.14/release-notes/)
|
||||||
|
* Fix [CVE-2020-13597](https://github.com/kubernetes/kubernetes/issues/91507)
|
||||||
|
* Rename controller NoSchedule taint from `node-role.kubernetes.io/master` to `node-role.kubernetes.io/controller` ([#764](https://github.com/poseidon/typhoon/pull/764))
|
||||||
|
* Tolerate the new taint name for workloads that may run on controller nodes
|
||||||
|
* Remove node label `node.kubernetes.io/master` from controller nodes ([#764](https://github.com/poseidon/typhoon/pull/764))
|
||||||
|
* Use `node.kubernetes.io/controller` (present since v1.9.5, [#160](https://github.com/poseidon/typhoon/pull/160)) to node select controllers
|
||||||
|
* Remove unused Kubelet `-lock-file` and `-exit-on-lock-contention` ([#758](https://github.com/poseidon/typhoon/pull/758))
|
||||||
|
|
||||||
|
### Fedora CoreOS
|
||||||
|
|
||||||
|
#### Azure
|
||||||
|
|
||||||
|
* Use `strict` Fedora CoreOS Config (FCC) snippet parsing ([#755](https://github.com/poseidon/typhoon/pull/755))
|
||||||
|
* Reduce Calico vxlan interface MTU to maintain performance ([#767](https://github.com/poseidon/typhoon/pull/766))
|
||||||
|
|
||||||
|
#### AWS
|
||||||
|
|
||||||
|
* Fix Kubelet service race with hostname update ([#766](https://github.com/poseidon/typhoon/pull/766))
|
||||||
|
* Wait for a hostname to avoid Kubelet trying to register as `localhost`
|
||||||
|
|
||||||
|
### Flatcar Linux
|
||||||
|
|
||||||
|
* Use `strict` Container Linux Config (CLC) snippet parsing ([#755](https://github.com/poseidon/typhoon/pull/755))
|
||||||
|
* Require `terraform-provider-ct` v0.4+, recommend v0.5+ (**action required**)
|
||||||
|
|
||||||
|
### Addons
|
||||||
|
|
||||||
|
* Update nginx-ingress from v0.32.0 to [v0.33.0](https://github.com/kubernetes/ingress-nginx/releases/tag/nginx-0.33.0)
|
||||||
|
* Update Prometheus from v2.18.1 to [v2.19.0](https://github.com/prometheus/prometheus/releases/tag/v2.19.0)
|
||||||
|
* Update node-exporter from v1.0.0-rc.1 to [v1.0.1](https://github.com/prometheus/node_exporter/releases/tag/v1.0.1)
|
||||||
|
* Update kube-state-metrics from v1.9.6 to v1.9.7
|
||||||
|
* Update Grafana from v7.0.0 to v7.0.3
|
||||||
|
|
||||||
|
## v1.18.3
|
||||||
|
|
||||||
|
* Kubernetes [v1.18.3](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#v1183)
|
||||||
|
* Use Kubelet [TLS bootstrap](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/) with bootstrap token authentication ([#713](https://github.com/poseidon/typhoon/pull/713))
|
||||||
|
* Enable Node [Authorization](https://kubernetes.io/docs/reference/access-authn-authz/node/) and [NodeRestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction) to reduce authorization scope
|
||||||
|
* Renew Kubelet certificates every 72 hours
|
||||||
|
* Update etcd from v3.4.7 to [v3.4.9](https://github.com/etcd-io/etcd/releases/tag/v3.4.9)
|
||||||
|
* Update Calico from v3.13.1 to [v3.14.0](https://docs.projectcalico.org/v3.14/release-notes/)
|
||||||
|
* Add CoreDNS node affinity preference for controller nodes ([#188](https://github.com/poseidon/terraform-render-bootstrap/pull/188))
|
||||||
|
* Deprecate CoreOS Container Linux support (no OS [updates](https://coreos.com/os/eol/) after May 2020)
|
||||||
|
* Use a `fedora-coreos` module for Fedora CoreOS
|
||||||
|
* Use a `container-linux` module for Flatcar Linux
|
||||||
|
|
||||||
|
### AWS
|
||||||
|
|
||||||
|
* Fix Terraform plan error when `controller_count` exceeds AWS zones (e.g. 5 controllers) ([#714](https://github.com/poseidon/typhoon/pull/714))
|
||||||
|
* Regressed in v1.17.1 ([#605](https://github.com/poseidon/typhoon/pull/605))
|
||||||
|
|
||||||
|
### Azure
|
||||||
|
|
||||||
|
* Update Azure subnets to set `address_prefixes` list ([#730](https://github.com/poseidon/typhoon/pull/730))
|
||||||
|
* Fix warning that `address_prefix` is deprecated
|
||||||
|
* Require `terraform-provider-azurerm` v2.8.0+ (action required)
|
||||||
|
|
||||||
|
### DigitalOcean
|
||||||
|
|
||||||
|
* Promote DigitalOcean to beta on both Fedora CoreOS and Flatcar Linux
|
||||||
|
|
||||||
|
### Fedora CoreOS
|
||||||
|
|
||||||
|
* Fix Calico `install-cni` crashloop on Pod restarts ([#724](https://github.com/poseidon/typhoon/pull/724))
|
||||||
|
* SELinux enforcement requires consistent file context MCS level
|
||||||
|
* Restarting a node resolved the issue as a previous workaround
|
||||||
|
|
||||||
|
#### AWS
|
||||||
|
|
||||||
|
* Support Fedora CoreOS [image streams](https://docs.fedoraproject.org/en-US/fedora-coreos/update-streams/) ([#727](https://github.com/poseidon/typhoon/pull/727))
|
||||||
|
* Add `os_stream` variable to set the stream to `stable` (default), `testing`, or `next`
|
||||||
|
* Remove unused `os_image` variable
|
||||||
|
|
||||||
|
#### Google
|
||||||
|
|
||||||
|
* Support Fedora CoreOS [image streams](https://docs.fedoraproject.org/en-US/fedora-coreos/update-streams/) ([#723](https://github.com/poseidon/typhoon/pull/723))
|
||||||
|
* Add `os_stream` variable to set the stream to `stable` (default), `testing`, or `next`
|
||||||
|
* Deprecate `os_image` variable. Manual image uploads are no longer needed
|
||||||
|
|
||||||
|
### Flatcar Linux
|
||||||
|
|
||||||
|
#### Azure
|
||||||
|
|
||||||
|
* Use the Flatcar Linux Azure Marketplace image
|
||||||
|
* Restore [#664](https://github.com/poseidon/typhoon/pull/664) (reverted in [#707](https://github.com/poseidon/typhoon/pull/707)) but use Flatcar Linux new free offer (not byol)
|
||||||
|
* Change `os_image` to use a `flatcar-stable` default
|
||||||
|
|
||||||
|
#### Google
|
||||||
|
|
||||||
|
* Promote Flatcar Linux to beta
|
||||||
|
|
||||||
|
### Addons
|
||||||
|
|
||||||
|
* Update nginx-ingress from v0.30.0 to [v0.32.0](https://github.com/kubernetes/ingress-nginx/releases/tag/nginx-0.32.0)
|
||||||
|
* Add support for [IngressClass](https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-class)
|
||||||
|
* Update Prometheus from v2.17.1 to v2.18.1
|
||||||
|
* Update kube-state-metrics from v1.9.5 to [v1.9.6](https://github.com/kubernetes/kube-state-metrics/releases/tag/v1.9.6)
|
||||||
|
* Update node-exporter from v1.0.0-rc.0 to [v1.0.0-rc.1](https://github.com/prometheus/node_exporter/releases/tag/v1.0.0-rc.1)
|
||||||
|
* Update Grafana from v6.7.2 to [v7.0.0](https://grafana.com/docs/grafana/latest/guides/whats-new-in-v7-0/)
|
||||||
|
|
||||||
|
## v1.18.2
|
||||||
|
|
||||||
|
* Kubernetes [v1.18.2](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#v1182)
|
||||||
|
* Choose Fedora CoreOS or Flatcar Linux (**action required**)
|
||||||
|
* Use a `fedora-coreos` module for Fedora CoreOS
|
||||||
|
* Use a `container-linux` module for Flatcar Linux
|
||||||
|
* Change Container Linux modules' defaults from CoreOS Container Linux to [Flatcar Container Linux](https://typhoon.psdn.io/architecture/operating-systems/) ([#702](https://github.com/poseidon/typhoon/pull/702))
|
||||||
|
* CoreOS Container Linux [won't receive updates](https://coreos.com/os/eol/) after May 2020
|
||||||
|
|
||||||
|
### Fedora CoreOS
|
||||||
|
|
||||||
|
* Fix bootstrap race condition from SELinux unshared content label ([#708](https://github.com/poseidon/typhoon/pull/708))
|
||||||
|
|
||||||
|
#### Azure
|
||||||
|
|
||||||
|
* Add support for Fedora CoreOS ([#704](https://github.com/poseidon/typhoon/pull/704))
|
||||||
|
|
||||||
|
#### DigitalOcean
|
||||||
|
|
||||||
|
* Fix race condition creating firewall allow rules ([#709](https://github.com/poseidon/typhoon/pull/709))
|
||||||
|
|
||||||
|
### Flatcar Linux
|
||||||
|
|
||||||
|
#### AWS
|
||||||
|
|
||||||
|
* Change `os_image` default from `coreos-stable` to `flatcar-stable` ([#702](https://github.com/poseidon/typhoon/pull/702))
|
||||||
|
|
||||||
|
#### Azure
|
||||||
|
|
||||||
|
* Change `os_image` to be required. Recommend uploading a Flatcar Linux image (**action required**) ([#702](https://github.com/poseidon/typhoon/pull/702))
|
||||||
|
* Disable Flatcar Linux Azure Marketplace image [support](https://github.com/poseidon/typhoon/pull/664) (**breaking**, [#707](https://github.com/poseidon/typhoon/pull/707))
|
||||||
|
* Revert to manual uploading until marketplace issue is closed ([#703](https://github.com/poseidon/typhoon/issues/703))
|
||||||
|
|
||||||
|
#### Bare-Metal
|
||||||
|
|
||||||
|
* Recommend changing [os_channel](https://typhoon.psdn.io/cl/bare-metal/#required) from `coreos-stable` to `flatcar-stable`
|
||||||
|
|
||||||
|
#### Google
|
||||||
|
|
||||||
|
* Change `os_image` to be required. Recommend uploading a Flatcar Linux image (**action required**) ([#702](https://github.com/poseidon/typhoon/pull/702))
|
||||||
|
|
||||||
|
#### DigitalOcean
|
||||||
|
|
||||||
|
* Change `os_image` to be required. Recommend uploading a Flatcar Linux image (**action required**) ([#702](https://github.com/poseidon/typhoon/pull/702))
|
||||||
|
* Fix race condition creating firewall allow rules ([#709](https://github.com/poseidon/typhoon/pull/709))
|
||||||
|
|
||||||
|
## v1.18.1
|
||||||
|
|
||||||
|
* Kubernetes [v1.18.1](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#v1181)
|
||||||
|
* Choose Fedora CoreOS or Flatcar Linux (**action recommended**)
|
||||||
|
* Use a `fedora-coreos` module for Fedora CoreOS
|
||||||
|
* Use a `container-linux` module with OS set to Flatcar Linux
|
||||||
|
* Update etcd from v3.4.5 to [v3.4.7](https://github.com/etcd-io/etcd/releases/tag/v3.4.7)
|
||||||
|
* Change `kube-proxy` and `calico` or `flannel` to tolerate specific taints ([#682](https://github.com/poseidon/typhoon/pull/682))
|
||||||
|
* Tolerate master and not-ready taints, rather than tolerating all taints
|
||||||
|
* Update flannel from v0.11.0 to v0.12.0 ([#690](https://github.com/poseidon/typhoon/pull/690))
|
||||||
|
* Fix bootstrap when `networking` mode `flannel` (non-default) is chosen ([#689](https://github.com/poseidon/typhoon/pull/689))
|
||||||
|
* Regressed in v1.18.0 changes for Calico ([#675](https://github.com/poseidon/typhoon/pull/675))
|
||||||
|
* Rename Container Linux `controller_clc_snippets` to `controller_snippets` for consistency ([#688](https://github.com/poseidon/typhoon/pull/688))
|
||||||
|
* Rename Container Linux `worker_clc_snippets` to `worker_snippets` for consistency
|
||||||
|
* Rename Container Linux `clc_snippets` (bare-metal) to `snippets` for consistency
|
||||||
|
* Drop support for [gitRepo](https://kubernetes.io/docs/concepts/storage/volumes/#gitrepo) volumes ([kubelet#3](https://github.com/poseidon/kubelet/pull/3))
|
||||||
|
|
||||||
|
#### Azure
|
||||||
|
|
||||||
|
* Fix Azure worker UDP outbound connections ([#691](https://github.com/poseidon/typhoon/pull/691))
|
||||||
|
* Fix Azure worker clock sync timeouts
|
||||||
|
|
||||||
|
#### DigitalOcean
|
||||||
|
|
||||||
|
* Add support for Fedora CoreOS ([#699](https://github.com/poseidon/typhoon/pull/699))
|
||||||
|
|
||||||
|
#### Addons
|
||||||
|
|
||||||
|
* Refresh Prometheus rules/alerts and Grafana dashboards ([#692](https://github.com/poseidon/typhoon/pull/692))
|
||||||
|
* Update Grafana from v6.7.1 to v6.7.2
|
||||||
|
|
||||||
|
## v1.18.0
|
||||||
|
|
||||||
|
* Kubernetes [v1.18.0](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#v1180)
|
||||||
|
* Update etcd from v3.4.4 to [v3.4.5](https://github.com/etcd-io/etcd/releases/tag/v3.4.5)
|
||||||
|
* Switch from upstream hyperkube image to individual images ([#669](https://github.com/poseidon/typhoon/pull/669))
|
||||||
|
* Use upstream k8s.gcr.io `kube-apiserver`, `kube-controller-manager`, `kube-scheduler`, and `kube-proxy` container images
|
||||||
|
* Use [poseidon/kubelet](https://github.com/poseidon/kubelet) to package the upstream Kubelet binary and dependencies as a container image (checksummed, automated build)
|
||||||
|
* Add [quay.io/poseidon/kubelet](https://quay.io/repository/poseidon/kubelet) as a Typhoon distributed artifact in the security policy
|
||||||
|
* Update base images from debian 9 to debian 10
|
||||||
|
* Background: Kubernetes will [stop releasing](https://github.com/kubernetes/kubernetes/pull/88676) the hyperkube container image and provide the Kubelet as a binary for packaging
|
||||||
|
* Choose Fedora CoreOS or Flatcar Linux (**action recommended**)
|
||||||
|
* Use a `fedora-coreos` module for Fedora CoreOS
|
||||||
|
* Use a `container-linux` module with OS set for Flatcar Linux (varies, see docs)
|
||||||
|
* CoreOS Container Linux [won't receive updates](https://coreos.com/os/eol/) after May 2020
|
||||||
|
* Add support for Fedora CoreOS snippets (`terraform-provider-ct` v0.5+) ([#686](https://github.com/poseidon/typhoon/pull/686))
|
||||||
|
* Recommend updating `terraform-provider-ct` plugin from v0.4.0 to [v0.5.0](https://github.com/poseidon/terraform-provider-ct/releases/tag/v0.5.0)
|
||||||
|
* Set Fedora CoreOS log driver back to the default `journald` ([#681](https://github.com/poseidon/typhoon/pull/681))
|
||||||
|
* Deprecate `asset_dir` variable and remove docs ([#678](https://github.com/poseidon/typhoon/pull/678))
|
||||||
|
* Deprecate support for [gitRepo](https://kubernetes.io/docs/concepts/storage/volumes/#gitrepo) volumes. A future release will drop support.
|
||||||
|
|
||||||
|
#### AWS
|
||||||
|
|
||||||
|
* Fix Fedora CoreOS AMI to filter for stable images ([#685](https://github.com/poseidon/typhoon/pull/685))
|
||||||
|
* Latest Fedora CoreOS `testing` or `bodhi-update` images could be chosen depending on the region
|
||||||
|
|
||||||
|
#### Bare-Metal
|
||||||
|
|
||||||
|
* Update Fedora CoreOS default `os_stream` from testing to stable
|
||||||
|
|
||||||
|
#### Google Cloud
|
||||||
|
|
||||||
|
* Known: Use of stale Fedora CoreOS image may require terraform re-apply during bootstrap ([#687](https://github.com/poseidon/typhoon/pull/687))
|
||||||
|
|
||||||
|
#### DigitalOcean
|
||||||
|
|
||||||
|
* Rename `image` variable to `os_image` for consistency ([#677](https://github.com/poseidon/typhoon/pull/677)) (action required)
|
||||||
|
|
||||||
|
#### Addons
|
||||||
|
|
||||||
|
* Update Prometheus from v2.16.0 to [v2.17.1](https://github.com/prometheus/prometheus/releases/tag/v2.17.1)
|
||||||
|
* Update Grafana from v6.6.2 to [v6.7.1](https://github.com/grafana/grafana/releases/tag/v6.7.1)
|
||||||
|
|
||||||
|
## v1.17.4
|
||||||
|
|
||||||
|
* Kubernetes [v1.17.4](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.17.md#v1174)
|
||||||
|
* Update etcd from v3.4.3 to [v3.4.4](https://github.com/etcd-io/etcd/releases/tag/v3.4.4)
|
||||||
|
* On Container Linux, fetch using the docker transport format ([#659](https://github.com/poseidon/typhoon/pull/659))
|
||||||
|
* Update CoreDNS from v1.6.6 to v1.6.7 ([#648](https://github.com/poseidon/typhoon/pull/648))
|
||||||
|
* Update Calico from v3.12.0 to [v3.13.1](https://docs.projectcalico.org/v3.13/release-notes/)
|
||||||
|
|
||||||
|
#### AWS
|
||||||
|
|
||||||
|
* Promote Fedora CoreOS to stable ([#668](https://github.com/poseidon/typhoon/pull/668))
|
||||||
|
* Allow VPC route table extension via reference ([#654](https://github.com/poseidon/typhoon/pull/654))
|
||||||
|
* Fix `worker_node_labels` on Fedora CoreOS ([#651](https://github.com/poseidon/typhoon/pull/651))
|
||||||
|
* Fix automatic worker node delete on shutdown on Fedora CoreOS ([#657](https://github.com/poseidon/typhoon/pull/657))
|
||||||
|
|
||||||
|
#### Azure
|
||||||
|
|
||||||
|
* Upgrade to `terraform-provider-azurerm` [v2.0+](https://www.terraform.io/docs/providers/azurerm/guides/2.0-upgrade-guide.html) (action required)
|
||||||
|
* Change `worker_priority` from `Low` to `Spot` if used (action required)
|
||||||
|
* Switch to Azure's new Linux VM and Linux VM Scale Set resources
|
||||||
|
* Set controller's Azure disk caching to None
|
||||||
|
* Associate subnets (in addition to NICs) with security groups (aesthetic)
|
||||||
|
* Add support for Flatcar Container Linux ([#664](https://github.com/poseidon/typhoon/pull/664))
|
||||||
|
* Requires accepting Flatcar Linux Azure Marketplace terms
|
||||||
|
|
||||||
|
#### Bare-Metal
|
||||||
|
|
||||||
|
* Add `worker_node_labels` map variable for per-worker node labels ([#663](https://github.com/poseidon/typhoon/pull/663))
|
||||||
|
* Add `worker_node_taints` map variable for per-worker node taints ([#663](https://github.com/poseidon/typhoon/pull/663))
|
||||||
|
|
||||||
|
#### DigitalOcean
|
||||||
|
|
||||||
|
* Add support for Flatcar Container Linux ([#644](https://github.com/poseidon/typhoon/pull/644))
|
||||||
|
|
||||||
|
#### Google Cloud
|
||||||
|
|
||||||
|
* Promote Fedora CoreOS to beta ([#668](https://github.com/poseidon/typhoon/pull/668))
|
||||||
|
* Fix `worker_node_labels` on Fedora CoreOS ([#651](https://github.com/poseidon/typhoon/pull/651))
|
||||||
|
* Fix automatic worker node delete on shutdown on Fedora CoreOS ([#657](https://github.com/poseidon/typhoon/pull/657))
|
||||||
|
|
||||||
|
#### Addons
|
||||||
|
|
||||||
|
* Update nginx-ingress from v0.28.0 to [v0.30.0](https://github.com/kubernetes/ingress-nginx/releases/tag/nginx-0.30.0)
|
||||||
|
* Update Prometheus from v2.15.2 to [v2.16.0](https://github.com/prometheus/prometheus/releases/tag/v2.16.0)
|
||||||
|
* Refresh Prometheus rules and alerts
|
||||||
|
* Add a BlackboxProbeFailure alert
|
||||||
|
* Update kube-state-metrics from v1.9.4 to v1.9.5
|
||||||
|
* Update node-exporter from v0.18.1 to [v1.0.0-rc.0](https://github.com/prometheus/node_exporter/releases/tag/v1.0.0-rc.0)
|
||||||
|
* Update Grafana from v6.6.1 to v6.6.2
|
||||||
|
* Refresh Grafana dashboards
|
||||||
|
* Remove Container Linux Update Operator (CLUO) addon example ([#667](https://github.com/poseidon/typhoon/pull/667))
|
||||||
|
* CLUO hasn't been in active use in our clusters and won't be relevant
|
||||||
|
beyond Container Linux. Requires patches for use on Kubernetes v1.16+
|
||||||
|
|
||||||
|
## v1.17.3
|
||||||
|
|
||||||
|
* Kubernetes [v1.17.3](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.17.md#v1173)
|
||||||
|
* Update Calico from v3.11.2 to v3.12.0
|
||||||
|
* Allow Fedora CoreOS clusters to pass CNCF conformance suite
|
||||||
|
* Set Docker log driver to `json-file` as a workaround
|
||||||
|
* Try Fedora CoreOS or Flatcar Linux alongside CoreOS [Container Linux](https://coreos.com/os/eol/) clusters (recommended)
|
||||||
|
|
||||||
|
#### AWS
|
||||||
|
|
||||||
|
* Promote Fedora CoreOS to beta ([#645](https://github.com/poseidon/typhoon/pull/645))
|
||||||
|
|
||||||
|
#### Bare-Metal
|
||||||
|
|
||||||
|
* Promote Fedora CoreOS to beta ([#645](https://github.com/poseidon/typhoon/pull/645))
|
||||||
|
* Add Fedora CoreOS kernel arguments initrd and console ([#640](https://github.com/poseidon/typhoon/pull/640))
|
||||||
|
|
||||||
|
#### Google Cloud
|
||||||
|
|
||||||
|
* Add Terraform module for Fedora CoreOS ([#632](https://github.com/poseidon/typhoon/pull/632))
|
||||||
|
* Add support for Flatcar Container Linux ([#639](https://github.com/poseidon/typhoon/pull/639))
|
||||||
|
|
||||||
|
#### Addons
|
||||||
|
|
||||||
|
* Update nginx-ingress from v0.27.1 to v0.28.0
|
||||||
|
* Update kube-state-metrics from v1.9.3 to v1.9.4
|
||||||
|
* Update Grafana from v6.5.3 to v6.6.1
|
||||||
|
|
||||||
|
## v1.17.2
|
||||||
|
|
||||||
|
* Kubernetes [v1.17.2](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.17.md#v1172)
|
||||||
|
|
||||||
|
#### AWS
|
||||||
|
|
||||||
|
* Promote Fedora CoreOS from preview to alpha
|
||||||
|
|
||||||
|
#### Bare-Metal
|
||||||
|
|
||||||
|
* Promote Fedora CoreOS from preview to alpha
|
||||||
|
* Update Fedora CoreOS images location
|
||||||
|
* Use Fedora CoreOS production [download](https://getfedora.org/coreos/download/) streams
|
||||||
|
* Use live PXE kernel and initramfs images
|
||||||
|
|
||||||
|
#### Addons
|
||||||
|
|
||||||
|
* Update nginx-ingress from v0.26.1 to [v0.27.1](https://github.com/kubernetes/ingress-nginx/releases/tag/nginx-0.27.1) ([#625](https://github.com/poseidon/typhoon/pull/625))
|
||||||
|
* Change runAsUser from 33 to 101 for alpine-based image
|
||||||
|
* Update kube-state-metrics from v1.9.2 to v1.9.3
|
||||||
|
|
||||||
|
## v1.17.1
|
||||||
|
|
||||||
* Kubernetes [v1.17.1](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.17.md#v1171)
|
* Kubernetes [v1.17.1](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.17.md#v1171)
|
||||||
* Update CoreDNS from v1.6.5 to [v1.6.6](https://coredns.io/2019/12/11/coredns-1.6.6-release/) ([#602](https://github.com/poseidon/typhoon/pull/602))
|
* Update CoreDNS from v1.6.5 to [v1.6.6](https://coredns.io/2019/12/11/coredns-1.6.6-release/) ([#602](https://github.com/poseidon/typhoon/pull/602))
|
||||||
* Update Calico from v3.10.2 to v3.11.2 ([#604](https://github.com/poseidon/typhoon/pull/604))
|
* Update Calico from v3.10.2 to v3.11.2 ([#604](https://github.com/poseidon/typhoon/pull/604))
|
||||||
@ -12,6 +726,10 @@ Notable changes between versions.
|
|||||||
* Enable kube-proxy metrics and allow Prometheus scrapes
|
* Enable kube-proxy metrics and allow Prometheus scrapes
|
||||||
* Allow TCP/10249 traffic with worker node sources
|
* Allow TCP/10249 traffic with worker node sources
|
||||||
|
|
||||||
|
#### AWS
|
||||||
|
|
||||||
|
* Update Fedora CoreOS AMI filter for fedora-coreos-31 ([#620](https://github.com/poseidon/typhoon/pull/620))
|
||||||
|
|
||||||
#### Google
|
#### Google
|
||||||
|
|
||||||
* Allow `terraform-provider-google` v3.0+ ([#617](https://github.com/poseidon/typhoon/pull/617))
|
* Allow `terraform-provider-google` v3.0+ ([#617](https://github.com/poseidon/typhoon/pull/617))
|
||||||
|
|||||||
65
README.md
65
README.md
@ -11,36 +11,46 @@ Typhoon distributes upstream Kubernetes, architectural conventions, and cluster
|
|||||||
|
|
||||||
## Features <a href="https://www.cncf.io/certification/software-conformance/"><img align="right" src="https://storage.googleapis.com/poseidon/certified-kubernetes.png"></a>
|
## Features <a href="https://www.cncf.io/certification/software-conformance/"><img align="right" src="https://storage.googleapis.com/poseidon/certified-kubernetes.png"></a>
|
||||||
|
|
||||||
* Kubernetes v1.17.1 (upstream)
|
* Kubernetes v1.21.1 (upstream)
|
||||||
* Single or multi-master, [Calico](https://www.projectcalico.org/) or [flannel](https://github.com/coreos/flannel) networking
|
* Single or multi-master, [Calico](https://www.projectcalico.org/) or [Cilium](https://github.com/cilium/cilium) or [flannel](https://github.com/coreos/flannel) networking
|
||||||
* On-cluster etcd with TLS, [RBAC](https://kubernetes.io/docs/admin/authorization/rbac/)-enabled, [network policy](https://kubernetes.io/docs/concepts/services-networking/network-policies/)
|
* On-cluster etcd with TLS, [RBAC](https://kubernetes.io/docs/admin/authorization/rbac/)-enabled, [network policy](https://kubernetes.io/docs/concepts/services-networking/network-policies/), SELinux enforcing
|
||||||
* Advanced features like [worker pools](https://typhoon.psdn.io/advanced/worker-pools/), [preemptible](https://typhoon.psdn.io/cl/google-cloud/#preemption) workers, and [snippets](https://typhoon.psdn.io/advanced/customization/#container-linux) customization
|
* Advanced features like [worker pools](https://typhoon.psdn.io/advanced/worker-pools/), [preemptible](https://typhoon.psdn.io/flatcar-linux/google-cloud/#preemption) workers, and [snippets](https://typhoon.psdn.io/advanced/customization/#hosts) customization
|
||||||
* Ready for Ingress, Prometheus, Grafana, CSI, or other [addons](https://typhoon.psdn.io/addons/overview/)
|
* Ready for Ingress, Prometheus, Grafana, CSI, or other [addons](https://typhoon.psdn.io/addons/overview/)
|
||||||
|
|
||||||
## Modules
|
## Modules
|
||||||
|
|
||||||
Typhoon provides a Terraform Module for each supported operating system and platform.
|
Typhoon provides a Terraform Module for each supported operating system and platform.
|
||||||
|
|
||||||
| Platform | Operating System | Terraform Module | Status |
|
Typhoon is available for [Fedora CoreOS](https://getfedora.org/coreos/).
|
||||||
|---------------|------------------|------------------|--------|
|
|
||||||
| AWS | Container Linux / Flatcar Linux | [aws/container-linux/kubernetes](aws/container-linux/kubernetes) | stable |
|
|
||||||
| Azure | Container Linux | [azure/container-linux/kubernetes](azure/container-linux/kubernetes) | alpha |
|
|
||||||
| Bare-Metal | Container Linux / Flatcar Linux | [bare-metal/container-linux/kubernetes](bare-metal/container-linux/kubernetes) | stable |
|
|
||||||
| Digital Ocean | Container Linux | [digital-ocean/container-linux/kubernetes](digital-ocean/container-linux/kubernetes) | beta |
|
|
||||||
| Google Cloud | Container Linux | [google-cloud/container-linux/kubernetes](google-cloud/container-linux/kubernetes) | stable |
|
|
||||||
|
|
||||||
A preview of Typhoon for [Fedora CoreOS](https://getfedora.org/coreos/) is available for testing.
|
|
||||||
|
|
||||||
| Platform | Operating System | Terraform Module | Status |
|
| Platform | Operating System | Terraform Module | Status |
|
||||||
|---------------|------------------|------------------|--------|
|
|---------------|------------------|------------------|--------|
|
||||||
| AWS | Fedora CoreOS | [aws/fedora-coreos/kubernetes](aws/fedora-coreos/kubernetes) | preview |
|
| AWS | Fedora CoreOS | [aws/fedora-coreos/kubernetes](aws/fedora-coreos/kubernetes) | stable |
|
||||||
| Bare-Metal | Fedora CoreOS | [bare-metal/fedora-coreos/kubernetes](bare-metal/fedora-coreos/kubernetes) | preview |
|
| Azure | Fedora CoreOS | [azure/fedora-coreos/kubernetes](azure/fedora-coreos/kubernetes) | alpha |
|
||||||
|
| Bare-Metal | Fedora CoreOS | [bare-metal/fedora-coreos/kubernetes](bare-metal/fedora-coreos/kubernetes) | stable |
|
||||||
|
| DigitalOcean | Fedora CoreOS | [digital-ocean/fedora-coreos/kubernetes](digital-ocean/fedora-coreos/kubernetes) | beta |
|
||||||
|
| Google Cloud | Fedora CoreOS | [google-cloud/fedora-coreos/kubernetes](google-cloud/fedora-coreos/kubernetes) | stable |
|
||||||
|
|
||||||
|
| Platform | Operating System | Terraform Module | Status |
|
||||||
|
|---------------|------------------|------------------|--------|
|
||||||
|
| AWS | Fedora CoreOS (ARM64) | [aws/fedora-coreos/kubernetes](aws/fedora-coreos/kubernetes) | alpha |
|
||||||
|
|
||||||
|
Typhoon is available for [Flatcar Linux](https://www.flatcar-linux.org/releases/).
|
||||||
|
|
||||||
|
| Platform | Operating System | Terraform Module | Status |
|
||||||
|
|---------------|------------------|------------------|--------|
|
||||||
|
| AWS | Flatcar Linux | [aws/flatcar-linux/kubernetes](aws/flatcar-linux/kubernetes) | stable |
|
||||||
|
| Azure | Flatcar Linux | [azure/flatcar-linux/kubernetes](azure/flatcar-linux/kubernetes) | alpha |
|
||||||
|
| Bare-Metal | Flatcar Linux | [bare-metal/flatcar-linux/kubernetes](bare-metal/flatcar-linux/kubernetes) | stable |
|
||||||
|
| DigitalOcean | Flatcar Linux | [digital-ocean/flatcar-linux/kubernetes](digital-ocean/flatcar-linux/kubernetes) | beta |
|
||||||
|
| Google Cloud | Flatcar Linux | [google-cloud/flatcar-linux/kubernetes](google-cloud/flatcar-linux/kubernetes) | beta |
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
* [Docs](https://typhoon.psdn.io)
|
* [Docs](https://typhoon.psdn.io)
|
||||||
* Architecture [concepts](https://typhoon.psdn.io/architecture/concepts/) and [operating systems](https://typhoon.psdn.io/architecture/operating-systems/)
|
* Architecture [concepts](https://typhoon.psdn.io/architecture/concepts/) and [operating systems](https://typhoon.psdn.io/architecture/operating-systems/)
|
||||||
* Tutorials for [AWS](docs/cl/aws.md), [Azure](docs/cl/azure.md), [Bare-Metal](docs/cl/bare-metal.md), [Digital Ocean](docs/cl/digital-ocean.md), and [Google-Cloud](docs/cl/google-cloud.md)
|
* Fedora CoreOS tutorials for [AWS](docs/fedora-coreos/aws.md), [Azure](docs/fedora-coreos/azure.md), [Bare-Metal](docs/fedora-coreos/bare-metal.md), [DigitalOcean](docs/fedora-coreos/digitalocean.md), and [Google Cloud](docs/fedora-coreos/google-cloud.md)
|
||||||
|
* Flatcar Linux tutorials for [AWS](docs/flatcar-linux/aws.md), [Azure](docs/flatcar-linux/azure.md), [Bare-Metal](docs/flatcar-linux/bare-metal.md), [DigitalOcean](docs/flatcar-linux/digitalocean.md), and [Google Cloud](docs/flatcar-linux/google-cloud.md)
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@ -48,7 +58,7 @@ Define a Kubernetes cluster by using the Terraform module for your chosen platfo
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "yavin" {
|
module "yavin" {
|
||||||
source = "git::https://github.com/poseidon/typhoon//google-cloud/container-linux/kubernetes?ref=v1.17.1"
|
source = "git::https://github.com/poseidon/typhoon//google-cloud/fedora-coreos/kubernetes?ref=v1.21.1"
|
||||||
|
|
||||||
# Google Cloud
|
# Google Cloud
|
||||||
cluster_name = "yavin"
|
cluster_name = "yavin"
|
||||||
@ -87,9 +97,9 @@ In 4-8 minutes (varies by platform), the cluster will be ready. This Google Clou
|
|||||||
$ export KUBECONFIG=/home/user/.kube/configs/yavin-config
|
$ export KUBECONFIG=/home/user/.kube/configs/yavin-config
|
||||||
$ kubectl get nodes
|
$ kubectl get nodes
|
||||||
NAME ROLES STATUS AGE VERSION
|
NAME ROLES STATUS AGE VERSION
|
||||||
yavin-controller-0.c.example-com.internal <none> Ready 6m v1.17.1
|
yavin-controller-0.c.example-com.internal <none> Ready 6m v1.21.1
|
||||||
yavin-worker-jrbf.c.example-com.internal <none> Ready 5m v1.17.1
|
yavin-worker-jrbf.c.example-com.internal <none> Ready 5m v1.21.1
|
||||||
yavin-worker-mzdm.c.example-com.internal <none> Ready 5m v1.17.1
|
yavin-worker-mzdm.c.example-com.internal <none> Ready 5m v1.21.1
|
||||||
```
|
```
|
||||||
|
|
||||||
List the pods.
|
List the pods.
|
||||||
@ -120,7 +130,7 @@ Typhoon is strict about minimalism, maturity, and scope. These are not in scope:
|
|||||||
|
|
||||||
## Help
|
## Help
|
||||||
|
|
||||||
Ask questions on the IRC #typhoon channel on [freenode.net](http://freenode.net/).
|
Schedule a meeting via [Github Sponsors](https://github.com/sponsors/poseidon?frequency=one-time) to discuss your use case. You can also ask questions on the IRC #typhoon channel on [freenode.net](http://freenode.net/) (unmonitored).
|
||||||
|
|
||||||
## Motivation
|
## Motivation
|
||||||
|
|
||||||
@ -130,12 +140,17 @@ Typhoon addresses real world needs, which you may share. It is honest about limi
|
|||||||
|
|
||||||
## Social Contract
|
## Social Contract
|
||||||
|
|
||||||
Typhoon is not a product, trial, or free-tier. It is not run by a company, does not offer support or services, and does not accept or make any money. It is not associated with any operating system or platform vendor.
|
Typhoon is not a product, trial, or free-tier. Typhoon does not offer support, services, or charge money. And Typhoon is independent of operating system or platform vendors.
|
||||||
|
|
||||||
Typhoon clusters will contain only [free](https://www.debian.org/intro/free) components. Cluster components will not collect data on users without their permission.
|
Typhoon clusters will contain only [free](https://www.debian.org/intro/free) components. Cluster components will not collect data on users without their permission.
|
||||||
|
|
||||||
## Donations
|
## Sponsors
|
||||||
|
|
||||||
Typhoon does not accept money donations. Instead, we encourage you to donate to one of [these organizations](https://github.com/poseidon/typhoon/wiki/Donations) to show your appreciation.
|
Poseidon's Github [Sponsors](https://github.com/sponsors/poseidon) support the infrastructure and operational costs of providing Typhoon.
|
||||||
|
|
||||||
* [DigitalOcean](https://www.digitalocean.com/) kindly provides credits to support Typhoon test clusters.
|
<a href="https://www.digitalocean.com/">
|
||||||
|
<img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_horizontal_blue.svg" width="201px">
|
||||||
|
</a>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
If you'd like your company here, please contact dghubble at psdn.io.
|
||||||
|
|||||||
@ -1,4 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: reboot-coordinator
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRoleBinding
|
|
||||||
metadata:
|
|
||||||
name: reboot-coordinator
|
|
||||||
roleRef:
|
|
||||||
apiGroup: rbac.authorization.k8s.io
|
|
||||||
kind: ClusterRole
|
|
||||||
name: reboot-coordinator
|
|
||||||
subjects:
|
|
||||||
- kind: ServiceAccount
|
|
||||||
namespace: reboot-coordinator
|
|
||||||
name: default
|
|
||||||
@ -1,45 +0,0 @@
|
|||||||
apiVersion: rbac.authorization.k8s.io/v1
|
|
||||||
kind: ClusterRole
|
|
||||||
metadata:
|
|
||||||
name: reboot-coordinator
|
|
||||||
rules:
|
|
||||||
- apiGroups:
|
|
||||||
- ""
|
|
||||||
resources:
|
|
||||||
- nodes
|
|
||||||
verbs:
|
|
||||||
- get
|
|
||||||
- list
|
|
||||||
- watch
|
|
||||||
- update
|
|
||||||
- apiGroups:
|
|
||||||
- ""
|
|
||||||
resources:
|
|
||||||
- configmaps
|
|
||||||
verbs:
|
|
||||||
- create
|
|
||||||
- get
|
|
||||||
- update
|
|
||||||
- list
|
|
||||||
- watch
|
|
||||||
- apiGroups:
|
|
||||||
- ""
|
|
||||||
resources:
|
|
||||||
- events
|
|
||||||
verbs:
|
|
||||||
- create
|
|
||||||
- watch
|
|
||||||
- apiGroups:
|
|
||||||
- ""
|
|
||||||
resources:
|
|
||||||
- pods
|
|
||||||
verbs:
|
|
||||||
- get
|
|
||||||
- list
|
|
||||||
- delete
|
|
||||||
- apiGroups:
|
|
||||||
- "extensions"
|
|
||||||
resources:
|
|
||||||
- daemonsets
|
|
||||||
verbs:
|
|
||||||
- get
|
|
||||||
@ -1,68 +0,0 @@
|
|||||||
apiVersion: apps/v1
|
|
||||||
kind: DaemonSet
|
|
||||||
metadata:
|
|
||||||
name: container-linux-update-agent
|
|
||||||
namespace: reboot-coordinator
|
|
||||||
spec:
|
|
||||||
updateStrategy:
|
|
||||||
type: RollingUpdate
|
|
||||||
rollingUpdate:
|
|
||||||
maxUnavailable: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
name: container-linux-update-agent
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
name: container-linux-update-agent
|
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
|
|
||||||
spec:
|
|
||||||
tolerations:
|
|
||||||
- key: node-role.kubernetes.io/master
|
|
||||||
operator: Exists
|
|
||||||
effect: NoSchedule
|
|
||||||
containers:
|
|
||||||
- name: update-agent
|
|
||||||
image: quay.io/coreos/container-linux-update-operator:v0.7.0
|
|
||||||
command:
|
|
||||||
- "/bin/update-agent"
|
|
||||||
env:
|
|
||||||
# read by update-agent as the node name to manage reboots for
|
|
||||||
- name: UPDATE_AGENT_NODE
|
|
||||||
valueFrom:
|
|
||||||
fieldRef:
|
|
||||||
fieldPath: spec.nodeName
|
|
||||||
- name: POD_NAMESPACE
|
|
||||||
valueFrom:
|
|
||||||
fieldRef:
|
|
||||||
fieldPath: metadata.namespace
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 10m
|
|
||||||
memory: 20Mi
|
|
||||||
limits:
|
|
||||||
cpu: 20m
|
|
||||||
memory: 40Mi
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /var/run/dbus
|
|
||||||
name: var-run-dbus
|
|
||||||
- mountPath: /etc/coreos
|
|
||||||
name: etc-coreos
|
|
||||||
- mountPath: /usr/share/coreos
|
|
||||||
name: usr-share-coreos
|
|
||||||
- mountPath: /etc/os-release
|
|
||||||
name: etc-os-release
|
|
||||||
volumes:
|
|
||||||
- name: var-run-dbus
|
|
||||||
hostPath:
|
|
||||||
path: /var/run/dbus
|
|
||||||
- name: etc-coreos
|
|
||||||
hostPath:
|
|
||||||
path: /etc/coreos
|
|
||||||
- name: usr-share-coreos
|
|
||||||
hostPath:
|
|
||||||
path: /usr/share/coreos
|
|
||||||
- name: etc-os-release
|
|
||||||
hostPath:
|
|
||||||
path: /etc/os-release
|
|
||||||
@ -1,39 +0,0 @@
|
|||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: container-linux-update-operator
|
|
||||||
namespace: reboot-coordinator
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
name: container-linux-update-operator
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
name: container-linux-update-operator
|
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
|
|
||||||
spec:
|
|
||||||
tolerations:
|
|
||||||
- key: node-role.kubernetes.io/master
|
|
||||||
operator: Exists
|
|
||||||
effect: NoSchedule
|
|
||||||
containers:
|
|
||||||
- name: update-operator
|
|
||||||
image: quay.io/coreos/container-linux-update-operator:v0.7.0
|
|
||||||
command:
|
|
||||||
- "/bin/update-operator"
|
|
||||||
env:
|
|
||||||
- name: POD_NAMESPACE
|
|
||||||
valueFrom:
|
|
||||||
fieldRef:
|
|
||||||
fieldPath: metadata.namespace
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 10m
|
|
||||||
memory: 20Mi
|
|
||||||
limits:
|
|
||||||
cpu: 20m
|
|
||||||
memory: 40Mi
|
|
||||||
|
|
||||||
@ -37,6 +37,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -49,6 +50,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": "true"
|
||||||
},
|
},
|
||||||
@ -72,7 +74,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(rate(coredns_dns_request_count_total{instance=~\"$instance\"}[5m])) by (proto)",
|
"expr": "sum(rate(coredns_dns_requests_total{instance=~\"$instance\"}[5m])) by (proto)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{proto}}",
|
"legendFormat": "{{proto}}",
|
||||||
@ -128,6 +130,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -140,6 +143,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": "true"
|
||||||
},
|
},
|
||||||
@ -163,7 +167,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(rate(coredns_dns_request_type_count_total{instance=~\"$instance\"}[5m])) by (type)",
|
"expr": "sum(rate(coredns_dns_requests_total{instance=~\"$instance\"}[5m])) by (type)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{type}}",
|
"legendFormat": "{{type}}",
|
||||||
@ -219,6 +223,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -231,6 +236,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": "true"
|
||||||
},
|
},
|
||||||
@ -254,7 +260,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(rate(coredns_dns_request_count_total{instance=~\"$instance\"}[5m])) by (zone)",
|
"expr": "sum(rate(coredns_dns_requests_total{instance=~\"$instance\"}[5m])) by (zone)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{zone}}",
|
"legendFormat": "{{zone}}",
|
||||||
@ -323,6 +329,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -335,6 +342,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -428,6 +436,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -440,6 +449,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -463,7 +473,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(rate(coredns_dns_response_rcode_count_total{instance=~\"$instance\"}[5m])) by (rcode)",
|
"expr": "sum(rate(coredns_dns_responses_total{instance=~\"$instance\"}[5m])) by (rcode)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{rcode}}",
|
"legendFormat": "{{rcode}}",
|
||||||
@ -532,6 +542,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -544,6 +555,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -637,6 +649,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -649,6 +662,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -755,6 +769,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -767,6 +782,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -790,7 +806,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(coredns_cache_size{instance=~\"$instance\"}) by (type)",
|
"expr": "sum(coredns_cache_entries{instance=~\"$instance\"}) by (type)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{type}}",
|
"legendFormat": "{{type}}",
|
||||||
@ -846,6 +862,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -858,6 +875,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
|
|||||||
@ -11,7 +11,6 @@ data:
|
|||||||
"editable": true,
|
"editable": true,
|
||||||
"gnetId": null,
|
"gnetId": null,
|
||||||
"hideControls": false,
|
"hideControls": false,
|
||||||
"id": 6,
|
|
||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
@ -343,7 +342,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "etcd_debugging_mvcc_db_total_size_in_bytes{job=\"$cluster\"}",
|
"expr": "etcd_mvcc_db_total_size_in_bytes{job=\"$cluster\"}",
|
||||||
"hide": false,
|
"hide": false,
|
||||||
"interval": "",
|
"interval": "",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
|
|||||||
@ -21,7 +21,7 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"refresh": "",
|
"refresh": "10s",
|
||||||
"rows": [
|
"rows": [
|
||||||
{
|
{
|
||||||
"collapse": false,
|
"collapse": false,
|
||||||
@ -172,7 +172,7 @@ data:
|
|||||||
"tableColumn": "",
|
"tableColumn": "",
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(kubelet_running_pod_count{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"})",
|
"expr": "sum(kubelet_running_pods{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}) OR sum(kubelet_running_pod_count{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"})",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{instance}}",
|
"legendFormat": "{{instance}}",
|
||||||
@ -256,7 +256,7 @@ data:
|
|||||||
"tableColumn": "",
|
"tableColumn": "",
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(kubelet_running_container_count{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"})",
|
"expr": "sum(kubelet_running_containers{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"}) OR sum(kubelet_running_container_count{cluster=\"$cluster\", job=\"kubelet\", instance=~\"$instance\"})",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{instance}}",
|
"legendFormat": "{{instance}}",
|
||||||
@ -553,20 +553,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 8,
|
"id": 8,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -644,20 +646,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 9,
|
"id": 9,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -748,20 +752,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 10,
|
"id": 10,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -852,20 +858,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 11,
|
"id": 11,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -950,20 +958,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 12,
|
"id": 12,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -1061,22 +1071,24 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 13,
|
"id": 13,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"hideEmpty": "true",
|
"hideEmpty": true,
|
||||||
"hideZero": "true",
|
"hideZero": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -1154,22 +1166,24 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 14,
|
"id": 14,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"hideEmpty": "true",
|
"hideEmpty": true,
|
||||||
"hideZero": "true",
|
"hideZero": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -1260,22 +1274,24 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 15,
|
"id": 15,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"hideEmpty": "true",
|
"hideEmpty": true,
|
||||||
"hideZero": "true",
|
"hideZero": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -1366,20 +1382,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 16,
|
"id": 16,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -1457,20 +1475,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 17,
|
"id": 17,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -1562,20 +1582,22 @@ data:
|
|||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"description": "Pod lifecycle event generator",
|
"description": "Pod lifecycle event generator",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 18,
|
"id": 18,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -1653,20 +1675,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 19,
|
"id": 19,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -1757,20 +1781,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 20,
|
"id": 20,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -1861,6 +1887,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -1873,6 +1900,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -1986,20 +2014,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 22,
|
"id": 22,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -2021,7 +2051,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_latency_seconds_bucket{cluster=\"$cluster\",job=\"kubelet\", instance=~\"$instance\"}[5m])) by (instance, verb, url, le))",
|
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{cluster=\"$cluster\",job=\"kubelet\", instance=~\"$instance\"}[5m])) by (instance, verb, url, le))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{instance}} {{verb}} {{url}}",
|
"legendFormat": "{{instance}} {{verb}} {{url}}",
|
||||||
@ -2090,6 +2120,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -2102,6 +2133,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -2181,6 +2213,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -2193,6 +2226,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -2272,6 +2306,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -2284,6 +2319,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -2373,8 +2409,8 @@ data:
|
|||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "Prometheus",
|
"text": "default",
|
||||||
"value": "Prometheus"
|
"value": "default"
|
||||||
},
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -2427,7 +2463,7 @@ data:
|
|||||||
"options": [
|
"options": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"query": "label_values(kubelet_runtime_operations{cluster=\"$cluster\", job=\"kubelet\"}, instance)",
|
"query": "label_values(kubelet_runtime_operations_total{cluster=\"$cluster\", job=\"kubelet\"}, instance)",
|
||||||
"refresh": 2,
|
"refresh": 2,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"sort": 1,
|
"sort": 1,
|
||||||
@ -2470,7 +2506,7 @@ data:
|
|||||||
"30d"
|
"30d"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "",
|
"timezone": "UTC",
|
||||||
"title": "Kubernetes / Kubelet",
|
"title": "Kubernetes / Kubelet",
|
||||||
"uid": "3138fa155d5915769fbded898ac09fd9",
|
"uid": "3138fa155d5915769fbded898ac09fd9",
|
||||||
"version": 0
|
"version": 0
|
||||||
@ -2496,7 +2532,7 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"refresh": "",
|
"refresh": "10s",
|
||||||
"rows": [
|
"rows": [
|
||||||
{
|
{
|
||||||
"collapse": false,
|
"collapse": false,
|
||||||
@ -2595,6 +2631,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -2607,6 +2644,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -2686,20 +2724,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -2790,6 +2830,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -2802,6 +2843,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -2881,20 +2923,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 6,
|
"id": 6,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -2985,6 +3029,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -2997,6 +3042,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -3097,6 +3143,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -3109,6 +3156,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -3132,7 +3180,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_latency_seconds_bucket{job=\"kube-proxy\",instance=~\"$instance\",verb=\"POST\"}[5m])) by (verb, url, le))",
|
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{job=\"kube-proxy\",instance=~\"$instance\",verb=\"POST\"}[5m])) by (verb, url, le))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{verb}} {{url}}",
|
"legendFormat": "{{verb}} {{url}}",
|
||||||
@ -3201,20 +3249,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 9,
|
"id": 9,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -3236,7 +3286,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_latency_seconds_bucket{job=\"kube-proxy\", instance=~\"$instance\", verb=\"GET\"}[5m])) by (verb, url, le))",
|
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{job=\"kube-proxy\", instance=~\"$instance\", verb=\"GET\"}[5m])) by (verb, url, le))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{verb}} {{url}}",
|
"legendFormat": "{{verb}} {{url}}",
|
||||||
@ -3305,6 +3355,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -3317,6 +3368,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -3396,6 +3448,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -3408,6 +3461,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -3487,6 +3541,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -3499,6 +3554,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -3588,8 +3644,8 @@ data:
|
|||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "Prometheus",
|
"text": "default",
|
||||||
"value": "Prometheus"
|
"value": "default"
|
||||||
},
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -3659,7 +3715,7 @@ data:
|
|||||||
"30d"
|
"30d"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "",
|
"timezone": "UTC",
|
||||||
"title": "Kubernetes / Proxy",
|
"title": "Kubernetes / Proxy",
|
||||||
"uid": "632e265de029684c40b21cb76bca4f94",
|
"uid": "632e265de029684c40b21cb76bca4f94",
|
||||||
"version": 0
|
"version": 0
|
||||||
|
|||||||
@ -31,6 +31,7 @@ data:
|
|||||||
"fill": 1,
|
"fill": 1,
|
||||||
"format": "percentunit",
|
"format": "percentunit",
|
||||||
"id": 1,
|
"id": 1,
|
||||||
|
"interval": "1m",
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -59,7 +60,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "1 - avg(rate(node_cpu_seconds_total{mode=\"idle\", cluster=\"$cluster\"}[1m]))",
|
"expr": "1 - avg(rate(node_cpu_seconds_total{mode=\"idle\", cluster=\"$cluster\"}[$__rate_interval]))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -686,6 +687,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 0,
|
"decimals": 0,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down to pods",
|
"linkTooltip": "Drill down to pods",
|
||||||
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
|
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -704,6 +706,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 0,
|
"decimals": 0,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down to workloads",
|
"linkTooltip": "Drill down to workloads",
|
||||||
"linkUrl": "./d/a87fb0d919ec0ea5f6543124e16c42a5/k8s-resources-workloads-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
|
"linkUrl": "./d/a87fb0d919ec0ea5f6543124e16c42a5/k8s-resources-workloads-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -722,6 +725,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -740,6 +744,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -758,6 +763,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -776,6 +782,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #F",
|
"pattern": "Value #F",
|
||||||
@ -794,6 +801,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #G",
|
"pattern": "Value #G",
|
||||||
@ -812,6 +820,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down to pods",
|
"linkTooltip": "Drill down to pods",
|
||||||
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
|
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
|
||||||
"pattern": "namespace",
|
"pattern": "namespace",
|
||||||
@ -839,7 +848,7 @@ data:
|
|||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "count(mixin_pod_workload{cluster=\"$cluster\"}) by (namespace)",
|
"expr": "sum(kube_pod_owner{cluster=\"$cluster\"}) by (namespace)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -848,7 +857,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "count(avg(mixin_pod_workload{cluster=\"$cluster\"}) by (workload, namespace)) by (namespace)",
|
"expr": "count(avg(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\"}) by (workload, namespace)) by (namespace)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -1105,6 +1114,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 0,
|
"decimals": 0,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down to pods",
|
"linkTooltip": "Drill down to pods",
|
||||||
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
|
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -1123,6 +1133,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 0,
|
"decimals": 0,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down to workloads",
|
"linkTooltip": "Drill down to workloads",
|
||||||
"linkUrl": "./d/a87fb0d919ec0ea5f6543124e16c42a5/k8s-resources-workloads-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
|
"linkUrl": "./d/a87fb0d919ec0ea5f6543124e16c42a5/k8s-resources-workloads-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell_1",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -1141,6 +1152,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -1159,6 +1171,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -1177,6 +1190,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -1195,6 +1209,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #F",
|
"pattern": "Value #F",
|
||||||
@ -1213,6 +1228,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #G",
|
"pattern": "Value #G",
|
||||||
@ -1231,6 +1247,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down to pods",
|
"linkTooltip": "Drill down to pods",
|
||||||
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
|
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
|
||||||
"pattern": "namespace",
|
"pattern": "namespace",
|
||||||
@ -1258,7 +1275,7 @@ data:
|
|||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "count(mixin_pod_workload{cluster=\"$cluster\"}) by (namespace)",
|
"expr": "sum(kube_pod_owner{cluster=\"$cluster\"}) by (namespace)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -1267,7 +1284,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "count(avg(mixin_pod_workload{cluster=\"$cluster\"}) by (workload, namespace)) by (namespace)",
|
"expr": "count(avg(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\"}) by (workload, namespace)) by (namespace)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -1384,6 +1401,7 @@ data:
|
|||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 11,
|
"id": 11,
|
||||||
|
"interval": "1m",
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -1426,6 +1444,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -1444,6 +1463,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -1462,6 +1482,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -1480,6 +1501,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -1498,6 +1520,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -1516,6 +1539,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #F",
|
"pattern": "Value #F",
|
||||||
@ -1534,6 +1558,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down to pods",
|
"linkTooltip": "Drill down to pods",
|
||||||
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
|
"linkUrl": "./d/85a562078cdf77779eaa1add43ccec1e/k8s-resources-namespace?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$__cell",
|
||||||
"pattern": "namespace",
|
"pattern": "namespace",
|
||||||
@ -1561,7 +1586,7 @@ data:
|
|||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$interval])) by (namespace)",
|
"expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -1570,7 +1595,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$interval])) by (namespace)",
|
"expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -1579,7 +1604,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\".+\"}[$interval])) by (namespace)",
|
"expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -1588,7 +1613,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\".+\"}[$interval])) by (namespace)",
|
"expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -1597,7 +1622,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\".+\"}[$interval])) by (namespace)",
|
"expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -1606,7 +1631,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\".+\"}[$interval])) by (namespace)",
|
"expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -1706,7 +1731,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$interval])) by (namespace)",
|
"expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{namespace}}",
|
"legendFormat": "{{namespace}}",
|
||||||
@ -1804,7 +1829,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$interval])) by (namespace)",
|
"expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{namespace}}",
|
"legendFormat": "{{namespace}}",
|
||||||
@ -1902,7 +1927,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$interval])) by (namespace)",
|
"expr": "avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{namespace}}",
|
"legendFormat": "{{namespace}}",
|
||||||
@ -2000,7 +2025,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$interval])) by (namespace)",
|
"expr": "avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{namespace}}",
|
"legendFormat": "{{namespace}}",
|
||||||
@ -2098,7 +2123,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\".+\"}[$interval])) by (namespace)",
|
"expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{namespace}}",
|
"legendFormat": "{{namespace}}",
|
||||||
@ -2196,7 +2221,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\".+\"}[$interval])) by (namespace)",
|
"expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{namespace}}",
|
"legendFormat": "{{namespace}}",
|
||||||
@ -2294,7 +2319,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\".+\"}[$interval])) by (namespace)",
|
"expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{namespace}}",
|
"legendFormat": "{{namespace}}",
|
||||||
@ -2392,7 +2417,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\".+\"}[$interval])) by (namespace)",
|
"expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\".+\"}[$__rate_interval])) by (namespace)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{namespace}}",
|
"legendFormat": "{{namespace}}",
|
||||||
@ -2458,8 +2483,8 @@ data:
|
|||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "Prometheus",
|
"text": "default",
|
||||||
"value": "Prometheus"
|
"value": "default"
|
||||||
},
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -2475,63 +2500,28 @@ data:
|
|||||||
{
|
{
|
||||||
"allValue": null,
|
"allValue": null,
|
||||||
"current": {
|
"current": {
|
||||||
"text": "prod",
|
"text": "",
|
||||||
"value": "prod"
|
"value": ""
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"hide": 2,
|
"hide": 2,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
"label": "cluster",
|
"label": null,
|
||||||
"multi": false,
|
"multi": false,
|
||||||
"name": "cluster",
|
"name": "cluster",
|
||||||
"options": [
|
"options": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"query": "label_values(node_cpu_seconds_total, cluster)",
|
"query": "label_values(node_cpu_seconds_total, cluster)",
|
||||||
"refresh": 1,
|
|
||||||
"regex": "",
|
|
||||||
"sort": 2,
|
|
||||||
"tagValuesQuery": "",
|
|
||||||
"tags": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tagsQuery": "",
|
|
||||||
"type": "query",
|
|
||||||
"useTags": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allValue": null,
|
|
||||||
"auto": false,
|
|
||||||
"auto_count": 30,
|
|
||||||
"auto_min": "10s",
|
|
||||||
"current": {
|
|
||||||
"text": "5m",
|
|
||||||
"value": "5m"
|
|
||||||
},
|
|
||||||
"datasource": "prometheus",
|
|
||||||
"hide": 2,
|
|
||||||
"includeAll": false,
|
|
||||||
"label": null,
|
|
||||||
"multi": false,
|
|
||||||
"name": "interval",
|
|
||||||
"options": [
|
|
||||||
{
|
|
||||||
"selected": true,
|
|
||||||
"text": "4h",
|
|
||||||
"value": "4h"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"query": "4h",
|
|
||||||
"refresh": 2,
|
"refresh": 2,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"skipUrlSync": false,
|
|
||||||
"sort": 1,
|
"sort": 1,
|
||||||
"tagValuesQuery": "",
|
"tagValuesQuery": "",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"tagsQuery": "",
|
"tagsQuery": "",
|
||||||
"type": "interval",
|
"type": "query",
|
||||||
"useTags": false
|
"useTags": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -2565,7 +2555,7 @@ data:
|
|||||||
"30d"
|
"30d"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "",
|
"timezone": "UTC",
|
||||||
"title": "Kubernetes / Compute Resources / Cluster",
|
"title": "Kubernetes / Compute Resources / Cluster",
|
||||||
"uid": "efa86fd1d0c121a26444b636a3f509a8",
|
"uid": "efa86fd1d0c121a26444b636a3f509a8",
|
||||||
"version": 0
|
"version": 0
|
||||||
@ -2586,6 +2576,354 @@ data:
|
|||||||
],
|
],
|
||||||
"refresh": "10s",
|
"refresh": "10s",
|
||||||
"rows": [
|
"rows": [
|
||||||
|
{
|
||||||
|
"collapse": false,
|
||||||
|
"height": "100px",
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 1,
|
||||||
|
"format": "percentunit",
|
||||||
|
"id": 1,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null as zero",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 3,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}) / sum(kube_pod_container_resource_requests_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"instant": true,
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": "70,80",
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "CPU Utilisation (from requests)",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "singlestat",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 1,
|
||||||
|
"format": "percentunit",
|
||||||
|
"id": 2,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null as zero",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 3,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}) / sum(kube_pod_container_resource_limits_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"instant": true,
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": "70,80",
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "CPU Utilisation (from limits)",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "singlestat",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 1,
|
||||||
|
"format": "percentunit",
|
||||||
|
"id": 3,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null as zero",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 3,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) / sum(kube_pod_container_resource_requests_memory_bytes{namespace=\"$namespace\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"instant": true,
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": "70,80",
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Memory Utilization (from requests)",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "singlestat",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 1,
|
||||||
|
"format": "percentunit",
|
||||||
|
"id": 4,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null as zero",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 3,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) / sum(kube_pod_container_resource_limits_memory_bytes{namespace=\"$namespace\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"instant": true,
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": "70,80",
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Memory Utilisation (from limits)",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "singlestat",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repeat": null,
|
||||||
|
"repeatIteration": null,
|
||||||
|
"repeatRowId": null,
|
||||||
|
"showTitle": false,
|
||||||
|
"title": "Headlines",
|
||||||
|
"titleSize": "h6"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"collapse": false,
|
"collapse": false,
|
||||||
"height": "250px",
|
"height": "250px",
|
||||||
@ -2599,7 +2937,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 10,
|
"fill": 10,
|
||||||
"id": 1,
|
"id": 5,
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -2620,7 +2958,26 @@ data:
|
|||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
{
|
||||||
|
"alias": "quota - requests",
|
||||||
|
"color": "#F2495C",
|
||||||
|
"dashes": true,
|
||||||
|
"fill": 0,
|
||||||
|
"hideTooltip": true,
|
||||||
|
"legend": false,
|
||||||
|
"linewidth": 2,
|
||||||
|
"stack": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alias": "quota - limits",
|
||||||
|
"color": "#FF9830",
|
||||||
|
"dashes": true,
|
||||||
|
"fill": 0,
|
||||||
|
"hideTooltip": true,
|
||||||
|
"legend": false,
|
||||||
|
"linewidth": 2,
|
||||||
|
"stack": false
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"spaceLength": 10,
|
"spaceLength": 10,
|
||||||
"span": 12,
|
"span": 12,
|
||||||
@ -2634,6 +2991,22 @@ data:
|
|||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
"legendLink": null,
|
"legendLink": null,
|
||||||
"step": 10
|
"step": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.cpu\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "quota - requests",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.cpu\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "quota - limits",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -2697,7 +3070,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 2,
|
"id": 6,
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -2740,6 +3113,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -2758,6 +3132,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -2776,6 +3151,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -2794,6 +3170,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -2812,6 +3189,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -2830,6 +3208,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
|
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
|
||||||
"pattern": "pod",
|
"pattern": "pod",
|
||||||
@ -2964,7 +3343,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 10,
|
"fill": 10,
|
||||||
"id": 3,
|
"id": 7,
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -2985,7 +3364,26 @@ data:
|
|||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
{
|
||||||
|
"alias": "quota - requests",
|
||||||
|
"color": "#F2495C",
|
||||||
|
"dashes": true,
|
||||||
|
"fill": 0,
|
||||||
|
"hideTooltip": true,
|
||||||
|
"legend": false,
|
||||||
|
"linewidth": 2,
|
||||||
|
"stack": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alias": "quota - limits",
|
||||||
|
"color": "#FF9830",
|
||||||
|
"dashes": true,
|
||||||
|
"fill": 0,
|
||||||
|
"hideTooltip": true,
|
||||||
|
"legend": false,
|
||||||
|
"linewidth": 2,
|
||||||
|
"stack": false
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"spaceLength": 10,
|
"spaceLength": 10,
|
||||||
"span": 12,
|
"span": 12,
|
||||||
@ -2993,12 +3391,28 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\"}) by (pod)",
|
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}) by (pod)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
"legendLink": null,
|
"legendLink": null,
|
||||||
"step": 10
|
"step": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.memory\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "quota - requests",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.memory\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "quota - limits",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -3062,7 +3476,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 4,
|
"id": 8,
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -3105,6 +3519,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -3123,6 +3538,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -3141,6 +3557,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -3159,6 +3576,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -3177,6 +3595,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -3195,6 +3614,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #F",
|
"pattern": "Value #F",
|
||||||
@ -3213,6 +3633,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #G",
|
"pattern": "Value #G",
|
||||||
@ -3231,6 +3652,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #H",
|
"pattern": "Value #H",
|
||||||
@ -3249,6 +3671,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
|
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
|
||||||
"pattern": "pod",
|
"pattern": "pod",
|
||||||
@ -3276,7 +3699,7 @@ data:
|
|||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"}) by (pod)",
|
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -3294,7 +3717,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"}) by (pod) / sum(kube_pod_container_resource_requests_memory_bytes{namespace=\"$namespace\"}) by (pod)",
|
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) by (pod) / sum(kube_pod_container_resource_requests_memory_bytes{namespace=\"$namespace\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -3312,7 +3735,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\"}) by (pod) / sum(kube_pod_container_resource_limits_memory_bytes{namespace=\"$namespace\"}) by (pod)",
|
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) by (pod) / sum(kube_pod_container_resource_limits_memory_bytes{namespace=\"$namespace\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -3410,7 +3833,8 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 5,
|
"id": 9,
|
||||||
|
"interval": "1m",
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -3453,6 +3877,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -3471,6 +3896,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -3489,6 +3915,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -3507,6 +3934,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -3525,6 +3953,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -3543,6 +3972,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #F",
|
"pattern": "Value #F",
|
||||||
@ -3561,6 +3991,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down to pods",
|
"linkTooltip": "Drill down to pods",
|
||||||
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
|
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
|
||||||
"pattern": "pod",
|
"pattern": "pod",
|
||||||
@ -3588,7 +4019,7 @@ data:
|
|||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])) by (pod)",
|
"expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -3597,7 +4028,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])) by (pod)",
|
"expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -3606,7 +4037,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])) by (pod)",
|
"expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -3615,7 +4046,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])) by (pod)",
|
"expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -3624,7 +4055,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])) by (pod)",
|
"expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -3633,7 +4064,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])) by (pod)",
|
"expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -3698,398 +4129,6 @@ data:
|
|||||||
{
|
{
|
||||||
"aliasColors": {
|
"aliasColors": {
|
||||||
|
|
||||||
},
|
|
||||||
"bars": false,
|
|
||||||
"dashLength": 10,
|
|
||||||
"dashes": false,
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"fill": 10,
|
|
||||||
"id": 6,
|
|
||||||
"legend": {
|
|
||||||
"avg": false,
|
|
||||||
"current": false,
|
|
||||||
"max": false,
|
|
||||||
"min": false,
|
|
||||||
"show": true,
|
|
||||||
"total": false,
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"lines": true,
|
|
||||||
"linewidth": 0,
|
|
||||||
"links": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"nullPointMode": "null as zero",
|
|
||||||
"percentage": false,
|
|
||||||
"pointradius": 5,
|
|
||||||
"points": false,
|
|
||||||
"renderer": "flot",
|
|
||||||
"seriesOverrides": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"spaceLength": 10,
|
|
||||||
"span": 12,
|
|
||||||
"stack": true,
|
|
||||||
"steppedLine": false,
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])) by (pod)",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "{{pod}}",
|
|
||||||
"legendLink": null,
|
|
||||||
"step": 10
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"thresholds": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"timeFrom": null,
|
|
||||||
"timeShift": null,
|
|
||||||
"title": "Receive Bandwidth",
|
|
||||||
"tooltip": {
|
|
||||||
"shared": false,
|
|
||||||
"sort": 0,
|
|
||||||
"value_type": "individual"
|
|
||||||
},
|
|
||||||
"type": "graph",
|
|
||||||
"xaxis": {
|
|
||||||
"buckets": null,
|
|
||||||
"mode": "time",
|
|
||||||
"name": null,
|
|
||||||
"show": true,
|
|
||||||
"values": [
|
|
||||||
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"yaxes": [
|
|
||||||
{
|
|
||||||
"format": "Bps",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"format": "short",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": null,
|
|
||||||
"show": false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"repeat": null,
|
|
||||||
"repeatIteration": null,
|
|
||||||
"repeatRowId": null,
|
|
||||||
"showTitle": true,
|
|
||||||
"title": "Network",
|
|
||||||
"titleSize": "h6"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"collapse": false,
|
|
||||||
"height": "250px",
|
|
||||||
"panels": [
|
|
||||||
{
|
|
||||||
"aliasColors": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"bars": false,
|
|
||||||
"dashLength": 10,
|
|
||||||
"dashes": false,
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"fill": 10,
|
|
||||||
"id": 7,
|
|
||||||
"legend": {
|
|
||||||
"avg": false,
|
|
||||||
"current": false,
|
|
||||||
"max": false,
|
|
||||||
"min": false,
|
|
||||||
"show": true,
|
|
||||||
"total": false,
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"lines": true,
|
|
||||||
"linewidth": 0,
|
|
||||||
"links": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"nullPointMode": "null as zero",
|
|
||||||
"percentage": false,
|
|
||||||
"pointradius": 5,
|
|
||||||
"points": false,
|
|
||||||
"renderer": "flot",
|
|
||||||
"seriesOverrides": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"spaceLength": 10,
|
|
||||||
"span": 12,
|
|
||||||
"stack": true,
|
|
||||||
"steppedLine": false,
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])) by (pod)",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "{{pod}}",
|
|
||||||
"legendLink": null,
|
|
||||||
"step": 10
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"thresholds": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"timeFrom": null,
|
|
||||||
"timeShift": null,
|
|
||||||
"title": "Transmit Bandwidth",
|
|
||||||
"tooltip": {
|
|
||||||
"shared": false,
|
|
||||||
"sort": 0,
|
|
||||||
"value_type": "individual"
|
|
||||||
},
|
|
||||||
"type": "graph",
|
|
||||||
"xaxis": {
|
|
||||||
"buckets": null,
|
|
||||||
"mode": "time",
|
|
||||||
"name": null,
|
|
||||||
"show": true,
|
|
||||||
"values": [
|
|
||||||
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"yaxes": [
|
|
||||||
{
|
|
||||||
"format": "Bps",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"format": "short",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": null,
|
|
||||||
"show": false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"repeat": null,
|
|
||||||
"repeatIteration": null,
|
|
||||||
"repeatRowId": null,
|
|
||||||
"showTitle": true,
|
|
||||||
"title": "Network",
|
|
||||||
"titleSize": "h6"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"collapse": false,
|
|
||||||
"height": "250px",
|
|
||||||
"panels": [
|
|
||||||
{
|
|
||||||
"aliasColors": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"bars": false,
|
|
||||||
"dashLength": 10,
|
|
||||||
"dashes": false,
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"fill": 10,
|
|
||||||
"id": 8,
|
|
||||||
"legend": {
|
|
||||||
"avg": false,
|
|
||||||
"current": false,
|
|
||||||
"max": false,
|
|
||||||
"min": false,
|
|
||||||
"show": true,
|
|
||||||
"total": false,
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"lines": true,
|
|
||||||
"linewidth": 0,
|
|
||||||
"links": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"nullPointMode": "null as zero",
|
|
||||||
"percentage": false,
|
|
||||||
"pointradius": 5,
|
|
||||||
"points": false,
|
|
||||||
"renderer": "flot",
|
|
||||||
"seriesOverrides": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"spaceLength": 10,
|
|
||||||
"span": 12,
|
|
||||||
"stack": true,
|
|
||||||
"steppedLine": false,
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])) by (pod)",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "{{pod}}",
|
|
||||||
"legendLink": null,
|
|
||||||
"step": 10
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"thresholds": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"timeFrom": null,
|
|
||||||
"timeShift": null,
|
|
||||||
"title": "Rate of Received Packets",
|
|
||||||
"tooltip": {
|
|
||||||
"shared": false,
|
|
||||||
"sort": 0,
|
|
||||||
"value_type": "individual"
|
|
||||||
},
|
|
||||||
"type": "graph",
|
|
||||||
"xaxis": {
|
|
||||||
"buckets": null,
|
|
||||||
"mode": "time",
|
|
||||||
"name": null,
|
|
||||||
"show": true,
|
|
||||||
"values": [
|
|
||||||
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"yaxes": [
|
|
||||||
{
|
|
||||||
"format": "Bps",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"format": "short",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": null,
|
|
||||||
"show": false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"repeat": null,
|
|
||||||
"repeatIteration": null,
|
|
||||||
"repeatRowId": null,
|
|
||||||
"showTitle": true,
|
|
||||||
"title": "Network",
|
|
||||||
"titleSize": "h6"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"collapse": false,
|
|
||||||
"height": "250px",
|
|
||||||
"panels": [
|
|
||||||
{
|
|
||||||
"aliasColors": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"bars": false,
|
|
||||||
"dashLength": 10,
|
|
||||||
"dashes": false,
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"fill": 10,
|
|
||||||
"id": 9,
|
|
||||||
"legend": {
|
|
||||||
"avg": false,
|
|
||||||
"current": false,
|
|
||||||
"max": false,
|
|
||||||
"min": false,
|
|
||||||
"show": true,
|
|
||||||
"total": false,
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"lines": true,
|
|
||||||
"linewidth": 0,
|
|
||||||
"links": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"nullPointMode": "null as zero",
|
|
||||||
"percentage": false,
|
|
||||||
"pointradius": 5,
|
|
||||||
"points": false,
|
|
||||||
"renderer": "flot",
|
|
||||||
"seriesOverrides": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"spaceLength": 10,
|
|
||||||
"span": 12,
|
|
||||||
"stack": true,
|
|
||||||
"steppedLine": false,
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])) by (pod)",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "{{pod}}",
|
|
||||||
"legendLink": null,
|
|
||||||
"step": 10
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"thresholds": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"timeFrom": null,
|
|
||||||
"timeShift": null,
|
|
||||||
"title": "Rate of Transmitted Packets",
|
|
||||||
"tooltip": {
|
|
||||||
"shared": false,
|
|
||||||
"sort": 0,
|
|
||||||
"value_type": "individual"
|
|
||||||
},
|
|
||||||
"type": "graph",
|
|
||||||
"xaxis": {
|
|
||||||
"buckets": null,
|
|
||||||
"mode": "time",
|
|
||||||
"name": null,
|
|
||||||
"show": true,
|
|
||||||
"values": [
|
|
||||||
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"yaxes": [
|
|
||||||
{
|
|
||||||
"format": "Bps",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"format": "short",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": null,
|
|
||||||
"show": false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"repeat": null,
|
|
||||||
"repeatIteration": null,
|
|
||||||
"repeatRowId": null,
|
|
||||||
"showTitle": true,
|
|
||||||
"title": "Network",
|
|
||||||
"titleSize": "h6"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"collapse": false,
|
|
||||||
"height": "250px",
|
|
||||||
"panels": [
|
|
||||||
{
|
|
||||||
"aliasColors": {
|
|
||||||
|
|
||||||
},
|
},
|
||||||
"bars": false,
|
"bars": false,
|
||||||
"dashLength": 10,
|
"dashLength": 10,
|
||||||
@ -4125,7 +4164,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])) by (pod)",
|
"expr": "sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -4138,7 +4177,7 @@ data:
|
|||||||
],
|
],
|
||||||
"timeFrom": null,
|
"timeFrom": null,
|
||||||
"timeShift": null,
|
"timeShift": null,
|
||||||
"title": "Rate of Received Packets Dropped",
|
"title": "Receive Bandwidth",
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"shared": false,
|
"shared": false,
|
||||||
"sort": 0,
|
"sort": 0,
|
||||||
@ -4223,7 +4262,399 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])) by (pod)",
|
"expr": "sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{pod}}",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Transmit Bandwidth",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "Bps",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repeat": null,
|
||||||
|
"repeatIteration": null,
|
||||||
|
"repeatRowId": null,
|
||||||
|
"showTitle": true,
|
||||||
|
"title": "Network",
|
||||||
|
"titleSize": "h6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"collapse": false,
|
||||||
|
"height": "250px",
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 10,
|
||||||
|
"id": 12,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 0,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null as zero",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 12,
|
||||||
|
"stack": true,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{pod}}",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Rate of Received Packets",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "Bps",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repeat": null,
|
||||||
|
"repeatIteration": null,
|
||||||
|
"repeatRowId": null,
|
||||||
|
"showTitle": true,
|
||||||
|
"title": "Network",
|
||||||
|
"titleSize": "h6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"collapse": false,
|
||||||
|
"height": "250px",
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 10,
|
||||||
|
"id": 13,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 0,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null as zero",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 12,
|
||||||
|
"stack": true,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{pod}}",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Rate of Transmitted Packets",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "Bps",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repeat": null,
|
||||||
|
"repeatIteration": null,
|
||||||
|
"repeatRowId": null,
|
||||||
|
"showTitle": true,
|
||||||
|
"title": "Network",
|
||||||
|
"titleSize": "h6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"collapse": false,
|
||||||
|
"height": "250px",
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 10,
|
||||||
|
"id": 14,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 0,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null as zero",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 12,
|
||||||
|
"stack": true,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{pod}}",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Rate of Received Packets Dropped",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "Bps",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repeat": null,
|
||||||
|
"repeatIteration": null,
|
||||||
|
"repeatRowId": null,
|
||||||
|
"showTitle": true,
|
||||||
|
"title": "Network",
|
||||||
|
"titleSize": "h6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"collapse": false,
|
||||||
|
"height": "250px",
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 10,
|
||||||
|
"id": 15,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 0,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null as zero",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 12,
|
||||||
|
"stack": true,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])) by (pod)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -4289,8 +4720,8 @@ data:
|
|||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "Prometheus",
|
"text": "default",
|
||||||
"value": "Prometheus"
|
"value": "default"
|
||||||
},
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -4306,13 +4737,13 @@ data:
|
|||||||
{
|
{
|
||||||
"allValue": null,
|
"allValue": null,
|
||||||
"current": {
|
"current": {
|
||||||
"text": "prod",
|
"text": "",
|
||||||
"value": "prod"
|
"value": ""
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"hide": 2,
|
"hide": 2,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
"label": "cluster",
|
"label": null,
|
||||||
"multi": false,
|
"multi": false,
|
||||||
"name": "cluster",
|
"name": "cluster",
|
||||||
"options": [
|
"options": [
|
||||||
@ -4321,7 +4752,7 @@ data:
|
|||||||
"query": "label_values(kube_pod_info, cluster)",
|
"query": "label_values(kube_pod_info, cluster)",
|
||||||
"refresh": 1,
|
"refresh": 1,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"sort": 2,
|
"sort": 1,
|
||||||
"tagValuesQuery": "",
|
"tagValuesQuery": "",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|
||||||
@ -4333,13 +4764,13 @@ data:
|
|||||||
{
|
{
|
||||||
"allValue": null,
|
"allValue": null,
|
||||||
"current": {
|
"current": {
|
||||||
"text": "prod",
|
"text": "",
|
||||||
"value": "prod"
|
"value": ""
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
"label": "namespace",
|
"label": null,
|
||||||
"multi": false,
|
"multi": false,
|
||||||
"name": "namespace",
|
"name": "namespace",
|
||||||
"options": [
|
"options": [
|
||||||
@ -4348,48 +4779,13 @@ data:
|
|||||||
"query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)",
|
"query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)",
|
||||||
"refresh": 1,
|
"refresh": 1,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"sort": 2,
|
|
||||||
"tagValuesQuery": "",
|
|
||||||
"tags": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tagsQuery": "",
|
|
||||||
"type": "query",
|
|
||||||
"useTags": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allValue": null,
|
|
||||||
"auto": false,
|
|
||||||
"auto_count": 30,
|
|
||||||
"auto_min": "10s",
|
|
||||||
"current": {
|
|
||||||
"text": "5m",
|
|
||||||
"value": "5m"
|
|
||||||
},
|
|
||||||
"datasource": "prometheus",
|
|
||||||
"hide": 2,
|
|
||||||
"includeAll": false,
|
|
||||||
"label": null,
|
|
||||||
"multi": false,
|
|
||||||
"name": "interval",
|
|
||||||
"options": [
|
|
||||||
{
|
|
||||||
"selected": true,
|
|
||||||
"text": "4h",
|
|
||||||
"value": "4h"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"query": "4h",
|
|
||||||
"refresh": 2,
|
|
||||||
"regex": "",
|
|
||||||
"skipUrlSync": false,
|
|
||||||
"sort": 1,
|
"sort": 1,
|
||||||
"tagValuesQuery": "",
|
"tagValuesQuery": "",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"tagsQuery": "",
|
"tagsQuery": "",
|
||||||
"type": "interval",
|
"type": "query",
|
||||||
"useTags": false
|
"useTags": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -4423,7 +4819,7 @@ data:
|
|||||||
"30d"
|
"30d"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "",
|
"timezone": "UTC",
|
||||||
"title": "Kubernetes / Compute Resources / Namespace (Pods)",
|
"title": "Kubernetes / Compute Resources / Namespace (Pods)",
|
||||||
"uid": "85a562078cdf77779eaa1add43ccec1e",
|
"uid": "85a562078cdf77779eaa1add43ccec1e",
|
||||||
"version": 0
|
"version": 0
|
||||||
@ -4486,7 +4882,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=\"$node\"}) by (pod)",
|
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -4598,6 +4994,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -4616,6 +5013,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -4634,6 +5032,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -4652,6 +5051,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -4670,6 +5070,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -4688,6 +5089,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "pod",
|
"pattern": "pod",
|
||||||
@ -4715,7 +5117,7 @@ data:
|
|||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=\"$node\"}) by (pod)",
|
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4724,7 +5126,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(kube_pod_container_resource_requests_cpu_cores{cluster=\"$cluster\", node=\"$node\"}) by (pod)",
|
"expr": "sum(kube_pod_container_resource_requests_cpu_cores{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4733,7 +5135,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=\"$node\"}) by (pod) / sum(kube_pod_container_resource_requests_cpu_cores{cluster=\"$cluster\", node=\"$node\"}) by (pod)",
|
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=~\"$node\"}) by (pod) / sum(kube_pod_container_resource_requests_cpu_cores{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4742,7 +5144,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(kube_pod_container_resource_limits_cpu_cores{cluster=\"$cluster\", node=\"$node\"}) by (pod)",
|
"expr": "sum(kube_pod_container_resource_limits_cpu_cores{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4751,7 +5153,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=\"$node\"}) by (pod) / sum(kube_pod_container_resource_limits_cpu_cores{cluster=\"$cluster\", node=\"$node\"}) by (pod)",
|
"expr": "sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", node=~\"$node\"}) by (pod) / sum(kube_pod_container_resource_limits_cpu_cores{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4851,7 +5253,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=\"$node\", container!=\"\"}) by (pod)",
|
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\", container!=\"\"}) by (pod)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -4963,6 +5365,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -4981,6 +5384,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -4999,6 +5403,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -5017,6 +5422,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -5035,6 +5441,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -5053,6 +5460,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #F",
|
"pattern": "Value #F",
|
||||||
@ -5071,6 +5479,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #G",
|
"pattern": "Value #G",
|
||||||
@ -5089,6 +5498,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #H",
|
"pattern": "Value #H",
|
||||||
@ -5107,6 +5517,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "pod",
|
"pattern": "pod",
|
||||||
@ -5134,7 +5545,7 @@ data:
|
|||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=\"$node\",container!=\"\"}) by (pod)",
|
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -5143,7 +5554,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(kube_pod_container_resource_requests_memory_bytes{cluster=\"$cluster\", node=\"$node\"}) by (pod)",
|
"expr": "sum(kube_pod_container_resource_requests_memory_bytes{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -5152,7 +5563,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=\"$node\",container!=\"\"}) by (pod) / sum(kube_pod_container_resource_requests_memory_bytes{node=\"$node\"}) by (pod)",
|
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod) / sum(kube_pod_container_resource_requests_memory_bytes{node=~\"$node\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -5161,7 +5572,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(kube_pod_container_resource_limits_memory_bytes{cluster=\"$cluster\", node=\"$node\"}) by (pod)",
|
"expr": "sum(kube_pod_container_resource_limits_memory_bytes{cluster=\"$cluster\", node=~\"$node\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -5170,7 +5581,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=\"$node\",container!=\"\"}) by (pod) / sum(kube_pod_container_resource_limits_memory_bytes{node=\"$node\"}) by (pod)",
|
"expr": "sum(node_namespace_pod_container:container_memory_working_set_bytes{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod) / sum(kube_pod_container_resource_limits_memory_bytes{node=~\"$node\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -5179,7 +5590,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(node_namespace_pod_container:container_memory_rss{cluster=\"$cluster\", node=\"$node\",container!=\"\"}) by (pod)",
|
"expr": "sum(node_namespace_pod_container:container_memory_rss{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -5188,7 +5599,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(node_namespace_pod_container:container_memory_cache{cluster=\"$cluster\", node=\"$node\",container!=\"\"}) by (pod)",
|
"expr": "sum(node_namespace_pod_container:container_memory_cache{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -5197,7 +5608,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(node_namespace_pod_container:container_memory_swap{cluster=\"$cluster\", node=\"$node\",container!=\"\"}) by (pod)",
|
"expr": "sum(node_namespace_pod_container:container_memory_swap{cluster=\"$cluster\", node=~\"$node\",container!=\"\"}) by (pod)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -5265,8 +5676,8 @@ data:
|
|||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "Prometheus",
|
"text": "default",
|
||||||
"value": "Prometheus"
|
"value": "default"
|
||||||
},
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -5282,13 +5693,13 @@ data:
|
|||||||
{
|
{
|
||||||
"allValue": null,
|
"allValue": null,
|
||||||
"current": {
|
"current": {
|
||||||
"text": "prod",
|
"text": "",
|
||||||
"value": "prod"
|
"value": ""
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"hide": 2,
|
"hide": 2,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
"label": "cluster",
|
"label": null,
|
||||||
"multi": false,
|
"multi": false,
|
||||||
"name": "cluster",
|
"name": "cluster",
|
||||||
"options": [
|
"options": [
|
||||||
@ -5297,7 +5708,7 @@ data:
|
|||||||
"query": "label_values(kube_pod_info, cluster)",
|
"query": "label_values(kube_pod_info, cluster)",
|
||||||
"refresh": 1,
|
"refresh": 1,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"sort": 2,
|
"sort": 1,
|
||||||
"tagValuesQuery": "",
|
"tagValuesQuery": "",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|
||||||
@ -5309,14 +5720,14 @@ data:
|
|||||||
{
|
{
|
||||||
"allValue": null,
|
"allValue": null,
|
||||||
"current": {
|
"current": {
|
||||||
"text": "prod",
|
"text": "",
|
||||||
"value": "prod"
|
"value": ""
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
"label": "node",
|
"label": null,
|
||||||
"multi": false,
|
"multi": true,
|
||||||
"name": "node",
|
"name": "node",
|
||||||
"options": [
|
"options": [
|
||||||
|
|
||||||
@ -5324,7 +5735,7 @@ data:
|
|||||||
"query": "label_values(kube_pod_info{cluster=\"$cluster\"}, node)",
|
"query": "label_values(kube_pod_info{cluster=\"$cluster\"}, node)",
|
||||||
"refresh": 1,
|
"refresh": 1,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"sort": 2,
|
"sort": 1,
|
||||||
"tagValuesQuery": "",
|
"tagValuesQuery": "",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|
||||||
@ -5364,7 +5775,7 @@ data:
|
|||||||
"30d"
|
"30d"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "",
|
"timezone": "UTC",
|
||||||
"title": "Kubernetes / Compute Resources / Node (Pods)",
|
"title": "Kubernetes / Compute Resources / Node (Pods)",
|
||||||
"uid": "200ac8fdbfbb74b39aff88118e4d1c2c",
|
"uid": "200ac8fdbfbb74b39aff88118e4d1c2c",
|
||||||
"version": 0
|
"version": 0
|
||||||
|
|||||||
@ -50,7 +50,24 @@ data:
|
|||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
{
|
||||||
|
"alias": "requests",
|
||||||
|
"color": "#F2495C",
|
||||||
|
"fill": 0,
|
||||||
|
"hideTooltip": true,
|
||||||
|
"legend": true,
|
||||||
|
"linewidth": 2,
|
||||||
|
"stack": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alias": "limits",
|
||||||
|
"color": "#FF9830",
|
||||||
|
"fill": 0,
|
||||||
|
"hideTooltip": true,
|
||||||
|
"legend": true,
|
||||||
|
"linewidth": 2,
|
||||||
|
"stack": false
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"spaceLength": 10,
|
"spaceLength": 10,
|
||||||
"span": 12,
|
"span": 12,
|
||||||
@ -64,6 +81,22 @@ data:
|
|||||||
"legendFormat": "{{container}}",
|
"legendFormat": "{{container}}",
|
||||||
"legendLink": null,
|
"legendLink": null,
|
||||||
"step": 10
|
"step": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum(\n kube_pod_container_resource_requests_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"})\n",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "requests",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum(\n kube_pod_container_resource_limits_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"})\n",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "limits",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -126,8 +159,113 @@ data:
|
|||||||
"dashLength": 10,
|
"dashLength": 10,
|
||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 10,
|
||||||
"id": 2,
|
"id": 2,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": true,
|
||||||
|
"max": true,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 0,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null as zero",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 12,
|
||||||
|
"stack": true,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(increase(container_cpu_cfs_throttled_periods_total{namespace=\"$namespace\", pod=\"$pod\", container!=\"POD\", container!=\"\", cluster=\"$cluster\"}[5m])) by (container) /sum(increase(container_cpu_cfs_periods_total{namespace=\"$namespace\", pod=\"$pod\", container!=\"POD\", container!=\"\", cluster=\"$cluster\"}[5m])) by (container)",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{container}}",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
{
|
||||||
|
"colorMode": "critical",
|
||||||
|
"fill": true,
|
||||||
|
"line": true,
|
||||||
|
"op": "gt",
|
||||||
|
"value": 0.80000000000000004,
|
||||||
|
"yaxis": "left"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "CPU Throttling",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "percentunit",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": 1,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repeat": null,
|
||||||
|
"repeatIteration": null,
|
||||||
|
"repeatRowId": null,
|
||||||
|
"showTitle": true,
|
||||||
|
"title": "CPU Throttling",
|
||||||
|
"titleSize": "h6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"collapse": false,
|
||||||
|
"height": "250px",
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 1,
|
||||||
|
"id": 3,
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -170,6 +308,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -188,6 +327,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -206,6 +346,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -224,6 +365,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -242,6 +384,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -260,6 +403,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "container",
|
"pattern": "container",
|
||||||
@ -394,7 +538,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 10,
|
"fill": 10,
|
||||||
"id": 3,
|
"id": 4,
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -415,7 +559,26 @@ data:
|
|||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
{
|
||||||
|
"alias": "requests",
|
||||||
|
"color": "#F2495C",
|
||||||
|
"dashes": true,
|
||||||
|
"fill": 0,
|
||||||
|
"hideTooltip": true,
|
||||||
|
"legend": false,
|
||||||
|
"linewidth": 2,
|
||||||
|
"stack": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alias": "limits",
|
||||||
|
"color": "#FF9830",
|
||||||
|
"dashes": true,
|
||||||
|
"fill": 0,
|
||||||
|
"hideTooltip": true,
|
||||||
|
"legend": false,
|
||||||
|
"linewidth": 2,
|
||||||
|
"stack": false
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"spaceLength": 10,
|
"spaceLength": 10,
|
||||||
"span": 12,
|
"span": 12,
|
||||||
@ -423,26 +586,26 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(container_memory_rss{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"POD\", container!=\"\"}) by (container)",
|
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"POD\", container!=\"\", image!=\"\"}) by (container)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{container}} (RSS)",
|
"legendFormat": "{{container}}",
|
||||||
"legendLink": null,
|
"legendLink": null,
|
||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(container_memory_cache{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"POD\", container!=\"\"}) by (container)",
|
"expr": "sum(\n kube_pod_container_resource_requests_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"})\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{container}} (Cache)",
|
"legendFormat": "requests",
|
||||||
"legendLink": null,
|
"legendLink": null,
|
||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(container_memory_swap{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"POD\", container!=\"\"}) by (container)",
|
"expr": "sum(\n kube_pod_container_resource_limits_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"})\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{container}} (Swap)",
|
"legendFormat": "limits",
|
||||||
"legendLink": null,
|
"legendLink": null,
|
||||||
"step": 10
|
"step": 10
|
||||||
}
|
}
|
||||||
@ -508,7 +671,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 4,
|
"id": 5,
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -551,6 +714,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -569,6 +733,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -587,6 +752,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -605,6 +771,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -623,6 +790,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -641,6 +809,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #F",
|
"pattern": "Value #F",
|
||||||
@ -659,6 +828,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #G",
|
"pattern": "Value #G",
|
||||||
@ -677,6 +847,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #H",
|
"pattern": "Value #H",
|
||||||
@ -695,6 +866,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "container",
|
"pattern": "container",
|
||||||
@ -722,7 +894,7 @@ data:
|
|||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"POD\", container!=\"\"}) by (container)",
|
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"POD\", container!=\"\", image!=\"\"}) by (container)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -740,7 +912,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container) / sum(kube_pod_container_resource_requests_memory_bytes{namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
|
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", image!=\"\"}) by (container) / sum(kube_pod_container_resource_requests_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -758,7 +930,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\"}) by (container) / sum(kube_pod_container_resource_limits_memory_bytes{namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
|
"expr": "sum(container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container!=\"\", image!=\"\"}) by (container) / sum(kube_pod_container_resource_limits_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}) by (container)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -856,7 +1028,8 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 10,
|
"fill": 10,
|
||||||
"id": 5,
|
"id": 6,
|
||||||
|
"interval": "1m",
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -885,7 +1058,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_receive_bytes_total{namespace=~\"$namespace\", pod=~\"$pod\"}[$interval])) by (pod)",
|
"expr": "sum(irate(container_network_receive_bytes_total{namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -954,7 +1127,8 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 10,
|
"fill": 10,
|
||||||
"id": 6,
|
"id": 7,
|
||||||
|
"interval": "1m",
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -983,7 +1157,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_transmit_bytes_total{namespace=~\"$namespace\", pod=~\"$pod\"}[$interval])) by (pod)",
|
"expr": "sum(irate(container_network_transmit_bytes_total{namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -1052,7 +1226,8 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 10,
|
"fill": 10,
|
||||||
"id": 7,
|
"id": 8,
|
||||||
|
"interval": "1m",
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -1081,7 +1256,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_receive_packets_total{namespace=~\"$namespace\", pod=~\"$pod\"}[$interval])) by (pod)",
|
"expr": "sum(irate(container_network_receive_packets_total{namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -1150,7 +1325,8 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 10,
|
"fill": 10,
|
||||||
"id": 8,
|
"id": 9,
|
||||||
|
"interval": "1m",
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -1179,7 +1355,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_transmit_packets_total{namespace=~\"$namespace\", pod=~\"$pod\"}[$interval])) by (pod)",
|
"expr": "sum(irate(container_network_transmit_packets_total{namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -1248,7 +1424,8 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 10,
|
"fill": 10,
|
||||||
"id": 9,
|
"id": 10,
|
||||||
|
"interval": "1m",
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -1277,7 +1454,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_receive_packets_dropped_total{namespace=~\"$namespace\", pod=~\"$pod\"}[$interval])) by (pod)",
|
"expr": "sum(irate(container_network_receive_packets_dropped_total{namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -1346,7 +1523,8 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 10,
|
"fill": 10,
|
||||||
"id": 10,
|
"id": 11,
|
||||||
|
"interval": "1m",
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -1375,7 +1553,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(irate(container_network_transmit_packets_dropped_total{namespace=~\"$namespace\", pod=~\"$pod\"}[$interval])) by (pod)",
|
"expr": "sum(irate(container_network_transmit_packets_dropped_total{namespace=~\"$namespace\", pod=~\"$pod\"}[$__rate_interval])) by (pod)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -1441,8 +1619,8 @@ data:
|
|||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "Prometheus",
|
"text": "default",
|
||||||
"value": "Prometheus"
|
"value": "default"
|
||||||
},
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -1458,13 +1636,13 @@ data:
|
|||||||
{
|
{
|
||||||
"allValue": null,
|
"allValue": null,
|
||||||
"current": {
|
"current": {
|
||||||
"text": "prod",
|
"text": "",
|
||||||
"value": "prod"
|
"value": ""
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"hide": 2,
|
"hide": 2,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
"label": "cluster",
|
"label": null,
|
||||||
"multi": false,
|
"multi": false,
|
||||||
"name": "cluster",
|
"name": "cluster",
|
||||||
"options": [
|
"options": [
|
||||||
@ -1473,7 +1651,7 @@ data:
|
|||||||
"query": "label_values(kube_pod_info, cluster)",
|
"query": "label_values(kube_pod_info, cluster)",
|
||||||
"refresh": 1,
|
"refresh": 1,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"sort": 2,
|
"sort": 1,
|
||||||
"tagValuesQuery": "",
|
"tagValuesQuery": "",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|
||||||
@ -1485,13 +1663,13 @@ data:
|
|||||||
{
|
{
|
||||||
"allValue": null,
|
"allValue": null,
|
||||||
"current": {
|
"current": {
|
||||||
"text": "prod",
|
"text": "",
|
||||||
"value": "prod"
|
"value": ""
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
"label": "namespace",
|
"label": null,
|
||||||
"multi": false,
|
"multi": false,
|
||||||
"name": "namespace",
|
"name": "namespace",
|
||||||
"options": [
|
"options": [
|
||||||
@ -1500,75 +1678,40 @@ data:
|
|||||||
"query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)",
|
"query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)",
|
||||||
"refresh": 1,
|
"refresh": 1,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"sort": 2,
|
|
||||||
"tagValuesQuery": "",
|
|
||||||
"tags": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tagsQuery": "",
|
|
||||||
"type": "query",
|
|
||||||
"useTags": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allValue": null,
|
|
||||||
"current": {
|
|
||||||
"text": "prod",
|
|
||||||
"value": "prod"
|
|
||||||
},
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"hide": 0,
|
|
||||||
"includeAll": false,
|
|
||||||
"label": "pod",
|
|
||||||
"multi": false,
|
|
||||||
"name": "pod",
|
|
||||||
"options": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"query": "label_values(kube_pod_info{cluster=\"$cluster\", namespace=\"$namespace\"}, pod)",
|
|
||||||
"refresh": 1,
|
|
||||||
"regex": "",
|
|
||||||
"sort": 2,
|
|
||||||
"tagValuesQuery": "",
|
|
||||||
"tags": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tagsQuery": "",
|
|
||||||
"type": "query",
|
|
||||||
"useTags": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allValue": null,
|
|
||||||
"auto": false,
|
|
||||||
"auto_count": 30,
|
|
||||||
"auto_min": "10s",
|
|
||||||
"current": {
|
|
||||||
"text": "5m",
|
|
||||||
"value": "5m"
|
|
||||||
},
|
|
||||||
"datasource": "prometheus",
|
|
||||||
"hide": 2,
|
|
||||||
"includeAll": false,
|
|
||||||
"label": null,
|
|
||||||
"multi": false,
|
|
||||||
"name": "interval",
|
|
||||||
"options": [
|
|
||||||
{
|
|
||||||
"selected": true,
|
|
||||||
"text": "4h",
|
|
||||||
"value": "4h"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"query": "4h",
|
|
||||||
"refresh": 2,
|
|
||||||
"regex": "",
|
|
||||||
"skipUrlSync": false,
|
|
||||||
"sort": 1,
|
"sort": 1,
|
||||||
"tagValuesQuery": "",
|
"tagValuesQuery": "",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"tagsQuery": "",
|
"tagsQuery": "",
|
||||||
"type": "interval",
|
"type": "query",
|
||||||
|
"useTags": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allValue": null,
|
||||||
|
"current": {
|
||||||
|
"text": "",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": false,
|
||||||
|
"label": null,
|
||||||
|
"multi": false,
|
||||||
|
"name": "pod",
|
||||||
|
"options": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"query": "label_values(kube_pod_info{cluster=\"$cluster\", namespace=\"$namespace\"}, pod)",
|
||||||
|
"refresh": 2,
|
||||||
|
"regex": "",
|
||||||
|
"sort": 1,
|
||||||
|
"tagValuesQuery": "",
|
||||||
|
"tags": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"tagsQuery": "",
|
||||||
|
"type": "query",
|
||||||
"useTags": false
|
"useTags": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -1602,7 +1745,7 @@ data:
|
|||||||
"30d"
|
"30d"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "",
|
"timezone": "UTC",
|
||||||
"title": "Kubernetes / Compute Resources / Pod",
|
"title": "Kubernetes / Compute Resources / Pod",
|
||||||
"uid": "6581e46e4e5c7ba40a07646395ef7b23",
|
"uid": "6581e46e4e5c7ba40a07646395ef7b23",
|
||||||
"version": 0
|
"version": 0
|
||||||
@ -1665,7 +1808,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -1777,6 +1920,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -1795,6 +1939,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -1813,6 +1958,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -1831,6 +1977,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -1849,6 +1996,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -1867,6 +2015,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
|
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
|
||||||
"pattern": "pod",
|
"pattern": "pod",
|
||||||
@ -1894,7 +2043,7 @@ data:
|
|||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -1903,7 +2052,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n kube_pod_container_resource_requests_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
"expr": "sum(\n kube_pod_container_resource_requests_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -1912,7 +2061,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_requests_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_requests_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -1921,7 +2070,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n kube_pod_container_resource_limits_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
"expr": "sum(\n kube_pod_container_resource_limits_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -1930,7 +2079,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_limits_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_limits_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -2030,7 +2179,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -2142,6 +2291,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -2160,6 +2310,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -2178,6 +2329,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -2196,6 +2348,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -2214,6 +2367,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -2232,6 +2386,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
|
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
|
||||||
"pattern": "pod",
|
"pattern": "pod",
|
||||||
@ -2259,7 +2414,7 @@ data:
|
|||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -2268,7 +2423,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n kube_pod_container_resource_requests_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
"expr": "sum(\n kube_pod_container_resource_requests_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -2277,7 +2432,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_requests_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_requests_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -2286,7 +2441,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n kube_pod_container_resource_limits_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
"expr": "sum(\n kube_pod_container_resource_limits_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -2295,7 +2450,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_limits_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n/sum(\n kube_pod_container_resource_limits_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\", workload_type=\"$type\"}\n) by (pod)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -2367,6 +2522,7 @@ data:
|
|||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 5,
|
"id": 5,
|
||||||
|
"interval": "1m",
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -2409,6 +2565,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -2427,6 +2584,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -2445,6 +2603,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -2463,6 +2622,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -2481,6 +2641,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -2499,6 +2660,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #F",
|
"pattern": "Value #F",
|
||||||
@ -2517,6 +2679,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
|
"linkUrl": "./d/6581e46e4e5c7ba40a07646395ef7b23/k8s-resources-pod?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-pod=$__cell",
|
||||||
"pattern": "pod",
|
"pattern": "pod",
|
||||||
@ -2544,7 +2707,7 @@ data:
|
|||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
"expr": "(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -2553,7 +2716,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
"expr": "(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -2562,7 +2725,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
"expr": "(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -2571,7 +2734,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
"expr": "(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -2580,7 +2743,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
"expr": "(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -2589,7 +2752,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
"expr": "(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -2689,7 +2852,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
"expr": "(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -2787,7 +2950,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
"expr": "(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -2885,7 +3048,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
"expr": "(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -2983,7 +3146,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
"expr": "(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -3081,7 +3244,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
"expr": "(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -3179,7 +3342,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
"expr": "(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -3277,7 +3440,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
"expr": "(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -3375,7 +3538,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod) \ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
"expr": "(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\"$workload\", workload_type=\"$type\"}) by (pod))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{pod}}",
|
"legendFormat": "{{pod}}",
|
||||||
@ -3441,8 +3604,8 @@ data:
|
|||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "Prometheus",
|
"text": "default",
|
||||||
"value": "Prometheus"
|
"value": "default"
|
||||||
},
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -3458,13 +3621,13 @@ data:
|
|||||||
{
|
{
|
||||||
"allValue": null,
|
"allValue": null,
|
||||||
"current": {
|
"current": {
|
||||||
"text": "prod",
|
"text": "",
|
||||||
"value": "prod"
|
"value": ""
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"hide": 2,
|
"hide": 2,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
"label": "cluster",
|
"label": null,
|
||||||
"multi": false,
|
"multi": false,
|
||||||
"name": "cluster",
|
"name": "cluster",
|
||||||
"options": [
|
"options": [
|
||||||
@ -3473,7 +3636,7 @@ data:
|
|||||||
"query": "label_values(kube_pod_info, cluster)",
|
"query": "label_values(kube_pod_info, cluster)",
|
||||||
"refresh": 1,
|
"refresh": 1,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"sort": 2,
|
"sort": 1,
|
||||||
"tagValuesQuery": "",
|
"tagValuesQuery": "",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|
||||||
@ -3485,13 +3648,13 @@ data:
|
|||||||
{
|
{
|
||||||
"allValue": null,
|
"allValue": null,
|
||||||
"current": {
|
"current": {
|
||||||
"text": "prod",
|
"text": "",
|
||||||
"value": "prod"
|
"value": ""
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
"label": "namespace",
|
"label": null,
|
||||||
"multi": false,
|
"multi": false,
|
||||||
"name": "namespace",
|
"name": "namespace",
|
||||||
"options": [
|
"options": [
|
||||||
@ -3500,102 +3663,67 @@ data:
|
|||||||
"query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)",
|
"query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)",
|
||||||
"refresh": 1,
|
"refresh": 1,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"sort": 2,
|
|
||||||
"tagValuesQuery": "",
|
|
||||||
"tags": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tagsQuery": "",
|
|
||||||
"type": "query",
|
|
||||||
"useTags": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allValue": null,
|
|
||||||
"current": {
|
|
||||||
"text": "prod",
|
|
||||||
"value": "prod"
|
|
||||||
},
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"hide": 0,
|
|
||||||
"includeAll": false,
|
|
||||||
"label": "workload",
|
|
||||||
"multi": false,
|
|
||||||
"name": "workload",
|
|
||||||
"options": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"query": "label_values(mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\"}, workload)",
|
|
||||||
"refresh": 1,
|
|
||||||
"regex": "",
|
|
||||||
"sort": 2,
|
|
||||||
"tagValuesQuery": "",
|
|
||||||
"tags": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tagsQuery": "",
|
|
||||||
"type": "query",
|
|
||||||
"useTags": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allValue": null,
|
|
||||||
"current": {
|
|
||||||
"text": "prod",
|
|
||||||
"value": "prod"
|
|
||||||
},
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"hide": 0,
|
|
||||||
"includeAll": false,
|
|
||||||
"label": "type",
|
|
||||||
"multi": false,
|
|
||||||
"name": "type",
|
|
||||||
"options": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"query": "label_values(mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\"}, workload_type)",
|
|
||||||
"refresh": 1,
|
|
||||||
"regex": "",
|
|
||||||
"sort": 2,
|
|
||||||
"tagValuesQuery": "",
|
|
||||||
"tags": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tagsQuery": "",
|
|
||||||
"type": "query",
|
|
||||||
"useTags": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allValue": null,
|
|
||||||
"auto": false,
|
|
||||||
"auto_count": 30,
|
|
||||||
"auto_min": "10s",
|
|
||||||
"current": {
|
|
||||||
"text": "5m",
|
|
||||||
"value": "5m"
|
|
||||||
},
|
|
||||||
"datasource": "prometheus",
|
|
||||||
"hide": 2,
|
|
||||||
"includeAll": false,
|
|
||||||
"label": null,
|
|
||||||
"multi": false,
|
|
||||||
"name": "interval",
|
|
||||||
"options": [
|
|
||||||
{
|
|
||||||
"selected": true,
|
|
||||||
"text": "4h",
|
|
||||||
"value": "4h"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"query": "4h",
|
|
||||||
"refresh": 2,
|
|
||||||
"regex": "",
|
|
||||||
"skipUrlSync": false,
|
|
||||||
"sort": 1,
|
"sort": 1,
|
||||||
"tagValuesQuery": "",
|
"tagValuesQuery": "",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"tagsQuery": "",
|
"tagsQuery": "",
|
||||||
"type": "interval",
|
"type": "query",
|
||||||
|
"useTags": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allValue": null,
|
||||||
|
"current": {
|
||||||
|
"text": "",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": false,
|
||||||
|
"label": null,
|
||||||
|
"multi": false,
|
||||||
|
"name": "workload",
|
||||||
|
"options": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\"}, workload)",
|
||||||
|
"refresh": 1,
|
||||||
|
"regex": "",
|
||||||
|
"sort": 1,
|
||||||
|
"tagValuesQuery": "",
|
||||||
|
"tags": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"tagsQuery": "",
|
||||||
|
"type": "query",
|
||||||
|
"useTags": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allValue": null,
|
||||||
|
"current": {
|
||||||
|
"text": "",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": false,
|
||||||
|
"label": null,
|
||||||
|
"multi": false,
|
||||||
|
"name": "type",
|
||||||
|
"options": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload=\"$workload\"}, workload_type)",
|
||||||
|
"refresh": 1,
|
||||||
|
"regex": "",
|
||||||
|
"sort": 1,
|
||||||
|
"tagValuesQuery": "",
|
||||||
|
"tags": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"tagsQuery": "",
|
||||||
|
"type": "query",
|
||||||
"useTags": false
|
"useTags": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -3629,7 +3757,7 @@ data:
|
|||||||
"30d"
|
"30d"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "",
|
"timezone": "UTC",
|
||||||
"title": "Kubernetes / Compute Resources / Workload",
|
"title": "Kubernetes / Compute Resources / Workload",
|
||||||
"uid": "a164a7f0339f99e89cea5cb47e9be617",
|
"uid": "a164a7f0339f99e89cea5cb47e9be617",
|
||||||
"version": 0
|
"version": 0
|
||||||
@ -3684,7 +3812,26 @@ data:
|
|||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
{
|
||||||
|
"alias": "quota - requests",
|
||||||
|
"color": "#F2495C",
|
||||||
|
"dashes": true,
|
||||||
|
"fill": 0,
|
||||||
|
"hideTooltip": true,
|
||||||
|
"legend": false,
|
||||||
|
"linewidth": 2,
|
||||||
|
"stack": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alias": "quota - limits",
|
||||||
|
"color": "#FF9830",
|
||||||
|
"dashes": true,
|
||||||
|
"fill": 0,
|
||||||
|
"hideTooltip": true,
|
||||||
|
"legend": false,
|
||||||
|
"linewidth": 2,
|
||||||
|
"stack": false
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"spaceLength": 10,
|
"spaceLength": 10,
|
||||||
"span": 12,
|
"span": 12,
|
||||||
@ -3692,12 +3839,28 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{workload}} - {{workload_type}}",
|
"legendFormat": "{{workload}} - {{workload_type}}",
|
||||||
"legendLink": null,
|
"legendLink": null,
|
||||||
"step": 10
|
"step": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.cpu\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "quota - requests",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.cpu\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "quota - limits",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -3804,6 +3967,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 0,
|
"decimals": 0,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -3822,6 +3986,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -3840,6 +4005,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -3858,6 +4024,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -3876,6 +4043,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -3894,6 +4062,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #F",
|
"pattern": "Value #F",
|
||||||
@ -3912,6 +4081,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "./d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$__cell_2",
|
"linkUrl": "./d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$__cell_2",
|
||||||
"pattern": "workload",
|
"pattern": "workload",
|
||||||
@ -3930,6 +4100,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "workload_type",
|
"pattern": "workload_type",
|
||||||
@ -3957,7 +4128,7 @@ data:
|
|||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "count(mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}) by (workload, workload_type)",
|
"expr": "count(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}) by (workload, workload_type)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -3966,7 +4137,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -3975,7 +4146,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n kube_pod_container_resource_requests_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
"expr": "sum(\n kube_pod_container_resource_requests_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -3984,7 +4155,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_requests_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_requests_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -3993,7 +4164,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n kube_pod_container_resource_limits_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
"expr": "sum(\n kube_pod_container_resource_limits_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4002,7 +4173,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_limits_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
"expr": "sum(\n node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_limits_cpu_cores{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4094,7 +4265,26 @@ data:
|
|||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
{
|
||||||
|
"alias": "quota - requests",
|
||||||
|
"color": "#F2495C",
|
||||||
|
"dashes": true,
|
||||||
|
"fill": 0,
|
||||||
|
"hideTooltip": true,
|
||||||
|
"legend": false,
|
||||||
|
"linewidth": 2,
|
||||||
|
"stack": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alias": "quota - limits",
|
||||||
|
"color": "#FF9830",
|
||||||
|
"dashes": true,
|
||||||
|
"fill": 0,
|
||||||
|
"hideTooltip": true,
|
||||||
|
"legend": false,
|
||||||
|
"linewidth": 2,
|
||||||
|
"stack": false
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"spaceLength": 10,
|
"spaceLength": 10,
|
||||||
"span": 12,
|
"span": 12,
|
||||||
@ -4102,12 +4292,28 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{workload}} - {{workload_type}}",
|
"legendFormat": "{{workload}} - {{workload_type}}",
|
||||||
"legendLink": null,
|
"legendLink": null,
|
||||||
"step": 10
|
"step": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"requests.memory\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "quota - requests",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "scalar(kube_resourcequota{cluster=\"$cluster\", namespace=\"$namespace\", type=\"hard\",resource=\"limits.memory\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "quota - limits",
|
||||||
|
"legendLink": null,
|
||||||
|
"step": 10
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -4214,6 +4420,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 0,
|
"decimals": 0,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -4232,6 +4439,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -4250,6 +4458,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -4268,6 +4477,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -4286,6 +4496,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -4304,6 +4515,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #F",
|
"pattern": "Value #F",
|
||||||
@ -4322,6 +4534,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "./d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$__cell_2",
|
"linkUrl": "./d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$__cell_2",
|
||||||
"pattern": "workload",
|
"pattern": "workload",
|
||||||
@ -4340,6 +4553,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "workload_type",
|
"pattern": "workload_type",
|
||||||
@ -4367,7 +4581,7 @@ data:
|
|||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "count(mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}) by (workload, workload_type)",
|
"expr": "count(namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}) by (workload, workload_type)",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4376,7 +4590,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4385,7 +4599,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n kube_pod_container_resource_requests_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
"expr": "sum(\n kube_pod_container_resource_requests_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4394,7 +4608,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_requests_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_requests_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4403,7 +4617,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n kube_pod_container_resource_limits_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
"expr": "sum(\n kube_pod_container_resource_limits_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4412,7 +4626,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_limits_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
"expr": "sum(\n container_memory_working_set_bytes{cluster=\"$cluster\", namespace=\"$namespace\", container!=\"\", image!=\"\"}\n * on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n/sum(\n kube_pod_container_resource_limits_memory_bytes{cluster=\"$cluster\", namespace=\"$namespace\"}\n* on(namespace,pod)\n group_left(workload, workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=\"$namespace\", workload_type=\"$type\"}\n) by (workload, workload_type)\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4484,6 +4698,7 @@ data:
|
|||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 5,
|
"id": 5,
|
||||||
|
"interval": "1m",
|
||||||
"legend": {
|
"legend": {
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
@ -4526,6 +4741,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -4544,6 +4760,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -4562,6 +4779,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #C",
|
"pattern": "Value #C",
|
||||||
@ -4580,6 +4798,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #D",
|
"pattern": "Value #D",
|
||||||
@ -4598,6 +4817,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #E",
|
"pattern": "Value #E",
|
||||||
@ -4616,6 +4836,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #F",
|
"pattern": "Value #F",
|
||||||
@ -4634,6 +4855,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": true,
|
"link": true,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down to pods",
|
"linkTooltip": "Drill down to pods",
|
||||||
"linkUrl": "./d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$type",
|
"linkUrl": "./d/a164a7f0339f99e89cea5cb47e9be617/k8s-resources-workload?var-datasource=$datasource&var-cluster=$cluster&var-namespace=$namespace&var-workload=$__cell&var-type=$type",
|
||||||
"pattern": "workload",
|
"pattern": "workload",
|
||||||
@ -4652,6 +4874,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "workload_type",
|
"pattern": "workload_type",
|
||||||
@ -4679,7 +4902,7 @@ data:
|
|||||||
],
|
],
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n",
|
"expr": "(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4688,7 +4911,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n",
|
"expr": "(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4697,7 +4920,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n",
|
"expr": "(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4706,7 +4929,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n",
|
"expr": "(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4715,7 +4938,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n",
|
"expr": "(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4724,7 +4947,7 @@ data:
|
|||||||
"step": 10
|
"step": 10
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n",
|
"expr": "(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload_type=\"$type\"}) by (workload))\n",
|
||||||
"format": "table",
|
"format": "table",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@ -4824,7 +5047,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
"expr": "(sum(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{workload}}",
|
"legendFormat": "{{workload}}",
|
||||||
@ -4922,7 +5145,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
"expr": "(sum(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{workload}}",
|
"legendFormat": "{{workload}}",
|
||||||
@ -5020,7 +5243,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
"expr": "(avg(irate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{workload}}",
|
"legendFormat": "{{workload}}",
|
||||||
@ -5118,7 +5341,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
"expr": "(avg(irate(container_network_transmit_bytes_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{workload}}",
|
"legendFormat": "{{workload}}",
|
||||||
@ -5216,7 +5439,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
"expr": "(sum(irate(container_network_receive_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{workload}}",
|
"legendFormat": "{{workload}}",
|
||||||
@ -5314,7 +5537,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
"expr": "(sum(irate(container_network_transmit_packets_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{workload}}",
|
"legendFormat": "{{workload}}",
|
||||||
@ -5412,7 +5635,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
"expr": "(sum(irate(container_network_receive_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{workload}}",
|
"legendFormat": "{{workload}}",
|
||||||
@ -5510,7 +5733,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$interval])\n* on (namespace,pod) \ngroup_left(workload,workload_type) mixin_pod_workload{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
"expr": "(sum(irate(container_network_transmit_packets_dropped_total{cluster=\"$cluster\", namespace=~\"$namespace\"}[$__rate_interval])\n* on (namespace,pod)\ngroup_left(workload,workload_type) namespace_workload_pod:kube_pod_owner:relabel{cluster=\"$cluster\", namespace=~\"$namespace\", workload=~\".+\", workload_type=\"$type\"}) by (workload))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{workload}}",
|
"legendFormat": "{{workload}}",
|
||||||
@ -5576,8 +5799,8 @@ data:
|
|||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "Prometheus",
|
"text": "default",
|
||||||
"value": "Prometheus"
|
"value": "default"
|
||||||
},
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -5590,95 +5813,6 @@ data:
|
|||||||
"regex": "",
|
"regex": "",
|
||||||
"type": "datasource"
|
"type": "datasource"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"allValue": null,
|
|
||||||
"current": {
|
|
||||||
"text": "prod",
|
|
||||||
"value": "prod"
|
|
||||||
},
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"hide": 2,
|
|
||||||
"includeAll": false,
|
|
||||||
"label": "cluster",
|
|
||||||
"multi": false,
|
|
||||||
"name": "cluster",
|
|
||||||
"options": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"query": "label_values(kube_pod_info, cluster)",
|
|
||||||
"refresh": 1,
|
|
||||||
"regex": "",
|
|
||||||
"sort": 2,
|
|
||||||
"tagValuesQuery": "",
|
|
||||||
"tags": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tagsQuery": "",
|
|
||||||
"type": "query",
|
|
||||||
"useTags": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allValue": null,
|
|
||||||
"current": {
|
|
||||||
"text": "prod",
|
|
||||||
"value": "prod"
|
|
||||||
},
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"hide": 0,
|
|
||||||
"includeAll": false,
|
|
||||||
"label": "namespace",
|
|
||||||
"multi": false,
|
|
||||||
"name": "namespace",
|
|
||||||
"options": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)",
|
|
||||||
"refresh": 1,
|
|
||||||
"regex": "",
|
|
||||||
"sort": 2,
|
|
||||||
"tagValuesQuery": "",
|
|
||||||
"tags": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tagsQuery": "",
|
|
||||||
"type": "query",
|
|
||||||
"useTags": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allValue": null,
|
|
||||||
"auto": false,
|
|
||||||
"auto_count": 30,
|
|
||||||
"auto_min": "10s",
|
|
||||||
"current": {
|
|
||||||
"text": "5m",
|
|
||||||
"value": "5m"
|
|
||||||
},
|
|
||||||
"datasource": "prometheus",
|
|
||||||
"hide": 2,
|
|
||||||
"includeAll": false,
|
|
||||||
"label": null,
|
|
||||||
"multi": false,
|
|
||||||
"name": "interval",
|
|
||||||
"options": [
|
|
||||||
{
|
|
||||||
"selected": true,
|
|
||||||
"text": "4h",
|
|
||||||
"value": "4h"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"query": "4h",
|
|
||||||
"refresh": 2,
|
|
||||||
"regex": "",
|
|
||||||
"skipUrlSync": false,
|
|
||||||
"sort": 1,
|
|
||||||
"tagValuesQuery": "",
|
|
||||||
"tags": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tagsQuery": "",
|
|
||||||
"type": "interval",
|
|
||||||
"useTags": false
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"allValue": null,
|
"allValue": null,
|
||||||
"auto": false,
|
"auto": false,
|
||||||
@ -5689,7 +5823,7 @@ data:
|
|||||||
"value": "deployment"
|
"value": "deployment"
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"definition": "label_values(mixin_pod_workload{namespace=~\"$namespace\", workload=~\".+\"}, workload_type)",
|
"definition": "label_values(namespace_workload_pod:kube_pod_owner:relabel{namespace=~\"$namespace\", workload=~\".+\"}, workload_type)",
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -5698,7 +5832,7 @@ data:
|
|||||||
"options": [
|
"options": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"query": "label_values(mixin_pod_workload{namespace=~\"$namespace\", workload=~\".+\"}, workload_type)",
|
"query": "label_values(namespace_workload_pod:kube_pod_owner:relabel{namespace=~\"$namespace\", workload=~\".+\"}, workload_type)",
|
||||||
"refresh": 1,
|
"refresh": 1,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"skipUrlSync": false,
|
"skipUrlSync": false,
|
||||||
@ -5706,6 +5840,60 @@ data:
|
|||||||
"tagValuesQuery": "",
|
"tagValuesQuery": "",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"tagsQuery": "",
|
||||||
|
"type": "query",
|
||||||
|
"useTags": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allValue": null,
|
||||||
|
"current": {
|
||||||
|
"text": "",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"hide": 2,
|
||||||
|
"includeAll": false,
|
||||||
|
"label": null,
|
||||||
|
"multi": false,
|
||||||
|
"name": "cluster",
|
||||||
|
"options": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"query": "label_values(kube_pod_info, cluster)",
|
||||||
|
"refresh": 1,
|
||||||
|
"regex": "",
|
||||||
|
"sort": 1,
|
||||||
|
"tagValuesQuery": "",
|
||||||
|
"tags": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"tagsQuery": "",
|
||||||
|
"type": "query",
|
||||||
|
"useTags": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allValue": null,
|
||||||
|
"current": {
|
||||||
|
"text": "",
|
||||||
|
"value": ""
|
||||||
|
},
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": false,
|
||||||
|
"label": null,
|
||||||
|
"multi": false,
|
||||||
|
"name": "namespace",
|
||||||
|
"options": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)",
|
||||||
|
"refresh": 1,
|
||||||
|
"regex": "",
|
||||||
|
"sort": 1,
|
||||||
|
"tagValuesQuery": "",
|
||||||
|
"tags": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"tagsQuery": "",
|
"tagsQuery": "",
|
||||||
"type": "query",
|
"type": "query",
|
||||||
@ -5742,7 +5930,7 @@ data:
|
|||||||
"30d"
|
"30d"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "",
|
"timezone": "UTC",
|
||||||
"title": "Kubernetes / Compute Resources / Namespace (Workloads)",
|
"title": "Kubernetes / Compute Resources / Namespace (Workloads)",
|
||||||
"uid": "a87fb0d919ec0ea5f6543124e16c42a5",
|
"uid": "a87fb0d919ec0ea5f6543124e16c42a5",
|
||||||
"version": 0
|
"version": 0
|
||||||
|
|||||||
@ -21,7 +21,25 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"refresh": "",
|
"panels": [
|
||||||
|
{
|
||||||
|
"content": "The SLO (service level objective) and other metrics displayed on this dashboard are for informational purposes only.",
|
||||||
|
"datasource": null,
|
||||||
|
"description": "The SLO (service level objective) and other metrics displayed on this dashboard are for informational purposes only.",
|
||||||
|
"gridPos": {
|
||||||
|
"h": 2,
|
||||||
|
"w": 24,
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 2,
|
||||||
|
"mode": "markdown",
|
||||||
|
"span": 12,
|
||||||
|
"title": "Notice",
|
||||||
|
"type": "text"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"refresh": "10s",
|
||||||
"rows": [
|
"rows": [
|
||||||
{
|
{
|
||||||
"collapse": false,
|
"collapse": false,
|
||||||
@ -37,7 +55,9 @@ data:
|
|||||||
"#d44a3a"
|
"#d44a3a"
|
||||||
],
|
],
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"format": "none",
|
"decimals": 3,
|
||||||
|
"description": "How many percent of requests (both read and write) in 30 days have been answered successfully and fast enough?",
|
||||||
|
"format": "percentunit",
|
||||||
"gauge": {
|
"gauge": {
|
||||||
"maxValue": 100,
|
"maxValue": 100,
|
||||||
"minValue": 0,
|
"minValue": 0,
|
||||||
@ -48,7 +68,7 @@ data:
|
|||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 2,
|
"id": 3,
|
||||||
"interval": null,
|
"interval": null,
|
||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
@ -78,7 +98,7 @@ data:
|
|||||||
"to": "null"
|
"to": "null"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"span": 2,
|
"span": 4,
|
||||||
"sparkline": {
|
"sparkline": {
|
||||||
"fillColor": "rgba(31, 118, 189, 0.18)",
|
"fillColor": "rgba(31, 118, 189, 0.18)",
|
||||||
"full": false,
|
"full": false,
|
||||||
@ -88,7 +108,7 @@ data:
|
|||||||
"tableColumn": "",
|
"tableColumn": "",
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(up{job=\"apiserver\"})",
|
"expr": "apiserver_request:availability30d{verb=\"all\", cluster=\"$cluster\"}",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "",
|
"legendFormat": "",
|
||||||
@ -96,7 +116,7 @@ data:
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": "",
|
"thresholds": "",
|
||||||
"title": "Up",
|
"title": "Availability (30d) > 99.000%",
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"shared": false
|
"shared": false
|
||||||
},
|
},
|
||||||
@ -109,7 +129,7 @@ data:
|
|||||||
"value": "null"
|
"value": "null"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"valueName": "min"
|
"valueName": "avg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"aliasColors": {
|
"aliasColors": {
|
||||||
@ -119,11 +139,14 @@ data:
|
|||||||
"dashLength": 10,
|
"dashLength": 10,
|
||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"decimals": 3,
|
||||||
|
"description": "How much error budget is left looking at our 0.990% availability guarantees?",
|
||||||
|
"fill": 10,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 3,
|
"id": 4,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": false,
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
@ -132,6 +155,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -150,37 +174,16 @@ data:
|
|||||||
|
|
||||||
],
|
],
|
||||||
"spaceLength": 10,
|
"spaceLength": 10,
|
||||||
"span": 5,
|
"span": 8,
|
||||||
"stack": false,
|
"stack": false,
|
||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(rate(apiserver_request_total{job=\"apiserver\", instance=~\"$instance\",code=~\"2..\"}[5m]))",
|
"expr": "100 * (apiserver_request:availability30d{verb=\"all\", cluster=\"$cluster\"} - 0.990000)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "2xx",
|
"legendFormat": "errorbudget",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
},
|
|
||||||
{
|
|
||||||
"expr": "sum(rate(apiserver_request_total{job=\"apiserver\", instance=~\"$instance\",code=~\"3..\"}[5m]))",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "3xx",
|
|
||||||
"refId": "B"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expr": "sum(rate(apiserver_request_total{job=\"apiserver\", instance=~\"$instance\",code=~\"4..\"}[5m]))",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "4xx",
|
|
||||||
"refId": "C"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expr": "sum(rate(apiserver_request_total{job=\"apiserver\", instance=~\"$instance\",code=~\"5..\"}[5m]))",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "5xx",
|
|
||||||
"refId": "D"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -188,7 +191,7 @@ data:
|
|||||||
],
|
],
|
||||||
"timeFrom": null,
|
"timeFrom": null,
|
||||||
"timeShift": null,
|
"timeShift": null,
|
||||||
"title": "RPC Rate",
|
"title": "ErrorBudget (30d) > 99.000%",
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"shared": false,
|
"shared": false,
|
||||||
"sort": 0,
|
"sort": 0,
|
||||||
@ -206,7 +209,8 @@ data:
|
|||||||
},
|
},
|
||||||
"yaxes": [
|
"yaxes": [
|
||||||
{
|
{
|
||||||
"format": "ops",
|
"decimals": 3,
|
||||||
|
"format": "percentunit",
|
||||||
"label": null,
|
"label": null,
|
||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
@ -214,7 +218,216 @@ data:
|
|||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"format": "ops",
|
"decimals": 3,
|
||||||
|
"format": "percentunit",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repeat": null,
|
||||||
|
"repeatIteration": null,
|
||||||
|
"repeatRowId": null,
|
||||||
|
"showTitle": false,
|
||||||
|
"title": "Dashboard Row",
|
||||||
|
"titleSize": "h6",
|
||||||
|
"type": "row"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"collapse": false,
|
||||||
|
"collapsed": false,
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"cacheTimeout": null,
|
||||||
|
"colorBackground": false,
|
||||||
|
"colorValue": false,
|
||||||
|
"colors": [
|
||||||
|
"#299c46",
|
||||||
|
"rgba(237, 129, 40, 0.89)",
|
||||||
|
"#d44a3a"
|
||||||
|
],
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"decimals": 3,
|
||||||
|
"description": "How many percent of read requests (LIST,GET) in 30 days have been answered successfully and fast enough?",
|
||||||
|
"format": "percentunit",
|
||||||
|
"gauge": {
|
||||||
|
"maxValue": 100,
|
||||||
|
"minValue": 0,
|
||||||
|
"show": false,
|
||||||
|
"thresholdLabels": false,
|
||||||
|
"thresholdMarkers": true
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 5,
|
||||||
|
"interval": null,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"mappingType": 1,
|
||||||
|
"mappingTypes": [
|
||||||
|
{
|
||||||
|
"name": "value to text",
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "range to text",
|
||||||
|
"value": 2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"maxDataPoints": 100,
|
||||||
|
"nullPointMode": "connected",
|
||||||
|
"nullText": null,
|
||||||
|
"postfix": "",
|
||||||
|
"postfixFontSize": "50%",
|
||||||
|
"prefix": "",
|
||||||
|
"prefixFontSize": "50%",
|
||||||
|
"rangeMaps": [
|
||||||
|
{
|
||||||
|
"from": "null",
|
||||||
|
"text": "N/A",
|
||||||
|
"to": "null"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"span": 3,
|
||||||
|
"sparkline": {
|
||||||
|
"fillColor": "rgba(31, 118, 189, 0.18)",
|
||||||
|
"full": false,
|
||||||
|
"lineColor": "rgb(31, 120, 193)",
|
||||||
|
"show": false
|
||||||
|
},
|
||||||
|
"tableColumn": "",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "apiserver_request:availability30d{verb=\"read\", cluster=\"$cluster\"}",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": "",
|
||||||
|
"title": "Read Availability (30d)",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false
|
||||||
|
},
|
||||||
|
"type": "singlestat",
|
||||||
|
"valueFontSize": "80%",
|
||||||
|
"valueMaps": [
|
||||||
|
{
|
||||||
|
"op": "=",
|
||||||
|
"text": "N/A",
|
||||||
|
"value": "null"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"valueName": "avg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"description": "How many read requests (LIST,GET) per second do the apiservers get by code?",
|
||||||
|
"fill": 10,
|
||||||
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 6,
|
||||||
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
|
"seriesOverrides": [
|
||||||
|
{
|
||||||
|
"alias": "/2../i",
|
||||||
|
"color": "#56A64B"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alias": "/3../i",
|
||||||
|
"color": "#F2CC0C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alias": "/4../i",
|
||||||
|
"color": "#3274D9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alias": "/5../i",
|
||||||
|
"color": "#E02F44"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 3,
|
||||||
|
"stack": true,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum by (code) (code_resource:apiserver_request_total:rate5m{verb=\"read\", cluster=\"$cluster\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{ code }}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Read SLI - Requests",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "reqps",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "reqps",
|
||||||
"label": null,
|
"label": null,
|
||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
@ -231,21 +444,24 @@ data:
|
|||||||
"dashLength": 10,
|
"dashLength": 10,
|
||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
|
"description": "How many percent of read requests (LIST,GET) per second are returned with errors (5xx)?",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 4,
|
"id": 7,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": false,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": false,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": false
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -262,15 +478,15 @@ data:
|
|||||||
|
|
||||||
],
|
],
|
||||||
"spaceLength": 10,
|
"spaceLength": 10,
|
||||||
"span": 5,
|
"span": 3,
|
||||||
"stack": false,
|
"stack": false,
|
||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.99, sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\", instance=~\"$instance\"}[5m])) by (verb, le))",
|
"expr": "sum by (resource) (code_resource:apiserver_request_total:rate5m{verb=\"read\",code=~\"5..\", cluster=\"$cluster\"}) / sum by (resource) (code_resource:apiserver_request_total:rate5m{verb=\"read\", cluster=\"$cluster\"})",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{verb}}",
|
"legendFormat": "{{ resource }}",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -279,7 +495,497 @@ data:
|
|||||||
],
|
],
|
||||||
"timeFrom": null,
|
"timeFrom": null,
|
||||||
"timeShift": null,
|
"timeShift": null,
|
||||||
"title": "Request duration 99th quantile",
|
"title": "Read SLI - Errors",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "percentunit",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "percentunit",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"description": "How many seconds is the 99th percentile for reading (LIST|GET) a given resource?",
|
||||||
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 8,
|
||||||
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 3,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile{verb=\"read\", cluster=\"$cluster\"}",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{ resource }}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Read SLI - Duration",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "s",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "s",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repeat": null,
|
||||||
|
"repeatIteration": null,
|
||||||
|
"repeatRowId": null,
|
||||||
|
"showTitle": false,
|
||||||
|
"title": "Dashboard Row",
|
||||||
|
"titleSize": "h6",
|
||||||
|
"type": "row"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"collapse": false,
|
||||||
|
"collapsed": false,
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"cacheTimeout": null,
|
||||||
|
"colorBackground": false,
|
||||||
|
"colorValue": false,
|
||||||
|
"colors": [
|
||||||
|
"#299c46",
|
||||||
|
"rgba(237, 129, 40, 0.89)",
|
||||||
|
"#d44a3a"
|
||||||
|
],
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"decimals": 3,
|
||||||
|
"description": "How many percent of write requests (POST|PUT|PATCH|DELETE) in 30 days have been answered successfully and fast enough?",
|
||||||
|
"format": "percentunit",
|
||||||
|
"gauge": {
|
||||||
|
"maxValue": 100,
|
||||||
|
"minValue": 0,
|
||||||
|
"show": false,
|
||||||
|
"thresholdLabels": false,
|
||||||
|
"thresholdMarkers": true
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 9,
|
||||||
|
"interval": null,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"mappingType": 1,
|
||||||
|
"mappingTypes": [
|
||||||
|
{
|
||||||
|
"name": "value to text",
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "range to text",
|
||||||
|
"value": 2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"maxDataPoints": 100,
|
||||||
|
"nullPointMode": "connected",
|
||||||
|
"nullText": null,
|
||||||
|
"postfix": "",
|
||||||
|
"postfixFontSize": "50%",
|
||||||
|
"prefix": "",
|
||||||
|
"prefixFontSize": "50%",
|
||||||
|
"rangeMaps": [
|
||||||
|
{
|
||||||
|
"from": "null",
|
||||||
|
"text": "N/A",
|
||||||
|
"to": "null"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"span": 3,
|
||||||
|
"sparkline": {
|
||||||
|
"fillColor": "rgba(31, 118, 189, 0.18)",
|
||||||
|
"full": false,
|
||||||
|
"lineColor": "rgb(31, 120, 193)",
|
||||||
|
"show": false
|
||||||
|
},
|
||||||
|
"tableColumn": "",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "apiserver_request:availability30d{verb=\"write\", cluster=\"$cluster\"}",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": "",
|
||||||
|
"title": "Write Availability (30d)",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false
|
||||||
|
},
|
||||||
|
"type": "singlestat",
|
||||||
|
"valueFontSize": "80%",
|
||||||
|
"valueMaps": [
|
||||||
|
{
|
||||||
|
"op": "=",
|
||||||
|
"text": "N/A",
|
||||||
|
"value": "null"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"valueName": "avg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"description": "How many write requests (POST|PUT|PATCH|DELETE) per second do the apiservers get by code?",
|
||||||
|
"fill": 10,
|
||||||
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 10,
|
||||||
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
|
"seriesOverrides": [
|
||||||
|
{
|
||||||
|
"alias": "/2../i",
|
||||||
|
"color": "#56A64B"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alias": "/3../i",
|
||||||
|
"color": "#F2CC0C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alias": "/4../i",
|
||||||
|
"color": "#3274D9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alias": "/5../i",
|
||||||
|
"color": "#E02F44"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 3,
|
||||||
|
"stack": true,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum by (code) (code_resource:apiserver_request_total:rate5m{verb=\"write\", cluster=\"$cluster\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{ code }}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Write SLI - Requests",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "reqps",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "reqps",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"description": "How many percent of write requests (POST|PUT|PATCH|DELETE) per second are returned with errors (5xx)?",
|
||||||
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 11,
|
||||||
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 3,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum by (resource) (code_resource:apiserver_request_total:rate5m{verb=\"write\",code=~\"5..\", cluster=\"$cluster\"}) / sum by (resource) (code_resource:apiserver_request_total:rate5m{verb=\"write\", cluster=\"$cluster\"})",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{ resource }}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Write SLI - Errors",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": false,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "percentunit",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "percentunit",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"description": "How many seconds is the 99th percentile for writing (POST|PUT|PATCH|DELETE) a given resource?",
|
||||||
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 12,
|
||||||
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 3,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile{verb=\"write\", cluster=\"$cluster\"}",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{ resource }}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Write SLI - Duration",
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"shared": false,
|
"shared": false,
|
||||||
"sort": 0,
|
"sort": 0,
|
||||||
@ -336,10 +1042,11 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 5,
|
"id": 13,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": false,
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
@ -348,6 +1055,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": false,
|
"show": false,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -371,7 +1079,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(rate(workqueue_adds_total{job=\"apiserver\", instance=~\"$instance\"}[5m])) by (instance, name)",
|
"expr": "sum(rate(workqueue_adds_total{job=\"apiserver\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])) by (instance, name)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{instance}} {{name}}",
|
"legendFormat": "{{instance}} {{name}}",
|
||||||
@ -427,10 +1135,11 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 6,
|
"id": 14,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": false,
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
@ -439,6 +1148,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": false,
|
"show": false,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -462,7 +1172,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(rate(workqueue_depth{job=\"apiserver\", instance=~\"$instance\"}[5m])) by (instance, name)",
|
"expr": "sum(rate(workqueue_depth{job=\"apiserver\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])) by (instance, name)",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{instance}} {{name}}",
|
"legendFormat": "{{instance}} {{name}}",
|
||||||
@ -518,20 +1228,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 7,
|
"id": 15,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -553,7 +1265,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.99, sum(rate(workqueue_queue_duration_seconds_bucket{job=\"apiserver\", instance=~\"$instance\"}[5m])) by (instance, name, le))",
|
"expr": "histogram_quantile(0.99, sum(rate(workqueue_queue_duration_seconds_bucket{job=\"apiserver\", instance=~\"$instance\", cluster=\"$cluster\"}[5m])) by (instance, name, le))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{instance}} {{name}}",
|
"legendFormat": "{{instance}} {{name}}",
|
||||||
@ -622,10 +1334,11 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 8,
|
"id": 16,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": false,
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
@ -634,6 +1347,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -657,307 +1371,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "etcd_helper_cache_entry_total{job=\"apiserver\", instance=~\"$instance\"}",
|
"expr": "process_resident_memory_bytes{job=\"apiserver\",instance=~\"$instance\", cluster=\"$cluster\"}",
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "{{instance}}",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"thresholds": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"timeFrom": null,
|
|
||||||
"timeShift": null,
|
|
||||||
"title": "ETCD Cache Entry Total",
|
|
||||||
"tooltip": {
|
|
||||||
"shared": false,
|
|
||||||
"sort": 0,
|
|
||||||
"value_type": "individual"
|
|
||||||
},
|
|
||||||
"type": "graph",
|
|
||||||
"xaxis": {
|
|
||||||
"buckets": null,
|
|
||||||
"mode": "time",
|
|
||||||
"name": null,
|
|
||||||
"show": true,
|
|
||||||
"values": [
|
|
||||||
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"yaxes": [
|
|
||||||
{
|
|
||||||
"format": "short",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"format": "short",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"aliasColors": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"bars": false,
|
|
||||||
"dashLength": 10,
|
|
||||||
"dashes": false,
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"fill": 1,
|
|
||||||
"gridPos": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"id": 9,
|
|
||||||
"legend": {
|
|
||||||
"alignAsTable": false,
|
|
||||||
"avg": false,
|
|
||||||
"current": false,
|
|
||||||
"max": false,
|
|
||||||
"min": false,
|
|
||||||
"rightSide": false,
|
|
||||||
"show": true,
|
|
||||||
"total": false,
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"lines": true,
|
|
||||||
"linewidth": 1,
|
|
||||||
"links": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"nullPointMode": "null",
|
|
||||||
"percentage": false,
|
|
||||||
"pointradius": 5,
|
|
||||||
"points": false,
|
|
||||||
"renderer": "flot",
|
|
||||||
"repeat": null,
|
|
||||||
"seriesOverrides": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"spaceLength": 10,
|
|
||||||
"span": 4,
|
|
||||||
"stack": false,
|
|
||||||
"steppedLine": false,
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"expr": "sum(rate(etcd_helper_cache_hit_total{job=\"apiserver\",instance=~\"$instance\"}[5m])) by (intance)",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "{{instance}} hit",
|
|
||||||
"refId": "A"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expr": "sum(rate(etcd_helper_cache_miss_total{job=\"apiserver\",instance=~\"$instance\"}[5m])) by (instance)",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "{{instance}} miss",
|
|
||||||
"refId": "B"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"thresholds": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"timeFrom": null,
|
|
||||||
"timeShift": null,
|
|
||||||
"title": "ETCD Cache Hit/Miss Rate",
|
|
||||||
"tooltip": {
|
|
||||||
"shared": false,
|
|
||||||
"sort": 0,
|
|
||||||
"value_type": "individual"
|
|
||||||
},
|
|
||||||
"type": "graph",
|
|
||||||
"xaxis": {
|
|
||||||
"buckets": null,
|
|
||||||
"mode": "time",
|
|
||||||
"name": null,
|
|
||||||
"show": true,
|
|
||||||
"values": [
|
|
||||||
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"yaxes": [
|
|
||||||
{
|
|
||||||
"format": "ops",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"format": "ops",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"aliasColors": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"bars": false,
|
|
||||||
"dashLength": 10,
|
|
||||||
"dashes": false,
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"fill": 1,
|
|
||||||
"gridPos": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"id": 10,
|
|
||||||
"legend": {
|
|
||||||
"alignAsTable": false,
|
|
||||||
"avg": false,
|
|
||||||
"current": false,
|
|
||||||
"max": false,
|
|
||||||
"min": false,
|
|
||||||
"rightSide": false,
|
|
||||||
"show": true,
|
|
||||||
"total": false,
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"lines": true,
|
|
||||||
"linewidth": 1,
|
|
||||||
"links": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"nullPointMode": "null",
|
|
||||||
"percentage": false,
|
|
||||||
"pointradius": 5,
|
|
||||||
"points": false,
|
|
||||||
"renderer": "flot",
|
|
||||||
"repeat": null,
|
|
||||||
"seriesOverrides": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"spaceLength": 10,
|
|
||||||
"span": 4,
|
|
||||||
"stack": false,
|
|
||||||
"steppedLine": false,
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"expr": "histogram_quantile(0.99,sum(rate(etcd_request_cache_get_duration_seconds_bucket{job=\"apiserver\",instance=~\"$instance\"}[5m])) by (instance, le))",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "{{instance}} get",
|
|
||||||
"refId": "A"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expr": "histogram_quantile(0.99,sum(rate(etcd_request_cache_add_duration_seconds_bucket{job=\"apiserver\",instance=~\"$instance\"}[5m])) by (instance, le))",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "{{instance}} miss",
|
|
||||||
"refId": "B"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"thresholds": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"timeFrom": null,
|
|
||||||
"timeShift": null,
|
|
||||||
"title": "ETCD Cache Duration 99th Quantile",
|
|
||||||
"tooltip": {
|
|
||||||
"shared": false,
|
|
||||||
"sort": 0,
|
|
||||||
"value_type": "individual"
|
|
||||||
},
|
|
||||||
"type": "graph",
|
|
||||||
"xaxis": {
|
|
||||||
"buckets": null,
|
|
||||||
"mode": "time",
|
|
||||||
"name": null,
|
|
||||||
"show": true,
|
|
||||||
"values": [
|
|
||||||
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"yaxes": [
|
|
||||||
{
|
|
||||||
"format": "s",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"format": "s",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"repeat": null,
|
|
||||||
"repeatIteration": null,
|
|
||||||
"repeatRowId": null,
|
|
||||||
"showTitle": false,
|
|
||||||
"title": "Dashboard Row",
|
|
||||||
"titleSize": "h6",
|
|
||||||
"type": "row"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"collapse": false,
|
|
||||||
"collapsed": false,
|
|
||||||
"panels": [
|
|
||||||
{
|
|
||||||
"aliasColors": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"bars": false,
|
|
||||||
"dashLength": 10,
|
|
||||||
"dashes": false,
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"fill": 1,
|
|
||||||
"gridPos": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"id": 11,
|
|
||||||
"legend": {
|
|
||||||
"alignAsTable": false,
|
|
||||||
"avg": false,
|
|
||||||
"current": false,
|
|
||||||
"max": false,
|
|
||||||
"min": false,
|
|
||||||
"rightSide": false,
|
|
||||||
"show": true,
|
|
||||||
"total": false,
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"lines": true,
|
|
||||||
"linewidth": 1,
|
|
||||||
"links": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"nullPointMode": "null",
|
|
||||||
"percentage": false,
|
|
||||||
"pointradius": 5,
|
|
||||||
"points": false,
|
|
||||||
"renderer": "flot",
|
|
||||||
"repeat": null,
|
|
||||||
"seriesOverrides": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"spaceLength": 10,
|
|
||||||
"span": 4,
|
|
||||||
"stack": false,
|
|
||||||
"steppedLine": false,
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"expr": "process_resident_memory_bytes{job=\"apiserver\",instance=~\"$instance\"}",
|
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{instance}}",
|
"legendFormat": "{{instance}}",
|
||||||
@ -1013,10 +1427,11 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 12,
|
"id": 17,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": false,
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
@ -1025,6 +1440,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -1048,7 +1464,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "rate(process_cpu_seconds_total{job=\"apiserver\",instance=~\"$instance\"}[5m])",
|
"expr": "rate(process_cpu_seconds_total{job=\"apiserver\",instance=~\"$instance\", cluster=\"$cluster\"}[5m])",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{instance}}",
|
"legendFormat": "{{instance}}",
|
||||||
@ -1104,10 +1520,11 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 13,
|
"id": 18,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": false,
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
@ -1116,6 +1533,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -1139,7 +1557,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "go_goroutines{job=\"apiserver\",instance=~\"$instance\"}",
|
"expr": "go_goroutines{job=\"apiserver\",instance=~\"$instance\", cluster=\"$cluster\"}",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{instance}}",
|
"legendFormat": "{{instance}}",
|
||||||
@ -1205,8 +1623,8 @@ data:
|
|||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "Prometheus",
|
"text": "default",
|
||||||
"value": "Prometheus"
|
"value": "default"
|
||||||
},
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -1223,6 +1641,32 @@ data:
|
|||||||
"allValue": null,
|
"allValue": null,
|
||||||
"current": {
|
"current": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"hide": 2,
|
||||||
|
"includeAll": false,
|
||||||
|
"label": "cluster",
|
||||||
|
"multi": false,
|
||||||
|
"name": "cluster",
|
||||||
|
"options": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"query": "label_values(apiserver_request_total, cluster)",
|
||||||
|
"refresh": 2,
|
||||||
|
"regex": "",
|
||||||
|
"sort": 1,
|
||||||
|
"tagValuesQuery": "",
|
||||||
|
"tags": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"tagsQuery": "",
|
||||||
|
"type": "query",
|
||||||
|
"useTags": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allValue": null,
|
||||||
|
"current": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
@ -1233,7 +1677,7 @@ data:
|
|||||||
"options": [
|
"options": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"query": "label_values(apiserver_request_total{job=\"apiserver\"}, instance)",
|
"query": "label_values(apiserver_request_total{job=\"apiserver\", cluster=\"$cluster\"}, instance)",
|
||||||
"refresh": 2,
|
"refresh": 2,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"sort": 1,
|
"sort": 1,
|
||||||
@ -1276,7 +1720,7 @@ data:
|
|||||||
"30d"
|
"30d"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "",
|
"timezone": "UTC",
|
||||||
"title": "Kubernetes / API server",
|
"title": "Kubernetes / API server",
|
||||||
"uid": "09ec8aa1e996d6ffcd6817bbaff4db1b",
|
"uid": "09ec8aa1e996d6ffcd6817bbaff4db1b",
|
||||||
"version": 0
|
"version": 0
|
||||||
@ -1302,7 +1746,7 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"refresh": "",
|
"refresh": "10s",
|
||||||
"rows": [
|
"rows": [
|
||||||
{
|
{
|
||||||
"collapse": false,
|
"collapse": false,
|
||||||
@ -1401,20 +1845,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -1505,20 +1951,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -1609,20 +2057,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -1713,6 +2163,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -1725,6 +2176,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -1825,6 +2277,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -1837,6 +2290,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -1860,7 +2314,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_latency_seconds_bucket{job=\"kube-controller-manager\", instance=~\"$instance\", verb=\"POST\"}[5m])) by (verb, url, le))",
|
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{job=\"kube-controller-manager\", instance=~\"$instance\", verb=\"POST\"}[5m])) by (verb, url, le))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{verb}} {{url}}",
|
"legendFormat": "{{verb}} {{url}}",
|
||||||
@ -1929,20 +2383,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 8,
|
"id": 8,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -1964,7 +2420,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_latency_seconds_bucket{job=\"kube-controller-manager\", instance=~\"$instance\", verb=\"GET\"}[5m])) by (verb, url, le))",
|
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{job=\"kube-controller-manager\", instance=~\"$instance\", verb=\"GET\"}[5m])) by (verb, url, le))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{verb}} {{url}}",
|
"legendFormat": "{{verb}} {{url}}",
|
||||||
@ -2033,6 +2489,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -2045,6 +2502,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -2124,6 +2582,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -2136,6 +2595,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -2215,6 +2675,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -2227,6 +2688,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -2316,8 +2778,8 @@ data:
|
|||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "Prometheus",
|
"text": "default",
|
||||||
"value": "Prometheus"
|
"value": "default"
|
||||||
},
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -2387,7 +2849,7 @@ data:
|
|||||||
"30d"
|
"30d"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "",
|
"timezone": "UTC",
|
||||||
"title": "Kubernetes / Controller Manager",
|
"title": "Kubernetes / Controller Manager",
|
||||||
"uid": "72e0e05bef5099e5f049b05fdc429ed4",
|
"uid": "72e0e05bef5099e5f049b05fdc429ed4",
|
||||||
"version": 0
|
"version": 0
|
||||||
@ -2413,7 +2875,7 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"refresh": "",
|
"refresh": "10s",
|
||||||
"rows": [
|
"rows": [
|
||||||
{
|
{
|
||||||
"collapse": false,
|
"collapse": false,
|
||||||
@ -2428,6 +2890,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -2440,6 +2903,7 @@ data:
|
|||||||
"min": true,
|
"min": true,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": true
|
"values": true
|
||||||
},
|
},
|
||||||
@ -2578,7 +3042,7 @@ data:
|
|||||||
"tableColumn": "",
|
"tableColumn": "",
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "(\n kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n -\n kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n)\n/\nkubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n* 100\n",
|
"expr": "max without(instance,node) (\n(\n kubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n -\n kubelet_volume_stats_available_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n)\n/\nkubelet_volume_stats_capacity_bytes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n* 100)\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "",
|
"legendFormat": "",
|
||||||
@ -2623,6 +3087,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -2635,6 +3100,7 @@ data:
|
|||||||
"min": true,
|
"min": true,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": true
|
"values": true
|
||||||
},
|
},
|
||||||
@ -2773,7 +3239,7 @@ data:
|
|||||||
"tableColumn": "",
|
"tableColumn": "",
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "kubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n/\nkubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n* 100\n",
|
"expr": "max without(instance,node) (\nkubelet_volume_stats_inodes_used{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n/\nkubelet_volume_stats_inodes{cluster=\"$cluster\", job=\"kubelet\", namespace=\"$namespace\", persistentvolumeclaim=\"$volume\"}\n* 100)\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "",
|
"legendFormat": "",
|
||||||
@ -2815,8 +3281,8 @@ data:
|
|||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "Prometheus",
|
"text": "default",
|
||||||
"value": "Prometheus"
|
"value": "default"
|
||||||
},
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -2938,669 +3404,11 @@ data:
|
|||||||
"30d"
|
"30d"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "",
|
"timezone": "UTC",
|
||||||
"title": "Kubernetes / Persistent Volumes",
|
"title": "Kubernetes / Persistent Volumes",
|
||||||
"uid": "919b92a8e8041bd567af9edab12c840c",
|
"uid": "919b92a8e8041bd567af9edab12c840c",
|
||||||
"version": 0
|
"version": 0
|
||||||
}
|
}
|
||||||
pods.json: |-
|
|
||||||
{
|
|
||||||
"__inputs": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"__requires": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"annotations": {
|
|
||||||
"list": [
|
|
||||||
{
|
|
||||||
"builtIn": 1,
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"enable": true,
|
|
||||||
"expr": "time() == BOOL timestamp(rate(kube_pod_container_status_restarts_total{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[2m]) > 0)",
|
|
||||||
"hide": false,
|
|
||||||
"iconColor": "rgba(215, 44, 44, 1)",
|
|
||||||
"name": "Restarts",
|
|
||||||
"showIn": 0,
|
|
||||||
"tags": [
|
|
||||||
"restart"
|
|
||||||
],
|
|
||||||
"type": "rows"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"editable": false,
|
|
||||||
"gnetId": null,
|
|
||||||
"graphTooltip": 0,
|
|
||||||
"hideControls": false,
|
|
||||||
"id": null,
|
|
||||||
"links": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"refresh": "",
|
|
||||||
"rows": [
|
|
||||||
{
|
|
||||||
"collapse": false,
|
|
||||||
"collapsed": false,
|
|
||||||
"panels": [
|
|
||||||
{
|
|
||||||
"aliasColors": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"bars": false,
|
|
||||||
"dashLength": 10,
|
|
||||||
"dashes": false,
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"fill": 1,
|
|
||||||
"gridPos": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"id": 2,
|
|
||||||
"legend": {
|
|
||||||
"alignAsTable": true,
|
|
||||||
"avg": true,
|
|
||||||
"current": true,
|
|
||||||
"max": false,
|
|
||||||
"min": false,
|
|
||||||
"rightSide": true,
|
|
||||||
"show": true,
|
|
||||||
"total": false,
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"lines": true,
|
|
||||||
"linewidth": 1,
|
|
||||||
"links": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"nullPointMode": "null",
|
|
||||||
"percentage": false,
|
|
||||||
"pointradius": 5,
|
|
||||||
"points": false,
|
|
||||||
"renderer": "flot",
|
|
||||||
"repeat": null,
|
|
||||||
"seriesOverrides": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"spaceLength": 10,
|
|
||||||
"span": 12,
|
|
||||||
"stack": false,
|
|
||||||
"steppedLine": false,
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"expr": "sum by(container) (container_memory_usage_bytes{job=\"kubernetes-cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container=~\"$container\", container!=\"POD\"})",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "Current: {{ container }}",
|
|
||||||
"refId": "A"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expr": "sum by(container) (kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\", pod=\"$pod\", container=~\"$container\"})",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "Requested: {{ container }}",
|
|
||||||
"refId": "B"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expr": "sum by(container) (kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"memory\", pod=\"$pod\", container=~\"$container\"})",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "Limit: {{ container }}",
|
|
||||||
"refId": "C"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expr": "sum by(container) (container_memory_cache{job=\"kubernetes-cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$pod\", container=~\"$container\", container!=\"POD\"})",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "Cache: {{ container }}",
|
|
||||||
"refId": "D"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"thresholds": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"timeFrom": null,
|
|
||||||
"timeShift": null,
|
|
||||||
"title": "Memory Usage",
|
|
||||||
"tooltip": {
|
|
||||||
"shared": false,
|
|
||||||
"sort": 0,
|
|
||||||
"value_type": "individual"
|
|
||||||
},
|
|
||||||
"type": "graph",
|
|
||||||
"xaxis": {
|
|
||||||
"buckets": null,
|
|
||||||
"mode": "time",
|
|
||||||
"name": null,
|
|
||||||
"show": true,
|
|
||||||
"values": [
|
|
||||||
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"yaxes": [
|
|
||||||
{
|
|
||||||
"format": "bytes",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"format": "bytes",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"repeat": null,
|
|
||||||
"repeatIteration": null,
|
|
||||||
"repeatRowId": null,
|
|
||||||
"showTitle": false,
|
|
||||||
"title": "Dashboard Row",
|
|
||||||
"titleSize": "h6",
|
|
||||||
"type": "row"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"collapse": false,
|
|
||||||
"collapsed": false,
|
|
||||||
"panels": [
|
|
||||||
{
|
|
||||||
"aliasColors": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"bars": false,
|
|
||||||
"dashLength": 10,
|
|
||||||
"dashes": false,
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"fill": 1,
|
|
||||||
"gridPos": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"id": 3,
|
|
||||||
"legend": {
|
|
||||||
"alignAsTable": true,
|
|
||||||
"avg": true,
|
|
||||||
"current": true,
|
|
||||||
"max": false,
|
|
||||||
"min": false,
|
|
||||||
"rightSide": true,
|
|
||||||
"show": true,
|
|
||||||
"total": false,
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"lines": true,
|
|
||||||
"linewidth": 1,
|
|
||||||
"links": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"nullPointMode": "null",
|
|
||||||
"percentage": false,
|
|
||||||
"pointradius": 5,
|
|
||||||
"points": false,
|
|
||||||
"renderer": "flot",
|
|
||||||
"repeat": null,
|
|
||||||
"seriesOverrides": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"spaceLength": 10,
|
|
||||||
"span": 12,
|
|
||||||
"stack": false,
|
|
||||||
"steppedLine": false,
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"expr": "sum by (container) (irate(container_cpu_usage_seconds_total{job=\"kubernetes-cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", image!=\"\", pod=\"$pod\", container=~\"$container\", container!=\"POD\"}[4m]))",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "Current: {{ container }}",
|
|
||||||
"refId": "A"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expr": "sum by(container) (kube_pod_container_resource_requests{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\", pod=\"$pod\", container=~\"$container\"})",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "Requested: {{ container }}",
|
|
||||||
"refId": "B"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expr": "sum by(container) (kube_pod_container_resource_limits{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", resource=\"cpu\", pod=\"$pod\", container=~\"$container\"})",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "Limit: {{ container }}",
|
|
||||||
"refId": "C"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"thresholds": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"timeFrom": null,
|
|
||||||
"timeShift": null,
|
|
||||||
"title": "CPU Usage",
|
|
||||||
"tooltip": {
|
|
||||||
"shared": false,
|
|
||||||
"sort": 0,
|
|
||||||
"value_type": "individual"
|
|
||||||
},
|
|
||||||
"type": "graph",
|
|
||||||
"xaxis": {
|
|
||||||
"buckets": null,
|
|
||||||
"mode": "time",
|
|
||||||
"name": null,
|
|
||||||
"show": true,
|
|
||||||
"values": [
|
|
||||||
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"yaxes": [
|
|
||||||
{
|
|
||||||
"format": "short",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"format": "short",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"repeat": null,
|
|
||||||
"repeatIteration": null,
|
|
||||||
"repeatRowId": null,
|
|
||||||
"showTitle": false,
|
|
||||||
"title": "Dashboard Row",
|
|
||||||
"titleSize": "h6",
|
|
||||||
"type": "row"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"collapse": false,
|
|
||||||
"collapsed": false,
|
|
||||||
"panels": [
|
|
||||||
{
|
|
||||||
"aliasColors": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"bars": false,
|
|
||||||
"dashLength": 10,
|
|
||||||
"dashes": false,
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"fill": 1,
|
|
||||||
"gridPos": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"id": 4,
|
|
||||||
"legend": {
|
|
||||||
"alignAsTable": true,
|
|
||||||
"avg": true,
|
|
||||||
"current": true,
|
|
||||||
"max": false,
|
|
||||||
"min": false,
|
|
||||||
"rightSide": true,
|
|
||||||
"show": true,
|
|
||||||
"total": false,
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"lines": true,
|
|
||||||
"linewidth": 1,
|
|
||||||
"links": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"nullPointMode": "null",
|
|
||||||
"percentage": false,
|
|
||||||
"pointradius": 5,
|
|
||||||
"points": false,
|
|
||||||
"renderer": "flot",
|
|
||||||
"repeat": null,
|
|
||||||
"seriesOverrides": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"spaceLength": 10,
|
|
||||||
"span": 12,
|
|
||||||
"stack": false,
|
|
||||||
"steppedLine": false,
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"expr": "sort_desc(sum by (pod) (irate(container_network_receive_bytes_total{job=\"kubernetes-cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[4m])))",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "RX: {{ pod }}",
|
|
||||||
"refId": "A"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expr": "sort_desc(sum by (pod) (irate(container_network_transmit_bytes_total{job=\"kubernetes-cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}[4m])))",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "TX: {{ pod }}",
|
|
||||||
"refId": "B"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"thresholds": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"timeFrom": null,
|
|
||||||
"timeShift": null,
|
|
||||||
"title": "Network I/O",
|
|
||||||
"tooltip": {
|
|
||||||
"shared": false,
|
|
||||||
"sort": 0,
|
|
||||||
"value_type": "individual"
|
|
||||||
},
|
|
||||||
"type": "graph",
|
|
||||||
"xaxis": {
|
|
||||||
"buckets": null,
|
|
||||||
"mode": "time",
|
|
||||||
"name": null,
|
|
||||||
"show": true,
|
|
||||||
"values": [
|
|
||||||
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"yaxes": [
|
|
||||||
{
|
|
||||||
"format": "bytes",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"format": "bytes",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"repeat": null,
|
|
||||||
"repeatIteration": null,
|
|
||||||
"repeatRowId": null,
|
|
||||||
"showTitle": false,
|
|
||||||
"title": "Dashboard Row",
|
|
||||||
"titleSize": "h6",
|
|
||||||
"type": "row"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"collapse": false,
|
|
||||||
"collapsed": false,
|
|
||||||
"panels": [
|
|
||||||
{
|
|
||||||
"aliasColors": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"bars": false,
|
|
||||||
"dashLength": 10,
|
|
||||||
"dashes": false,
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"fill": 1,
|
|
||||||
"gridPos": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"id": 5,
|
|
||||||
"legend": {
|
|
||||||
"alignAsTable": true,
|
|
||||||
"avg": true,
|
|
||||||
"current": true,
|
|
||||||
"max": false,
|
|
||||||
"min": false,
|
|
||||||
"rightSide": true,
|
|
||||||
"show": true,
|
|
||||||
"total": false,
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"lines": true,
|
|
||||||
"linewidth": 1,
|
|
||||||
"links": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"nullPointMode": "null",
|
|
||||||
"percentage": false,
|
|
||||||
"pointradius": 5,
|
|
||||||
"points": false,
|
|
||||||
"renderer": "flot",
|
|
||||||
"repeat": null,
|
|
||||||
"seriesOverrides": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"spaceLength": 10,
|
|
||||||
"span": 12,
|
|
||||||
"stack": false,
|
|
||||||
"steppedLine": false,
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"expr": "max by (container) (kube_pod_container_status_restarts_total{job=\"kube-state-metrics\", cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\", container=~\"$container\"})",
|
|
||||||
"format": "time_series",
|
|
||||||
"intervalFactor": 2,
|
|
||||||
"legendFormat": "Restarts: {{ container }}",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"thresholds": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"timeFrom": null,
|
|
||||||
"timeShift": null,
|
|
||||||
"title": "Total Restarts Per Container",
|
|
||||||
"tooltip": {
|
|
||||||
"shared": false,
|
|
||||||
"sort": 0,
|
|
||||||
"value_type": "individual"
|
|
||||||
},
|
|
||||||
"type": "graph",
|
|
||||||
"xaxis": {
|
|
||||||
"buckets": null,
|
|
||||||
"mode": "time",
|
|
||||||
"name": null,
|
|
||||||
"show": true,
|
|
||||||
"values": [
|
|
||||||
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"yaxes": [
|
|
||||||
{
|
|
||||||
"format": "short",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"format": "short",
|
|
||||||
"label": null,
|
|
||||||
"logBase": 1,
|
|
||||||
"max": null,
|
|
||||||
"min": 0,
|
|
||||||
"show": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"repeat": null,
|
|
||||||
"repeatIteration": null,
|
|
||||||
"repeatRowId": null,
|
|
||||||
"showTitle": false,
|
|
||||||
"title": "Dashboard Row",
|
|
||||||
"titleSize": "h6",
|
|
||||||
"type": "row"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"schemaVersion": 14,
|
|
||||||
"style": "dark",
|
|
||||||
"tags": [
|
|
||||||
"kubernetes-mixin"
|
|
||||||
],
|
|
||||||
"templating": {
|
|
||||||
"list": [
|
|
||||||
{
|
|
||||||
"current": {
|
|
||||||
"text": "Prometheus",
|
|
||||||
"value": "Prometheus"
|
|
||||||
},
|
|
||||||
"hide": 0,
|
|
||||||
"label": null,
|
|
||||||
"name": "datasource",
|
|
||||||
"options": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"query": "prometheus",
|
|
||||||
"refresh": 1,
|
|
||||||
"regex": "",
|
|
||||||
"type": "datasource"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allValue": null,
|
|
||||||
"current": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"hide": 2,
|
|
||||||
"includeAll": false,
|
|
||||||
"label": "cluster",
|
|
||||||
"multi": false,
|
|
||||||
"name": "cluster",
|
|
||||||
"options": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"query": "label_values(kube_pod_info, cluster)",
|
|
||||||
"refresh": 2,
|
|
||||||
"regex": "",
|
|
||||||
"sort": 1,
|
|
||||||
"tagValuesQuery": "",
|
|
||||||
"tags": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tagsQuery": "",
|
|
||||||
"type": "query",
|
|
||||||
"useTags": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allValue": null,
|
|
||||||
"current": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"hide": 0,
|
|
||||||
"includeAll": false,
|
|
||||||
"label": "Namespace",
|
|
||||||
"multi": false,
|
|
||||||
"name": "namespace",
|
|
||||||
"options": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"query": "label_values(kube_pod_info{cluster=\"$cluster\"}, namespace)",
|
|
||||||
"refresh": 2,
|
|
||||||
"regex": "",
|
|
||||||
"sort": 1,
|
|
||||||
"tagValuesQuery": "",
|
|
||||||
"tags": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tagsQuery": "",
|
|
||||||
"type": "query",
|
|
||||||
"useTags": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allValue": null,
|
|
||||||
"current": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"hide": 0,
|
|
||||||
"includeAll": false,
|
|
||||||
"label": "Pod",
|
|
||||||
"multi": false,
|
|
||||||
"name": "pod",
|
|
||||||
"options": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"query": "label_values(kube_pod_info{cluster=\"$cluster\", namespace=~\"$namespace\"}, pod)",
|
|
||||||
"refresh": 2,
|
|
||||||
"regex": "",
|
|
||||||
"sort": 1,
|
|
||||||
"tagValuesQuery": "",
|
|
||||||
"tags": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tagsQuery": "",
|
|
||||||
"type": "query",
|
|
||||||
"useTags": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allValue": null,
|
|
||||||
"current": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"datasource": "$datasource",
|
|
||||||
"hide": 0,
|
|
||||||
"includeAll": true,
|
|
||||||
"label": "Container",
|
|
||||||
"multi": false,
|
|
||||||
"name": "container",
|
|
||||||
"options": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"query": "label_values(kube_pod_container_info{cluster=\"$cluster\", namespace=\"$namespace\", pod=\"$pod\"}, container)",
|
|
||||||
"refresh": 2,
|
|
||||||
"regex": "",
|
|
||||||
"sort": 1,
|
|
||||||
"tagValuesQuery": "",
|
|
||||||
"tags": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tagsQuery": "",
|
|
||||||
"type": "query",
|
|
||||||
"useTags": false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"time": {
|
|
||||||
"from": "now-1h",
|
|
||||||
"to": "now"
|
|
||||||
},
|
|
||||||
"timepicker": {
|
|
||||||
"refresh_intervals": [
|
|
||||||
"5s",
|
|
||||||
"10s",
|
|
||||||
"30s",
|
|
||||||
"1m",
|
|
||||||
"5m",
|
|
||||||
"15m",
|
|
||||||
"30m",
|
|
||||||
"1h",
|
|
||||||
"2h",
|
|
||||||
"1d"
|
|
||||||
],
|
|
||||||
"time_options": [
|
|
||||||
"5m",
|
|
||||||
"15m",
|
|
||||||
"1h",
|
|
||||||
"6h",
|
|
||||||
"12h",
|
|
||||||
"24h",
|
|
||||||
"2d",
|
|
||||||
"7d",
|
|
||||||
"30d"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"timezone": "",
|
|
||||||
"title": "Kubernetes / Pods",
|
|
||||||
"uid": "ab4f13a9892a76a4d21ce8c2445bf4ea",
|
|
||||||
"version": 0
|
|
||||||
}
|
|
||||||
scheduler.json: |-
|
scheduler.json: |-
|
||||||
{
|
{
|
||||||
"__inputs": [
|
"__inputs": [
|
||||||
@ -3622,7 +3430,7 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"refresh": "",
|
"refresh": "10s",
|
||||||
"rows": [
|
"rows": [
|
||||||
{
|
{
|
||||||
"collapse": false,
|
"collapse": false,
|
||||||
@ -3721,20 +3529,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -3833,20 +3643,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -3958,6 +3770,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -3970,6 +3783,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -4070,6 +3884,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -4082,6 +3897,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -4105,7 +3921,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_latency_seconds_bucket{job=\"kube-scheduler\", instance=~\"$instance\", verb=\"POST\"}[5m])) by (verb, url, le))",
|
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{job=\"kube-scheduler\", instance=~\"$instance\", verb=\"POST\"}[5m])) by (verb, url, le))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{verb}} {{url}}",
|
"legendFormat": "{{verb}} {{url}}",
|
||||||
@ -4174,20 +3990,22 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
"id": 7,
|
"id": 7,
|
||||||
"legend": {
|
"legend": {
|
||||||
"alignAsTable": "true",
|
"alignAsTable": true,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": "true",
|
"current": true,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": true,
|
||||||
"show": "true",
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": true
|
||||||
},
|
},
|
||||||
"lines": true,
|
"lines": true,
|
||||||
"linewidth": 1,
|
"linewidth": 1,
|
||||||
@ -4209,7 +4027,7 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_latency_seconds_bucket{job=\"kube-scheduler\", instance=~\"$instance\", verb=\"GET\"}[5m])) by (verb, url, le))",
|
"expr": "histogram_quantile(0.99, sum(rate(rest_client_request_duration_seconds_bucket{job=\"kube-scheduler\", instance=~\"$instance\", verb=\"GET\"}[5m])) by (verb, url, le))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{verb}} {{url}}",
|
"legendFormat": "{{verb}} {{url}}",
|
||||||
@ -4278,6 +4096,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -4290,6 +4109,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -4369,6 +4189,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -4381,6 +4202,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -4460,6 +4282,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -4472,6 +4295,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -4561,8 +4385,8 @@ data:
|
|||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "Prometheus",
|
"text": "default",
|
||||||
"value": "Prometheus"
|
"value": "default"
|
||||||
},
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -4632,7 +4456,7 @@ data:
|
|||||||
"30d"
|
"30d"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "",
|
"timezone": "UTC",
|
||||||
"title": "Kubernetes / Scheduler",
|
"title": "Kubernetes / Scheduler",
|
||||||
"uid": "2e6b6a3b4bddf1427b3a55aa1311c656",
|
"uid": "2e6b6a3b4bddf1427b3a55aa1311c656",
|
||||||
"version": 0
|
"version": 0
|
||||||
@ -4724,7 +4548,7 @@ data:
|
|||||||
"tableColumn": "",
|
"tableColumn": "",
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(rate(container_cpu_usage_seconds_total{job=\"kubernetes-cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$statefulset.*\"}[3m]))",
|
"expr": "sum(rate(container_cpu_usage_seconds_total{job=\"kubernetes-cadvisor\", cluster=\"$cluster\", container!=\"\", namespace=\"$namespace\", pod=~\"$statefulset.*\"}[3m]))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "",
|
"legendFormat": "",
|
||||||
@ -4807,7 +4631,7 @@ data:
|
|||||||
"tableColumn": "",
|
"tableColumn": "",
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(container_memory_usage_bytes{job=\"kubernetes-cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$statefulset.*\"}) / 1024^3",
|
"expr": "sum(container_memory_usage_bytes{job=\"kubernetes-cadvisor\", cluster=\"$cluster\", container!=\"\", namespace=\"$namespace\", pod=~\"$statefulset.*\"}) / 1024^3",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "",
|
"legendFormat": "",
|
||||||
@ -4890,7 +4714,7 @@ data:
|
|||||||
"tableColumn": "",
|
"tableColumn": "",
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(rate(container_network_transmit_bytes_total{job=\"kubernetes-cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$statefulset.*\"}[3m])) + sum(rate(container_network_receive_bytes_total{cluster=\"$cluster\", namespace=\"$namespace\",pod=~\"$statefulset.*\"}[3m]))",
|
"expr": "sum(rate(container_network_transmit_bytes_total{job=\"kubernetes-cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\", pod=~\"$statefulset.*\"}[3m])) + sum(rate(container_network_receive_bytes_total{job=\"kubernetes-cadvisor\", cluster=\"$cluster\", namespace=\"$namespace\",pod=~\"$statefulset.*\"}[3m]))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "",
|
"legendFormat": "",
|
||||||
@ -5285,6 +5109,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -5297,6 +5122,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -5413,8 +5239,8 @@ data:
|
|||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "Prometheus",
|
"text": "default",
|
||||||
"value": "Prometheus"
|
"value": "default"
|
||||||
},
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -5536,7 +5362,7 @@ data:
|
|||||||
"30d"
|
"30d"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "",
|
"timezone": "UTC",
|
||||||
"title": "Kubernetes / StatefulSets",
|
"title": "Kubernetes / StatefulSets",
|
||||||
"uid": "a31c1f46e6f727cb37c0d731a7245005",
|
"uid": "a31c1f46e6f727cb37c0d731a7245005",
|
||||||
"version": 0
|
"version": 0
|
||||||
|
|||||||
@ -172,7 +172,7 @@ data:
|
|||||||
"tableColumn": "",
|
"tableColumn": "",
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "sum(avg_over_time(nginx_ingress_controller_nginx_process_connections{cluster=~\"$cluster\", controller_pod=~\"$controller\",controller_class=~\"$controller_class\",controller_namespace=~\"$namespace\"}[2m]))",
|
"expr": "sum(avg_over_time(nginx_ingress_controller_nginx_process_connections{cluster=~\"$cluster\", controller_pod=~\"$controller\",controller_class=~\"$controller_class\",controller_namespace=~\"$namespace\",state=\"active\"}[2m]))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "",
|
"legendFormat": "",
|
||||||
@ -296,6 +296,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -308,6 +309,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": "true",
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": "true"
|
||||||
},
|
},
|
||||||
@ -387,6 +389,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -399,6 +402,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": "true",
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": "true"
|
||||||
},
|
},
|
||||||
@ -491,6 +495,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -503,6 +508,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": "true",
|
"rightSide": "true",
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": "true"
|
||||||
},
|
},
|
||||||
@ -609,6 +615,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -621,6 +628,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": "true"
|
||||||
},
|
},
|
||||||
@ -707,6 +715,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -719,6 +728,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": "true"
|
||||||
},
|
},
|
||||||
@ -798,6 +808,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -810,6 +821,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": "true",
|
"show": "true",
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": "true"
|
"values": "true"
|
||||||
},
|
},
|
||||||
|
|||||||
@ -36,6 +36,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -48,6 +49,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -128,6 +130,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 0,
|
"fill": 0,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -140,6 +143,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -253,6 +257,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -265,6 +270,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -417,7 +423,7 @@ data:
|
|||||||
"tableColumn": "",
|
"tableColumn": "",
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "100 -\n(\n node_memory_MemAvailable_bytes{job=\"node-exporter\", instance=\"$instance\"}\n/\n node_memory_MemTotal_bytes{job=\"node-exporter\", instance=\"$instance\"}\n* 100\n)\n",
|
"expr": "100 -\n(\n avg(node_memory_MemAvailable_bytes{job=\"node-exporter\", instance=\"$instance\"})\n/\n avg(node_memory_MemTotal_bytes{job=\"node-exporter\", instance=\"$instance\"})\n* 100\n)\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "",
|
"legendFormat": "",
|
||||||
@ -459,6 +465,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 0,
|
"fill": 0,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -471,6 +478,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -574,6 +582,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -586,6 +595,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -692,6 +702,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 0,
|
"fill": 0,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -704,6 +715,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -784,6 +796,7 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 0,
|
"fill": 0,
|
||||||
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -796,6 +809,7 @@ data:
|
|||||||
"min": false,
|
"min": false,
|
||||||
"rightSide": false,
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
|
|||||||
@ -2,6 +2,12 @@ apiVersion: v1
|
|||||||
data:
|
data:
|
||||||
prometheus-remote-write.json: |-
|
prometheus-remote-write.json: |-
|
||||||
{
|
{
|
||||||
|
"__inputs": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"__requires": [
|
||||||
|
|
||||||
|
],
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"list": [
|
"list": [
|
||||||
|
|
||||||
@ -11,14 +17,15 @@ data:
|
|||||||
"gnetId": null,
|
"gnetId": null,
|
||||||
"graphTooltip": 0,
|
"graphTooltip": 0,
|
||||||
"hideControls": false,
|
"hideControls": false,
|
||||||
|
"id": null,
|
||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"refresh": "10s",
|
"refresh": "60s",
|
||||||
"rows": [
|
"rows": [
|
||||||
{
|
{
|
||||||
"collapse": false,
|
"collapse": false,
|
||||||
"height": "250px",
|
"collapsed": false,
|
||||||
"panels": [
|
"panels": [
|
||||||
{
|
{
|
||||||
"aliasColors": {
|
"aliasColors": {
|
||||||
@ -29,13 +36,20 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 1,
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 2,
|
||||||
"legend": {
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -44,11 +58,12 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"nullPointMode": "null as zero",
|
"nullPointMode": "null",
|
||||||
"percentage": false,
|
"percentage": false,
|
||||||
"pointradius": 5,
|
"pointradius": 5,
|
||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
|
||||||
],
|
],
|
||||||
@ -58,12 +73,11 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "prometheus_remote_storage_highest_timestamp_in_seconds{cluster=~\"$cluster\", instance=~\"$instance\"} - ignoring(queue) group_right(instance) prometheus_remote_storage_queue_highest_sent_timestamp_seconds{cluster=~\"$cluster\", instance=~\"$instance\"}",
|
"expr": "(\n prometheus_remote_storage_highest_timestamp_in_seconds{cluster=~\"$cluster\", instance=~\"$instance\"} \n- \n ignoring(remote_name, url) group_right(instance) (prometheus_remote_storage_queue_highest_sent_timestamp_seconds{cluster=~\"$cluster\", instance=~\"$instance\"} != 0)\n)\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{cluster}}:{{instance}}-{{queue}}",
|
"legendFormat": "{{cluster}}:{{instance}} {{remote_name}}:{{url}}",
|
||||||
"legendLink": null,
|
"refId": "A"
|
||||||
"step": 10
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -89,11 +103,11 @@ data:
|
|||||||
},
|
},
|
||||||
"yaxes": [
|
"yaxes": [
|
||||||
{
|
{
|
||||||
"format": "s",
|
"format": "short",
|
||||||
"label": null,
|
"label": null,
|
||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": 0,
|
"min": null,
|
||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -102,7 +116,7 @@ data:
|
|||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": null,
|
"min": null,
|
||||||
"show": false
|
"show": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -115,13 +129,20 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 2,
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 3,
|
||||||
"legend": {
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -130,11 +151,12 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"nullPointMode": "null as zero",
|
"nullPointMode": "null",
|
||||||
"percentage": false,
|
"percentage": false,
|
||||||
"pointradius": 5,
|
"pointradius": 5,
|
||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
|
||||||
],
|
],
|
||||||
@ -144,12 +166,11 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "rate(prometheus_remote_storage_highest_timestamp_in_seconds{cluster=~\"$cluster\", instance=~\"$instance\"}[5m]) - ignoring (queue) group_right(instance) rate(prometheus_remote_storage_queue_highest_sent_timestamp_seconds{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])",
|
"expr": "clamp_min(\n rate(prometheus_remote_storage_highest_timestamp_in_seconds{cluster=~\"$cluster\", instance=~\"$instance\"}[5m]) \n- \n ignoring (remote_name, url) group_right(instance) rate(prometheus_remote_storage_queue_highest_sent_timestamp_seconds{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])\n, 0)\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{cluster}}:{{instance}}-{{queue}}",
|
"legendFormat": "{{cluster}}:{{instance}} {{remote_name}}:{{url}}",
|
||||||
"legendLink": null,
|
"refId": "A"
|
||||||
"step": 10
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -179,7 +200,7 @@ data:
|
|||||||
"label": null,
|
"label": null,
|
||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": 0,
|
"min": null,
|
||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -188,7 +209,7 @@ data:
|
|||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": null,
|
"min": null,
|
||||||
"show": false
|
"show": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -198,11 +219,12 @@ data:
|
|||||||
"repeatRowId": null,
|
"repeatRowId": null,
|
||||||
"showTitle": true,
|
"showTitle": true,
|
||||||
"title": "Timestamps",
|
"title": "Timestamps",
|
||||||
"titleSize": "h6"
|
"titleSize": "h6",
|
||||||
|
"type": "row"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapse": false,
|
"collapse": false,
|
||||||
"height": "250px",
|
"collapsed": false,
|
||||||
"panels": [
|
"panels": [
|
||||||
{
|
{
|
||||||
"aliasColors": {
|
"aliasColors": {
|
||||||
@ -213,13 +235,20 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 3,
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 4,
|
||||||
"legend": {
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -228,11 +257,12 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"nullPointMode": "null as zero",
|
"nullPointMode": "null",
|
||||||
"percentage": false,
|
"percentage": false,
|
||||||
"pointradius": 5,
|
"pointradius": 5,
|
||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
|
||||||
],
|
],
|
||||||
@ -242,12 +272,11 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "rate(prometheus_remote_storage_samples_in_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])- ignoring(queue) group_right(instance) rate(prometheus_remote_storage_succeeded_samples_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m]) - rate(prometheus_remote_storage_dropped_samples_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])",
|
"expr": "rate(\n prometheus_remote_storage_samples_in_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])\n- \n ignoring(remote_name, url) group_right(instance) (rate(prometheus_remote_storage_succeeded_samples_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m]) or rate(prometheus_remote_storage_samples_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m]))\n- \n (rate(prometheus_remote_storage_dropped_samples_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m]) or rate(prometheus_remote_storage_samples_dropped_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m]))\n",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{cluster}}:{{instance}}-{{queue}}",
|
"legendFormat": "{{cluster}}:{{instance}} {{remote_name}}:{{url}}",
|
||||||
"legendLink": null,
|
"refId": "A"
|
||||||
"step": 10
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -277,7 +306,7 @@ data:
|
|||||||
"label": null,
|
"label": null,
|
||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": 0,
|
"min": null,
|
||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -286,7 +315,7 @@ data:
|
|||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": null,
|
"min": null,
|
||||||
"show": false
|
"show": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -296,11 +325,12 @@ data:
|
|||||||
"repeatRowId": null,
|
"repeatRowId": null,
|
||||||
"showTitle": true,
|
"showTitle": true,
|
||||||
"title": "Samples",
|
"title": "Samples",
|
||||||
"titleSize": "h6"
|
"titleSize": "h6",
|
||||||
|
"type": "row"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapse": false,
|
"collapse": false,
|
||||||
"height": "250px",
|
"collapsed": false,
|
||||||
"panels": [
|
"panels": [
|
||||||
{
|
{
|
||||||
"aliasColors": {
|
"aliasColors": {
|
||||||
@ -311,13 +341,20 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 4,
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 5,
|
||||||
"legend": {
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -326,16 +363,18 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"nullPointMode": "null as zero",
|
"minSpan": 6,
|
||||||
|
"nullPointMode": "null",
|
||||||
"percentage": false,
|
"percentage": false,
|
||||||
"pointradius": 5,
|
"pointradius": 5,
|
||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"spaceLength": 10,
|
"spaceLength": 10,
|
||||||
"span": 6,
|
"span": 12,
|
||||||
"stack": false,
|
"stack": false,
|
||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
@ -343,9 +382,8 @@ data:
|
|||||||
"expr": "prometheus_remote_storage_shards{cluster=~\"$cluster\", instance=~\"$instance\"}",
|
"expr": "prometheus_remote_storage_shards{cluster=~\"$cluster\", instance=~\"$instance\"}",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{cluster}}:{{instance}}-{{queue}}",
|
"legendFormat": "{{cluster}}:{{instance}} {{remote_name}}:{{url}}",
|
||||||
"legendLink": null,
|
"refId": "A"
|
||||||
"step": 10
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -353,7 +391,7 @@ data:
|
|||||||
],
|
],
|
||||||
"timeFrom": null,
|
"timeFrom": null,
|
||||||
"timeShift": null,
|
"timeShift": null,
|
||||||
"title": "Num. Shards",
|
"title": "Current Shards",
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"shared": true,
|
"shared": true,
|
||||||
"sort": 0,
|
"sort": 0,
|
||||||
@ -375,7 +413,7 @@ data:
|
|||||||
"label": null,
|
"label": null,
|
||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": 0,
|
"min": null,
|
||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -384,7 +422,7 @@ data:
|
|||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": null,
|
"min": null,
|
||||||
"show": false
|
"show": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -397,13 +435,20 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 5,
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 6,
|
||||||
"legend": {
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -412,26 +457,26 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"nullPointMode": "null as zero",
|
"nullPointMode": "null",
|
||||||
"percentage": false,
|
"percentage": false,
|
||||||
"pointradius": 5,
|
"pointradius": 5,
|
||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"spaceLength": 10,
|
"spaceLength": 10,
|
||||||
"span": 6,
|
"span": 4,
|
||||||
"stack": false,
|
"stack": false,
|
||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "prometheus_remote_storage_shard_capacity{cluster=~\"$cluster\", instance=~\"$instance\"}",
|
"expr": "prometheus_remote_storage_shards_max{cluster=~\"$cluster\", instance=~\"$instance\"}",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{cluster}}:{{instance}}-{{queue}}",
|
"legendFormat": "{{cluster}}:{{instance}} {{remote_name}}:{{url}}",
|
||||||
"legendLink": null,
|
"refId": "A"
|
||||||
"step": 10
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -439,7 +484,7 @@ data:
|
|||||||
],
|
],
|
||||||
"timeFrom": null,
|
"timeFrom": null,
|
||||||
"timeShift": null,
|
"timeShift": null,
|
||||||
"title": "Capacity",
|
"title": "Max Shards",
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"shared": true,
|
"shared": true,
|
||||||
"sort": 0,
|
"sort": 0,
|
||||||
@ -461,7 +506,7 @@ data:
|
|||||||
"label": null,
|
"label": null,
|
||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": 0,
|
"min": null,
|
||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -470,7 +515,193 @@ data:
|
|||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": null,
|
"min": null,
|
||||||
"show": false
|
"show": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 7,
|
||||||
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 4,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "prometheus_remote_storage_shards_min{cluster=~\"$cluster\", instance=~\"$instance\"}",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{cluster}}:{{instance}} {{remote_name}}:{{url}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Min Shards",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 8,
|
||||||
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 4,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "prometheus_remote_storage_shards_desired{cluster=~\"$cluster\", instance=~\"$instance\"}",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{cluster}}:{{instance}} {{remote_name}}:{{url}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Desired Shards",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -480,11 +711,12 @@ data:
|
|||||||
"repeatRowId": null,
|
"repeatRowId": null,
|
||||||
"showTitle": true,
|
"showTitle": true,
|
||||||
"title": "Shards",
|
"title": "Shards",
|
||||||
"titleSize": "h6"
|
"titleSize": "h6",
|
||||||
|
"type": "row"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapse": false,
|
"collapse": false,
|
||||||
"height": "250px",
|
"collapsed": false,
|
||||||
"panels": [
|
"panels": [
|
||||||
{
|
{
|
||||||
"aliasColors": {
|
"aliasColors": {
|
||||||
@ -495,13 +727,20 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 6,
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 9,
|
||||||
"legend": {
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -510,11 +749,410 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"nullPointMode": "null as zero",
|
"nullPointMode": "null",
|
||||||
"percentage": false,
|
"percentage": false,
|
||||||
"pointradius": 5,
|
"pointradius": 5,
|
||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 6,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "prometheus_remote_storage_shard_capacity{cluster=~\"$cluster\", instance=~\"$instance\"}",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{cluster}}:{{instance}} {{remote_name}}:{{url}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Shard Capacity",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 10,
|
||||||
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 6,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "prometheus_remote_storage_pending_samples{cluster=~\"$cluster\", instance=~\"$instance\"} or prometheus_remote_storage_samples_pending{cluster=~\"$cluster\", instance=~\"$instance\"}",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{cluster}}:{{instance}} {{remote_name}}:{{url}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Pending Samples",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repeat": null,
|
||||||
|
"repeatIteration": null,
|
||||||
|
"repeatRowId": null,
|
||||||
|
"showTitle": true,
|
||||||
|
"title": "Shard Details",
|
||||||
|
"titleSize": "h6",
|
||||||
|
"type": "row"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"collapse": false,
|
||||||
|
"collapsed": false,
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 11,
|
||||||
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 6,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "prometheus_tsdb_wal_segment_current{cluster=~\"$cluster\", instance=~\"$instance\"}",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{cluster}}:{{instance}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "TSDB Current Segment",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "none",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 12,
|
||||||
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
|
"seriesOverrides": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 6,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "prometheus_wal_watcher_current_segment{cluster=~\"$cluster\", instance=~\"$instance\"}",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{cluster}}:{{instance}} {{consumer}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "Remote Write Current Segment",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "none",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"label": null,
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repeat": null,
|
||||||
|
"repeatIteration": null,
|
||||||
|
"repeatRowId": null,
|
||||||
|
"showTitle": true,
|
||||||
|
"title": "Segments",
|
||||||
|
"titleSize": "h6",
|
||||||
|
"type": "row"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"collapse": false,
|
||||||
|
"collapsed": false,
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"aliasColors": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 13,
|
||||||
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
|
||||||
],
|
],
|
||||||
@ -524,12 +1162,11 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "rate(prometheus_remote_storage_dropped_samples_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])",
|
"expr": "rate(prometheus_remote_storage_dropped_samples_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m]) or rate(prometheus_remote_storage_samples_dropped_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{cluster}}:{{instance}}-{{queue}}",
|
"legendFormat": "{{cluster}}:{{instance}} {{remote_name}}:{{url}}",
|
||||||
"legendLink": null,
|
"refId": "A"
|
||||||
"step": 10
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -559,7 +1196,7 @@ data:
|
|||||||
"label": null,
|
"label": null,
|
||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": 0,
|
"min": null,
|
||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -568,7 +1205,7 @@ data:
|
|||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": null,
|
"min": null,
|
||||||
"show": false
|
"show": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -581,13 +1218,20 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 7,
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 14,
|
||||||
"legend": {
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -596,11 +1240,12 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"nullPointMode": "null as zero",
|
"nullPointMode": "null",
|
||||||
"percentage": false,
|
"percentage": false,
|
||||||
"pointradius": 5,
|
"pointradius": 5,
|
||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
|
||||||
],
|
],
|
||||||
@ -610,12 +1255,11 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "rate(prometheus_remote_storage_failed_samples_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])",
|
"expr": "rate(prometheus_remote_storage_failed_samples_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m]) or rate(prometheus_remote_storage_samples_failed_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{cluster}}:{{instance}}-{{queue}}",
|
"legendFormat": "{{cluster}}:{{instance}} {{remote_name}}:{{url}}",
|
||||||
"legendLink": null,
|
"refId": "A"
|
||||||
"step": 10
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -645,7 +1289,7 @@ data:
|
|||||||
"label": null,
|
"label": null,
|
||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": 0,
|
"min": null,
|
||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -654,7 +1298,7 @@ data:
|
|||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": null,
|
"min": null,
|
||||||
"show": false
|
"show": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -667,13 +1311,20 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 8,
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 15,
|
||||||
"legend": {
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -682,11 +1333,12 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"nullPointMode": "null as zero",
|
"nullPointMode": "null",
|
||||||
"percentage": false,
|
"percentage": false,
|
||||||
"pointradius": 5,
|
"pointradius": 5,
|
||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
|
||||||
],
|
],
|
||||||
@ -696,12 +1348,11 @@ data:
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "rate(prometheus_remote_storage_retried_samples_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])",
|
"expr": "rate(prometheus_remote_storage_retried_samples_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m]) or rate(prometheus_remote_storage_samples_retried_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{cluster}}:{{instance}}-{{queue}}",
|
"legendFormat": "{{cluster}}:{{instance}} {{remote_name}}:{{url}}",
|
||||||
"legendLink": null,
|
"refId": "A"
|
||||||
"step": 10
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -731,7 +1382,7 @@ data:
|
|||||||
"label": null,
|
"label": null,
|
||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": 0,
|
"min": null,
|
||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -740,7 +1391,7 @@ data:
|
|||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": null,
|
"min": null,
|
||||||
"show": false
|
"show": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -753,13 +1404,20 @@ data:
|
|||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"id": 9,
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"id": 16,
|
||||||
"legend": {
|
"legend": {
|
||||||
|
"alignAsTable": false,
|
||||||
"avg": false,
|
"avg": false,
|
||||||
"current": false,
|
"current": false,
|
||||||
"max": false,
|
"max": false,
|
||||||
"min": false,
|
"min": false,
|
||||||
|
"rightSide": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
|
"sideWidth": null,
|
||||||
"total": false,
|
"total": false,
|
||||||
"values": false
|
"values": false
|
||||||
},
|
},
|
||||||
@ -768,11 +1426,12 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"nullPointMode": "null as zero",
|
"nullPointMode": "null",
|
||||||
"percentage": false,
|
"percentage": false,
|
||||||
"pointradius": 5,
|
"pointradius": 5,
|
||||||
"points": false,
|
"points": false,
|
||||||
"renderer": "flot",
|
"renderer": "flot",
|
||||||
|
"repeat": null,
|
||||||
"seriesOverrides": [
|
"seriesOverrides": [
|
||||||
|
|
||||||
],
|
],
|
||||||
@ -785,9 +1444,8 @@ data:
|
|||||||
"expr": "rate(prometheus_remote_storage_enqueue_retries_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])",
|
"expr": "rate(prometheus_remote_storage_enqueue_retries_total{cluster=~\"$cluster\", instance=~\"$instance\"}[5m])",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{cluster}}:{{instance}}-{{queue}}",
|
"legendFormat": "{{cluster}}:{{instance}} {{remote_name}}:{{url}}",
|
||||||
"legendLink": null,
|
"refId": "A"
|
||||||
"step": 10
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"thresholds": [
|
"thresholds": [
|
||||||
@ -817,7 +1475,7 @@ data:
|
|||||||
"label": null,
|
"label": null,
|
||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": 0,
|
"min": null,
|
||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -826,7 +1484,7 @@ data:
|
|||||||
"logBase": 1,
|
"logBase": 1,
|
||||||
"max": null,
|
"max": null,
|
||||||
"min": null,
|
"min": null,
|
||||||
"show": false
|
"show": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -835,22 +1493,19 @@ data:
|
|||||||
"repeatIteration": null,
|
"repeatIteration": null,
|
||||||
"repeatRowId": null,
|
"repeatRowId": null,
|
||||||
"showTitle": true,
|
"showTitle": true,
|
||||||
"title": "Misc Rates.",
|
"title": "Misc. Rates",
|
||||||
"titleSize": "h6"
|
"titleSize": "h6",
|
||||||
|
"type": "row"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"schemaVersion": 14,
|
"schemaVersion": 14,
|
||||||
"style": "dark",
|
"style": "dark",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
"prometheus-mixin"
|
||||||
],
|
],
|
||||||
"templating": {
|
"templating": {
|
||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
|
||||||
"text": "Prometheus",
|
|
||||||
"value": "Prometheus"
|
|
||||||
},
|
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
"name": "datasource",
|
"name": "datasource",
|
||||||
@ -865,23 +1520,30 @@ data:
|
|||||||
{
|
{
|
||||||
"allValue": null,
|
"allValue": null,
|
||||||
"current": {
|
"current": {
|
||||||
"selected": true,
|
"text": {
|
||||||
"text": "All",
|
"selected": true,
|
||||||
"value": "$__all"
|
"text": "All",
|
||||||
|
"value": "$__all"
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"selected": true,
|
||||||
|
"text": "All",
|
||||||
|
"value": "$__all"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": true,
|
"includeAll": true,
|
||||||
"label": "instance",
|
"label": null,
|
||||||
"multi": true,
|
"multi": false,
|
||||||
"name": "instance",
|
"name": "instance",
|
||||||
"options": [
|
"options": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"query": "label_values(prometheus_build_info, instance)",
|
"query": "label_values(prometheus_build_info, instance)",
|
||||||
"refresh": 1,
|
"refresh": 2,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"sort": 2,
|
"sort": 0,
|
||||||
"tagValuesQuery": "",
|
"tagValuesQuery": "",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|
||||||
@ -893,23 +1555,56 @@ data:
|
|||||||
{
|
{
|
||||||
"allValue": null,
|
"allValue": null,
|
||||||
"current": {
|
"current": {
|
||||||
"selected": true,
|
"text": {
|
||||||
"text": "All",
|
"selected": true,
|
||||||
"value": "$__all"
|
"text": "All",
|
||||||
|
"value": "$__all"
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"selected": true,
|
||||||
|
"text": "All",
|
||||||
|
"value": "$__all"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": true,
|
"includeAll": true,
|
||||||
"label": "cluster",
|
"label": null,
|
||||||
"multi": true,
|
"multi": false,
|
||||||
"name": "cluster",
|
"name": "cluster",
|
||||||
"options": [
|
"options": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"query": "label_values(kube_pod_container_info{image=~\".*prometheus.*\"}, cluster)",
|
"query": "label_values(kube_pod_container_info{image=~\".*prometheus.*\"}, cluster)",
|
||||||
"refresh": 1,
|
"refresh": 2,
|
||||||
"regex": "",
|
"regex": "",
|
||||||
"sort": 2,
|
"sort": 0,
|
||||||
|
"tagValuesQuery": "",
|
||||||
|
"tags": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"tagsQuery": "",
|
||||||
|
"type": "query",
|
||||||
|
"useTags": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allValue": null,
|
||||||
|
"current": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"datasource": "$datasource",
|
||||||
|
"hide": 0,
|
||||||
|
"includeAll": true,
|
||||||
|
"label": null,
|
||||||
|
"multi": false,
|
||||||
|
"name": "url",
|
||||||
|
"options": [
|
||||||
|
|
||||||
|
],
|
||||||
|
"query": "label_values(prometheus_remote_storage_shards{cluster=~\"$cluster\", instance=~\"$instance\"}, url)",
|
||||||
|
"refresh": 2,
|
||||||
|
"regex": "",
|
||||||
|
"sort": 0,
|
||||||
"tagValuesQuery": "",
|
"tagValuesQuery": "",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|
||||||
@ -921,7 +1616,7 @@ data:
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"time": {
|
"time": {
|
||||||
"from": "now-1h",
|
"from": "now-6h",
|
||||||
"to": "now"
|
"to": "now"
|
||||||
},
|
},
|
||||||
"timepicker": {
|
"timepicker": {
|
||||||
@ -949,9 +1644,8 @@ data:
|
|||||||
"30d"
|
"30d"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "utc",
|
"timezone": "browser",
|
||||||
"title": "Prometheus Remote Write",
|
"title": "Prometheus / Remote Write",
|
||||||
"uid": "",
|
|
||||||
"version": 0
|
"version": 0
|
||||||
}
|
}
|
||||||
prometheus.json: |-
|
prometheus.json: |-
|
||||||
@ -968,7 +1662,7 @@ data:
|
|||||||
"links": [
|
"links": [
|
||||||
|
|
||||||
],
|
],
|
||||||
"refresh": "10s",
|
"refresh": "60s",
|
||||||
"rows": [
|
"rows": [
|
||||||
{
|
{
|
||||||
"collapse": false,
|
"collapse": false,
|
||||||
@ -1026,6 +1720,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #A",
|
"pattern": "Value #A",
|
||||||
@ -1044,6 +1739,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "Value #B",
|
"pattern": "Value #B",
|
||||||
@ -1062,6 +1758,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "instance",
|
"pattern": "instance",
|
||||||
@ -1080,6 +1777,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "job",
|
"pattern": "job",
|
||||||
@ -1098,6 +1796,7 @@ data:
|
|||||||
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
"dateFormat": "YYYY-MM-DD HH:mm:ss",
|
||||||
"decimals": 2,
|
"decimals": 2,
|
||||||
"link": false,
|
"link": false,
|
||||||
|
"linkTargetBlank": false,
|
||||||
"linkTooltip": "Drill down",
|
"linkTooltip": "Drill down",
|
||||||
"linkUrl": "",
|
"linkUrl": "",
|
||||||
"pattern": "version",
|
"pattern": "version",
|
||||||
@ -2042,14 +2741,14 @@ data:
|
|||||||
"schemaVersion": 14,
|
"schemaVersion": 14,
|
||||||
"style": "dark",
|
"style": "dark",
|
||||||
"tags": [
|
"tags": [
|
||||||
|
"prometheus-mixin"
|
||||||
],
|
],
|
||||||
"templating": {
|
"templating": {
|
||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
"text": "Prometheus",
|
"text": "default",
|
||||||
"value": "Prometheus"
|
"value": "default"
|
||||||
},
|
},
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"label": null,
|
"label": null,
|
||||||
@ -2150,7 +2849,7 @@ data:
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timezone": "utc",
|
"timezone": "utc",
|
||||||
"title": "Prometheus",
|
"title": "Prometheus / Overview",
|
||||||
"uid": "",
|
"uid": "",
|
||||||
"version": 0
|
"version": 0
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,12 +18,13 @@ spec:
|
|||||||
labels:
|
labels:
|
||||||
name: grafana
|
name: grafana
|
||||||
phase: prod
|
phase: prod
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
|
|
||||||
spec:
|
spec:
|
||||||
|
securityContext:
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
containers:
|
containers:
|
||||||
- name: grafana
|
- name: grafana
|
||||||
image: docker.io/grafana/grafana:6.5.3
|
image: docker.io/grafana/grafana:7.5.6
|
||||||
env:
|
env:
|
||||||
- name: GF_PATHS_CONFIG
|
- name: GF_PATHS_CONFIG
|
||||||
value: "/etc/grafana/custom.ini"
|
value: "/etc/grafana/custom.ini"
|
||||||
|
|||||||
6
addons/nginx-ingress/aws/class.yaml
Normal file
6
addons/nginx-ingress/aws/class.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: IngressClass
|
||||||
|
metadata:
|
||||||
|
name: public
|
||||||
|
spec:
|
||||||
|
controller: k8s.io/ingress-nginx
|
||||||
@ -17,12 +17,13 @@ spec:
|
|||||||
labels:
|
labels:
|
||||||
name: nginx-ingress-controller
|
name: nginx-ingress-controller
|
||||||
phase: prod
|
phase: prod
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
|
|
||||||
spec:
|
spec:
|
||||||
|
securityContext:
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
containers:
|
containers:
|
||||||
- name: nginx-ingress-controller
|
- name: nginx-ingress-controller
|
||||||
image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1
|
image: k8s.gcr.io/ingress-nginx/controller:v0.46.0
|
||||||
args:
|
args:
|
||||||
- /nginx-ingress-controller
|
- /nginx-ingress-controller
|
||||||
- --ingress-class=public
|
- --ingress-class=public
|
||||||
@ -47,7 +48,6 @@ spec:
|
|||||||
containerPort: 10254
|
containerPort: 10254
|
||||||
hostPort: 10254
|
hostPort: 10254
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
failureThreshold: 3
|
|
||||||
httpGet:
|
httpGet:
|
||||||
path: /healthz
|
path: /healthz
|
||||||
port: 10254
|
port: 10254
|
||||||
@ -55,15 +55,16 @@ spec:
|
|||||||
initialDelaySeconds: 10
|
initialDelaySeconds: 10
|
||||||
periodSeconds: 10
|
periodSeconds: 10
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
|
failureThreshold: 3
|
||||||
timeoutSeconds: 5
|
timeoutSeconds: 5
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
failureThreshold: 3
|
|
||||||
httpGet:
|
httpGet:
|
||||||
path: /healthz
|
path: /healthz
|
||||||
port: 10254
|
port: 10254
|
||||||
scheme: HTTP
|
scheme: HTTP
|
||||||
periodSeconds: 10
|
periodSeconds: 10
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
|
failureThreshold: 3
|
||||||
timeoutSeconds: 5
|
timeoutSeconds: 5
|
||||||
lifecycle:
|
lifecycle:
|
||||||
preStop:
|
preStop:
|
||||||
@ -76,6 +77,6 @@ spec:
|
|||||||
- NET_BIND_SERVICE
|
- NET_BIND_SERVICE
|
||||||
drop:
|
drop:
|
||||||
- ALL
|
- ALL
|
||||||
runAsUser: 33 # www-data
|
runAsUser: 101 # www-data
|
||||||
restartPolicy: Always
|
restartPolicy: Always
|
||||||
terminationGracePeriodSeconds: 300
|
terminationGracePeriodSeconds: 300
|
||||||
|
|||||||
@ -51,3 +51,12 @@ rules:
|
|||||||
- ingresses/status
|
- ingresses/status
|
||||||
verbs:
|
verbs:
|
||||||
- update
|
- update
|
||||||
|
- apiGroups:
|
||||||
|
- "networking.k8s.io"
|
||||||
|
resources:
|
||||||
|
- ingressclasses
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
|
||||||
|
|||||||
6
addons/nginx-ingress/azure/class.yaml
Normal file
6
addons/nginx-ingress/azure/class.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: IngressClass
|
||||||
|
metadata:
|
||||||
|
name: public
|
||||||
|
spec:
|
||||||
|
controller: k8s.io/ingress-nginx
|
||||||
@ -17,12 +17,13 @@ spec:
|
|||||||
labels:
|
labels:
|
||||||
name: nginx-ingress-controller
|
name: nginx-ingress-controller
|
||||||
phase: prod
|
phase: prod
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
|
|
||||||
spec:
|
spec:
|
||||||
|
securityContext:
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
containers:
|
containers:
|
||||||
- name: nginx-ingress-controller
|
- name: nginx-ingress-controller
|
||||||
image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1
|
image: k8s.gcr.io/ingress-nginx/controller:v0.46.0
|
||||||
args:
|
args:
|
||||||
- /nginx-ingress-controller
|
- /nginx-ingress-controller
|
||||||
- --ingress-class=public
|
- --ingress-class=public
|
||||||
@ -47,7 +48,6 @@ spec:
|
|||||||
containerPort: 10254
|
containerPort: 10254
|
||||||
hostPort: 10254
|
hostPort: 10254
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
failureThreshold: 3
|
|
||||||
httpGet:
|
httpGet:
|
||||||
path: /healthz
|
path: /healthz
|
||||||
port: 10254
|
port: 10254
|
||||||
@ -55,15 +55,16 @@ spec:
|
|||||||
initialDelaySeconds: 10
|
initialDelaySeconds: 10
|
||||||
periodSeconds: 10
|
periodSeconds: 10
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
|
failureThreshold: 3
|
||||||
timeoutSeconds: 5
|
timeoutSeconds: 5
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
failureThreshold: 3
|
|
||||||
httpGet:
|
httpGet:
|
||||||
path: /healthz
|
path: /healthz
|
||||||
port: 10254
|
port: 10254
|
||||||
scheme: HTTP
|
scheme: HTTP
|
||||||
periodSeconds: 10
|
periodSeconds: 10
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
|
failureThreshold: 3
|
||||||
timeoutSeconds: 5
|
timeoutSeconds: 5
|
||||||
lifecycle:
|
lifecycle:
|
||||||
preStop:
|
preStop:
|
||||||
@ -76,6 +77,6 @@ spec:
|
|||||||
- NET_BIND_SERVICE
|
- NET_BIND_SERVICE
|
||||||
drop:
|
drop:
|
||||||
- ALL
|
- ALL
|
||||||
runAsUser: 33 # www-data
|
runAsUser: 101 # www-data
|
||||||
restartPolicy: Always
|
restartPolicy: Always
|
||||||
terminationGracePeriodSeconds: 300
|
terminationGracePeriodSeconds: 300
|
||||||
|
|||||||
@ -51,3 +51,12 @@ rules:
|
|||||||
- ingresses/status
|
- ingresses/status
|
||||||
verbs:
|
verbs:
|
||||||
- update
|
- update
|
||||||
|
- apiGroups:
|
||||||
|
- "networking.k8s.io"
|
||||||
|
resources:
|
||||||
|
- ingressclasses
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
|
||||||
|
|||||||
6
addons/nginx-ingress/bare-metal/class.yaml
Normal file
6
addons/nginx-ingress/bare-metal/class.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: IngressClass
|
||||||
|
metadata:
|
||||||
|
name: public
|
||||||
|
spec:
|
||||||
|
controller: k8s.io/ingress-nginx
|
||||||
@ -1,7 +1,7 @@
|
|||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: ingress-controller-public
|
name: nginx-ingress-controller
|
||||||
namespace: ingress
|
namespace: ingress
|
||||||
spec:
|
spec:
|
||||||
replicas: 2
|
replicas: 2
|
||||||
@ -10,19 +10,20 @@ spec:
|
|||||||
maxUnavailable: 1
|
maxUnavailable: 1
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
name: ingress-controller-public
|
name: nginx-ingress-controller
|
||||||
phase: prod
|
phase: prod
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
name: ingress-controller-public
|
name: nginx-ingress-controller
|
||||||
phase: prod
|
phase: prod
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
|
|
||||||
spec:
|
spec:
|
||||||
|
securityContext:
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
containers:
|
containers:
|
||||||
- name: nginx-ingress-controller
|
- name: nginx-ingress-controller
|
||||||
image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1
|
image: k8s.gcr.io/ingress-nginx/controller:v0.46.0
|
||||||
args:
|
args:
|
||||||
- /nginx-ingress-controller
|
- /nginx-ingress-controller
|
||||||
- --ingress-class=public
|
- --ingress-class=public
|
||||||
@ -73,7 +74,6 @@ spec:
|
|||||||
- NET_BIND_SERVICE
|
- NET_BIND_SERVICE
|
||||||
drop:
|
drop:
|
||||||
- ALL
|
- ALL
|
||||||
runAsUser: 33 # www-data
|
runAsUser: 101 # www-data
|
||||||
restartPolicy: Always
|
restartPolicy: Always
|
||||||
terminationGracePeriodSeconds: 300
|
terminationGracePeriodSeconds: 300
|
||||||
|
|
||||||
|
|||||||
@ -51,3 +51,12 @@ rules:
|
|||||||
- ingresses/status
|
- ingresses/status
|
||||||
verbs:
|
verbs:
|
||||||
- update
|
- update
|
||||||
|
- apiGroups:
|
||||||
|
- "networking.k8s.io"
|
||||||
|
resources:
|
||||||
|
- ingressclasses
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
|
||||||
|
|||||||
6
addons/nginx-ingress/digital-ocean/class.yaml
Normal file
6
addons/nginx-ingress/digital-ocean/class.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: IngressClass
|
||||||
|
metadata:
|
||||||
|
name: public
|
||||||
|
spec:
|
||||||
|
controller: k8s.io/ingress-nginx
|
||||||
@ -17,12 +17,13 @@ spec:
|
|||||||
labels:
|
labels:
|
||||||
name: nginx-ingress-controller
|
name: nginx-ingress-controller
|
||||||
phase: prod
|
phase: prod
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
|
|
||||||
spec:
|
spec:
|
||||||
|
securityContext:
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
containers:
|
containers:
|
||||||
- name: nginx-ingress-controller
|
- name: nginx-ingress-controller
|
||||||
image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1
|
image: k8s.gcr.io/ingress-nginx/controller:v0.46.0
|
||||||
args:
|
args:
|
||||||
- /nginx-ingress-controller
|
- /nginx-ingress-controller
|
||||||
- --ingress-class=public
|
- --ingress-class=public
|
||||||
@ -47,7 +48,6 @@ spec:
|
|||||||
containerPort: 10254
|
containerPort: 10254
|
||||||
hostPort: 10254
|
hostPort: 10254
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
failureThreshold: 3
|
|
||||||
httpGet:
|
httpGet:
|
||||||
path: /healthz
|
path: /healthz
|
||||||
port: 10254
|
port: 10254
|
||||||
@ -55,15 +55,16 @@ spec:
|
|||||||
initialDelaySeconds: 10
|
initialDelaySeconds: 10
|
||||||
periodSeconds: 10
|
periodSeconds: 10
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
|
failureThreshold: 3
|
||||||
timeoutSeconds: 5
|
timeoutSeconds: 5
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
failureThreshold: 3
|
|
||||||
httpGet:
|
httpGet:
|
||||||
path: /healthz
|
path: /healthz
|
||||||
port: 10254
|
port: 10254
|
||||||
scheme: HTTP
|
scheme: HTTP
|
||||||
periodSeconds: 10
|
periodSeconds: 10
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
|
failureThreshold: 3
|
||||||
timeoutSeconds: 5
|
timeoutSeconds: 5
|
||||||
lifecycle:
|
lifecycle:
|
||||||
preStop:
|
preStop:
|
||||||
@ -76,6 +77,6 @@ spec:
|
|||||||
- NET_BIND_SERVICE
|
- NET_BIND_SERVICE
|
||||||
drop:
|
drop:
|
||||||
- ALL
|
- ALL
|
||||||
runAsUser: 33 # www-data
|
runAsUser: 101 # www-data
|
||||||
restartPolicy: Always
|
restartPolicy: Always
|
||||||
terminationGracePeriodSeconds: 300
|
terminationGracePeriodSeconds: 300
|
||||||
|
|||||||
@ -51,3 +51,12 @@ rules:
|
|||||||
- ingresses/status
|
- ingresses/status
|
||||||
verbs:
|
verbs:
|
||||||
- update
|
- update
|
||||||
|
- apiGroups:
|
||||||
|
- "networking.k8s.io"
|
||||||
|
resources:
|
||||||
|
- ingressclasses
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
|
||||||
|
|||||||
6
addons/nginx-ingress/google-cloud/class.yaml
Normal file
6
addons/nginx-ingress/google-cloud/class.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: IngressClass
|
||||||
|
metadata:
|
||||||
|
name: public
|
||||||
|
spec:
|
||||||
|
controller: k8s.io/ingress-nginx
|
||||||
@ -17,12 +17,13 @@ spec:
|
|||||||
labels:
|
labels:
|
||||||
name: nginx-ingress-controller
|
name: nginx-ingress-controller
|
||||||
phase: prod
|
phase: prod
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
|
|
||||||
spec:
|
spec:
|
||||||
|
securityContext:
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
containers:
|
containers:
|
||||||
- name: nginx-ingress-controller
|
- name: nginx-ingress-controller
|
||||||
image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1
|
image: k8s.gcr.io/ingress-nginx/controller:v0.46.0
|
||||||
args:
|
args:
|
||||||
- /nginx-ingress-controller
|
- /nginx-ingress-controller
|
||||||
- --ingress-class=public
|
- --ingress-class=public
|
||||||
@ -47,7 +48,6 @@ spec:
|
|||||||
containerPort: 10254
|
containerPort: 10254
|
||||||
hostPort: 10254
|
hostPort: 10254
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
failureThreshold: 3
|
|
||||||
httpGet:
|
httpGet:
|
||||||
path: /healthz
|
path: /healthz
|
||||||
port: 10254
|
port: 10254
|
||||||
@ -55,15 +55,16 @@ spec:
|
|||||||
initialDelaySeconds: 10
|
initialDelaySeconds: 10
|
||||||
periodSeconds: 10
|
periodSeconds: 10
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
|
failureThreshold: 3
|
||||||
timeoutSeconds: 5
|
timeoutSeconds: 5
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
failureThreshold: 3
|
|
||||||
httpGet:
|
httpGet:
|
||||||
path: /healthz
|
path: /healthz
|
||||||
port: 10254
|
port: 10254
|
||||||
scheme: HTTP
|
scheme: HTTP
|
||||||
periodSeconds: 10
|
periodSeconds: 10
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
|
failureThreshold: 3
|
||||||
timeoutSeconds: 5
|
timeoutSeconds: 5
|
||||||
lifecycle:
|
lifecycle:
|
||||||
preStop:
|
preStop:
|
||||||
@ -76,6 +77,6 @@ spec:
|
|||||||
- NET_BIND_SERVICE
|
- NET_BIND_SERVICE
|
||||||
drop:
|
drop:
|
||||||
- ALL
|
- ALL
|
||||||
runAsUser: 33 # www-data
|
runAsUser: 101 # www-data
|
||||||
restartPolicy: Always
|
restartPolicy: Always
|
||||||
terminationGracePeriodSeconds: 300
|
terminationGracePeriodSeconds: 300
|
||||||
|
|||||||
@ -51,3 +51,12 @@ rules:
|
|||||||
- ingresses/status
|
- ingresses/status
|
||||||
verbs:
|
verbs:
|
||||||
- update
|
- update
|
||||||
|
- apiGroups:
|
||||||
|
- "networking.k8s.io"
|
||||||
|
resources:
|
||||||
|
- ingressclasses
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
|
||||||
|
|||||||
@ -68,6 +68,9 @@ data:
|
|||||||
- source_labels: [__name__, group]
|
- source_labels: [__name__, group]
|
||||||
regex: apiserver_request_duration_seconds_bucket;.+
|
regex: apiserver_request_duration_seconds_bucket;.+
|
||||||
action: drop
|
action: drop
|
||||||
|
- source_labels: [__name__, group]
|
||||||
|
regex: apiserver_request_duration_seconds_count;.+
|
||||||
|
action: drop
|
||||||
|
|
||||||
# Scrape config for node (i.e. kubelet) /metrics (e.g. 'kubelet_'). Explore
|
# Scrape config for node (i.e. kubelet) /metrics (e.g. 'kubelet_'). Explore
|
||||||
# metrics from a node by scraping kubelet (127.0.0.1:10250/metrics).
|
# metrics from a node by scraping kubelet (127.0.0.1:10250/metrics).
|
||||||
@ -82,10 +85,6 @@ data:
|
|||||||
insecure_skip_verify: true
|
insecure_skip_verify: true
|
||||||
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
|
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
|
||||||
|
|
||||||
relabel_configs:
|
|
||||||
- action: labelmap
|
|
||||||
regex: __meta_kubernetes_node_name
|
|
||||||
|
|
||||||
# Scrape config for Kubelet cAdvisor. Explore metrics from a node by
|
# Scrape config for Kubelet cAdvisor. Explore metrics from a node by
|
||||||
# scraping kubelet (127.0.0.1:10250/metrics/cadvisor).
|
# scraping kubelet (127.0.0.1:10250/metrics/cadvisor).
|
||||||
- job_name: 'kubernetes-cadvisor'
|
- job_name: 'kubernetes-cadvisor'
|
||||||
@ -100,9 +99,6 @@ data:
|
|||||||
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
|
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
|
||||||
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
|
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
|
||||||
|
|
||||||
relabel_configs:
|
|
||||||
- action: labelmap
|
|
||||||
regex: __meta_kubernetes_node_name
|
|
||||||
metric_relabel_configs:
|
metric_relabel_configs:
|
||||||
- source_labels: [__name__, image]
|
- source_labels: [__name__, image]
|
||||||
action: drop
|
action: drop
|
||||||
@ -121,8 +117,6 @@ data:
|
|||||||
- source_labels: [__meta_kubernetes_node_label_node_kubernetes_io_controller]
|
- source_labels: [__meta_kubernetes_node_label_node_kubernetes_io_controller]
|
||||||
action: keep
|
action: keep
|
||||||
regex: 'true'
|
regex: 'true'
|
||||||
- action: labelmap
|
|
||||||
regex: __meta_kubernetes_node_name
|
|
||||||
- source_labels: [__meta_kubernetes_node_address_InternalIP]
|
- source_labels: [__meta_kubernetes_node_address_InternalIP]
|
||||||
action: replace
|
action: replace
|
||||||
target_label: __address__
|
target_label: __address__
|
||||||
|
|||||||
@ -14,13 +14,14 @@ spec:
|
|||||||
labels:
|
labels:
|
||||||
name: prometheus
|
name: prometheus
|
||||||
phase: prod
|
phase: prod
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
|
|
||||||
spec:
|
spec:
|
||||||
|
securityContext:
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
serviceAccountName: prometheus
|
serviceAccountName: prometheus
|
||||||
containers:
|
containers:
|
||||||
- name: prometheus
|
- name: prometheus
|
||||||
image: quay.io/prometheus/prometheus:v2.15.2
|
image: quay.io/prometheus/prometheus:v2.27.0
|
||||||
args:
|
args:
|
||||||
- --web.listen-address=0.0.0.0:9090
|
- --web.listen-address=0.0.0.0:9090
|
||||||
- --config.file=/etc/prometheus/prometheus.yaml
|
- --config.file=/etc/prometheus/prometheus.yaml
|
||||||
|
|||||||
@ -78,13 +78,6 @@ rules:
|
|||||||
verbs:
|
verbs:
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
|
||||||
- autoscaling.k8s.io
|
|
||||||
resources:
|
|
||||||
- verticalpodautoscalers
|
|
||||||
verbs:
|
|
||||||
- list
|
|
||||||
- watch
|
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- admissionregistration.k8s.io
|
- admissionregistration.k8s.io
|
||||||
resources:
|
resources:
|
||||||
@ -97,6 +90,14 @@ rules:
|
|||||||
- networking.k8s.io
|
- networking.k8s.io
|
||||||
resources:
|
resources:
|
||||||
- networkpolicies
|
- networkpolicies
|
||||||
|
- ingresses
|
||||||
|
verbs:
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- coordination.k8s.io
|
||||||
|
resources:
|
||||||
|
- leases
|
||||||
verbs:
|
verbs:
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
|
|||||||
@ -18,16 +18,19 @@ spec:
|
|||||||
labels:
|
labels:
|
||||||
name: kube-state-metrics
|
name: kube-state-metrics
|
||||||
phase: prod
|
phase: prod
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
|
|
||||||
spec:
|
spec:
|
||||||
|
securityContext:
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
serviceAccountName: kube-state-metrics
|
serviceAccountName: kube-state-metrics
|
||||||
containers:
|
containers:
|
||||||
- name: kube-state-metrics
|
- name: kube-state-metrics
|
||||||
image: quay.io/coreos/kube-state-metrics:v1.9.2
|
image: k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.0.0
|
||||||
ports:
|
ports:
|
||||||
- name: metrics
|
- name: metrics
|
||||||
containerPort: 8080
|
containerPort: 8080
|
||||||
|
- name: telemetry
|
||||||
|
containerPort: 8081
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
path: /healthz
|
path: /healthz
|
||||||
@ -40,3 +43,5 @@ spec:
|
|||||||
port: 8081
|
port: 8081
|
||||||
initialDelaySeconds: 5
|
initialDelaySeconds: 5
|
||||||
timeoutSeconds: 5
|
timeoutSeconds: 5
|
||||||
|
securityContext:
|
||||||
|
runAsUser: 65534
|
||||||
|
|||||||
@ -17,18 +17,18 @@ spec:
|
|||||||
labels:
|
labels:
|
||||||
name: node-exporter
|
name: node-exporter
|
||||||
phase: prod
|
phase: prod
|
||||||
annotations:
|
|
||||||
seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
|
|
||||||
spec:
|
spec:
|
||||||
serviceAccountName: node-exporter
|
serviceAccountName: node-exporter
|
||||||
securityContext:
|
securityContext:
|
||||||
runAsNonRoot: true
|
runAsNonRoot: true
|
||||||
runAsUser: 65534
|
runAsUser: 65534
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
hostNetwork: true
|
hostNetwork: true
|
||||||
hostPID: true
|
hostPID: true
|
||||||
containers:
|
containers:
|
||||||
- name: node-exporter
|
- name: node-exporter
|
||||||
image: quay.io/prometheus/node-exporter:v0.18.1
|
image: quay.io/prometheus/node-exporter:v1.1.2
|
||||||
args:
|
args:
|
||||||
- --path.procfs=/host/proc
|
- --path.procfs=/host/proc
|
||||||
- --path.sysfs=/host/sys
|
- --path.sysfs=/host/sys
|
||||||
|
|||||||
@ -9,10 +9,11 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "etcdMembersDown",
|
"alert": "etcdMembersDown",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "etcd cluster \"{{ $labels.job }}\": members are down ({{ $value }})."
|
"description": "etcd cluster \"{{ $labels.job }}\": members are down ({{ $value }}).",
|
||||||
|
"summary": "etcd cluster members are down."
|
||||||
},
|
},
|
||||||
"expr": "max by (job) (\n sum by (job) (up{job=~\".*etcd.*\"} == bool 0)\nor\n count by (job,endpoint) (\n sum by (job,endpoint,To) (rate(etcd_network_peer_sent_failures_total{job=~\".*etcd.*\"}[3m])) > 0.01\n )\n)\n> 0\n",
|
"expr": "max without (endpoint) (\n sum without (instance) (up{job=~\".*etcd.*\"} == bool 0)\nor\n count without (To) (\n sum without (instance) (rate(etcd_network_peer_sent_failures_total{job=~\".*etcd.*\"}[120s])) > 0.01\n )\n)\n> 0\n",
|
||||||
"for": "3m",
|
"for": "10m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "critical"
|
||||||
}
|
}
|
||||||
@ -20,9 +21,10 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "etcdInsufficientMembers",
|
"alert": "etcdInsufficientMembers",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "etcd cluster \"{{ $labels.job }}\": insufficient members ({{ $value }})."
|
"description": "etcd cluster \"{{ $labels.job }}\": insufficient members ({{ $value }}).",
|
||||||
|
"summary": "etcd cluster has insufficient number of members."
|
||||||
},
|
},
|
||||||
"expr": "sum(up{job=~\".*etcd.*\"} == bool 1) by (job) < ((count(up{job=~\".*etcd.*\"}) by (job) + 1) / 2)\n",
|
"expr": "sum(up{job=~\".*etcd.*\"} == bool 1) without (instance) < ((count(up{job=~\".*etcd.*\"}) without (instance) + 1) / 2)\n",
|
||||||
"for": "3m",
|
"for": "3m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "critical"
|
||||||
@ -31,7 +33,8 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "etcdNoLeader",
|
"alert": "etcdNoLeader",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "etcd cluster \"{{ $labels.job }}\": member {{ $labels.instance }} has no leader."
|
"description": "etcd cluster \"{{ $labels.job }}\": member {{ $labels.instance }} has no leader.",
|
||||||
|
"summary": "etcd cluster has no leader."
|
||||||
},
|
},
|
||||||
"expr": "etcd_server_has_leader{job=~\".*etcd.*\"} == 0\n",
|
"expr": "etcd_server_has_leader{job=~\".*etcd.*\"} == 0\n",
|
||||||
"for": "1m",
|
"for": "1m",
|
||||||
@ -42,10 +45,11 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "etcdHighNumberOfLeaderChanges",
|
"alert": "etcdHighNumberOfLeaderChanges",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "etcd cluster \"{{ $labels.job }}\": instance {{ $labels.instance }} has seen {{ $value }} leader changes within the last 30 minutes."
|
"description": "etcd cluster \"{{ $labels.job }}\": {{ $value }} leader changes within the last 15 minutes. Frequent elections may be a sign of insufficient resources, high network latency, or disruptions by other components and should be investigated.",
|
||||||
|
"summary": "etcd cluster has high number of leader changes."
|
||||||
},
|
},
|
||||||
"expr": "rate(etcd_server_leader_changes_seen_total{job=~\".*etcd.*\"}[15m]) > 3\n",
|
"expr": "increase((max without (instance) (etcd_server_leader_changes_seen_total{job=~\".*etcd.*\"}) or 0*absent(etcd_server_leader_changes_seen_total{job=~\".*etcd.*\"}))[15m:1m]) >= 4\n",
|
||||||
"for": "15m",
|
"for": "5m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
@ -53,9 +57,10 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "etcdGRPCRequestsSlow",
|
"alert": "etcdGRPCRequestsSlow",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "etcd cluster \"{{ $labels.job }}\": gRPC requests to {{ $labels.grpc_method }} are taking {{ $value }}s on etcd instance {{ $labels.instance }}."
|
"description": "etcd cluster \"{{ $labels.job }}\": gRPC requests to {{ $labels.grpc_method }} are taking {{ $value }}s on etcd instance {{ $labels.instance }}.",
|
||||||
|
"summary": "etcd grpc requests are slow"
|
||||||
},
|
},
|
||||||
"expr": "histogram_quantile(0.99, sum(rate(grpc_server_handling_seconds_bucket{job=~\".*etcd.*\", grpc_type=\"unary\"}[5m])) by (job, instance, grpc_service, grpc_method, le))\n> 0.15\n",
|
"expr": "histogram_quantile(0.99, sum(rate(grpc_server_handling_seconds_bucket{job=~\".*etcd.*\", grpc_type=\"unary\"}[5m])) without(grpc_type))\n> 0.15\n",
|
||||||
"for": "10m",
|
"for": "10m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "critical"
|
||||||
@ -64,7 +69,8 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "etcdMemberCommunicationSlow",
|
"alert": "etcdMemberCommunicationSlow",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "etcd cluster \"{{ $labels.job }}\": member communication with {{ $labels.To }} is taking {{ $value }}s on etcd instance {{ $labels.instance }}."
|
"description": "etcd cluster \"{{ $labels.job }}\": member communication with {{ $labels.To }} is taking {{ $value }}s on etcd instance {{ $labels.instance }}.",
|
||||||
|
"summary": "etcd cluster member communication is slow."
|
||||||
},
|
},
|
||||||
"expr": "histogram_quantile(0.99, rate(etcd_network_peer_round_trip_time_seconds_bucket{job=~\".*etcd.*\"}[5m]))\n> 0.15\n",
|
"expr": "histogram_quantile(0.99, rate(etcd_network_peer_round_trip_time_seconds_bucket{job=~\".*etcd.*\"}[5m]))\n> 0.15\n",
|
||||||
"for": "10m",
|
"for": "10m",
|
||||||
@ -75,7 +81,8 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "etcdHighNumberOfFailedProposals",
|
"alert": "etcdHighNumberOfFailedProposals",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "etcd cluster \"{{ $labels.job }}\": {{ $value }} proposal failures within the last 30 minutes on etcd instance {{ $labels.instance }}."
|
"description": "etcd cluster \"{{ $labels.job }}\": {{ $value }} proposal failures within the last 30 minutes on etcd instance {{ $labels.instance }}.",
|
||||||
|
"summary": "etcd cluster has high number of proposal failures."
|
||||||
},
|
},
|
||||||
"expr": "rate(etcd_server_proposals_failed_total{job=~\".*etcd.*\"}[15m]) > 5\n",
|
"expr": "rate(etcd_server_proposals_failed_total{job=~\".*etcd.*\"}[15m]) > 5\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
@ -86,7 +93,8 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "etcdHighFsyncDurations",
|
"alert": "etcdHighFsyncDurations",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "etcd cluster \"{{ $labels.job }}\": 99th percentile fync durations are {{ $value }}s on etcd instance {{ $labels.instance }}."
|
"description": "etcd cluster \"{{ $labels.job }}\": 99th percentile fsync durations are {{ $value }}s on etcd instance {{ $labels.instance }}.",
|
||||||
|
"summary": "etcd cluster 99th percentile fsync durations are too high."
|
||||||
},
|
},
|
||||||
"expr": "histogram_quantile(0.99, rate(etcd_disk_wal_fsync_duration_seconds_bucket{job=~\".*etcd.*\"}[5m]))\n> 0.5\n",
|
"expr": "histogram_quantile(0.99, rate(etcd_disk_wal_fsync_duration_seconds_bucket{job=~\".*etcd.*\"}[5m]))\n> 0.5\n",
|
||||||
"for": "10m",
|
"for": "10m",
|
||||||
@ -94,10 +102,22 @@ data:
|
|||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"alert": "etcdHighFsyncDurations",
|
||||||
|
"annotations": {
|
||||||
|
"message": "etcd cluster \"{{ $labels.job }}\": 99th percentile fsync durations are {{ $value }}s on etcd instance {{ $labels.instance }}."
|
||||||
|
},
|
||||||
|
"expr": "histogram_quantile(0.99, rate(etcd_disk_wal_fsync_duration_seconds_bucket{job=~\".*etcd.*\"}[5m]))\n> 1\n",
|
||||||
|
"for": "10m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "critical"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"alert": "etcdHighCommitDurations",
|
"alert": "etcdHighCommitDurations",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "etcd cluster \"{{ $labels.job }}\": 99th percentile commit durations {{ $value }}s on etcd instance {{ $labels.instance }}."
|
"description": "etcd cluster \"{{ $labels.job }}\": 99th percentile commit durations {{ $value }}s on etcd instance {{ $labels.instance }}.",
|
||||||
|
"summary": "etcd cluster 99th percentile commit durations are too high."
|
||||||
},
|
},
|
||||||
"expr": "histogram_quantile(0.99, rate(etcd_disk_backend_commit_duration_seconds_bucket{job=~\".*etcd.*\"}[5m]))\n> 0.25\n",
|
"expr": "histogram_quantile(0.99, rate(etcd_disk_backend_commit_duration_seconds_bucket{job=~\".*etcd.*\"}[5m]))\n> 0.25\n",
|
||||||
"for": "10m",
|
"for": "10m",
|
||||||
@ -108,9 +128,10 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "etcdHighNumberOfFailedHTTPRequests",
|
"alert": "etcdHighNumberOfFailedHTTPRequests",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "{{ $value }}% of requests for {{ $labels.method }} failed on etcd instance {{ $labels.instance }}"
|
"description": "{{ $value }}% of requests for {{ $labels.method }} failed on etcd instance {{ $labels.instance }}",
|
||||||
|
"summary": "etcd has high number of failed HTTP requests."
|
||||||
},
|
},
|
||||||
"expr": "sum(rate(etcd_http_failed_total{job=~\".*etcd.*\", code!=\"404\"}[5m])) BY (method) / sum(rate(etcd_http_received_total{job=~\".*etcd.*\"}[5m]))\nBY (method) > 0.01\n",
|
"expr": "sum(rate(etcd_http_failed_total{job=~\".*etcd.*\", code!=\"404\"}[5m])) without (code) / sum(rate(etcd_http_received_total{job=~\".*etcd.*\"}[5m]))\nwithout (code) > 0.01\n",
|
||||||
"for": "10m",
|
"for": "10m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
@ -119,9 +140,10 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "etcdHighNumberOfFailedHTTPRequests",
|
"alert": "etcdHighNumberOfFailedHTTPRequests",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "{{ $value }}% of requests for {{ $labels.method }} failed on etcd instance {{ $labels.instance }}."
|
"description": "{{ $value }}% of requests for {{ $labels.method }} failed on etcd instance {{ $labels.instance }}.",
|
||||||
|
"summary": "etcd has high number of failed HTTP requests."
|
||||||
},
|
},
|
||||||
"expr": "sum(rate(etcd_http_failed_total{job=~\".*etcd.*\", code!=\"404\"}[5m])) BY (method) / sum(rate(etcd_http_received_total{job=~\".*etcd.*\"}[5m]))\nBY (method) > 0.05\n",
|
"expr": "sum(rate(etcd_http_failed_total{job=~\".*etcd.*\", code!=\"404\"}[5m])) without (code) / sum(rate(etcd_http_received_total{job=~\".*etcd.*\"}[5m]))\nwithout (code) > 0.05\n",
|
||||||
"for": "10m",
|
"for": "10m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "critical"
|
||||||
@ -130,13 +152,36 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "etcdHTTPRequestsSlow",
|
"alert": "etcdHTTPRequestsSlow",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "etcd instance {{ $labels.instance }} HTTP requests to {{ $labels.method }} are slow."
|
"description": "etcd instance {{ $labels.instance }} HTTP requests to {{ $labels.method }} are slow.",
|
||||||
|
"summary": "etcd instance HTTP requests are slow."
|
||||||
},
|
},
|
||||||
"expr": "histogram_quantile(0.99, rate(etcd_http_successful_duration_seconds_bucket[5m]))\n> 0.15\n",
|
"expr": "histogram_quantile(0.99, rate(etcd_http_successful_duration_seconds_bucket[5m]))\n> 0.15\n",
|
||||||
"for": "10m",
|
"for": "10m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "etcdBackendQuotaLowSpace",
|
||||||
|
"annotations": {
|
||||||
|
"message": "etcd cluster \"{{ $labels.job }}\": database size exceeds the defined quota on etcd instance {{ $labels.instance }}, please defrag or increase the quota as the writes to etcd will be disabled when it is full."
|
||||||
|
},
|
||||||
|
"expr": "(etcd_mvcc_db_total_size_in_bytes/etcd_server_quota_backend_bytes)*100 > 95\n",
|
||||||
|
"for": "10m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "critical"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "etcdExcessiveDatabaseGrowth",
|
||||||
|
"annotations": {
|
||||||
|
"message": "etcd cluster \"{{ $labels.job }}\": Observed surge in etcd writes leading to 50% increase in database size over the past four hours on etcd instance {{ $labels.instance }}, please check as it might be disruptive."
|
||||||
|
},
|
||||||
|
"expr": "increase(((etcd_mvcc_db_total_size_in_bytes/etcd_server_quota_backend_bytes)*100)[240m:1m]) > 50\n",
|
||||||
|
"for": "10m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "warning"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -149,21 +194,149 @@ data:
|
|||||||
"name": "kube-apiserver.rules",
|
"name": "kube-apiserver.rules",
|
||||||
"rules": [
|
"rules": [
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.99, sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\"}[5m])) without(instance, pod))\n",
|
"expr": "(\n (\n # too slow\n sum(rate(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"LIST|GET\"}[1d]))\n -\n (\n (\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=~\"resource|\",le=\"0.1\"}[1d]))\n or\n vector(0)\n )\n +\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"namespace\",le=\"0.5\"}[1d]))\n +\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"cluster\",le=\"5\"}[1d]))\n )\n )\n +\n # errors\n sum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\",code=~\"5..\"}[1d]))\n)\n/\nsum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\"}[1d]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "read"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:burnrate1d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "(\n (\n # too slow\n sum(rate(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"LIST|GET\"}[1h]))\n -\n (\n (\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=~\"resource|\",le=\"0.1\"}[1h]))\n or\n vector(0)\n )\n +\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"namespace\",le=\"0.5\"}[1h]))\n +\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"cluster\",le=\"5\"}[1h]))\n )\n )\n +\n # errors\n sum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\",code=~\"5..\"}[1h]))\n)\n/\nsum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\"}[1h]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "read"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:burnrate1h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "(\n (\n # too slow\n sum(rate(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"LIST|GET\"}[2h]))\n -\n (\n (\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=~\"resource|\",le=\"0.1\"}[2h]))\n or\n vector(0)\n )\n +\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"namespace\",le=\"0.5\"}[2h]))\n +\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"cluster\",le=\"5\"}[2h]))\n )\n )\n +\n # errors\n sum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\",code=~\"5..\"}[2h]))\n)\n/\nsum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\"}[2h]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "read"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:burnrate2h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "(\n (\n # too slow\n sum(rate(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"LIST|GET\"}[30m]))\n -\n (\n (\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=~\"resource|\",le=\"0.1\"}[30m]))\n or\n vector(0)\n )\n +\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"namespace\",le=\"0.5\"}[30m]))\n +\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"cluster\",le=\"5\"}[30m]))\n )\n )\n +\n # errors\n sum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\",code=~\"5..\"}[30m]))\n)\n/\nsum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\"}[30m]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "read"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:burnrate30m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "(\n (\n # too slow\n sum(rate(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"LIST|GET\"}[3d]))\n -\n (\n (\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=~\"resource|\",le=\"0.1\"}[3d]))\n or\n vector(0)\n )\n +\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"namespace\",le=\"0.5\"}[3d]))\n +\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"cluster\",le=\"5\"}[3d]))\n )\n )\n +\n # errors\n sum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\",code=~\"5..\"}[3d]))\n)\n/\nsum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\"}[3d]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "read"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:burnrate3d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "(\n (\n # too slow\n sum(rate(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"LIST|GET\"}[5m]))\n -\n (\n (\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=~\"resource|\",le=\"0.1\"}[5m]))\n or\n vector(0)\n )\n +\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"namespace\",le=\"0.5\"}[5m]))\n +\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"cluster\",le=\"5\"}[5m]))\n )\n )\n +\n # errors\n sum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\",code=~\"5..\"}[5m]))\n)\n/\nsum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\"}[5m]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "read"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:burnrate5m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "(\n (\n # too slow\n sum(rate(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"LIST|GET\"}[6h]))\n -\n (\n (\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=~\"resource|\",le=\"0.1\"}[6h]))\n or\n vector(0)\n )\n +\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"namespace\",le=\"0.5\"}[6h]))\n +\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"cluster\",le=\"5\"}[6h]))\n )\n )\n +\n # errors\n sum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\",code=~\"5..\"}[6h]))\n)\n/\nsum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\"}[6h]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "read"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:burnrate6h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "(\n (\n # too slow\n sum(rate(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[1d]))\n -\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\",le=\"1\"}[1d]))\n )\n +\n sum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\",code=~\"5..\"}[1d]))\n)\n/\nsum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[1d]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "write"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:burnrate1d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "(\n (\n # too slow\n sum(rate(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[1h]))\n -\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\",le=\"1\"}[1h]))\n )\n +\n sum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\",code=~\"5..\"}[1h]))\n)\n/\nsum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[1h]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "write"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:burnrate1h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "(\n (\n # too slow\n sum(rate(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[2h]))\n -\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\",le=\"1\"}[2h]))\n )\n +\n sum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\",code=~\"5..\"}[2h]))\n)\n/\nsum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[2h]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "write"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:burnrate2h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "(\n (\n # too slow\n sum(rate(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[30m]))\n -\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\",le=\"1\"}[30m]))\n )\n +\n sum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\",code=~\"5..\"}[30m]))\n)\n/\nsum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[30m]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "write"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:burnrate30m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "(\n (\n # too slow\n sum(rate(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[3d]))\n -\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\",le=\"1\"}[3d]))\n )\n +\n sum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\",code=~\"5..\"}[3d]))\n)\n/\nsum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[3d]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "write"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:burnrate3d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "(\n (\n # too slow\n sum(rate(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[5m]))\n -\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\",le=\"1\"}[5m]))\n )\n +\n sum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\",code=~\"5..\"}[5m]))\n)\n/\nsum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[5m]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "write"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:burnrate5m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "(\n (\n # too slow\n sum(rate(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[6h]))\n -\n sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\",le=\"1\"}[6h]))\n )\n +\n sum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\",code=~\"5..\"}[6h]))\n)\n/\nsum(rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[6h]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "write"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:burnrate6h"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code,resource) (rate(apiserver_request_total{job=\"apiserver\",verb=~\"LIST|GET\"}[5m]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "read"
|
||||||
|
},
|
||||||
|
"record": "code_resource:apiserver_request_total:rate5m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code,resource) (rate(apiserver_request_total{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[5m]))\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "write"
|
||||||
|
},
|
||||||
|
"record": "code_resource:apiserver_request_total:rate5m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "histogram_quantile(0.99, sum by (le, resource) (rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\"}[5m]))) > 0\n",
|
||||||
|
"labels": {
|
||||||
|
"quantile": "0.99",
|
||||||
|
"verb": "read"
|
||||||
|
},
|
||||||
|
"record": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "histogram_quantile(0.99, sum by (le, resource) (rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"POST|PUT|PATCH|DELETE\"}[5m]))) > 0\n",
|
||||||
|
"labels": {
|
||||||
|
"quantile": "0.99",
|
||||||
|
"verb": "write"
|
||||||
|
},
|
||||||
|
"record": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "histogram_quantile(0.99, sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",subresource!=\"log\",verb!~\"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT\"}[5m])) without(instance, pod))\n",
|
||||||
"labels": {
|
"labels": {
|
||||||
"quantile": "0.99"
|
"quantile": "0.99"
|
||||||
},
|
},
|
||||||
"record": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile"
|
"record": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.9, sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\"}[5m])) without(instance, pod))\n",
|
"expr": "histogram_quantile(0.9, sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",subresource!=\"log\",verb!~\"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT\"}[5m])) without(instance, pod))\n",
|
||||||
"labels": {
|
"labels": {
|
||||||
"quantile": "0.9"
|
"quantile": "0.9"
|
||||||
},
|
},
|
||||||
"record": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile"
|
"record": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.5, sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\"}[5m])) without(instance, pod))\n",
|
"expr": "histogram_quantile(0.5, sum(rate(apiserver_request_duration_seconds_bucket{job=\"apiserver\",subresource!=\"log\",verb!~\"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT\"}[5m])) without(instance, pod))\n",
|
||||||
"labels": {
|
"labels": {
|
||||||
"quantile": "0.5"
|
"quantile": "0.5"
|
||||||
},
|
},
|
||||||
@ -171,65 +344,194 @@ data:
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"interval": "3m",
|
||||||
|
"name": "kube-apiserver-availability.rules",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"expr": "1 - (\n (\n # write too slow\n sum(increase(apiserver_request_duration_seconds_count{verb=~\"POST|PUT|PATCH|DELETE\"}[30d]))\n -\n sum(increase(apiserver_request_duration_seconds_bucket{verb=~\"POST|PUT|PATCH|DELETE\",le=\"1\"}[30d]))\n ) +\n (\n # read too slow\n sum(increase(apiserver_request_duration_seconds_count{verb=~\"LIST|GET\"}[30d]))\n -\n (\n (\n sum(increase(apiserver_request_duration_seconds_bucket{verb=~\"LIST|GET\",scope=~\"resource|\",le=\"0.1\"}[30d]))\n or\n vector(0)\n )\n +\n sum(increase(apiserver_request_duration_seconds_bucket{verb=~\"LIST|GET\",scope=\"namespace\",le=\"0.5\"}[30d]))\n +\n sum(increase(apiserver_request_duration_seconds_bucket{verb=~\"LIST|GET\",scope=\"cluster\",le=\"5\"}[30d]))\n )\n ) +\n # errors\n sum(code:apiserver_request_total:increase30d{code=~\"5..\"} or vector(0))\n)\n/\nsum(code:apiserver_request_total:increase30d)\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "all"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:availability30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "1 - (\n sum(increase(apiserver_request_duration_seconds_count{job=\"apiserver\",verb=~\"LIST|GET\"}[30d]))\n -\n (\n # too slow\n (\n sum(increase(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=~\"resource|\",le=\"0.1\"}[30d]))\n or\n vector(0)\n )\n +\n sum(increase(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"namespace\",le=\"0.5\"}[30d]))\n +\n sum(increase(apiserver_request_duration_seconds_bucket{job=\"apiserver\",verb=~\"LIST|GET\",scope=\"cluster\",le=\"5\"}[30d]))\n )\n +\n # errors\n sum(code:apiserver_request_total:increase30d{verb=\"read\",code=~\"5..\"} or vector(0))\n)\n/\nsum(code:apiserver_request_total:increase30d{verb=\"read\"})\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "read"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:availability30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "1 - (\n (\n # too slow\n sum(increase(apiserver_request_duration_seconds_count{verb=~\"POST|PUT|PATCH|DELETE\"}[30d]))\n -\n sum(increase(apiserver_request_duration_seconds_bucket{verb=~\"POST|PUT|PATCH|DELETE\",le=\"1\"}[30d]))\n )\n +\n # errors\n sum(code:apiserver_request_total:increase30d{verb=\"write\",code=~\"5..\"} or vector(0))\n)\n/\nsum(code:apiserver_request_total:increase30d{verb=\"write\"})\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "write"
|
||||||
|
},
|
||||||
|
"record": "apiserver_request:availability30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"LIST\",code=~\"2..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"GET\",code=~\"2..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"POST\",code=~\"2..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"PUT\",code=~\"2..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"PATCH\",code=~\"2..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"DELETE\",code=~\"2..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"LIST\",code=~\"3..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"GET\",code=~\"3..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"POST\",code=~\"3..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"PUT\",code=~\"3..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"PATCH\",code=~\"3..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"DELETE\",code=~\"3..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"LIST\",code=~\"4..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"GET\",code=~\"4..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"POST\",code=~\"4..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"PUT\",code=~\"4..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"PATCH\",code=~\"4..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"DELETE\",code=~\"4..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"LIST\",code=~\"5..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"GET\",code=~\"5..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"POST\",code=~\"5..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"PUT\",code=~\"5..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"PATCH\",code=~\"5..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code, verb) (increase(apiserver_request_total{job=\"apiserver\",verb=\"DELETE\",code=~\"5..\"}[30d]))\n",
|
||||||
|
"record": "code_verb:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code) (code_verb:apiserver_request_total:increase30d{verb=~\"LIST|GET\"})\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "read"
|
||||||
|
},
|
||||||
|
"record": "code:apiserver_request_total:increase30d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum by (code) (code_verb:apiserver_request_total:increase30d{verb=~\"POST|PUT|PATCH|DELETE\"})\n",
|
||||||
|
"labels": {
|
||||||
|
"verb": "write"
|
||||||
|
},
|
||||||
|
"record": "code:apiserver_request_total:increase30d"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "k8s.rules",
|
"name": "k8s.rules",
|
||||||
"rules": [
|
"rules": [
|
||||||
{
|
{
|
||||||
"expr": "sum(rate(container_cpu_usage_seconds_total{job=\"kubernetes-cadvisor\", image!=\"\", container!=\"POD\"}[5m])) by (namespace)\n",
|
"expr": "sum by (cluster, namespace, pod, container) (\n rate(container_cpu_usage_seconds_total{job=\"kubernetes-cadvisor\", image!=\"\", container!=\"POD\"}[5m])\n) * on (cluster, namespace, pod) group_left(node) topk by (cluster, namespace, pod) (\n 1, max by(cluster, namespace, pod, node) (kube_pod_info{node!=\"\"})\n)\n",
|
||||||
"record": "namespace:container_cpu_usage_seconds_total:sum_rate"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expr": "sum by (namespace, pod, container) (\n rate(container_cpu_usage_seconds_total{job=\"kubernetes-cadvisor\", image!=\"\", container!=\"POD\"}[5m])\n) * on (namespace, pod) group_left(node) max by(namespace, pod, node) (kube_pod_info)\n",
|
|
||||||
"record": "node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate"
|
"record": "node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "container_memory_working_set_bytes{job=\"kubernetes-cadvisor\", image!=\"\"}\n* on (namespace, pod) group_left(node) max by(namespace, pod, node) (kube_pod_info)\n",
|
"expr": "container_memory_working_set_bytes{job=\"kubernetes-cadvisor\", image!=\"\"}\n* on (namespace, pod) group_left(node) topk by(namespace, pod) (1,\n max by(namespace, pod, node) (kube_pod_info{node!=\"\"})\n)\n",
|
||||||
"record": "node_namespace_pod_container:container_memory_working_set_bytes"
|
"record": "node_namespace_pod_container:container_memory_working_set_bytes"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "container_memory_rss{job=\"kubernetes-cadvisor\", image!=\"\"}\n* on (namespace, pod) group_left(node) max by(namespace, pod, node) (kube_pod_info)\n",
|
"expr": "container_memory_rss{job=\"kubernetes-cadvisor\", image!=\"\"}\n* on (namespace, pod) group_left(node) topk by(namespace, pod) (1,\n max by(namespace, pod, node) (kube_pod_info{node!=\"\"})\n)\n",
|
||||||
"record": "node_namespace_pod_container:container_memory_rss"
|
"record": "node_namespace_pod_container:container_memory_rss"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "container_memory_cache{job=\"kubernetes-cadvisor\", image!=\"\"}\n* on (namespace, pod) group_left(node) max by(namespace, pod, node) (kube_pod_info)\n",
|
"expr": "container_memory_cache{job=\"kubernetes-cadvisor\", image!=\"\"}\n* on (namespace, pod) group_left(node) topk by(namespace, pod) (1,\n max by(namespace, pod, node) (kube_pod_info{node!=\"\"})\n)\n",
|
||||||
"record": "node_namespace_pod_container:container_memory_cache"
|
"record": "node_namespace_pod_container:container_memory_cache"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "container_memory_swap{job=\"kubernetes-cadvisor\", image!=\"\"}\n* on (namespace, pod) group_left(node) max by(namespace, pod, node) (kube_pod_info)\n",
|
"expr": "container_memory_swap{job=\"kubernetes-cadvisor\", image!=\"\"}\n* on (namespace, pod) group_left(node) topk by(namespace, pod) (1,\n max by(namespace, pod, node) (kube_pod_info{node!=\"\"})\n)\n",
|
||||||
"record": "node_namespace_pod_container:container_memory_swap"
|
"record": "node_namespace_pod_container:container_memory_swap"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(container_memory_usage_bytes{job=\"kubernetes-cadvisor\", image!=\"\", container!=\"POD\"}) by (namespace)\n",
|
"expr": "sum by (namespace) (\n sum by (namespace, pod) (\n max by (namespace, pod, container) (\n kube_pod_container_resource_requests_memory_bytes{job=\"kube-state-metrics\"}\n ) * on(namespace, pod) group_left() max by (namespace, pod) (\n kube_pod_status_phase{phase=~\"Pending|Running\"} == 1\n )\n )\n)\n",
|
||||||
"record": "namespace:container_memory_usage_bytes:sum"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expr": "sum by (namespace, label_name) (\n sum(kube_pod_container_resource_requests_memory_bytes{job=\"kube-state-metrics\"} * on (endpoint, instance, job, namespace, pod, service) group_left(phase) (kube_pod_status_phase{phase=~\"Pending|Running\"} == 1)) by (namespace, pod)\n * on (namespace, pod)\n group_left(label_name) kube_pod_labels{job=\"kube-state-metrics\"}\n)\n",
|
|
||||||
"record": "namespace:kube_pod_container_resource_requests_memory_bytes:sum"
|
"record": "namespace:kube_pod_container_resource_requests_memory_bytes:sum"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum by (namespace, label_name) (\n sum(kube_pod_container_resource_requests_cpu_cores{job=\"kube-state-metrics\"} * on (endpoint, instance, job, namespace, pod, service) group_left(phase) (kube_pod_status_phase{phase=~\"Pending|Running\"} == 1)) by (namespace, pod)\n * on (namespace, pod)\n group_left(label_name) kube_pod_labels{job=\"kube-state-metrics\"}\n)\n",
|
"expr": "sum by (namespace) (\n sum by (namespace, pod) (\n max by (namespace, pod, container) (\n kube_pod_container_resource_requests_cpu_cores{job=\"kube-state-metrics\"}\n ) * on(namespace, pod) group_left() max by (namespace, pod) (\n kube_pod_status_phase{phase=~\"Pending|Running\"} == 1\n )\n )\n)\n",
|
||||||
"record": "namespace:kube_pod_container_resource_requests_cpu_cores:sum"
|
"record": "namespace:kube_pod_container_resource_requests_cpu_cores:sum"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n label_replace(\n label_replace(\n kube_pod_owner{job=\"kube-state-metrics\", owner_kind=\"ReplicaSet\"},\n \"replicaset\", \"$1\", \"owner_name\", \"(.*)\"\n ) * on(replicaset, namespace) group_left(owner_name) kube_replicaset_owner{job=\"kube-state-metrics\"},\n \"workload\", \"$1\", \"owner_name\", \"(.*)\"\n )\n) by (namespace, workload, pod)\n",
|
"expr": "max by (cluster, namespace, workload, pod) (\n label_replace(\n label_replace(\n kube_pod_owner{job=\"kube-state-metrics\", owner_kind=\"ReplicaSet\"},\n \"replicaset\", \"$1\", \"owner_name\", \"(.*)\"\n ) * on(replicaset, namespace) group_left(owner_name) topk by(replicaset, namespace) (\n 1, max by (replicaset, namespace, owner_name) (\n kube_replicaset_owner{job=\"kube-state-metrics\"}\n )\n ),\n \"workload\", \"$1\", \"owner_name\", \"(.*)\"\n )\n)\n",
|
||||||
"labels": {
|
"labels": {
|
||||||
"workload_type": "deployment"
|
"workload_type": "deployment"
|
||||||
},
|
},
|
||||||
"record": "mixin_pod_workload"
|
"record": "namespace_workload_pod:kube_pod_owner:relabel"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n label_replace(\n kube_pod_owner{job=\"kube-state-metrics\", owner_kind=\"DaemonSet\"},\n \"workload\", \"$1\", \"owner_name\", \"(.*)\"\n )\n) by (namespace, workload, pod)\n",
|
"expr": "max by (cluster, namespace, workload, pod) (\n label_replace(\n kube_pod_owner{job=\"kube-state-metrics\", owner_kind=\"DaemonSet\"},\n \"workload\", \"$1\", \"owner_name\", \"(.*)\"\n )\n)\n",
|
||||||
"labels": {
|
"labels": {
|
||||||
"workload_type": "daemonset"
|
"workload_type": "daemonset"
|
||||||
},
|
},
|
||||||
"record": "mixin_pod_workload"
|
"record": "namespace_workload_pod:kube_pod_owner:relabel"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n label_replace(\n kube_pod_owner{job=\"kube-state-metrics\", owner_kind=\"StatefulSet\"},\n \"workload\", \"$1\", \"owner_name\", \"(.*)\"\n )\n) by (namespace, workload, pod)\n",
|
"expr": "max by (cluster, namespace, workload, pod) (\n label_replace(\n kube_pod_owner{job=\"kube-state-metrics\", owner_kind=\"StatefulSet\"},\n \"workload\", \"$1\", \"owner_name\", \"(.*)\"\n )\n)\n",
|
||||||
"labels": {
|
"labels": {
|
||||||
"workload_type": "statefulset"
|
"workload_type": "statefulset"
|
||||||
},
|
},
|
||||||
"record": "mixin_pod_workload"
|
"record": "namespace_workload_pod:kube_pod_owner:relabel"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -305,127 +607,158 @@ data:
|
|||||||
"name": "node.rules",
|
"name": "node.rules",
|
||||||
"rules": [
|
"rules": [
|
||||||
{
|
{
|
||||||
"expr": "sum(min(kube_pod_info) by (node))",
|
"expr": "topk by(namespace, pod) (1,\n max by (node, namespace, pod) (\n label_replace(kube_pod_info{job=\"kube-state-metrics\",node!=\"\"}, \"pod\", \"$1\", \"pod\", \"(.*)\")\n))\n",
|
||||||
"record": ":kube_pod_info_node_count:"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"expr": "max(label_replace(kube_pod_info{job=\"kube-state-metrics\"}, \"pod\", \"$1\", \"pod\", \"(.*)\")) by (node, namespace, pod)\n",
|
|
||||||
"record": "node_namespace_pod:kube_pod_info:"
|
"record": "node_namespace_pod:kube_pod_info:"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "count by (node) (sum by (node, cpu) (\n node_cpu_seconds_total{job=\"node-exporter\"}\n* on (namespace, pod) group_left(node)\n node_namespace_pod:kube_pod_info:\n))\n",
|
"expr": "count by (cluster, node) (sum by (node, cpu) (\n node_cpu_seconds_total{job=\"node-exporter\"}\n* on (namespace, pod) group_left(node)\n node_namespace_pod:kube_pod_info:\n))\n",
|
||||||
"record": "node:node_num_cpu:sum"
|
"record": "node:node_num_cpu:sum"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "sum(\n node_memory_MemAvailable_bytes{job=\"node-exporter\"} or\n (\n node_memory_Buffers_bytes{job=\"node-exporter\"} +\n node_memory_Cached_bytes{job=\"node-exporter\"} +\n node_memory_MemFree_bytes{job=\"node-exporter\"} +\n node_memory_Slab_bytes{job=\"node-exporter\"}\n )\n)\n",
|
"expr": "sum(\n node_memory_MemAvailable_bytes{job=\"node-exporter\"} or\n (\n node_memory_Buffers_bytes{job=\"node-exporter\"} +\n node_memory_Cached_bytes{job=\"node-exporter\"} +\n node_memory_MemFree_bytes{job=\"node-exporter\"} +\n node_memory_Slab_bytes{job=\"node-exporter\"}\n )\n) by (cluster)\n",
|
||||||
"record": ":node_memory_MemAvailable_bytes:sum"
|
"record": ":node_memory_MemAvailable_bytes:sum"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "kubelet.rules",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"expr": "histogram_quantile(0.99, sum(rate(kubelet_pleg_relist_duration_seconds_bucket[5m])) by (instance, le) * on(instance) group_left(node) kubelet_node_name{job=\"kubelet\"})\n",
|
||||||
|
"labels": {
|
||||||
|
"quantile": "0.99"
|
||||||
|
},
|
||||||
|
"record": "node_quantile:kubelet_pleg_relist_duration_seconds:histogram_quantile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "histogram_quantile(0.9, sum(rate(kubelet_pleg_relist_duration_seconds_bucket[5m])) by (instance, le) * on(instance) group_left(node) kubelet_node_name{job=\"kubelet\"})\n",
|
||||||
|
"labels": {
|
||||||
|
"quantile": "0.9"
|
||||||
|
},
|
||||||
|
"record": "node_quantile:kubelet_pleg_relist_duration_seconds:histogram_quantile"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "histogram_quantile(0.5, sum(rate(kubelet_pleg_relist_duration_seconds_bucket[5m])) by (instance, le) * on(instance) group_left(node) kubelet_node_name{job=\"kubelet\"})\n",
|
||||||
|
"labels": {
|
||||||
|
"quantile": "0.5"
|
||||||
|
},
|
||||||
|
"record": "node_quantile:kubelet_pleg_relist_duration_seconds:histogram_quantile"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "kubernetes-apps",
|
"name": "kubernetes-apps",
|
||||||
"rules": [
|
"rules": [
|
||||||
{
|
{
|
||||||
"alert": "KubePodCrashLooping",
|
"alert": "KubePodCrashLooping",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Pod {{ $labels.namespace }}/{{ $labels.pod }} ({{ $labels.container }}) is restarting {{ printf \"%.2f\" $value }} times / 5 minutes.",
|
"description": "Pod {{ $labels.namespace }}/{{ $labels.pod }} ({{ $labels.container }}) is restarting {{ printf \"%.2f\" $value }} times / 5 minutes.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepodcrashlooping"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepodcrashlooping",
|
||||||
|
"summary": "Pod is crash looping."
|
||||||
},
|
},
|
||||||
"expr": "rate(kube_pod_container_status_restarts_total{job=\"kube-state-metrics\"}[15m]) * 60 * 5 > 0\n",
|
"expr": "rate(kube_pod_container_status_restarts_total{job=\"kube-state-metrics\"}[5m]) * 60 * 5 > 0\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubePodNotReady",
|
"alert": "KubePodNotReady",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Pod {{ $labels.namespace }}/{{ $labels.pod }} has been in a non-ready state for longer than 15 minutes.",
|
"description": "Pod {{ $labels.namespace }}/{{ $labels.pod }} has been in a non-ready state for longer than 15 minutes.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepodnotready"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepodnotready",
|
||||||
|
"summary": "Pod has been in a non-ready state for more than 15 minutes."
|
||||||
},
|
},
|
||||||
"expr": "sum by (namespace, pod) (kube_pod_status_phase{job=\"kube-state-metrics\", phase=~\"Failed|Pending|Unknown\"} * on(namespace, pod) group_left(owner_kind) kube_pod_owner{owner_kind!=\"Job\"}) > 0\n",
|
"expr": "sum by (namespace, pod) (\n max by(namespace, pod) (\n kube_pod_status_phase{job=\"kube-state-metrics\", phase=~\"Pending|Unknown\"}\n ) * on(namespace, pod) group_left(owner_kind) topk by(namespace, pod) (\n 1, max by(namespace, pod, owner_kind) (kube_pod_owner{owner_kind!=\"Job\"})\n )\n) > 0\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubeDeploymentGenerationMismatch",
|
"alert": "KubeDeploymentGenerationMismatch",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Deployment generation for {{ $labels.namespace }}/{{ $labels.deployment }} does not match, this indicates that the Deployment has failed but has not been rolled back.",
|
"description": "Deployment generation for {{ $labels.namespace }}/{{ $labels.deployment }} does not match, this indicates that the Deployment has failed but has not been rolled back.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedeploymentgenerationmismatch"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedeploymentgenerationmismatch",
|
||||||
|
"summary": "Deployment generation mismatch due to possible roll-back"
|
||||||
},
|
},
|
||||||
"expr": "kube_deployment_status_observed_generation{job=\"kube-state-metrics\"}\n !=\nkube_deployment_metadata_generation{job=\"kube-state-metrics\"}\n",
|
"expr": "kube_deployment_status_observed_generation{job=\"kube-state-metrics\"}\n !=\nkube_deployment_metadata_generation{job=\"kube-state-metrics\"}\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubeDeploymentReplicasMismatch",
|
"alert": "KubeDeploymentReplicasMismatch",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Deployment {{ $labels.namespace }}/{{ $labels.deployment }} has not matched the expected number of replicas for longer than 15 minutes.",
|
"description": "Deployment {{ $labels.namespace }}/{{ $labels.deployment }} has not matched the expected number of replicas for longer than 15 minutes.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedeploymentreplicasmismatch"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedeploymentreplicasmismatch",
|
||||||
|
"summary": "Deployment has not matched the expected number of replicas."
|
||||||
},
|
},
|
||||||
"expr": "kube_deployment_spec_replicas{job=\"kube-state-metrics\"}\n !=\nkube_deployment_status_replicas_available{job=\"kube-state-metrics\"}\n",
|
"expr": "(\n kube_deployment_spec_replicas{job=\"kube-state-metrics\"}\n !=\n kube_deployment_status_replicas_available{job=\"kube-state-metrics\"}\n) and (\n changes(kube_deployment_status_replicas_updated{job=\"kube-state-metrics\"}[5m])\n ==\n 0\n)\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubeStatefulSetReplicasMismatch",
|
"alert": "KubeStatefulSetReplicasMismatch",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "StatefulSet {{ $labels.namespace }}/{{ $labels.statefulset }} has not matched the expected number of replicas for longer than 15 minutes.",
|
"description": "StatefulSet {{ $labels.namespace }}/{{ $labels.statefulset }} has not matched the expected number of replicas for longer than 15 minutes.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubestatefulsetreplicasmismatch"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubestatefulsetreplicasmismatch",
|
||||||
|
"summary": "Deployment has not matched the expected number of replicas."
|
||||||
},
|
},
|
||||||
"expr": "kube_statefulset_status_replicas_ready{job=\"kube-state-metrics\"}\n !=\nkube_statefulset_status_replicas{job=\"kube-state-metrics\"}\n",
|
"expr": "(\n kube_statefulset_status_replicas_ready{job=\"kube-state-metrics\"}\n !=\n kube_statefulset_status_replicas{job=\"kube-state-metrics\"}\n) and (\n changes(kube_statefulset_status_replicas_updated{job=\"kube-state-metrics\"}[5m])\n ==\n 0\n)\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubeStatefulSetGenerationMismatch",
|
"alert": "KubeStatefulSetGenerationMismatch",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "StatefulSet generation for {{ $labels.namespace }}/{{ $labels.statefulset }} does not match, this indicates that the StatefulSet has failed but has not been rolled back.",
|
"description": "StatefulSet generation for {{ $labels.namespace }}/{{ $labels.statefulset }} does not match, this indicates that the StatefulSet has failed but has not been rolled back.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubestatefulsetgenerationmismatch"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubestatefulsetgenerationmismatch",
|
||||||
|
"summary": "StatefulSet generation mismatch due to possible roll-back"
|
||||||
},
|
},
|
||||||
"expr": "kube_statefulset_status_observed_generation{job=\"kube-state-metrics\"}\n !=\nkube_statefulset_metadata_generation{job=\"kube-state-metrics\"}\n",
|
"expr": "kube_statefulset_status_observed_generation{job=\"kube-state-metrics\"}\n !=\nkube_statefulset_metadata_generation{job=\"kube-state-metrics\"}\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubeStatefulSetUpdateNotRolledOut",
|
"alert": "KubeStatefulSetUpdateNotRolledOut",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "StatefulSet {{ $labels.namespace }}/{{ $labels.statefulset }} update has not been rolled out.",
|
"description": "StatefulSet {{ $labels.namespace }}/{{ $labels.statefulset }} update has not been rolled out.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubestatefulsetupdatenotrolledout"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubestatefulsetupdatenotrolledout",
|
||||||
|
"summary": "StatefulSet update has not been rolled out."
|
||||||
},
|
},
|
||||||
"expr": "max without (revision) (\n kube_statefulset_status_current_revision{job=\"kube-state-metrics\"}\n unless\n kube_statefulset_status_update_revision{job=\"kube-state-metrics\"}\n)\n *\n(\n kube_statefulset_replicas{job=\"kube-state-metrics\"}\n !=\n kube_statefulset_status_replicas_updated{job=\"kube-state-metrics\"}\n)\n",
|
"expr": "(\n max without (revision) (\n kube_statefulset_status_current_revision{job=\"kube-state-metrics\"}\n unless\n kube_statefulset_status_update_revision{job=\"kube-state-metrics\"}\n )\n *\n (\n kube_statefulset_replicas{job=\"kube-state-metrics\"}\n !=\n kube_statefulset_status_replicas_updated{job=\"kube-state-metrics\"}\n )\n) and (\n changes(kube_statefulset_status_replicas_updated{job=\"kube-state-metrics\"}[5m])\n ==\n 0\n)\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubeDaemonSetRolloutStuck",
|
"alert": "KubeDaemonSetRolloutStuck",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Only {{ $value | humanizePercentage }} of the desired Pods of DaemonSet {{ $labels.namespace }}/{{ $labels.daemonset }} are scheduled and ready.",
|
"description": "DaemonSet {{ $labels.namespace }}/{{ $labels.daemonset }} has not finished or progressed for at least 15 minutes.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedaemonsetrolloutstuck"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedaemonsetrolloutstuck",
|
||||||
|
"summary": "DaemonSet rollout is stuck."
|
||||||
},
|
},
|
||||||
"expr": "kube_daemonset_status_number_ready{job=\"kube-state-metrics\"}\n /\nkube_daemonset_status_desired_number_scheduled{job=\"kube-state-metrics\"} < 1.00\n",
|
"expr": "(\n (\n kube_daemonset_status_current_number_scheduled{job=\"kube-state-metrics\"}\n !=\n kube_daemonset_status_desired_number_scheduled{job=\"kube-state-metrics\"}\n ) or (\n kube_daemonset_status_number_misscheduled{job=\"kube-state-metrics\"}\n !=\n 0\n ) or (\n kube_daemonset_updated_number_scheduled{job=\"kube-state-metrics\"}\n !=\n kube_daemonset_status_desired_number_scheduled{job=\"kube-state-metrics\"}\n ) or (\n kube_daemonset_status_number_available{job=\"kube-state-metrics\"}\n !=\n kube_daemonset_status_desired_number_scheduled{job=\"kube-state-metrics\"}\n )\n) and (\n changes(kube_daemonset_updated_number_scheduled{job=\"kube-state-metrics\"}[5m])\n ==\n 0\n)\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubeContainerWaiting",
|
"alert": "KubeContainerWaiting",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Pod {{ $labels.namespace }}/{{ $labels.pod }} container {{ $labels.container}} has been in waiting state for longer than 1 hour.",
|
"description": "Pod {{ $labels.namespace }}/{{ $labels.pod }} container {{ $labels.container}} has been in waiting state for longer than 1 hour.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecontainerwaiting"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecontainerwaiting",
|
||||||
|
"summary": "Pod container waiting longer than 1 hour"
|
||||||
},
|
},
|
||||||
"expr": "sum by (namespace, pod, container) (kube_pod_container_status_waiting_reason{job=\"kube-state-metrics\"}) > 0\n",
|
"expr": "sum by (namespace, pod, container) (kube_pod_container_status_waiting_reason{job=\"kube-state-metrics\"}) > 0\n",
|
||||||
"for": "1h",
|
"for": "1h",
|
||||||
@ -436,8 +769,9 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeDaemonSetNotScheduled",
|
"alert": "KubeDaemonSetNotScheduled",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "{{ $value }} Pods of DaemonSet {{ $labels.namespace }}/{{ $labels.daemonset }} are not scheduled.",
|
"description": "{{ $value }} Pods of DaemonSet {{ $labels.namespace }}/{{ $labels.daemonset }} are not scheduled.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedaemonsetnotscheduled"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedaemonsetnotscheduled",
|
||||||
|
"summary": "DaemonSet pods are not scheduled."
|
||||||
},
|
},
|
||||||
"expr": "kube_daemonset_status_desired_number_scheduled{job=\"kube-state-metrics\"}\n -\nkube_daemonset_status_current_number_scheduled{job=\"kube-state-metrics\"} > 0\n",
|
"expr": "kube_daemonset_status_desired_number_scheduled{job=\"kube-state-metrics\"}\n -\nkube_daemonset_status_current_number_scheduled{job=\"kube-state-metrics\"} > 0\n",
|
||||||
"for": "10m",
|
"for": "10m",
|
||||||
@ -448,23 +782,12 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeDaemonSetMisScheduled",
|
"alert": "KubeDaemonSetMisScheduled",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "{{ $value }} Pods of DaemonSet {{ $labels.namespace }}/{{ $labels.daemonset }} are running where they are not supposed to run.",
|
"description": "{{ $value }} Pods of DaemonSet {{ $labels.namespace }}/{{ $labels.daemonset }} are running where they are not supposed to run.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedaemonsetmisscheduled"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubedaemonsetmisscheduled",
|
||||||
|
"summary": "DaemonSet pods are misscheduled."
|
||||||
},
|
},
|
||||||
"expr": "kube_daemonset_status_number_misscheduled{job=\"kube-state-metrics\"} > 0\n",
|
"expr": "kube_daemonset_status_number_misscheduled{job=\"kube-state-metrics\"} > 0\n",
|
||||||
"for": "10m",
|
"for": "15m",
|
||||||
"labels": {
|
|
||||||
"severity": "warning"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"alert": "KubeCronJobRunning",
|
|
||||||
"annotations": {
|
|
||||||
"message": "CronJob {{ $labels.namespace }}/{{ $labels.cronjob }} is taking more than 1h to complete.",
|
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecronjobrunning"
|
|
||||||
},
|
|
||||||
"expr": "time() - kube_cronjob_next_schedule_time{job=\"kube-state-metrics\"} > 3600\n",
|
|
||||||
"for": "1h",
|
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
@ -472,11 +795,12 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeJobCompletion",
|
"alert": "KubeJobCompletion",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Job {{ $labels.namespace }}/{{ $labels.job_name }} is taking more than one hour to complete.",
|
"description": "Job {{ $labels.namespace }}/{{ $labels.job_name }} is taking more than 12 hours to complete.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubejobcompletion"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubejobcompletion",
|
||||||
|
"summary": "Job did not complete in time"
|
||||||
},
|
},
|
||||||
"expr": "kube_job_spec_completions{job=\"kube-state-metrics\"} - kube_job_status_succeeded{job=\"kube-state-metrics\"} > 0\n",
|
"expr": "kube_job_spec_completions{job=\"kube-state-metrics\"} - kube_job_status_succeeded{job=\"kube-state-metrics\"} > 0\n",
|
||||||
"for": "1h",
|
"for": "12h",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
@ -484,8 +808,9 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeJobFailed",
|
"alert": "KubeJobFailed",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Job {{ $labels.namespace }}/{{ $labels.job_name }} failed to complete.",
|
"description": "Job {{ $labels.namespace }}/{{ $labels.job_name }} failed to complete. Removing failed job after investigation should clear this alert.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubejobfailed"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubejobfailed",
|
||||||
|
"summary": "Job failed to complete."
|
||||||
},
|
},
|
||||||
"expr": "kube_job_failed{job=\"kube-state-metrics\"} > 0\n",
|
"expr": "kube_job_failed{job=\"kube-state-metrics\"} > 0\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
@ -496,10 +821,11 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeHpaReplicasMismatch",
|
"alert": "KubeHpaReplicasMismatch",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "HPA {{ $labels.namespace }}/{{ $labels.hpa }} has not matched the desired number of replicas for longer than 15 minutes.",
|
"description": "HPA {{ $labels.namespace }}/{{ $labels.hpa }} has not matched the desired number of replicas for longer than 15 minutes.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubehpareplicasmismatch"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubehpareplicasmismatch",
|
||||||
|
"summary": "HPA has not matched descired number of replicas."
|
||||||
},
|
},
|
||||||
"expr": "(kube_hpa_status_desired_replicas{job=\"kube-state-metrics\"}\n !=\nkube_hpa_status_current_replicas{job=\"kube-state-metrics\"})\n and\nchanges(kube_hpa_status_current_replicas[15m]) == 0\n",
|
"expr": "(kube_hpa_status_desired_replicas{job=\"kube-state-metrics\"}\n !=\nkube_hpa_status_current_replicas{job=\"kube-state-metrics\"})\n and\n(kube_hpa_status_current_replicas{job=\"kube-state-metrics\"}\n >\nkube_hpa_spec_min_replicas{job=\"kube-state-metrics\"})\n and\n(kube_hpa_status_current_replicas{job=\"kube-state-metrics\"}\n <\nkube_hpa_spec_max_replicas{job=\"kube-state-metrics\"})\n and\nchanges(kube_hpa_status_current_replicas[15m]) == 0\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
@ -508,8 +834,9 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeHpaMaxedOut",
|
"alert": "KubeHpaMaxedOut",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "HPA {{ $labels.namespace }}/{{ $labels.hpa }} has been running at max replicas for longer than 15 minutes.",
|
"description": "HPA {{ $labels.namespace }}/{{ $labels.hpa }} has been running at max replicas for longer than 15 minutes.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubehpamaxedout"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubehpamaxedout",
|
||||||
|
"summary": "HPA is running at max replicas"
|
||||||
},
|
},
|
||||||
"expr": "kube_hpa_status_current_replicas{job=\"kube-state-metrics\"}\n ==\nkube_hpa_spec_max_replicas{job=\"kube-state-metrics\"}\n",
|
"expr": "kube_hpa_status_current_replicas{job=\"kube-state-metrics\"}\n ==\nkube_hpa_spec_max_replicas{job=\"kube-state-metrics\"}\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
@ -525,32 +852,35 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeCPUOvercommit",
|
"alert": "KubeCPUOvercommit",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Cluster has overcommitted CPU resource requests for Pods and cannot tolerate node failure.",
|
"description": "Cluster has overcommitted CPU resource requests for Pods and cannot tolerate node failure.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecpuovercommit"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecpuovercommit",
|
||||||
|
"summary": "Cluster has overcommitted CPU resource requests."
|
||||||
},
|
},
|
||||||
"expr": "sum(namespace:kube_pod_container_resource_requests_cpu_cores:sum)\n /\nsum(kube_node_status_allocatable_cpu_cores)\n >\n(count(kube_node_status_allocatable_cpu_cores)-1) / count(kube_node_status_allocatable_cpu_cores)\n",
|
"expr": "sum(namespace:kube_pod_container_resource_requests_cpu_cores:sum{})\n /\nsum(kube_node_status_allocatable_cpu_cores)\n >\n(count(kube_node_status_allocatable_cpu_cores)-1) / count(kube_node_status_allocatable_cpu_cores)\n",
|
||||||
"for": "5m",
|
"for": "5m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubeMemOvercommit",
|
"alert": "KubeMemoryOvercommit",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Cluster has overcommitted memory resource requests for Pods and cannot tolerate node failure.",
|
"description": "Cluster has overcommitted memory resource requests for Pods and cannot tolerate node failure.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubememovercommit"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubememoryovercommit",
|
||||||
|
"summary": "Cluster has overcommitted memory resource requests."
|
||||||
},
|
},
|
||||||
"expr": "sum(namespace:kube_pod_container_resource_requests_memory_bytes:sum)\n /\nsum(kube_node_status_allocatable_memory_bytes)\n >\n(count(kube_node_status_allocatable_memory_bytes)-1)\n /\ncount(kube_node_status_allocatable_memory_bytes)\n",
|
"expr": "sum(namespace:kube_pod_container_resource_requests_memory_bytes:sum{})\n /\nsum(kube_node_status_allocatable_memory_bytes)\n >\n(count(kube_node_status_allocatable_memory_bytes)-1)\n /\ncount(kube_node_status_allocatable_memory_bytes)\n",
|
||||||
"for": "5m",
|
"for": "5m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubeCPUOvercommit",
|
"alert": "KubeCPUQuotaOvercommit",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Cluster has overcommitted CPU resource requests for Namespaces.",
|
"description": "Cluster has overcommitted CPU resource requests for Namespaces.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecpuovercommit"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecpuquotaovercommit",
|
||||||
|
"summary": "Cluster has overcommitted CPU resource requests."
|
||||||
},
|
},
|
||||||
"expr": "sum(kube_resourcequota{job=\"kube-state-metrics\", type=\"hard\", resource=\"cpu\"})\n /\nsum(kube_node_status_allocatable_cpu_cores)\n > 1.5\n",
|
"expr": "sum(kube_resourcequota{job=\"kube-state-metrics\", type=\"hard\", resource=\"cpu\"})\n /\nsum(kube_node_status_allocatable_cpu_cores)\n > 1.5\n",
|
||||||
"for": "5m",
|
"for": "5m",
|
||||||
@ -559,24 +889,52 @@ data:
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubeMemOvercommit",
|
"alert": "KubeMemoryQuotaOvercommit",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Cluster has overcommitted memory resource requests for Namespaces.",
|
"description": "Cluster has overcommitted memory resource requests for Namespaces.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubememovercommit"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubememoryquotaovercommit",
|
||||||
|
"summary": "Cluster has overcommitted memory resource requests."
|
||||||
},
|
},
|
||||||
"expr": "sum(kube_resourcequota{job=\"kube-state-metrics\", type=\"hard\", resource=\"memory\"})\n /\nsum(kube_node_status_allocatable_memory_bytes{job=\"node-exporter\"})\n > 1.5\n",
|
"expr": "sum(kube_resourcequota{job=\"kube-state-metrics\", type=\"hard\", resource=\"memory\"})\n /\nsum(kube_node_status_allocatable_memory_bytes{job=\"kube-state-metrics\"})\n > 1.5\n",
|
||||||
"for": "5m",
|
"for": "5m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"alert": "KubeQuotaAlmostFull",
|
||||||
|
"annotations": {
|
||||||
|
"description": "Namespace {{ $labels.namespace }} is using {{ $value | humanizePercentage }} of its {{ $labels.resource }} quota.",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubequotaalmostfull",
|
||||||
|
"summary": "Namespace quota is going to be full."
|
||||||
|
},
|
||||||
|
"expr": "kube_resourcequota{job=\"kube-state-metrics\", type=\"used\"}\n / ignoring(instance, job, type)\n(kube_resourcequota{job=\"kube-state-metrics\", type=\"hard\"} > 0)\n > 0.9 < 1\n",
|
||||||
|
"for": "15m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "info"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "KubeQuotaFullyUsed",
|
||||||
|
"annotations": {
|
||||||
|
"description": "Namespace {{ $labels.namespace }} is using {{ $value | humanizePercentage }} of its {{ $labels.resource }} quota.",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubequotafullyused",
|
||||||
|
"summary": "Namespace quota is fully used."
|
||||||
|
},
|
||||||
|
"expr": "kube_resourcequota{job=\"kube-state-metrics\", type=\"used\"}\n / ignoring(instance, job, type)\n(kube_resourcequota{job=\"kube-state-metrics\", type=\"hard\"} > 0)\n == 1\n",
|
||||||
|
"for": "15m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "info"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubeQuotaExceeded",
|
"alert": "KubeQuotaExceeded",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Namespace {{ $labels.namespace }} is using {{ $value | humanizePercentage }} of its {{ $labels.resource }} quota.",
|
"description": "Namespace {{ $labels.namespace }} is using {{ $value | humanizePercentage }} of its {{ $labels.resource }} quota.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubequotaexceeded"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubequotaexceeded",
|
||||||
|
"summary": "Namespace quota has exceeded the limits."
|
||||||
},
|
},
|
||||||
"expr": "kube_resourcequota{job=\"kube-state-metrics\", type=\"used\"}\n / ignoring(instance, job, type)\n(kube_resourcequota{job=\"kube-state-metrics\", type=\"hard\"} > 0)\n > 0.90\n",
|
"expr": "kube_resourcequota{job=\"kube-state-metrics\", type=\"used\"}\n / ignoring(instance, job, type)\n(kube_resourcequota{job=\"kube-state-metrics\", type=\"hard\"} > 0)\n > 1\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
@ -585,13 +943,14 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "CPUThrottlingHigh",
|
"alert": "CPUThrottlingHigh",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "{{ $value | humanizePercentage }} throttling of CPU in namespace {{ $labels.namespace }} for container {{ $labels.container }} in pod {{ $labels.pod }}.",
|
"description": "{{ $value | humanizePercentage }} throttling of CPU in namespace {{ $labels.namespace }} for container {{ $labels.container }} in pod {{ $labels.pod }}.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-cputhrottlinghigh"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-cputhrottlinghigh",
|
||||||
|
"summary": "Processes experience elevated CPU throttling."
|
||||||
},
|
},
|
||||||
"expr": "sum(increase(container_cpu_cfs_throttled_periods_total{container!=\"\", }[5m])) by (container, pod, namespace)\n /\nsum(increase(container_cpu_cfs_periods_total{}[5m])) by (container, pod, namespace)\n > ( 100 / 100 )\n",
|
"expr": "sum(increase(container_cpu_cfs_throttled_periods_total{container!=\"\", }[5m])) by (container, pod, namespace)\n /\nsum(increase(container_cpu_cfs_periods_total{}[5m])) by (container, pod, namespace)\n > ( 80 / 100 )\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "info"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -600,10 +959,11 @@ data:
|
|||||||
"name": "kubernetes-storage",
|
"name": "kubernetes-storage",
|
||||||
"rules": [
|
"rules": [
|
||||||
{
|
{
|
||||||
"alert": "KubePersistentVolumeUsageCritical",
|
"alert": "KubePersistentVolumeFillingUp",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "The PersistentVolume claimed by {{ $labels.persistentvolumeclaim }} in Namespace {{ $labels.namespace }} is only {{ $value | humanizePercentage }} free.",
|
"description": "The PersistentVolume claimed by {{ $labels.persistentvolumeclaim }} in Namespace {{ $labels.namespace }} is only {{ $value | humanizePercentage }} free.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepersistentvolumeusagecritical"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepersistentvolumefillingup",
|
||||||
|
"summary": "PersistentVolume is filling up."
|
||||||
},
|
},
|
||||||
"expr": "kubelet_volume_stats_available_bytes{job=\"kubelet\"}\n /\nkubelet_volume_stats_capacity_bytes{job=\"kubelet\"}\n < 0.03\n",
|
"expr": "kubelet_volume_stats_available_bytes{job=\"kubelet\"}\n /\nkubelet_volume_stats_capacity_bytes{job=\"kubelet\"}\n < 0.03\n",
|
||||||
"for": "1m",
|
"for": "1m",
|
||||||
@ -612,22 +972,24 @@ data:
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubePersistentVolumeFullInFourDays",
|
"alert": "KubePersistentVolumeFillingUp",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Based on recent sampling, the PersistentVolume claimed by {{ $labels.persistentvolumeclaim }} in Namespace {{ $labels.namespace }} is expected to fill up within four days. Currently {{ $value | humanizePercentage }} is available.",
|
"description": "Based on recent sampling, the PersistentVolume claimed by {{ $labels.persistentvolumeclaim }} in Namespace {{ $labels.namespace }} is expected to fill up within four days. Currently {{ $value | humanizePercentage }} is available.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepersistentvolumefullinfourdays"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepersistentvolumefillingup",
|
||||||
|
"summary": "PersistentVolume is filling up."
|
||||||
},
|
},
|
||||||
"expr": "(\n kubelet_volume_stats_available_bytes{job=\"kubelet\"}\n /\n kubelet_volume_stats_capacity_bytes{job=\"kubelet\"}\n) < 0.15\nand\npredict_linear(kubelet_volume_stats_available_bytes{job=\"kubelet\"}[6h], 4 * 24 * 3600) < 0\n",
|
"expr": "(\n kubelet_volume_stats_available_bytes{job=\"kubelet\"}\n /\n kubelet_volume_stats_capacity_bytes{job=\"kubelet\"}\n) < 0.15\nand\npredict_linear(kubelet_volume_stats_available_bytes{job=\"kubelet\"}[6h], 4 * 24 * 3600) < 0\n",
|
||||||
"for": "5m",
|
"for": "1h",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubePersistentVolumeErrors",
|
"alert": "KubePersistentVolumeErrors",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "The persistent volume {{ $labels.persistentvolume }} has status {{ $labels.phase }}.",
|
"description": "The persistent volume {{ $labels.persistentvolume }} has status {{ $labels.phase }}.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepersistentvolumeerrors"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepersistentvolumeerrors",
|
||||||
|
"summary": "PersistentVolume is having issues with provisioning."
|
||||||
},
|
},
|
||||||
"expr": "kube_persistentvolume_status_phase{phase=~\"Failed|Pending\",job=\"kube-state-metrics\"} > 0\n",
|
"expr": "kube_persistentvolume_status_phase{phase=~\"Failed|Pending\",job=\"kube-state-metrics\"} > 0\n",
|
||||||
"for": "5m",
|
"for": "5m",
|
||||||
@ -643,10 +1005,11 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeVersionMismatch",
|
"alert": "KubeVersionMismatch",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "There are {{ $value }} different semantic versions of Kubernetes components running.",
|
"description": "There are {{ $value }} different semantic versions of Kubernetes components running.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeversionmismatch"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeversionmismatch",
|
||||||
|
"summary": "Different semantic versions of Kubernetes components running."
|
||||||
},
|
},
|
||||||
"expr": "count(count by (gitVersion) (label_replace(kubernetes_build_info{job!~\"kube-dns|coredns\"},\"gitVersion\",\"$1\",\"gitVersion\",\"(v[0-9]*.[0-9]*.[0-9]*).*\"))) > 1\n",
|
"expr": "count(count by (gitVersion) (label_replace(kubernetes_build_info{job!~\"kube-dns|coredns\"},\"gitVersion\",\"$1\",\"gitVersion\",\"(v[0-9]*.[0-9]*).*\"))) > 1\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
@ -655,8 +1018,9 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeClientErrors",
|
"alert": "KubeClientErrors",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Kubernetes API server client '{{ $labels.job }}/{{ $labels.instance }}' is experiencing {{ $value | humanizePercentage }} errors.'",
|
"description": "Kubernetes API server client '{{ $labels.job }}/{{ $labels.instance }}' is experiencing {{ $value | humanizePercentage }} errors.'",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeclienterrors"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeclienterrors",
|
||||||
|
"summary": "Kubernetes API server client is experiencing errors."
|
||||||
},
|
},
|
||||||
"expr": "(sum(rate(rest_client_requests_total{code=~\"5..\"}[5m])) by (instance, job)\n /\nsum(rate(rest_client_requests_total[5m])) by (instance, job))\n> 0.01\n",
|
"expr": "(sum(rate(rest_client_requests_total{code=~\"5..\"}[5m])) by (instance, job)\n /\nsum(rate(rest_client_requests_total[5m])) by (instance, job))\n> 0.01\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
@ -666,77 +1030,82 @@ data:
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "kube-apiserver-slos",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"alert": "KubeAPIErrorBudgetBurn",
|
||||||
|
"annotations": {
|
||||||
|
"description": "The API server is burning too much error budget.",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapierrorbudgetburn",
|
||||||
|
"summary": "The API server is burning too much error budget."
|
||||||
|
},
|
||||||
|
"expr": "sum(apiserver_request:burnrate1h) > (14.40 * 0.01000)\nand\nsum(apiserver_request:burnrate5m) > (14.40 * 0.01000)\n",
|
||||||
|
"for": "2m",
|
||||||
|
"labels": {
|
||||||
|
"long": "1h",
|
||||||
|
"severity": "critical",
|
||||||
|
"short": "5m"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "KubeAPIErrorBudgetBurn",
|
||||||
|
"annotations": {
|
||||||
|
"description": "The API server is burning too much error budget.",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapierrorbudgetburn",
|
||||||
|
"summary": "The API server is burning too much error budget."
|
||||||
|
},
|
||||||
|
"expr": "sum(apiserver_request:burnrate6h) > (6.00 * 0.01000)\nand\nsum(apiserver_request:burnrate30m) > (6.00 * 0.01000)\n",
|
||||||
|
"for": "15m",
|
||||||
|
"labels": {
|
||||||
|
"long": "6h",
|
||||||
|
"severity": "critical",
|
||||||
|
"short": "30m"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "KubeAPIErrorBudgetBurn",
|
||||||
|
"annotations": {
|
||||||
|
"description": "The API server is burning too much error budget.",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapierrorbudgetburn",
|
||||||
|
"summary": "The API server is burning too much error budget."
|
||||||
|
},
|
||||||
|
"expr": "sum(apiserver_request:burnrate1d) > (3.00 * 0.01000)\nand\nsum(apiserver_request:burnrate2h) > (3.00 * 0.01000)\n",
|
||||||
|
"for": "1h",
|
||||||
|
"labels": {
|
||||||
|
"long": "1d",
|
||||||
|
"severity": "warning",
|
||||||
|
"short": "2h"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "KubeAPIErrorBudgetBurn",
|
||||||
|
"annotations": {
|
||||||
|
"description": "The API server is burning too much error budget.",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapierrorbudgetburn",
|
||||||
|
"summary": "The API server is burning too much error budget."
|
||||||
|
},
|
||||||
|
"expr": "sum(apiserver_request:burnrate3d) > (1.00 * 0.01000)\nand\nsum(apiserver_request:burnrate6h) > (1.00 * 0.01000)\n",
|
||||||
|
"for": "3h",
|
||||||
|
"labels": {
|
||||||
|
"long": "3d",
|
||||||
|
"severity": "warning",
|
||||||
|
"short": "6h"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "kubernetes-system-apiserver",
|
"name": "kubernetes-system-apiserver",
|
||||||
"rules": [
|
"rules": [
|
||||||
{
|
{
|
||||||
"alert": "KubeAPILatencyHigh",
|
"alert": "KubeClientCertificateExpiration",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "The API server has a 99th percentile latency of {{ $value }} seconds for {{ $labels.verb }} {{ $labels.resource }}.",
|
"description": "A client certificate used to authenticate to the apiserver is expiring in less than 1.0 hours.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapilatencyhigh"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeclientcertificateexpiration",
|
||||||
|
"summary": "Client certificate is about to expire."
|
||||||
},
|
},
|
||||||
"expr": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile{job=\"apiserver\",quantile=\"0.99\",subresource!=\"log\",verb!~\"LIST|WATCH|WATCHLIST|PROXY|CONNECT\"} > 1\n",
|
"expr": "apiserver_client_certificate_expiration_seconds_count{job=\"apiserver\"} > 0 and on(job) histogram_quantile(0.01, sum by (job, le) (rate(apiserver_client_certificate_expiration_seconds_bucket{job=\"apiserver\"}[5m]))) < 3600\n",
|
||||||
"for": "10m",
|
|
||||||
"labels": {
|
|
||||||
"severity": "warning"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"alert": "KubeAPILatencyHigh",
|
|
||||||
"annotations": {
|
|
||||||
"message": "The API server has a 99th percentile latency of {{ $value }} seconds for {{ $labels.verb }} {{ $labels.resource }}.",
|
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapilatencyhigh"
|
|
||||||
},
|
|
||||||
"expr": "cluster_quantile:apiserver_request_duration_seconds:histogram_quantile{job=\"apiserver\",quantile=\"0.99\",subresource!=\"log\",verb!~\"LIST|WATCH|WATCHLIST|PROXY|CONNECT\"} > 4\n",
|
|
||||||
"for": "10m",
|
|
||||||
"labels": {
|
|
||||||
"severity": "critical"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"alert": "KubeAPIErrorsHigh",
|
|
||||||
"annotations": {
|
|
||||||
"message": "API server is returning errors for {{ $value | humanizePercentage }} of requests.",
|
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapierrorshigh"
|
|
||||||
},
|
|
||||||
"expr": "sum(rate(apiserver_request_total{job=\"apiserver\",code=~\"5..\"}[5m]))\n /\nsum(rate(apiserver_request_total{job=\"apiserver\"}[5m])) > 0.03\n",
|
|
||||||
"for": "10m",
|
|
||||||
"labels": {
|
|
||||||
"severity": "critical"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"alert": "KubeAPIErrorsHigh",
|
|
||||||
"annotations": {
|
|
||||||
"message": "API server is returning errors for {{ $value | humanizePercentage }} of requests.",
|
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapierrorshigh"
|
|
||||||
},
|
|
||||||
"expr": "sum(rate(apiserver_request_total{job=\"apiserver\",code=~\"5..\"}[5m]))\n /\nsum(rate(apiserver_request_total{job=\"apiserver\"}[5m])) > 0.01\n",
|
|
||||||
"for": "10m",
|
|
||||||
"labels": {
|
|
||||||
"severity": "warning"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"alert": "KubeAPIErrorsHigh",
|
|
||||||
"annotations": {
|
|
||||||
"message": "API server is returning errors for {{ $value | humanizePercentage }} of requests for {{ $labels.verb }} {{ $labels.resource }} {{ $labels.subresource }}.",
|
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapierrorshigh"
|
|
||||||
},
|
|
||||||
"expr": "sum(rate(apiserver_request_total{job=\"apiserver\",code=~\"5..\"}[5m])) by (resource,subresource,verb)\n /\nsum(rate(apiserver_request_total{job=\"apiserver\"}[5m])) by (resource,subresource,verb) > 0.10\n",
|
|
||||||
"for": "10m",
|
|
||||||
"labels": {
|
|
||||||
"severity": "critical"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"alert": "KubeAPIErrorsHigh",
|
|
||||||
"annotations": {
|
|
||||||
"message": "API server is returning errors for {{ $value | humanizePercentage }} of requests for {{ $labels.verb }} {{ $labels.resource }} {{ $labels.subresource }}.",
|
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapierrorshigh"
|
|
||||||
},
|
|
||||||
"expr": "sum(rate(apiserver_request_total{job=\"apiserver\",code=~\"5..\"}[5m])) by (resource,subresource,verb)\n /\nsum(rate(apiserver_request_total{job=\"apiserver\"}[5m])) by (resource,subresource,verb) > 0.05\n",
|
|
||||||
"for": "10m",
|
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
@ -744,30 +1113,46 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeClientCertificateExpiration",
|
"alert": "KubeClientCertificateExpiration",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "A client certificate used to authenticate to the apiserver is expiring in less than 7.0 days.",
|
"description": "A client certificate used to authenticate to the apiserver is expiring in less than 0.1 hours.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeclientcertificateexpiration"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeclientcertificateexpiration",
|
||||||
|
"summary": "Client certificate is about to expire."
|
||||||
},
|
},
|
||||||
"expr": "apiserver_client_certificate_expiration_seconds_count{job=\"apiserver\"} > 0 and histogram_quantile(0.01, sum by (job, le) (rate(apiserver_client_certificate_expiration_seconds_bucket{job=\"apiserver\"}[5m]))) < 604800\n",
|
"expr": "apiserver_client_certificate_expiration_seconds_count{job=\"apiserver\"} > 0 and on(job) histogram_quantile(0.01, sum by (job, le) (rate(apiserver_client_certificate_expiration_seconds_bucket{job=\"apiserver\"}[5m]))) < 300\n",
|
||||||
|
"labels": {
|
||||||
|
"severity": "critical"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "AggregatedAPIErrors",
|
||||||
|
"annotations": {
|
||||||
|
"description": "An aggregated API {{ $labels.name }}/{{ $labels.namespace }} has reported errors. It has appeared unavailable {{ $value | humanize }} times averaged over the past 10m.",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-aggregatedapierrors",
|
||||||
|
"summary": "An aggregated API has reported errors."
|
||||||
|
},
|
||||||
|
"expr": "sum by(name, namespace)(increase(aggregator_unavailable_apiservice_count[10m])) > 4\n",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubeClientCertificateExpiration",
|
"alert": "AggregatedAPIDown",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "A client certificate used to authenticate to the apiserver is expiring in less than 24.0 hours.",
|
"description": "An aggregated API {{ $labels.name }}/{{ $labels.namespace }} has been only {{ $value | humanize }}% available over the last 10m.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeclientcertificateexpiration"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-aggregatedapidown",
|
||||||
|
"summary": "An aggregated API is down."
|
||||||
},
|
},
|
||||||
"expr": "apiserver_client_certificate_expiration_seconds_count{job=\"apiserver\"} > 0 and histogram_quantile(0.01, sum by (job, le) (rate(apiserver_client_certificate_expiration_seconds_bucket{job=\"apiserver\"}[5m]))) < 86400\n",
|
"expr": "(1 - max by(name, namespace)(avg_over_time(aggregator_unavailable_apiservice[10m]))) * 100 < 85\n",
|
||||||
|
"for": "5m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"alert": "KubeAPIDown",
|
"alert": "KubeAPIDown",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "KubeAPI has disappeared from Prometheus target discovery.",
|
"description": "KubeAPI has disappeared from Prometheus target discovery.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapidown"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapidown",
|
||||||
|
"summary": "Target disappeared from Prometheus target discovery."
|
||||||
},
|
},
|
||||||
"expr": "absent(up{job=\"apiserver\"} == 1)\n",
|
"expr": "absent(up{job=\"apiserver\"} == 1)\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
@ -783,8 +1168,9 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeNodeNotReady",
|
"alert": "KubeNodeNotReady",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "{{ $labels.node }} has been unready for more than 15 minutes.",
|
"description": "{{ $labels.node }} has been unready for more than 15 minutes.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubenodenotready"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubenodenotready",
|
||||||
|
"summary": "Node is not ready."
|
||||||
},
|
},
|
||||||
"expr": "kube_node_status_condition{job=\"kube-state-metrics\",condition=\"Ready\",status=\"true\"} == 0\n",
|
"expr": "kube_node_status_condition{job=\"kube-state-metrics\",condition=\"Ready\",status=\"true\"} == 0\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
@ -795,10 +1181,12 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeNodeUnreachable",
|
"alert": "KubeNodeUnreachable",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "{{ $labels.node }} is unreachable and some workloads may be rescheduled.",
|
"description": "{{ $labels.node }} is unreachable and some workloads may be rescheduled.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubenodeunreachable"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubenodeunreachable",
|
||||||
|
"summary": "Node is unreachable."
|
||||||
},
|
},
|
||||||
"expr": "kube_node_spec_taint{job=\"kube-state-metrics\",key=\"node.kubernetes.io/unreachable\",effect=\"NoSchedule\"} == 1\n",
|
"expr": "(kube_node_spec_taint{job=\"kube-state-metrics\",key=\"node.kubernetes.io/unreachable\",effect=\"NoSchedule\"} unless ignoring(key,value) kube_node_spec_taint{job=\"kube-state-metrics\",key=~\"ToBeDeletedByClusterAutoscaler|cloud.google.com/impending-node-termination|aws-node-termination-handler/spot-itn\"}) == 1\n",
|
||||||
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
@ -806,10 +1194,124 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeletTooManyPods",
|
"alert": "KubeletTooManyPods",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Kubelet '{{ $labels.node }}' is running at {{ $value | humanizePercentage }} of its Pod capacity.",
|
"description": "Kubelet '{{ $labels.node }}' is running at {{ $value | humanizePercentage }} of its Pod capacity.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubelettoomanypods"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubelettoomanypods",
|
||||||
|
"summary": "Kubelet is running at capacity."
|
||||||
},
|
},
|
||||||
"expr": "max(max(kubelet_running_pod_count{job=\"kubelet\"}) by(instance) * on(instance) group_left(node) kubelet_node_name{job=\"kubelet\"}) by(node) / max(kube_node_status_capacity_pods{job=\"kube-state-metrics\"}) by(node) > 0.95\n",
|
"expr": "count by(node) (\n (kube_pod_status_phase{job=\"kube-state-metrics\",phase=\"Running\"} == 1) * on(instance,pod,namespace,cluster) group_left(node) topk by(instance,pod,namespace,cluster) (1, kube_pod_info{job=\"kube-state-metrics\"})\n)\n/\nmax by(node) (\n kube_node_status_capacity_pods{job=\"kube-state-metrics\"} != 1\n) > 0.95\n",
|
||||||
|
"for": "15m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "KubeNodeReadinessFlapping",
|
||||||
|
"annotations": {
|
||||||
|
"description": "The readiness status of node {{ $labels.node }} has changed {{ $value }} times in the last 15 minutes.",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubenodereadinessflapping",
|
||||||
|
"summary": "Node readiness status is flapping."
|
||||||
|
},
|
||||||
|
"expr": "sum(changes(kube_node_status_condition{status=\"true\",condition=\"Ready\"}[15m])) by (node) > 2\n",
|
||||||
|
"for": "15m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "KubeletPlegDurationHigh",
|
||||||
|
"annotations": {
|
||||||
|
"description": "The Kubelet Pod Lifecycle Event Generator has a 99th percentile duration of {{ $value }} seconds on node {{ $labels.node }}.",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletplegdurationhigh",
|
||||||
|
"summary": "Kubelet Pod Lifecycle Event Generator is taking too long to relist."
|
||||||
|
},
|
||||||
|
"expr": "node_quantile:kubelet_pleg_relist_duration_seconds:histogram_quantile{quantile=\"0.99\"} >= 10\n",
|
||||||
|
"for": "5m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "KubeletPodStartUpLatencyHigh",
|
||||||
|
"annotations": {
|
||||||
|
"description": "Kubelet Pod startup 99th percentile latency is {{ $value }} seconds on node {{ $labels.node }}.",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletpodstartuplatencyhigh",
|
||||||
|
"summary": "Kubelet Pod startup latency is too high."
|
||||||
|
},
|
||||||
|
"expr": "histogram_quantile(0.99, sum(rate(kubelet_pod_worker_duration_seconds_bucket{job=\"kubelet\"}[5m])) by (instance, le)) * on(instance) group_left(node) kubelet_node_name{job=\"kubelet\"} > 60\n",
|
||||||
|
"for": "15m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "KubeletClientCertificateExpiration",
|
||||||
|
"annotations": {
|
||||||
|
"description": "Client certificate for Kubelet on node {{ $labels.node }} expires in {{ $value | humanizeDuration }}.",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletclientcertificateexpiration",
|
||||||
|
"summary": "Kubelet client certificate is about to expire."
|
||||||
|
},
|
||||||
|
"expr": "kubelet_certificate_manager_client_ttl_seconds < 3600\n",
|
||||||
|
"labels": {
|
||||||
|
"severity": "warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "KubeletClientCertificateExpiration",
|
||||||
|
"annotations": {
|
||||||
|
"description": "Client certificate for Kubelet on node {{ $labels.node }} expires in {{ $value | humanizeDuration }}.",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletclientcertificateexpiration",
|
||||||
|
"summary": "Kubelet client certificate is about to expire."
|
||||||
|
},
|
||||||
|
"expr": "kubelet_certificate_manager_client_ttl_seconds < 300\n",
|
||||||
|
"labels": {
|
||||||
|
"severity": "critical"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "KubeletServerCertificateExpiration",
|
||||||
|
"annotations": {
|
||||||
|
"description": "Server certificate for Kubelet on node {{ $labels.node }} expires in {{ $value | humanizeDuration }}.",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletservercertificateexpiration",
|
||||||
|
"summary": "Kubelet server certificate is about to expire."
|
||||||
|
},
|
||||||
|
"expr": "kubelet_certificate_manager_server_ttl_seconds < 3600\n",
|
||||||
|
"labels": {
|
||||||
|
"severity": "warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "KubeletServerCertificateExpiration",
|
||||||
|
"annotations": {
|
||||||
|
"description": "Server certificate for Kubelet on node {{ $labels.node }} expires in {{ $value | humanizeDuration }}.",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletservercertificateexpiration",
|
||||||
|
"summary": "Kubelet server certificate is about to expire."
|
||||||
|
},
|
||||||
|
"expr": "kubelet_certificate_manager_server_ttl_seconds < 300\n",
|
||||||
|
"labels": {
|
||||||
|
"severity": "critical"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "KubeletClientCertificateRenewalErrors",
|
||||||
|
"annotations": {
|
||||||
|
"description": "Kubelet on node {{ $labels.node }} has failed to renew its client certificate ({{ $value | humanize }} errors in the last 5 minutes).",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletclientcertificaterenewalerrors",
|
||||||
|
"summary": "Kubelet has failed to renew its client certificate."
|
||||||
|
},
|
||||||
|
"expr": "increase(kubelet_certificate_manager_client_expiration_renew_errors[5m]) > 0\n",
|
||||||
|
"for": "15m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "KubeletServerCertificateRenewalErrors",
|
||||||
|
"annotations": {
|
||||||
|
"description": "Kubelet on node {{ $labels.node }} has failed to renew its server certificate ({{ $value | humanize }} errors in the last 5 minutes).",
|
||||||
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletservercertificaterenewalerrors",
|
||||||
|
"summary": "Kubelet has failed to renew its server certificate."
|
||||||
|
},
|
||||||
|
"expr": "increase(kubelet_server_expiration_renew_errors[5m]) > 0\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
@ -818,8 +1320,9 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeletDown",
|
"alert": "KubeletDown",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "Kubelet has disappeared from Prometheus target discovery.",
|
"description": "Kubelet has disappeared from Prometheus target discovery.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletdown"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletdown",
|
||||||
|
"summary": "Target disappeared from Prometheus target discovery."
|
||||||
},
|
},
|
||||||
"expr": "absent(up{job=\"kubelet\"} == 1)\n",
|
"expr": "absent(up{job=\"kubelet\"} == 1)\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
@ -835,8 +1338,9 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeSchedulerDown",
|
"alert": "KubeSchedulerDown",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "KubeScheduler has disappeared from Prometheus target discovery.",
|
"description": "KubeScheduler has disappeared from Prometheus target discovery.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeschedulerdown"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeschedulerdown",
|
||||||
|
"summary": "Target disappeared from Prometheus target discovery."
|
||||||
},
|
},
|
||||||
"expr": "absent(up{job=\"kube-scheduler\"} == 1)\n",
|
"expr": "absent(up{job=\"kube-scheduler\"} == 1)\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
@ -852,8 +1356,9 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "KubeControllerManagerDown",
|
"alert": "KubeControllerManagerDown",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "KubeControllerManager has disappeared from Prometheus target discovery.",
|
"description": "KubeControllerManager has disappeared from Prometheus target discovery.",
|
||||||
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecontrollermanagerdown"
|
"runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecontrollermanagerdown",
|
||||||
|
"summary": "Target disappeared from Prometheus target discovery."
|
||||||
},
|
},
|
||||||
"expr": "absent(up{job=\"kube-controller-manager\"} == 1)\n",
|
"expr": "absent(up{job=\"kube-controller-manager\"} == 1)\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
@ -868,6 +1373,55 @@ data:
|
|||||||
node-exporter.yaml: |-
|
node-exporter.yaml: |-
|
||||||
{
|
{
|
||||||
"groups": [
|
"groups": [
|
||||||
|
{
|
||||||
|
"name": "node-exporter.rules",
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"expr": "count without (cpu) (\n count without (mode) (\n node_cpu_seconds_total{job=\"node-exporter\"}\n )\n)\n",
|
||||||
|
"record": "instance:node_num_cpu:sum"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "1 - avg without (cpu, mode) (\n rate(node_cpu_seconds_total{job=\"node-exporter\", mode=\"idle\"}[1m])\n)\n",
|
||||||
|
"record": "instance:node_cpu_utilisation:rate1m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "(\n node_load1{job=\"node-exporter\"}\n/\n instance:node_num_cpu:sum{job=\"node-exporter\"}\n)\n",
|
||||||
|
"record": "instance:node_load1_per_cpu:ratio"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "1 - (\n node_memory_MemAvailable_bytes{job=\"node-exporter\"}\n/\n node_memory_MemTotal_bytes{job=\"node-exporter\"}\n)\n",
|
||||||
|
"record": "instance:node_memory_utilisation:ratio"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "rate(node_vmstat_pgmajfault{job=\"node-exporter\"}[1m])\n",
|
||||||
|
"record": "instance:node_vmstat_pgmajfault:rate1m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "rate(node_disk_io_time_seconds_total{job=\"node-exporter\", device!~\"dm.*\"}[1m])\n",
|
||||||
|
"record": "instance_device:node_disk_io_time_seconds:rate1m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "rate(node_disk_io_time_weighted_seconds_total{job=\"node-exporter\", device!~\"dm.*\"}[1m])\n",
|
||||||
|
"record": "instance_device:node_disk_io_time_weighted_seconds:rate1m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum without (device) (\n rate(node_network_receive_bytes_total{job=\"node-exporter\", device!=\"lo\"}[1m])\n)\n",
|
||||||
|
"record": "instance:node_network_receive_bytes_excluding_lo:rate1m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum without (device) (\n rate(node_network_transmit_bytes_total{job=\"node-exporter\", device!=\"lo\"}[1m])\n)\n",
|
||||||
|
"record": "instance:node_network_transmit_bytes_excluding_lo:rate1m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum without (device) (\n rate(node_network_receive_drop_total{job=\"node-exporter\", device!=\"lo\"}[1m])\n)\n",
|
||||||
|
"record": "instance:node_network_receive_drop_excluding_lo:rate1m"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "sum without (device) (\n rate(node_network_transmit_drop_total{job=\"node-exporter\", device!=\"lo\"}[1m])\n)\n",
|
||||||
|
"record": "instance:node_network_transmit_drop_excluding_lo:rate1m"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "node-exporter",
|
"name": "node-exporter",
|
||||||
"rules": [
|
"rules": [
|
||||||
@ -973,7 +1527,7 @@ data:
|
|||||||
"description": "{{ $labels.instance }} interface {{ $labels.device }} has encountered {{ printf \"%.0f\" $value }} receive errors in the last two minutes.",
|
"description": "{{ $labels.instance }} interface {{ $labels.device }} has encountered {{ printf \"%.0f\" $value }} receive errors in the last two minutes.",
|
||||||
"summary": "Network interface is reporting many receive errors."
|
"summary": "Network interface is reporting many receive errors."
|
||||||
},
|
},
|
||||||
"expr": "increase(node_network_receive_errs_total[2m]) > 10\n",
|
"expr": "rate(node_network_receive_errs_total[2m]) / rate(node_network_receive_packets_total[2m]) > 0.01\n",
|
||||||
"for": "1h",
|
"for": "1h",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
@ -985,11 +1539,80 @@ data:
|
|||||||
"description": "{{ $labels.instance }} interface {{ $labels.device }} has encountered {{ printf \"%.0f\" $value }} transmit errors in the last two minutes.",
|
"description": "{{ $labels.instance }} interface {{ $labels.device }} has encountered {{ printf \"%.0f\" $value }} transmit errors in the last two minutes.",
|
||||||
"summary": "Network interface is reporting many transmit errors."
|
"summary": "Network interface is reporting many transmit errors."
|
||||||
},
|
},
|
||||||
"expr": "increase(node_network_transmit_errs_total[2m]) > 10\n",
|
"expr": "rate(node_network_transmit_errs_total[2m]) / rate(node_network_transmit_packets_total[2m]) > 0.01\n",
|
||||||
"for": "1h",
|
"for": "1h",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "NodeHighNumberConntrackEntriesUsed",
|
||||||
|
"annotations": {
|
||||||
|
"description": "{{ $value | humanizePercentage }} of conntrack entries are used.",
|
||||||
|
"summary": "Number of conntrack are getting close to the limit."
|
||||||
|
},
|
||||||
|
"expr": "(node_nf_conntrack_entries / node_nf_conntrack_entries_limit) > 0.75\n",
|
||||||
|
"labels": {
|
||||||
|
"severity": "warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "NodeTextFileCollectorScrapeError",
|
||||||
|
"annotations": {
|
||||||
|
"description": "Node Exporter text file collector failed to scrape.",
|
||||||
|
"summary": "Node Exporter text file collector failed to scrape."
|
||||||
|
},
|
||||||
|
"expr": "node_textfile_scrape_error{job=\"node-exporter\"} == 1\n",
|
||||||
|
"labels": {
|
||||||
|
"severity": "warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "NodeClockSkewDetected",
|
||||||
|
"annotations": {
|
||||||
|
"message": "Clock on {{ $labels.instance }} is out of sync by more than 300s. Ensure NTP is configured correctly on this host.",
|
||||||
|
"summary": "Clock skew detected."
|
||||||
|
},
|
||||||
|
"expr": "(\n node_timex_offset_seconds > 0.05\nand\n deriv(node_timex_offset_seconds[5m]) >= 0\n)\nor\n(\n node_timex_offset_seconds < -0.05\nand\n deriv(node_timex_offset_seconds[5m]) <= 0\n)\n",
|
||||||
|
"for": "10m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "NodeClockNotSynchronising",
|
||||||
|
"annotations": {
|
||||||
|
"message": "Clock on {{ $labels.instance }} is not synchronising. Ensure NTP is configured on this host.",
|
||||||
|
"summary": "Clock not synchronising."
|
||||||
|
},
|
||||||
|
"expr": "min_over_time(node_timex_sync_status[5m]) == 0\nand\nnode_timex_maxerror_seconds >= 16\n",
|
||||||
|
"for": "10m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "NodeRAIDDegraded",
|
||||||
|
"annotations": {
|
||||||
|
"description": "RAID array '{{ $labels.device }}' on {{ $labels.instance }} is in degraded state due to one or more disks failures. Number of spare drives is insufficient to fix issue automatically.",
|
||||||
|
"summary": "RAID Array is degraded"
|
||||||
|
},
|
||||||
|
"expr": "node_md_disks_required - ignoring (state) (node_md_disks{state=\"active\"}) > 0\n",
|
||||||
|
"for": "15m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "critical"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "NodeRAIDDiskFailure",
|
||||||
|
"annotations": {
|
||||||
|
"description": "At least one device in RAID array on {{ $labels.instance }} failed. Array '{{ $labels.device }}' needs attention and possibly a disk swap.",
|
||||||
|
"summary": "Failed device in RAID array"
|
||||||
|
},
|
||||||
|
"expr": "node_md_disks{state=\"fail\"} > 0\n",
|
||||||
|
"labels": {
|
||||||
|
"severity": "warning"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -1037,18 +1660,6 @@ data:
|
|||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"alert": "PrometheusErrorSendingAlertsToAnyAlertmanager",
|
|
||||||
"annotations": {
|
|
||||||
"description": "{{ printf \"%.1f\" $value }}% minimum errors while sending alerts from Prometheus {{$labels.instance}} to any Alertmanager.",
|
|
||||||
"summary": "Prometheus encounters more than 3% errors sending alerts to any Alertmanager."
|
|
||||||
},
|
|
||||||
"expr": "min without(alertmanager) (\n rate(prometheus_notifications_errors_total{job=\"prometheus\"}[5m])\n/\n rate(prometheus_notifications_sent_total{job=\"prometheus\"}[5m])\n)\n* 100\n> 3\n",
|
|
||||||
"for": "15m",
|
|
||||||
"labels": {
|
|
||||||
"severity": "critical"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"alert": "PrometheusNotConnectedToAlertmanagers",
|
"alert": "PrometheusNotConnectedToAlertmanagers",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
@ -1091,7 +1702,7 @@ data:
|
|||||||
"description": "Prometheus {{$labels.instance}} is not ingesting samples.",
|
"description": "Prometheus {{$labels.instance}} is not ingesting samples.",
|
||||||
"summary": "Prometheus is not ingesting samples."
|
"summary": "Prometheus is not ingesting samples."
|
||||||
},
|
},
|
||||||
"expr": "rate(prometheus_tsdb_head_samples_appended_total{job=\"prometheus\"}[5m]) <= 0\n",
|
"expr": "(\n rate(prometheus_tsdb_head_samples_appended_total{job=\"prometheus\"}[5m]) <= 0\nand\n (\n sum without(scrape_job) (prometheus_target_metadata_cache_entries{job=\"prometheus\"}) > 0\n or\n sum without(rule_group) (prometheus_rule_group_rules{job=\"prometheus\"}) > 0\n )\n)\n",
|
||||||
"for": "10m",
|
"for": "10m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
@ -1124,7 +1735,7 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "PrometheusRemoteStorageFailures",
|
"alert": "PrometheusRemoteStorageFailures",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"description": "Prometheus {{$labels.instance}} failed to send {{ printf \"%.1f\" $value }}% of the samples to queue {{$labels.queue}}.",
|
"description": "Prometheus {{$labels.instance}} failed to send {{ printf \"%.1f\" $value }}% of the samples to {{ $labels.remote_name}}:{{ $labels.url }}",
|
||||||
"summary": "Prometheus fails to send samples to remote storage."
|
"summary": "Prometheus fails to send samples to remote storage."
|
||||||
},
|
},
|
||||||
"expr": "(\n rate(prometheus_remote_storage_failed_samples_total{job=\"prometheus\"}[5m])\n/\n (\n rate(prometheus_remote_storage_failed_samples_total{job=\"prometheus\"}[5m])\n +\n rate(prometheus_remote_storage_succeeded_samples_total{job=\"prometheus\"}[5m])\n )\n)\n* 100\n> 1\n",
|
"expr": "(\n rate(prometheus_remote_storage_failed_samples_total{job=\"prometheus\"}[5m])\n/\n (\n rate(prometheus_remote_storage_failed_samples_total{job=\"prometheus\"}[5m])\n +\n rate(prometheus_remote_storage_succeeded_samples_total{job=\"prometheus\"}[5m])\n )\n)\n* 100\n> 1\n",
|
||||||
@ -1136,10 +1747,10 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "PrometheusRemoteWriteBehind",
|
"alert": "PrometheusRemoteWriteBehind",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"description": "Prometheus {{$labels.instance}} remote write is {{ printf \"%.1f\" $value }}s behind for queue {{$labels.queue}}.",
|
"description": "Prometheus {{$labels.instance}} remote write is {{ printf \"%.1f\" $value }}s behind for {{ $labels.remote_name}}:{{ $labels.url }}.",
|
||||||
"summary": "Prometheus remote write is behind."
|
"summary": "Prometheus remote write is behind."
|
||||||
},
|
},
|
||||||
"expr": "# Without max_over_time, failed scrapes could create false negatives, see\n# https://www.robustperception.io/alerting-on-gauges-in-prometheus-2-0 for details.\n(\n max_over_time(prometheus_remote_storage_highest_timestamp_in_seconds{job=\"prometheus\"}[5m])\n- on(job, instance) group_right\n max_over_time(prometheus_remote_storage_queue_highest_sent_timestamp_seconds{job=\"prometheus\"}[5m])\n)\n> 120\n",
|
"expr": "# Without max_over_time, failed scrapes could create false negatives, see\n# https://www.robustperception.io/alerting-on-gauges-in-prometheus-2-0 for details.\n(\n max_over_time(prometheus_remote_storage_highest_timestamp_in_seconds{job=\"prometheus\"}[5m])\n- ignoring(remote_name, url) group_right\n max_over_time(prometheus_remote_storage_queue_highest_sent_timestamp_seconds{job=\"prometheus\"}[5m])\n)\n> 120\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "critical"
|
"severity": "critical"
|
||||||
@ -1148,10 +1759,10 @@ data:
|
|||||||
{
|
{
|
||||||
"alert": "PrometheusRemoteWriteDesiredShards",
|
"alert": "PrometheusRemoteWriteDesiredShards",
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"description": "Prometheus {{$labels.instance}} remote write desired shards calculation wants to run {{ printf $value }} shards, which is more than the max of {{ printf `prometheus_remote_storage_shards_max{instance=\"%s\",job=\"prometheus\"}` $labels.instance | query | first | value }}.",
|
"description": "Prometheus {{$labels.instance}} remote write desired shards calculation wants to run {{ $value }} shards for queue {{ $labels.remote_name}}:{{ $labels.url }}, which is more than the max of {{ printf `prometheus_remote_storage_shards_max{instance=\"%s\",job=\"prometheus\"}` $labels.instance | query | first | value }}.",
|
||||||
"summary": "Prometheus remote write desired shards calculation wants to run more than configured max shards."
|
"summary": "Prometheus remote write desired shards calculation wants to run more than configured max shards."
|
||||||
},
|
},
|
||||||
"expr": "# Without max_over_time, failed scrapes could create false negatives, see\n# https://www.robustperception.io/alerting-on-gauges-in-prometheus-2-0 for details.\n(\n max_over_time(prometheus_remote_storage_shards_desired{job=\"prometheus\"}[5m])\n> on(job, instance) group_right\n max_over_time(prometheus_remote_storage_shards_max{job=\"prometheus\"}[5m])\n)\n",
|
"expr": "# Without max_over_time, failed scrapes could create false negatives, see\n# https://www.robustperception.io/alerting-on-gauges-in-prometheus-2-0 for details.\n(\n max_over_time(prometheus_remote_storage_shards_desired{job=\"prometheus\"}[5m])\n>\n max_over_time(prometheus_remote_storage_shards_max{job=\"prometheus\"}[5m])\n)\n",
|
||||||
"for": "15m",
|
"for": "15m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
@ -1180,6 +1791,30 @@ data:
|
|||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "PrometheusTargetLimitHit",
|
||||||
|
"annotations": {
|
||||||
|
"description": "Prometheus {{$labels.instance}} has dropped {{ printf \"%.0f\" $value }} targets because the number of targets exceeded the configured target_limit.",
|
||||||
|
"summary": "Prometheus has dropped targets because some scrape configs have exceeded the targets limit."
|
||||||
|
},
|
||||||
|
"expr": "increase(prometheus_target_scrape_pool_exceeded_target_limit_total{job=\"prometheus\"}[5m]) > 0\n",
|
||||||
|
"for": "15m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "PrometheusErrorSendingAlertsToAnyAlertmanager",
|
||||||
|
"annotations": {
|
||||||
|
"description": "{{ printf \"%.1f\" $value }}% minimum errors while sending alerts from Prometheus {{$labels.instance}} to any Alertmanager.",
|
||||||
|
"summary": "Prometheus encounters more than 3% errors sending alerts to any Alertmanager."
|
||||||
|
},
|
||||||
|
"expr": "min without (alertmanager) (\n rate(prometheus_notifications_errors_total{job=\"prometheus\",alertmanager!~``}[5m])\n/\n rate(prometheus_notifications_sent_total{job=\"prometheus\",alertmanager!~``}[5m])\n)\n* 100\n> 3\n",
|
||||||
|
"for": "15m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "critical"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -1201,6 +1836,17 @@ data:
|
|||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alert": "BlackboxProbeFailure",
|
||||||
|
"annotations": {
|
||||||
|
"message": "Blackbox probe {{$labels.instance}} failed"
|
||||||
|
},
|
||||||
|
"expr": "probe_success == 0",
|
||||||
|
"for": "2m",
|
||||||
|
"labels": {
|
||||||
|
"severity": "critical"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -1212,7 +1858,7 @@ data:
|
|||||||
"annotations": {
|
"annotations": {
|
||||||
"message": "{{ $value }} RAID disk(s) on node {{ $labels.instance }} are inactive."
|
"message": "{{ $value }} RAID disk(s) on node {{ $labels.instance }} are inactive."
|
||||||
},
|
},
|
||||||
"expr": "node_md_disks - node_md_disks_active > 0",
|
"expr": "node_md_disks{state=\"failed\"} > 0",
|
||||||
"for": "10m",
|
"for": "10m",
|
||||||
"labels": {
|
"labels": {
|
||||||
"severity": "warning"
|
"severity": "warning"
|
||||||
|
|||||||
@ -1,50 +0,0 @@
|
|||||||
locals {
|
|
||||||
# Pick a CoreOS Container Linux derivative
|
|
||||||
# coreos-stable -> Container Linux AMI
|
|
||||||
# flatcar-stable -> Flatcar Linux AMI
|
|
||||||
ami_id = local.flavor == "flatcar" ? data.aws_ami.flatcar.image_id : data.aws_ami.coreos.image_id
|
|
||||||
|
|
||||||
flavor = split("-", var.os_image)[0]
|
|
||||||
channel = split("-", var.os_image)[1]
|
|
||||||
}
|
|
||||||
|
|
||||||
data "aws_ami" "coreos" {
|
|
||||||
most_recent = true
|
|
||||||
owners = ["595879546273"]
|
|
||||||
|
|
||||||
filter {
|
|
||||||
name = "architecture"
|
|
||||||
values = ["x86_64"]
|
|
||||||
}
|
|
||||||
|
|
||||||
filter {
|
|
||||||
name = "virtualization-type"
|
|
||||||
values = ["hvm"]
|
|
||||||
}
|
|
||||||
|
|
||||||
filter {
|
|
||||||
name = "name"
|
|
||||||
values = ["CoreOS-${local.flavor == "coreos" ? local.channel : "stable"}-*"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
data "aws_ami" "flatcar" {
|
|
||||||
most_recent = true
|
|
||||||
owners = ["075585003325"]
|
|
||||||
|
|
||||||
filter {
|
|
||||||
name = "architecture"
|
|
||||||
values = ["x86_64"]
|
|
||||||
}
|
|
||||||
|
|
||||||
filter {
|
|
||||||
name = "virtualization-type"
|
|
||||||
values = ["hvm"]
|
|
||||||
}
|
|
||||||
|
|
||||||
filter {
|
|
||||||
name = "name"
|
|
||||||
values = ["Flatcar-${local.flavor == "flatcar" ? local.channel : "stable"}-*"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,198 +0,0 @@
|
|||||||
---
|
|
||||||
systemd:
|
|
||||||
units:
|
|
||||||
- name: etcd-member.service
|
|
||||||
enable: true
|
|
||||||
dropins:
|
|
||||||
- name: 40-etcd-cluster.conf
|
|
||||||
contents: |
|
|
||||||
[Service]
|
|
||||||
Environment="ETCD_IMAGE_TAG=v3.4.3"
|
|
||||||
Environment="ETCD_NAME=${etcd_name}"
|
|
||||||
Environment="ETCD_ADVERTISE_CLIENT_URLS=https://${etcd_domain}:2379"
|
|
||||||
Environment="ETCD_INITIAL_ADVERTISE_PEER_URLS=https://${etcd_domain}:2380"
|
|
||||||
Environment="ETCD_LISTEN_CLIENT_URLS=https://0.0.0.0:2379"
|
|
||||||
Environment="ETCD_LISTEN_PEER_URLS=https://0.0.0.0:2380"
|
|
||||||
Environment="ETCD_LISTEN_METRICS_URLS=http://0.0.0.0:2381"
|
|
||||||
Environment="ETCD_INITIAL_CLUSTER=${etcd_initial_cluster}"
|
|
||||||
Environment="ETCD_STRICT_RECONFIG_CHECK=true"
|
|
||||||
Environment="ETCD_SSL_DIR=/etc/ssl/etcd"
|
|
||||||
Environment="ETCD_TRUSTED_CA_FILE=/etc/ssl/certs/etcd/server-ca.crt"
|
|
||||||
Environment="ETCD_CERT_FILE=/etc/ssl/certs/etcd/server.crt"
|
|
||||||
Environment="ETCD_KEY_FILE=/etc/ssl/certs/etcd/server.key"
|
|
||||||
Environment="ETCD_CLIENT_CERT_AUTH=true"
|
|
||||||
Environment="ETCD_PEER_TRUSTED_CA_FILE=/etc/ssl/certs/etcd/peer-ca.crt"
|
|
||||||
Environment="ETCD_PEER_CERT_FILE=/etc/ssl/certs/etcd/peer.crt"
|
|
||||||
Environment="ETCD_PEER_KEY_FILE=/etc/ssl/certs/etcd/peer.key"
|
|
||||||
Environment="ETCD_PEER_CLIENT_CERT_AUTH=true"
|
|
||||||
- name: docker.service
|
|
||||||
enable: true
|
|
||||||
- name: locksmithd.service
|
|
||||||
mask: true
|
|
||||||
- name: wait-for-dns.service
|
|
||||||
enable: true
|
|
||||||
contents: |
|
|
||||||
[Unit]
|
|
||||||
Description=Wait for DNS entries
|
|
||||||
Wants=systemd-resolved.service
|
|
||||||
Before=kubelet.service
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
RemainAfterExit=true
|
|
||||||
ExecStart=/bin/sh -c 'while ! /usr/bin/grep '^[^#[:space:]]' /etc/resolv.conf > /dev/null; do sleep 1; done'
|
|
||||||
[Install]
|
|
||||||
RequiredBy=kubelet.service
|
|
||||||
RequiredBy=etcd-member.service
|
|
||||||
- name: kubelet.service
|
|
||||||
enable: true
|
|
||||||
contents: |
|
|
||||||
[Unit]
|
|
||||||
Description=Kubelet via Hyperkube
|
|
||||||
Wants=rpc-statd.service
|
|
||||||
[Service]
|
|
||||||
Environment=KUBELET_CGROUP_DRIVER=${cgroup_driver}
|
|
||||||
ExecStartPre=/bin/mkdir -p /etc/kubernetes/cni/net.d
|
|
||||||
ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests
|
|
||||||
ExecStartPre=/bin/mkdir -p /opt/cni/bin
|
|
||||||
ExecStartPre=/bin/mkdir -p /var/lib/calico
|
|
||||||
ExecStartPre=/bin/mkdir -p /var/lib/kubelet/volumeplugins
|
|
||||||
ExecStartPre=/usr/bin/bash -c "grep 'certificate-authority-data' /etc/kubernetes/kubeconfig | awk '{print $2}' | base64 -d > /etc/kubernetes/ca.crt"
|
|
||||||
ExecStartPre=-/usr/bin/rkt rm --uuid-file=/var/cache/kubelet-pod.uuid
|
|
||||||
ExecStart=/usr/bin/rkt run \
|
|
||||||
--uuid-file-save=/var/cache/kubelet-pod.uuid \
|
|
||||||
--stage1-from-dir=stage1-fly.aci \
|
|
||||||
--hosts-entry host \
|
|
||||||
--insecure-options=image \
|
|
||||||
--volume etc-kubernetes,kind=host,source=/etc/kubernetes,readOnly=true \
|
|
||||||
--mount volume=etc-kubernetes,target=/etc/kubernetes \
|
|
||||||
--volume etc-machine-id,kind=host,source=/etc/machine-id,readOnly=true \
|
|
||||||
--mount volume=etc-machine-id,target=/etc/machine-id \
|
|
||||||
--volume etc-os-release,kind=host,source=/usr/lib/os-release,readOnly=true \
|
|
||||||
--mount volume=etc-os-release,target=/etc/os-release \
|
|
||||||
--volume=etc-resolv,kind=host,source=/etc/resolv.conf,readOnly=true \
|
|
||||||
--mount volume=etc-resolv,target=/etc/resolv.conf \
|
|
||||||
--volume etc-ssl-certs,kind=host,source=/etc/ssl/certs,readOnly=true \
|
|
||||||
--mount volume=etc-ssl-certs,target=/etc/ssl/certs \
|
|
||||||
--volume lib-modules,kind=host,source=/lib/modules,readOnly=true \
|
|
||||||
--mount volume=lib-modules,target=/lib/modules \
|
|
||||||
--volume run,kind=host,source=/run \
|
|
||||||
--mount volume=run,target=/run \
|
|
||||||
--volume usr-share-certs,kind=host,source=/usr/share/ca-certificates,readOnly=true \
|
|
||||||
--mount volume=usr-share-certs,target=/usr/share/ca-certificates \
|
|
||||||
--volume var-lib-calico,kind=host,source=/var/lib/calico \
|
|
||||||
--mount volume=var-lib-calico,target=/var/lib/calico \
|
|
||||||
--volume var-lib-docker,kind=host,source=/var/lib/docker \
|
|
||||||
--mount volume=var-lib-docker,target=/var/lib/docker \
|
|
||||||
--volume var-lib-kubelet,kind=host,source=/var/lib/kubelet,recursive=true \
|
|
||||||
--mount volume=var-lib-kubelet,target=/var/lib/kubelet \
|
|
||||||
--volume var-log,kind=host,source=/var/log \
|
|
||||||
--mount volume=var-log,target=/var/log \
|
|
||||||
--volume opt-cni-bin,kind=host,source=/opt/cni/bin \
|
|
||||||
--mount volume=opt-cni-bin,target=/opt/cni/bin \
|
|
||||||
docker://k8s.gcr.io/hyperkube:v1.17.1 \
|
|
||||||
--exec=/usr/local/bin/kubelet -- \
|
|
||||||
--anonymous-auth=false \
|
|
||||||
--authentication-token-webhook \
|
|
||||||
--authorization-mode=Webhook \
|
|
||||||
--cgroup-driver=$${KUBELET_CGROUP_DRIVER} \
|
|
||||||
--client-ca-file=/etc/kubernetes/ca.crt \
|
|
||||||
--cluster_dns=${cluster_dns_service_ip} \
|
|
||||||
--cluster_domain=${cluster_domain_suffix} \
|
|
||||||
--cni-conf-dir=/etc/kubernetes/cni/net.d \
|
|
||||||
--exit-on-lock-contention \
|
|
||||||
--healthz-port=0 \
|
|
||||||
--kubeconfig=/etc/kubernetes/kubeconfig \
|
|
||||||
--lock-file=/var/run/lock/kubelet.lock \
|
|
||||||
--network-plugin=cni \
|
|
||||||
--node-labels=node.kubernetes.io/master \
|
|
||||||
--node-labels=node.kubernetes.io/controller="true" \
|
|
||||||
--pod-manifest-path=/etc/kubernetes/manifests \
|
|
||||||
--read-only-port=0 \
|
|
||||||
--register-with-taints=node-role.kubernetes.io/master=:NoSchedule \
|
|
||||||
--volume-plugin-dir=/var/lib/kubelet/volumeplugins
|
|
||||||
ExecStop=-/usr/bin/rkt stop --uuid-file=/var/cache/kubelet-pod.uuid
|
|
||||||
Restart=always
|
|
||||||
RestartSec=10
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
- name: bootstrap.service
|
|
||||||
contents: |
|
|
||||||
[Unit]
|
|
||||||
Description=Kubernetes control plane
|
|
||||||
ConditionPathExists=!/opt/bootstrap/bootstrap.done
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
RemainAfterExit=true
|
|
||||||
WorkingDirectory=/opt/bootstrap
|
|
||||||
ExecStartPre=-/usr/bin/bash -c 'set -x && [ -n "$(ls /opt/bootstrap/assets/manifests-*/* 2>/dev/null)" ] && mv /opt/bootstrap/assets/manifests-*/* /opt/bootstrap/assets/manifests && rm -rf /opt/bootstrap/assets/manifests-*'
|
|
||||||
ExecStart=/usr/bin/rkt run \
|
|
||||||
--trust-keys-from-https \
|
|
||||||
--volume config,kind=host,source=/etc/kubernetes/bootstrap-secrets \
|
|
||||||
--mount volume=config,target=/etc/kubernetes/secrets \
|
|
||||||
--volume assets,kind=host,source=/opt/bootstrap/assets \
|
|
||||||
--mount volume=assets,target=/assets \
|
|
||||||
--volume script,kind=host,source=/opt/bootstrap/apply \
|
|
||||||
--mount volume=script,target=/apply \
|
|
||||||
--insecure-options=image \
|
|
||||||
docker://k8s.gcr.io/hyperkube:v1.17.1 \
|
|
||||||
--net=host \
|
|
||||||
--dns=host \
|
|
||||||
--exec=/apply
|
|
||||||
ExecStartPost=/bin/touch /opt/bootstrap/bootstrap.done
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
storage:
|
|
||||||
files:
|
|
||||||
- path: /etc/kubernetes/kubeconfig
|
|
||||||
filesystem: root
|
|
||||||
mode: 0644
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
${kubeconfig}
|
|
||||||
- path: /opt/bootstrap/layout
|
|
||||||
filesystem: root
|
|
||||||
mode: 0544
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
#!/bin/bash -e
|
|
||||||
mkdir -p -- auth tls/etcd tls/k8s static-manifests manifests/coredns manifests-networking
|
|
||||||
awk '/#####/ {filename=$2; next} {print > filename}' assets
|
|
||||||
mkdir -p /etc/ssl/etcd/etcd
|
|
||||||
mkdir -p /etc/kubernetes/bootstrap-secrets
|
|
||||||
mv tls/etcd/{peer*,server*} /etc/ssl/etcd/etcd/
|
|
||||||
mv tls/etcd/etcd-client* /etc/kubernetes/bootstrap-secrets/
|
|
||||||
chown -R etcd:etcd /etc/ssl/etcd
|
|
||||||
chmod -R 500 /etc/ssl/etcd
|
|
||||||
mv auth/kubeconfig /etc/kubernetes/bootstrap-secrets/
|
|
||||||
mv tls/k8s/* /etc/kubernetes/bootstrap-secrets/
|
|
||||||
sudo mkdir -p /etc/kubernetes/manifests
|
|
||||||
sudo mv static-manifests/* /etc/kubernetes/manifests/
|
|
||||||
sudo mkdir -p /opt/bootstrap/assets
|
|
||||||
sudo mv manifests /opt/bootstrap/assets/manifests
|
|
||||||
sudo mv manifests-networking /opt/bootstrap/assets/manifests-networking
|
|
||||||
rm -rf assets auth static-manifests tls
|
|
||||||
- path: /opt/bootstrap/apply
|
|
||||||
filesystem: root
|
|
||||||
mode: 0544
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
#!/bin/bash -e
|
|
||||||
export KUBECONFIG=/etc/kubernetes/secrets/kubeconfig
|
|
||||||
until kubectl version; do
|
|
||||||
echo "Waiting for static pod control plane"
|
|
||||||
sleep 5
|
|
||||||
done
|
|
||||||
until kubectl apply -f /assets/manifests -R; do
|
|
||||||
echo "Retry applying manifests"
|
|
||||||
sleep 5
|
|
||||||
done
|
|
||||||
- path: /etc/sysctl.d/max-user-watches.conf
|
|
||||||
filesystem: root
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
fs.inotify.max_user_watches=16184
|
|
||||||
passwd:
|
|
||||||
users:
|
|
||||||
- name: core
|
|
||||||
ssh_authorized_keys:
|
|
||||||
- "${ssh_authorized_key}"
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
# Terraform version and plugin versions
|
|
||||||
|
|
||||||
terraform {
|
|
||||||
required_version = "~> 0.12.6"
|
|
||||||
required_providers {
|
|
||||||
aws = "~> 2.23"
|
|
||||||
ct = "~> 0.3"
|
|
||||||
template = "~> 2.1"
|
|
||||||
null = "~> 2.1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,50 +0,0 @@
|
|||||||
locals {
|
|
||||||
# Pick a CoreOS Container Linux derivative
|
|
||||||
# coreos-stable -> Container Linux AMI
|
|
||||||
# flatcar-stable -> Flatcar Linux AMI
|
|
||||||
ami_id = local.flavor == "flatcar" ? data.aws_ami.flatcar.image_id : data.aws_ami.coreos.image_id
|
|
||||||
|
|
||||||
flavor = split("-", var.os_image)[0]
|
|
||||||
channel = split("-", var.os_image)[1]
|
|
||||||
}
|
|
||||||
|
|
||||||
data "aws_ami" "coreos" {
|
|
||||||
most_recent = true
|
|
||||||
owners = ["595879546273"]
|
|
||||||
|
|
||||||
filter {
|
|
||||||
name = "architecture"
|
|
||||||
values = ["x86_64"]
|
|
||||||
}
|
|
||||||
|
|
||||||
filter {
|
|
||||||
name = "virtualization-type"
|
|
||||||
values = ["hvm"]
|
|
||||||
}
|
|
||||||
|
|
||||||
filter {
|
|
||||||
name = "name"
|
|
||||||
values = ["CoreOS-${local.flavor == "coreos" ? local.channel : "stable"}-*"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
data "aws_ami" "flatcar" {
|
|
||||||
most_recent = true
|
|
||||||
owners = ["075585003325"]
|
|
||||||
|
|
||||||
filter {
|
|
||||||
name = "architecture"
|
|
||||||
values = ["x86_64"]
|
|
||||||
}
|
|
||||||
|
|
||||||
filter {
|
|
||||||
name = "virtualization-type"
|
|
||||||
values = ["hvm"]
|
|
||||||
}
|
|
||||||
|
|
||||||
filter {
|
|
||||||
name = "name"
|
|
||||||
values = ["Flatcar-${local.flavor == "flatcar" ? local.channel : "stable"}-*"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,140 +0,0 @@
|
|||||||
---
|
|
||||||
systemd:
|
|
||||||
units:
|
|
||||||
- name: docker.service
|
|
||||||
enable: true
|
|
||||||
- name: locksmithd.service
|
|
||||||
mask: true
|
|
||||||
- name: wait-for-dns.service
|
|
||||||
enable: true
|
|
||||||
contents: |
|
|
||||||
[Unit]
|
|
||||||
Description=Wait for DNS entries
|
|
||||||
Wants=systemd-resolved.service
|
|
||||||
Before=kubelet.service
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
RemainAfterExit=true
|
|
||||||
ExecStart=/bin/sh -c 'while ! /usr/bin/grep '^[^#[:space:]]' /etc/resolv.conf > /dev/null; do sleep 1; done'
|
|
||||||
[Install]
|
|
||||||
RequiredBy=kubelet.service
|
|
||||||
- name: kubelet.service
|
|
||||||
enable: true
|
|
||||||
contents: |
|
|
||||||
[Unit]
|
|
||||||
Description=Kubelet via Hyperkube
|
|
||||||
Wants=rpc-statd.service
|
|
||||||
[Service]
|
|
||||||
Environment=KUBELET_CGROUP_DRIVER=${cgroup_driver}
|
|
||||||
ExecStartPre=/bin/mkdir -p /etc/kubernetes/cni/net.d
|
|
||||||
ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests
|
|
||||||
ExecStartPre=/bin/mkdir -p /opt/cni/bin
|
|
||||||
ExecStartPre=/bin/mkdir -p /var/lib/calico
|
|
||||||
ExecStartPre=/bin/mkdir -p /var/lib/kubelet/volumeplugins
|
|
||||||
ExecStartPre=/usr/bin/bash -c "grep 'certificate-authority-data' /etc/kubernetes/kubeconfig | awk '{print $2}' | base64 -d > /etc/kubernetes/ca.crt"
|
|
||||||
ExecStartPre=-/usr/bin/rkt rm --uuid-file=/var/cache/kubelet-pod.uuid
|
|
||||||
ExecStart=/usr/bin/rkt run \
|
|
||||||
--uuid-file-save=/var/cache/kubelet-pod.uuid \
|
|
||||||
--stage1-from-dir=stage1-fly.aci \
|
|
||||||
--hosts-entry host \
|
|
||||||
--insecure-options=image \
|
|
||||||
--volume etc-kubernetes,kind=host,source=/etc/kubernetes,readOnly=true \
|
|
||||||
--mount volume=etc-kubernetes,target=/etc/kubernetes \
|
|
||||||
--volume etc-machine-id,kind=host,source=/etc/machine-id,readOnly=true \
|
|
||||||
--mount volume=etc-machine-id,target=/etc/machine-id \
|
|
||||||
--volume etc-os-release,kind=host,source=/usr/lib/os-release,readOnly=true \
|
|
||||||
--mount volume=etc-os-release,target=/etc/os-release \
|
|
||||||
--volume=etc-resolv,kind=host,source=/etc/resolv.conf,readOnly=true \
|
|
||||||
--mount volume=etc-resolv,target=/etc/resolv.conf \
|
|
||||||
--volume etc-ssl-certs,kind=host,source=/etc/ssl/certs,readOnly=true \
|
|
||||||
--mount volume=etc-ssl-certs,target=/etc/ssl/certs \
|
|
||||||
--volume lib-modules,kind=host,source=/lib/modules,readOnly=true \
|
|
||||||
--mount volume=lib-modules,target=/lib/modules \
|
|
||||||
--volume run,kind=host,source=/run \
|
|
||||||
--mount volume=run,target=/run \
|
|
||||||
--volume usr-share-certs,kind=host,source=/usr/share/ca-certificates,readOnly=true \
|
|
||||||
--mount volume=usr-share-certs,target=/usr/share/ca-certificates \
|
|
||||||
--volume var-lib-calico,kind=host,source=/var/lib/calico \
|
|
||||||
--mount volume=var-lib-calico,target=/var/lib/calico \
|
|
||||||
--volume var-lib-docker,kind=host,source=/var/lib/docker \
|
|
||||||
--mount volume=var-lib-docker,target=/var/lib/docker \
|
|
||||||
--volume var-lib-kubelet,kind=host,source=/var/lib/kubelet,recursive=true \
|
|
||||||
--mount volume=var-lib-kubelet,target=/var/lib/kubelet \
|
|
||||||
--volume var-log,kind=host,source=/var/log \
|
|
||||||
--mount volume=var-log,target=/var/log \
|
|
||||||
--volume opt-cni-bin,kind=host,source=/opt/cni/bin \
|
|
||||||
--mount volume=opt-cni-bin,target=/opt/cni/bin \
|
|
||||||
docker://k8s.gcr.io/hyperkube:v1.17.1 \
|
|
||||||
--exec=/usr/local/bin/kubelet -- \
|
|
||||||
--anonymous-auth=false \
|
|
||||||
--authentication-token-webhook \
|
|
||||||
--authorization-mode=Webhook \
|
|
||||||
--cgroup-driver=$${KUBELET_CGROUP_DRIVER} \
|
|
||||||
--client-ca-file=/etc/kubernetes/ca.crt \
|
|
||||||
--cluster_dns=${cluster_dns_service_ip} \
|
|
||||||
--cluster_domain=${cluster_domain_suffix} \
|
|
||||||
--cni-conf-dir=/etc/kubernetes/cni/net.d \
|
|
||||||
--exit-on-lock-contention \
|
|
||||||
--healthz-port=0 \
|
|
||||||
--kubeconfig=/etc/kubernetes/kubeconfig \
|
|
||||||
--lock-file=/var/run/lock/kubelet.lock \
|
|
||||||
--network-plugin=cni \
|
|
||||||
--node-labels=node.kubernetes.io/node \
|
|
||||||
%{ for label in split(",", node_labels) }
|
|
||||||
--node-labels=${label} \
|
|
||||||
%{ endfor ~}
|
|
||||||
--pod-manifest-path=/etc/kubernetes/manifests \
|
|
||||||
--read-only-port=0 \
|
|
||||||
--volume-plugin-dir=/var/lib/kubelet/volumeplugins
|
|
||||||
ExecStop=-/usr/bin/rkt stop --uuid-file=/var/cache/kubelet-pod.uuid
|
|
||||||
Restart=always
|
|
||||||
RestartSec=5
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
- name: delete-node.service
|
|
||||||
enable: true
|
|
||||||
contents: |
|
|
||||||
[Unit]
|
|
||||||
Description=Waiting to delete Kubernetes node on shutdown
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
RemainAfterExit=true
|
|
||||||
ExecStart=/bin/true
|
|
||||||
ExecStop=/etc/kubernetes/delete-node
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
storage:
|
|
||||||
files:
|
|
||||||
- path: /etc/kubernetes/kubeconfig
|
|
||||||
filesystem: root
|
|
||||||
mode: 0644
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
${kubeconfig}
|
|
||||||
- path: /etc/sysctl.d/max-user-watches.conf
|
|
||||||
filesystem: root
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
fs.inotify.max_user_watches=16184
|
|
||||||
- path: /etc/kubernetes/delete-node
|
|
||||||
filesystem: root
|
|
||||||
mode: 0744
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
exec /usr/bin/rkt run \
|
|
||||||
--trust-keys-from-https \
|
|
||||||
--volume config,kind=host,source=/etc/kubernetes \
|
|
||||||
--mount volume=config,target=/etc/kubernetes \
|
|
||||||
--insecure-options=image \
|
|
||||||
docker://k8s.gcr.io/hyperkube:v1.17.1 \
|
|
||||||
--net=host \
|
|
||||||
--dns=host \
|
|
||||||
-- \
|
|
||||||
kubectl --kubeconfig=/etc/kubernetes/kubeconfig delete node $(hostname)
|
|
||||||
passwd:
|
|
||||||
users:
|
|
||||||
- name: core
|
|
||||||
ssh_authorized_keys:
|
|
||||||
- "${ssh_authorized_key}"
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
|
|
||||||
terraform {
|
|
||||||
required_version = ">= 0.12"
|
|
||||||
}
|
|
||||||
@ -11,11 +11,11 @@ Typhoon distributes upstream Kubernetes, architectural conventions, and cluster
|
|||||||
|
|
||||||
## Features <a href="https://www.cncf.io/certification/software-conformance/"><img align="right" src="https://storage.googleapis.com/poseidon/certified-kubernetes.png"></a>
|
## Features <a href="https://www.cncf.io/certification/software-conformance/"><img align="right" src="https://storage.googleapis.com/poseidon/certified-kubernetes.png"></a>
|
||||||
|
|
||||||
* Kubernetes v1.17.1 (upstream)
|
* Kubernetes v1.21.1 (upstream)
|
||||||
* Single or multi-master, [Calico](https://www.projectcalico.org/) or [flannel](https://github.com/coreos/flannel) networking
|
* Single or multi-master, [Calico](https://www.projectcalico.org/) or [Cilium](https://github.com/cilium/cilium) or [flannel](https://github.com/coreos/flannel) networking
|
||||||
* On-cluster etcd with TLS, [RBAC](https://kubernetes.io/docs/admin/authorization/rbac/)-enabled, [network policy](https://kubernetes.io/docs/concepts/services-networking/network-policies/)
|
* On-cluster etcd with TLS, [RBAC](https://kubernetes.io/docs/admin/authorization/rbac/)-enabled, [network policy](https://kubernetes.io/docs/concepts/services-networking/network-policies/), SELinux enforcing
|
||||||
* Advanced features like [worker pools](https://typhoon.psdn.io/advanced/worker-pools/), [spot](https://typhoon.psdn.io/cl/aws/#spot) workers, and [snippets](https://typhoon.psdn.io/advanced/customization/#container-linux) customization
|
* Advanced features like [worker pools](https://typhoon.psdn.io/advanced/worker-pools/), [spot](https://typhoon.psdn.io/fedora-coreos/aws/#spot) workers, and [snippets](https://typhoon.psdn.io/advanced/customization/#hosts) customization
|
||||||
* Ready for Ingress, Prometheus, Grafana, and other optional [addons](https://typhoon.psdn.io/addons/overview/)
|
* Ready for Ingress, Prometheus, Grafana, CSI, and other optional [addons](https://typhoon.psdn.io/addons/overview/)
|
||||||
|
|
||||||
## Docs
|
## Docs
|
||||||
|
|
||||||
|
|||||||
@ -14,10 +14,33 @@ data "aws_ami" "fedora-coreos" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
filter {
|
filter {
|
||||||
name = "name"
|
name = "description"
|
||||||
values = ["fedora-coreos-31.*.*.*-hvm"]
|
values = ["Fedora CoreOS ${var.os_stream} *"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Experimental Fedora CoreOS arm64 / aarch64 AMIs from Poseidon
|
||||||
|
# WARNING: These AMIs will be removed when Fedora CoreOS publishes arm64 AMIs
|
||||||
|
# and may be removed for any reason before then as well. Do not use.
|
||||||
|
data "aws_ami" "fedora-coreos-arm" {
|
||||||
|
count = var.arch == "arm64" ? 1 : 0
|
||||||
|
|
||||||
|
most_recent = true
|
||||||
|
owners = ["099663496933"]
|
||||||
|
|
||||||
|
filter {
|
||||||
|
name = "architecture"
|
||||||
|
values = ["arm64"]
|
||||||
}
|
}
|
||||||
|
|
||||||
# try to filter out dev images (AWS filters can't)
|
filter {
|
||||||
name_regex = "^fedora-coreos-31.[0-9]*.[0-9]*.[0-9]*-hvm*"
|
name = "virtualization-type"
|
||||||
|
values = ["hvm"]
|
||||||
|
}
|
||||||
|
|
||||||
|
filter {
|
||||||
|
name = "name"
|
||||||
|
values = ["fedora-coreos-*"]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +1,10 @@
|
|||||||
# Kubernetes assets (kubeconfig, manifests)
|
# Kubernetes assets (kubeconfig, manifests)
|
||||||
module "bootstrap" {
|
module "bootstrap" {
|
||||||
source = "git::https://github.com/poseidon/terraform-render-bootstrap.git?ref=de85f1da7df0b13dfb7488350c20a510f3090cdf"
|
source = "git::https://github.com/poseidon/terraform-render-bootstrap.git?ref=ebe3d5526a59b34c8f119a206358b0c0a6f6f67d"
|
||||||
|
|
||||||
cluster_name = var.cluster_name
|
cluster_name = var.cluster_name
|
||||||
api_servers = [format("%s.%s", var.cluster_name, var.dns_zone)]
|
api_servers = [format("%s.%s", var.cluster_name, var.dns_zone)]
|
||||||
etcd_servers = aws_route53_record.etcds.*.fqdn
|
etcd_servers = aws_route53_record.etcds.*.fqdn
|
||||||
asset_dir = var.asset_dir
|
|
||||||
networking = var.networking
|
networking = var.networking
|
||||||
network_mtu = var.network_mtu
|
network_mtu = var.network_mtu
|
||||||
pod_cidr = var.pod_cidr
|
pod_cidr = var.pod_cidr
|
||||||
@ -13,6 +12,7 @@ module "bootstrap" {
|
|||||||
cluster_domain_suffix = var.cluster_domain_suffix
|
cluster_domain_suffix = var.cluster_domain_suffix
|
||||||
enable_reporting = var.enable_reporting
|
enable_reporting = var.enable_reporting
|
||||||
enable_aggregation = var.enable_aggregation
|
enable_aggregation = var.enable_aggregation
|
||||||
|
daemonset_tolerations = var.daemonset_tolerations
|
||||||
|
|
||||||
trusted_certs_dir = "/etc/pki/tls/certs"
|
trusted_certs_dir = "/etc/pki/tls/certs"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,9 +22,8 @@ resource "aws_instance" "controllers" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
instance_type = var.controller_type
|
instance_type = var.controller_type
|
||||||
|
ami = var.arch == "arm64" ? data.aws_ami.fedora-coreos-arm[0].image_id : data.aws_ami.fedora-coreos.image_id
|
||||||
ami = data.aws_ami.fedora-coreos.image_id
|
user_data = data.ct_config.controller-ignitions.*.rendered[count.index]
|
||||||
user_data = data.ct_config.controller-ignitions.*.rendered[count.index]
|
|
||||||
|
|
||||||
# storage
|
# storage
|
||||||
root_block_device {
|
root_block_device {
|
||||||
@ -36,7 +35,7 @@ resource "aws_instance" "controllers" {
|
|||||||
|
|
||||||
# network
|
# network
|
||||||
associate_public_ip_address = true
|
associate_public_ip_address = true
|
||||||
subnet_id = aws_subnet.public.*.id[count.index]
|
subnet_id = element(aws_subnet.public.*.id, count.index)
|
||||||
vpc_security_group_ids = [aws_security_group.controller.id]
|
vpc_security_group_ids = [aws_security_group.controller.id]
|
||||||
|
|
||||||
lifecycle {
|
lifecycle {
|
||||||
@ -63,6 +62,7 @@ data "template_file" "controller-configs" {
|
|||||||
|
|
||||||
vars = {
|
vars = {
|
||||||
# Cannot use cyclic dependencies on controllers or their DNS records
|
# Cannot use cyclic dependencies on controllers or their DNS records
|
||||||
|
etcd_arch = var.arch == "arm64" ? "-arm64" : ""
|
||||||
etcd_name = "etcd${count.index}"
|
etcd_name = "etcd${count.index}"
|
||||||
etcd_domain = "${var.cluster_name}-etcd${count.index}.${var.dns_zone}"
|
etcd_domain = "${var.cluster_name}-etcd${count.index}.${var.dns_zone}"
|
||||||
# etcd0=https://cluster-etcd0.example.com,etcd1=https://cluster-etcd1.example.com,...
|
# etcd0=https://cluster-etcd0.example.com,etcd1=https://cluster-etcd1.example.com,...
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
variant: fcos
|
variant: fcos
|
||||||
version: 1.0.0
|
version: 1.2.0
|
||||||
systemd:
|
systemd:
|
||||||
units:
|
units:
|
||||||
- name: etcd-member.service
|
- name: etcd-member.service
|
||||||
@ -8,28 +8,25 @@ systemd:
|
|||||||
contents: |
|
contents: |
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=etcd (System Container)
|
Description=etcd (System Container)
|
||||||
Documentation=https://github.com/coreos/etcd
|
Documentation=https://github.com/etcd-io/etcd
|
||||||
Wants=network-online.target network.target
|
Wants=network-online.target network.target
|
||||||
After=network-online.target
|
After=network-online.target
|
||||||
[Service]
|
[Service]
|
||||||
# https://github.com/opencontainers/runc/pull/1807
|
Environment=ETCD_IMAGE=quay.io/coreos/etcd:v3.4.16${etcd_arch}
|
||||||
# Type=notify
|
|
||||||
# NotifyAccess=exec
|
|
||||||
Type=exec
|
Type=exec
|
||||||
Restart=on-failure
|
|
||||||
RestartSec=10s
|
|
||||||
TimeoutStartSec=0
|
|
||||||
LimitNOFILE=40000
|
|
||||||
ExecStartPre=/bin/mkdir -p /var/lib/etcd
|
ExecStartPre=/bin/mkdir -p /var/lib/etcd
|
||||||
ExecStartPre=-/usr/bin/podman rm etcd
|
ExecStartPre=-/usr/bin/podman rm etcd
|
||||||
#--volume $${NOTIFY_SOCKET}:/run/systemd/notify \
|
|
||||||
ExecStart=/usr/bin/podman run --name etcd \
|
ExecStart=/usr/bin/podman run --name etcd \
|
||||||
--env-file /etc/etcd/etcd.env \
|
--env-file /etc/etcd/etcd.env \
|
||||||
--network host \
|
--network host \
|
||||||
--volume /var/lib/etcd:/var/lib/etcd:rw,Z \
|
--volume /var/lib/etcd:/var/lib/etcd:rw,Z \
|
||||||
--volume /etc/ssl/etcd:/etc/ssl/certs:ro,Z \
|
--volume /etc/ssl/etcd:/etc/ssl/certs:ro,Z \
|
||||||
quay.io/coreos/etcd:v3.4.3
|
$${ETCD_IMAGE}
|
||||||
ExecStop=/usr/bin/podman stop etcd
|
ExecStop=/usr/bin/podman stop etcd
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10s
|
||||||
|
TimeoutStartSec=0
|
||||||
|
LimitNOFILE=40000
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
- name: docker.service
|
- name: docker.service
|
||||||
@ -38,11 +35,12 @@ systemd:
|
|||||||
enabled: true
|
enabled: true
|
||||||
contents: |
|
contents: |
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Wait for DNS entries
|
Description=Wait for DNS and hostname
|
||||||
Before=kubelet.service
|
Before=kubelet.service
|
||||||
[Service]
|
[Service]
|
||||||
Type=oneshot
|
Type=oneshot
|
||||||
RemainAfterExit=true
|
RemainAfterExit=true
|
||||||
|
ExecStartPre=/bin/sh -c 'while [ `hostname -s` == "localhost" ]; do sleep 1; done;'
|
||||||
ExecStart=/bin/sh -c 'while ! /usr/bin/grep '^[^#[:space:]]' /etc/resolv.conf > /dev/null; do sleep 1; done'
|
ExecStart=/bin/sh -c 'while ! /usr/bin/grep '^[^#[:space:]]' /etc/resolv.conf > /dev/null; do sleep 1; done'
|
||||||
[Install]
|
[Install]
|
||||||
RequiredBy=kubelet.service
|
RequiredBy=kubelet.service
|
||||||
@ -51,10 +49,14 @@ systemd:
|
|||||||
enabled: true
|
enabled: true
|
||||||
contents: |
|
contents: |
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Kubelet via Hyperkube (System Container)
|
Description=Kubelet (System Container)
|
||||||
|
Requires=afterburn.service
|
||||||
|
After=afterburn.service
|
||||||
Wants=rpc-statd.service
|
Wants=rpc-statd.service
|
||||||
[Service]
|
[Service]
|
||||||
ExecStartPre=/bin/mkdir -p /etc/kubernetes/cni/net.d
|
Environment=KUBELET_IMAGE=quay.io/poseidon/kubelet:v1.21.1
|
||||||
|
EnvironmentFile=/run/metadata/afterburn
|
||||||
|
ExecStartPre=/bin/mkdir -p /etc/cni/net.d
|
||||||
ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests
|
ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests
|
||||||
ExecStartPre=/bin/mkdir -p /opt/cni/bin
|
ExecStartPre=/bin/mkdir -p /opt/cni/bin
|
||||||
ExecStartPre=/bin/mkdir -p /var/lib/calico
|
ExecStartPre=/bin/mkdir -p /var/lib/calico
|
||||||
@ -65,41 +67,38 @@ systemd:
|
|||||||
--privileged \
|
--privileged \
|
||||||
--pid host \
|
--pid host \
|
||||||
--network host \
|
--network host \
|
||||||
|
--volume /etc/cni/net.d:/etc/cni/net.d:ro,z \
|
||||||
--volume /etc/kubernetes:/etc/kubernetes:ro,z \
|
--volume /etc/kubernetes:/etc/kubernetes:ro,z \
|
||||||
--volume /usr/lib/os-release:/etc/os-release:ro \
|
--volume /usr/lib/os-release:/etc/os-release:ro \
|
||||||
--volume /etc/ssl/certs:/etc/ssl/certs:ro \
|
|
||||||
--volume /lib/modules:/lib/modules:ro \
|
--volume /lib/modules:/lib/modules:ro \
|
||||||
--volume /run:/run \
|
--volume /run:/run \
|
||||||
--volume /sys/fs/cgroup:/sys/fs/cgroup:ro \
|
--volume /sys/fs/cgroup:/sys/fs/cgroup \
|
||||||
--volume /sys/fs/cgroup/systemd:/sys/fs/cgroup/systemd \
|
--volume /var/lib/calico:/var/lib/calico:ro \
|
||||||
--volume /etc/pki/tls/certs:/usr/share/ca-certificates:ro \
|
|
||||||
--volume /var/lib/calico:/var/lib/calico \
|
|
||||||
--volume /var/lib/docker:/var/lib/docker \
|
--volume /var/lib/docker:/var/lib/docker \
|
||||||
--volume /var/lib/kubelet:/var/lib/kubelet:rshared,z \
|
--volume /var/lib/kubelet:/var/lib/kubelet:rshared,z \
|
||||||
--volume /var/log:/var/log \
|
--volume /var/log:/var/log \
|
||||||
--volume /var/run/lock:/var/run/lock:z \
|
--volume /var/run/lock:/var/run/lock:z \
|
||||||
--volume /opt/cni/bin:/opt/cni/bin:z \
|
--volume /opt/cni/bin:/opt/cni/bin:z \
|
||||||
k8s.gcr.io/hyperkube:v1.17.1 kubelet \
|
$${KUBELET_IMAGE} \
|
||||||
--anonymous-auth=false \
|
--anonymous-auth=false \
|
||||||
--authentication-token-webhook \
|
--authentication-token-webhook \
|
||||||
--authorization-mode=Webhook \
|
--authorization-mode=Webhook \
|
||||||
|
--bootstrap-kubeconfig=/etc/kubernetes/kubeconfig \
|
||||||
--cgroup-driver=systemd \
|
--cgroup-driver=systemd \
|
||||||
--cgroups-per-qos=true \
|
--cgroups-per-qos=true \
|
||||||
--enforce-node-allocatable=pods \
|
--enforce-node-allocatable=pods \
|
||||||
--client-ca-file=/etc/kubernetes/ca.crt \
|
--client-ca-file=/etc/kubernetes/ca.crt \
|
||||||
--cluster_dns=${cluster_dns_service_ip} \
|
--cluster_dns=${cluster_dns_service_ip} \
|
||||||
--cluster_domain=${cluster_domain_suffix} \
|
--cluster_domain=${cluster_domain_suffix} \
|
||||||
--cni-conf-dir=/etc/kubernetes/cni/net.d \
|
|
||||||
--exit-on-lock-contention \
|
|
||||||
--healthz-port=0 \
|
--healthz-port=0 \
|
||||||
--kubeconfig=/etc/kubernetes/kubeconfig \
|
--kubeconfig=/var/lib/kubelet/kubeconfig \
|
||||||
--lock-file=/var/run/lock/kubelet.lock \
|
|
||||||
--network-plugin=cni \
|
--network-plugin=cni \
|
||||||
--node-labels=node.kubernetes.io/master \
|
|
||||||
--node-labels=node.kubernetes.io/controller="true" \
|
--node-labels=node.kubernetes.io/controller="true" \
|
||||||
--pod-manifest-path=/etc/kubernetes/manifests \
|
--pod-manifest-path=/etc/kubernetes/manifests \
|
||||||
|
--provider-id=aws:///$${AFTERBURN_AWS_AVAILABILITY_ZONE}/$${AFTERBURN_AWS_INSTANCE_ID} \
|
||||||
--read-only-port=0 \
|
--read-only-port=0 \
|
||||||
--register-with-taints=node-role.kubernetes.io/master=:NoSchedule \
|
--register-with-taints=node-role.kubernetes.io/controller=:NoSchedule \
|
||||||
|
--rotate-certificates \
|
||||||
--volume-plugin-dir=/var/lib/kubelet/volumeplugins
|
--volume-plugin-dir=/var/lib/kubelet/volumeplugins
|
||||||
ExecStop=-/usr/bin/podman stop kubelet
|
ExecStop=-/usr/bin/podman stop kubelet
|
||||||
Delegate=yes
|
Delegate=yes
|
||||||
@ -116,18 +115,20 @@ systemd:
|
|||||||
Type=oneshot
|
Type=oneshot
|
||||||
RemainAfterExit=true
|
RemainAfterExit=true
|
||||||
WorkingDirectory=/opt/bootstrap
|
WorkingDirectory=/opt/bootstrap
|
||||||
ExecStartPre=-/usr/bin/bash -c 'set -x && [ -n "$(ls /opt/bootstrap/assets/manifests-*/* 2>/dev/null)" ] && mv /opt/bootstrap/assets/manifests-*/* /opt/bootstrap/assets/manifests && rm -rf /opt/bootstrap/assets/manifests-*'
|
ExecStartPre=-/usr/bin/podman rm bootstrap
|
||||||
ExecStart=/usr/bin/podman run --name bootstrap \
|
ExecStart=/usr/bin/podman run --name bootstrap \
|
||||||
--network host \
|
--network host \
|
||||||
--volume /etc/kubernetes/bootstrap-secrets:/etc/kubernetes/secrets:ro,Z \
|
--volume /etc/kubernetes/pki:/etc/kubernetes/pki:ro,z \
|
||||||
--volume /opt/bootstrap/assets:/assets:ro,Z \
|
--volume /opt/bootstrap/assets:/assets:ro,Z \
|
||||||
--volume /opt/bootstrap/apply:/apply:ro,Z \
|
--volume /opt/bootstrap/apply:/apply:ro,Z \
|
||||||
--entrypoint=/apply \
|
--entrypoint=/apply \
|
||||||
k8s.gcr.io/hyperkube:v1.17.1
|
quay.io/poseidon/kubelet:v1.21.1
|
||||||
ExecStartPost=/bin/touch /opt/bootstrap/bootstrap.done
|
ExecStartPost=/bin/touch /opt/bootstrap/bootstrap.done
|
||||||
ExecStartPost=-/usr/bin/podman stop bootstrap
|
ExecStartPost=-/usr/bin/podman stop bootstrap
|
||||||
storage:
|
storage:
|
||||||
directories:
|
directories:
|
||||||
|
- path: /var/lib/etcd
|
||||||
|
mode: 0700
|
||||||
- path: /etc/kubernetes
|
- path: /etc/kubernetes
|
||||||
- path: /opt/bootstrap
|
- path: /opt/bootstrap
|
||||||
files:
|
files:
|
||||||
@ -144,25 +145,26 @@ storage:
|
|||||||
mkdir -p -- auth tls/etcd tls/k8s static-manifests manifests/coredns manifests-networking
|
mkdir -p -- auth tls/etcd tls/k8s static-manifests manifests/coredns manifests-networking
|
||||||
awk '/#####/ {filename=$2; next} {print > filename}' assets
|
awk '/#####/ {filename=$2; next} {print > filename}' assets
|
||||||
mkdir -p /etc/ssl/etcd/etcd
|
mkdir -p /etc/ssl/etcd/etcd
|
||||||
mkdir -p /etc/kubernetes/bootstrap-secrets
|
mkdir -p /etc/kubernetes/pki
|
||||||
mv tls/etcd/{peer*,server*} /etc/ssl/etcd/etcd/
|
mv tls/etcd/{peer*,server*} /etc/ssl/etcd/etcd/
|
||||||
mv tls/etcd/etcd-client* /etc/kubernetes/bootstrap-secrets/
|
mv tls/etcd/etcd-client* /etc/kubernetes/pki/
|
||||||
chown -R etcd:etcd /etc/ssl/etcd
|
chown -R etcd:etcd /etc/ssl/etcd
|
||||||
chmod -R 500 /etc/ssl/etcd
|
chmod -R 500 /etc/ssl/etcd
|
||||||
mv auth/kubeconfig /etc/kubernetes/bootstrap-secrets/
|
mv auth/* /etc/kubernetes/pki/
|
||||||
mv tls/k8s/* /etc/kubernetes/bootstrap-secrets/
|
mv tls/k8s/* /etc/kubernetes/pki/
|
||||||
sudo mkdir -p /etc/kubernetes/manifests
|
mkdir -p /etc/kubernetes/manifests
|
||||||
sudo mv static-manifests/* /etc/kubernetes/manifests/
|
mv static-manifests/* /etc/kubernetes/manifests/
|
||||||
sudo mkdir -p /opt/bootstrap/assets
|
mkdir -p /opt/bootstrap/assets
|
||||||
sudo mv manifests /opt/bootstrap/assets/manifests
|
mv manifests /opt/bootstrap/assets/manifests
|
||||||
sudo mv manifests-networking /opt/bootstrap/assets/manifests-networking
|
mv manifests-networking/* /opt/bootstrap/assets/manifests/
|
||||||
rm -rf assets auth static-manifests tls
|
rm -rf assets auth static-manifests tls manifests-networking
|
||||||
|
chcon -R -u system_u -t container_file_t /etc/kubernetes/pki
|
||||||
- path: /opt/bootstrap/apply
|
- path: /opt/bootstrap/apply
|
||||||
mode: 0544
|
mode: 0544
|
||||||
contents:
|
contents:
|
||||||
inline: |
|
inline: |
|
||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
export KUBECONFIG=/etc/kubernetes/secrets/kubeconfig
|
export KUBECONFIG=/etc/kubernetes/pki/admin.conf
|
||||||
until kubectl version; do
|
until kubectl version; do
|
||||||
echo "Waiting for static pod control plane"
|
echo "Waiting for static pod control plane"
|
||||||
sleep 5
|
sleep 5
|
||||||
@ -171,14 +173,22 @@ storage:
|
|||||||
echo "Retry applying manifests"
|
echo "Retry applying manifests"
|
||||||
sleep 5
|
sleep 5
|
||||||
done
|
done
|
||||||
- path: /etc/sysctl.d/reverse-path-filter.conf
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
net.ipv4.conf.all.rp_filter=1
|
|
||||||
- path: /etc/sysctl.d/max-user-watches.conf
|
- path: /etc/sysctl.d/max-user-watches.conf
|
||||||
contents:
|
contents:
|
||||||
inline: |
|
inline: |
|
||||||
fs.inotify.max_user_watches=16184
|
fs.inotify.max_user_watches=16184
|
||||||
|
- path: /etc/sysctl.d/reverse-path-filter.conf
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
net.ipv4.conf.default.rp_filter=0
|
||||||
|
net.ipv4.conf.*.rp_filter=0
|
||||||
|
- path: /etc/systemd/network/50-flannel.link
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
[Match]
|
||||||
|
OriginalName=flannel*
|
||||||
|
[Link]
|
||||||
|
MACAddressPolicy=none
|
||||||
- path: /etc/systemd/system.conf.d/accounting.conf
|
- path: /etc/systemd/system.conf.d/accounting.conf
|
||||||
contents:
|
contents:
|
||||||
inline: |
|
inline: |
|
||||||
@ -190,8 +200,6 @@ storage:
|
|||||||
mode: 0644
|
mode: 0644
|
||||||
contents:
|
contents:
|
||||||
inline: |
|
inline: |
|
||||||
# TODO: Use a systemd dropin once podman v1.4.5 is avail.
|
|
||||||
NOTIFY_SOCKET=/run/systemd/notify
|
|
||||||
ETCD_NAME=${etcd_name}
|
ETCD_NAME=${etcd_name}
|
||||||
ETCD_DATA_DIR=/var/lib/etcd
|
ETCD_DATA_DIR=/var/lib/etcd
|
||||||
ETCD_ADVERTISE_CLIENT_URLS=https://${etcd_domain}:2379
|
ETCD_ADVERTISE_CLIENT_URLS=https://${etcd_domain}:2379
|
||||||
@ -209,6 +217,7 @@ storage:
|
|||||||
ETCD_PEER_CERT_FILE=/etc/ssl/certs/etcd/peer.crt
|
ETCD_PEER_CERT_FILE=/etc/ssl/certs/etcd/peer.crt
|
||||||
ETCD_PEER_KEY_FILE=/etc/ssl/certs/etcd/peer.key
|
ETCD_PEER_KEY_FILE=/etc/ssl/certs/etcd/peer.key
|
||||||
ETCD_PEER_CLIENT_CERT_AUTH=true
|
ETCD_PEER_CLIENT_CERT_AUTH=true
|
||||||
|
ETCD_UNSUPPORTED_ARCH=arm64
|
||||||
passwd:
|
passwd:
|
||||||
users:
|
users:
|
||||||
- name: core
|
- name: core
|
||||||
|
|||||||
@ -25,21 +25,23 @@ resource "aws_internet_gateway" "gateway" {
|
|||||||
resource "aws_route_table" "default" {
|
resource "aws_route_table" "default" {
|
||||||
vpc_id = aws_vpc.network.id
|
vpc_id = aws_vpc.network.id
|
||||||
|
|
||||||
route {
|
|
||||||
cidr_block = "0.0.0.0/0"
|
|
||||||
gateway_id = aws_internet_gateway.gateway.id
|
|
||||||
}
|
|
||||||
|
|
||||||
route {
|
|
||||||
ipv6_cidr_block = "::/0"
|
|
||||||
gateway_id = aws_internet_gateway.gateway.id
|
|
||||||
}
|
|
||||||
|
|
||||||
tags = {
|
tags = {
|
||||||
"Name" = var.cluster_name
|
"Name" = var.cluster_name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "aws_route" "egress-ipv4" {
|
||||||
|
route_table_id = aws_route_table.default.id
|
||||||
|
destination_cidr_block = "0.0.0.0/0"
|
||||||
|
gateway_id = aws_internet_gateway.gateway.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_route" "egress-ipv6" {
|
||||||
|
route_table_id = aws_route_table.default.id
|
||||||
|
destination_ipv6_cidr_block = "::/0"
|
||||||
|
gateway_id = aws_internet_gateway.gateway.id
|
||||||
|
}
|
||||||
|
|
||||||
# Subnets (one per availability zone)
|
# Subnets (one per availability zone)
|
||||||
|
|
||||||
resource "aws_subnet" "public" {
|
resource "aws_subnet" "public" {
|
||||||
|
|||||||
@ -17,6 +17,7 @@ resource "aws_route53_record" "apiserver" {
|
|||||||
resource "aws_lb" "nlb" {
|
resource "aws_lb" "nlb" {
|
||||||
name = "${var.cluster_name}-nlb"
|
name = "${var.cluster_name}-nlb"
|
||||||
load_balancer_type = "network"
|
load_balancer_type = "network"
|
||||||
|
ip_address_type = "dualstack"
|
||||||
internal = false
|
internal = false
|
||||||
|
|
||||||
subnets = aws_subnet.public.*.id
|
subnets = aws_subnet.public.*.id
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
output "kubeconfig-admin" {
|
output "kubeconfig-admin" {
|
||||||
value = module.bootstrap.kubeconfig-admin
|
value = module.bootstrap.kubeconfig-admin
|
||||||
|
sensitive = true
|
||||||
}
|
}
|
||||||
|
|
||||||
# Outputs for Kubernetes Ingress
|
# Outputs for Kubernetes Ingress
|
||||||
@ -32,7 +33,8 @@ output "worker_security_groups" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
output "kubeconfig" {
|
output "kubeconfig" {
|
||||||
value = module.bootstrap.kubeconfig-kubelet
|
value = module.bootstrap.kubeconfig-kubelet
|
||||||
|
sensitive = true
|
||||||
}
|
}
|
||||||
|
|
||||||
# Outputs for custom load balancing
|
# Outputs for custom load balancing
|
||||||
@ -52,3 +54,10 @@ output "worker_target_group_https" {
|
|||||||
value = module.workers.target_group_https
|
value = module.workers.target_group_https
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Outputs for debug
|
||||||
|
|
||||||
|
output "assets_dist" {
|
||||||
|
value = module.bootstrap.assets_dist
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -13,6 +13,30 @@ resource "aws_security_group" "controller" {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "controller-icmp" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "icmp"
|
||||||
|
from_port = 8
|
||||||
|
to_port = 0
|
||||||
|
source_security_group_id = aws_security_group.worker.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "controller-icmp-self" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "icmp"
|
||||||
|
from_port = 8
|
||||||
|
to_port = 0
|
||||||
|
self = true
|
||||||
|
}
|
||||||
|
|
||||||
resource "aws_security_group_rule" "controller-ssh" {
|
resource "aws_security_group_rule" "controller-ssh" {
|
||||||
security_group_id = aws_security_group.controller.id
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
@ -44,39 +68,31 @@ resource "aws_security_group_rule" "controller-etcd-metrics" {
|
|||||||
source_security_group_id = aws_security_group.worker.id
|
source_security_group_id = aws_security_group.worker.id
|
||||||
}
|
}
|
||||||
|
|
||||||
# Allow Prometheus to scrape kube-proxy
|
resource "aws_security_group_rule" "controller-cilium-health" {
|
||||||
resource "aws_security_group_rule" "kube-proxy-metrics" {
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
security_group_id = aws_security_group.controller.id
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
type = "ingress"
|
type = "ingress"
|
||||||
protocol = "tcp"
|
protocol = "tcp"
|
||||||
from_port = 10249
|
from_port = 4240
|
||||||
to_port = 10249
|
to_port = 4240
|
||||||
source_security_group_id = aws_security_group.worker.id
|
source_security_group_id = aws_security_group.worker.id
|
||||||
}
|
}
|
||||||
|
|
||||||
# Allow Prometheus to scrape kube-scheduler
|
resource "aws_security_group_rule" "controller-cilium-health-self" {
|
||||||
resource "aws_security_group_rule" "controller-scheduler-metrics" {
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
security_group_id = aws_security_group.controller.id
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
type = "ingress"
|
type = "ingress"
|
||||||
protocol = "tcp"
|
protocol = "tcp"
|
||||||
from_port = 10251
|
from_port = 4240
|
||||||
to_port = 10251
|
to_port = 4240
|
||||||
source_security_group_id = aws_security_group.worker.id
|
self = true
|
||||||
}
|
|
||||||
|
|
||||||
# Allow Prometheus to scrape kube-controller-manager
|
|
||||||
resource "aws_security_group_rule" "controller-manager-metrics" {
|
|
||||||
security_group_id = aws_security_group.controller.id
|
|
||||||
|
|
||||||
type = "ingress"
|
|
||||||
protocol = "tcp"
|
|
||||||
from_port = 10252
|
|
||||||
to_port = 10252
|
|
||||||
source_security_group_id = aws_security_group.worker.id
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# IANA VXLAN default
|
||||||
resource "aws_security_group_rule" "controller-vxlan" {
|
resource "aws_security_group_rule" "controller-vxlan" {
|
||||||
count = var.networking == "flannel" ? 1 : 0
|
count = var.networking == "flannel" ? 1 : 0
|
||||||
|
|
||||||
@ -111,6 +127,31 @@ resource "aws_security_group_rule" "controller-apiserver" {
|
|||||||
cidr_blocks = ["0.0.0.0/0"]
|
cidr_blocks = ["0.0.0.0/0"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Linux VXLAN default
|
||||||
|
resource "aws_security_group_rule" "controller-linux-vxlan" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "udp"
|
||||||
|
from_port = 8472
|
||||||
|
to_port = 8472
|
||||||
|
source_security_group_id = aws_security_group.worker.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "controller-linux-vxlan-self" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "udp"
|
||||||
|
from_port = 8472
|
||||||
|
to_port = 8472
|
||||||
|
self = true
|
||||||
|
}
|
||||||
|
|
||||||
# Allow Prometheus to scrape node-exporter daemonset
|
# Allow Prometheus to scrape node-exporter daemonset
|
||||||
resource "aws_security_group_rule" "controller-node-exporter" {
|
resource "aws_security_group_rule" "controller-node-exporter" {
|
||||||
security_group_id = aws_security_group.controller.id
|
security_group_id = aws_security_group.controller.id
|
||||||
@ -122,6 +163,17 @@ resource "aws_security_group_rule" "controller-node-exporter" {
|
|||||||
source_security_group_id = aws_security_group.worker.id
|
source_security_group_id = aws_security_group.worker.id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Allow Prometheus to scrape kube-proxy
|
||||||
|
resource "aws_security_group_rule" "kube-proxy-metrics" {
|
||||||
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "tcp"
|
||||||
|
from_port = 10249
|
||||||
|
to_port = 10249
|
||||||
|
source_security_group_id = aws_security_group.worker.id
|
||||||
|
}
|
||||||
|
|
||||||
# Allow apiserver to access kubelets for exec, log, port-forward
|
# Allow apiserver to access kubelets for exec, log, port-forward
|
||||||
resource "aws_security_group_rule" "controller-kubelet" {
|
resource "aws_security_group_rule" "controller-kubelet" {
|
||||||
security_group_id = aws_security_group.controller.id
|
security_group_id = aws_security_group.controller.id
|
||||||
@ -143,6 +195,28 @@ resource "aws_security_group_rule" "controller-kubelet-self" {
|
|||||||
self = true
|
self = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Allow Prometheus to scrape kube-scheduler
|
||||||
|
resource "aws_security_group_rule" "controller-scheduler-metrics" {
|
||||||
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "tcp"
|
||||||
|
from_port = 10251
|
||||||
|
to_port = 10251
|
||||||
|
source_security_group_id = aws_security_group.worker.id
|
||||||
|
}
|
||||||
|
|
||||||
|
# Allow Prometheus to scrape kube-controller-manager
|
||||||
|
resource "aws_security_group_rule" "controller-manager-metrics" {
|
||||||
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "tcp"
|
||||||
|
from_port = 10252
|
||||||
|
to_port = 10252
|
||||||
|
source_security_group_id = aws_security_group.worker.id
|
||||||
|
}
|
||||||
|
|
||||||
resource "aws_security_group_rule" "controller-bgp" {
|
resource "aws_security_group_rule" "controller-bgp" {
|
||||||
security_group_id = aws_security_group.controller.id
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
@ -227,6 +301,30 @@ resource "aws_security_group" "worker" {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "worker-icmp" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "icmp"
|
||||||
|
from_port = 8
|
||||||
|
to_port = 0
|
||||||
|
source_security_group_id = aws_security_group.controller.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "worker-icmp-self" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "icmp"
|
||||||
|
from_port = 8
|
||||||
|
to_port = 0
|
||||||
|
self = true
|
||||||
|
}
|
||||||
|
|
||||||
resource "aws_security_group_rule" "worker-ssh" {
|
resource "aws_security_group_rule" "worker-ssh" {
|
||||||
security_group_id = aws_security_group.worker.id
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|
||||||
@ -257,6 +355,31 @@ resource "aws_security_group_rule" "worker-https" {
|
|||||||
cidr_blocks = ["0.0.0.0/0"]
|
cidr_blocks = ["0.0.0.0/0"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "worker-cilium-health" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "tcp"
|
||||||
|
from_port = 4240
|
||||||
|
to_port = 4240
|
||||||
|
source_security_group_id = aws_security_group.controller.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "worker-cilium-health-self" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "tcp"
|
||||||
|
from_port = 4240
|
||||||
|
to_port = 4240
|
||||||
|
self = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# IANA VXLAN default
|
||||||
resource "aws_security_group_rule" "worker-vxlan" {
|
resource "aws_security_group_rule" "worker-vxlan" {
|
||||||
count = var.networking == "flannel" ? 1 : 0
|
count = var.networking == "flannel" ? 1 : 0
|
||||||
|
|
||||||
@ -281,6 +404,31 @@ resource "aws_security_group_rule" "worker-vxlan-self" {
|
|||||||
self = true
|
self = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Linux VXLAN default
|
||||||
|
resource "aws_security_group_rule" "worker-linux-vxlan" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "udp"
|
||||||
|
from_port = 8472
|
||||||
|
to_port = 8472
|
||||||
|
source_security_group_id = aws_security_group.controller.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "worker-linux-vxlan-self" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "udp"
|
||||||
|
from_port = 8472
|
||||||
|
to_port = 8472
|
||||||
|
self = true
|
||||||
|
}
|
||||||
|
|
||||||
# Allow Prometheus to scrape node-exporter daemonset
|
# Allow Prometheus to scrape node-exporter daemonset
|
||||||
resource "aws_security_group_rule" "worker-node-exporter" {
|
resource "aws_security_group_rule" "worker-node-exporter" {
|
||||||
security_group_id = aws_security_group.worker.id
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|||||||
@ -41,16 +41,21 @@ variable "worker_type" {
|
|||||||
default = "t3.small"
|
default = "t3.small"
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "os_image" {
|
variable "os_stream" {
|
||||||
type = string
|
type = string
|
||||||
description = "AMI channel for Fedora CoreOS (not yet used)"
|
description = "Fedora CoreOS image stream for instances (e.g. stable, testing, next)"
|
||||||
default = "coreos-stable"
|
default = "stable"
|
||||||
|
|
||||||
|
validation {
|
||||||
|
condition = contains(["stable", "testing", "next"], var.os_stream)
|
||||||
|
error_message = "The os_stream must be stable, testing, or next."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "disk_size" {
|
variable "disk_size" {
|
||||||
type = number
|
type = number
|
||||||
description = "Size of the EBS volume in GB"
|
description = "Size of the EBS volume in GB"
|
||||||
default = 40
|
default = 30
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "disk_type" {
|
variable "disk_type" {
|
||||||
@ -96,12 +101,6 @@ variable "ssh_authorized_key" {
|
|||||||
description = "SSH public key for user 'core'"
|
description = "SSH public key for user 'core'"
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "asset_dir" {
|
|
||||||
type = string
|
|
||||||
description = "Absolute path to a directory where generated assets should be placed (contains secrets)"
|
|
||||||
default = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
variable "networking" {
|
variable "networking" {
|
||||||
type = string
|
type = string
|
||||||
description = "Choice of networking provider (calico or flannel)"
|
description = "Choice of networking provider (calico or flannel)"
|
||||||
@ -161,3 +160,19 @@ variable "cluster_domain_suffix" {
|
|||||||
default = "cluster.local"
|
default = "cluster.local"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variable "arch" {
|
||||||
|
type = string
|
||||||
|
description = "Container architecture (amd64 or arm64)"
|
||||||
|
default = "amd64"
|
||||||
|
|
||||||
|
validation {
|
||||||
|
condition = var.arch == "amd64" || var.arch == "arm64"
|
||||||
|
error_message = "The arch must be amd64 or arm64."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "daemonset_tolerations" {
|
||||||
|
type = list(string)
|
||||||
|
description = "List of additional taint keys kube-system DaemonSets should tolerate (e.g. ['custom-role', 'gpu-role'])"
|
||||||
|
default = []
|
||||||
|
}
|
||||||
|
|||||||
@ -1,11 +1,15 @@
|
|||||||
# Terraform version and plugin versions
|
# Terraform version and plugin versions
|
||||||
|
|
||||||
terraform {
|
terraform {
|
||||||
required_version = "~> 0.12.6"
|
required_version = ">= 0.13.0, < 0.16.0"
|
||||||
required_providers {
|
required_providers {
|
||||||
aws = "~> 2.23"
|
aws = ">= 2.23, <= 4.0"
|
||||||
ct = "~> 0.4"
|
|
||||||
template = "~> 2.1"
|
template = "~> 2.1"
|
||||||
null = "~> 2.1"
|
null = "~> 2.1"
|
||||||
|
|
||||||
|
ct = {
|
||||||
|
source = "poseidon/ct"
|
||||||
|
version = "~> 0.8"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,7 +8,8 @@ module "workers" {
|
|||||||
security_groups = [aws_security_group.worker.id]
|
security_groups = [aws_security_group.worker.id]
|
||||||
worker_count = var.worker_count
|
worker_count = var.worker_count
|
||||||
instance_type = var.worker_type
|
instance_type = var.worker_type
|
||||||
os_image = var.os_image
|
os_stream = var.os_stream
|
||||||
|
arch = var.arch
|
||||||
disk_size = var.disk_size
|
disk_size = var.disk_size
|
||||||
spot_price = var.worker_price
|
spot_price = var.worker_price
|
||||||
target_groups = var.worker_target_groups
|
target_groups = var.worker_target_groups
|
||||||
|
|||||||
@ -14,10 +14,33 @@ data "aws_ami" "fedora-coreos" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
filter {
|
filter {
|
||||||
name = "name"
|
name = "description"
|
||||||
values = ["fedora-coreos-31.*.*.*-hvm"]
|
values = ["Fedora CoreOS ${var.os_stream} *"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Experimental Fedora CoreOS arm64 / aarch64 AMIs from Poseidon
|
||||||
|
# WARNING: These AMIs will be removed when Fedora CoreOS publishes arm64 AMIs
|
||||||
|
# and may be removed for any reason before then as well. Do not use.
|
||||||
|
data "aws_ami" "fedora-coreos-arm" {
|
||||||
|
count = var.arch == "arm64" ? 1 : 0
|
||||||
|
|
||||||
|
most_recent = true
|
||||||
|
owners = ["099663496933"]
|
||||||
|
|
||||||
|
filter {
|
||||||
|
name = "architecture"
|
||||||
|
values = ["arm64"]
|
||||||
}
|
}
|
||||||
|
|
||||||
# try to filter out dev images (AWS filters can't)
|
filter {
|
||||||
name_regex = "^fedora-coreos-31.[0-9]*.[0-9]*.[0-9]*-hvm*"
|
name = "virtualization-type"
|
||||||
|
values = ["hvm"]
|
||||||
|
}
|
||||||
|
|
||||||
|
filter {
|
||||||
|
name = "name"
|
||||||
|
values = ["fedora-coreos-*"]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
variant: fcos
|
variant: fcos
|
||||||
version: 1.0.0
|
version: 1.2.0
|
||||||
systemd:
|
systemd:
|
||||||
units:
|
units:
|
||||||
- name: docker.service
|
- name: docker.service
|
||||||
@ -9,11 +9,12 @@ systemd:
|
|||||||
enabled: true
|
enabled: true
|
||||||
contents: |
|
contents: |
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Wait for DNS entries
|
Description=Wait for DNS and hostname
|
||||||
Before=kubelet.service
|
Before=kubelet.service
|
||||||
[Service]
|
[Service]
|
||||||
Type=oneshot
|
Type=oneshot
|
||||||
RemainAfterExit=true
|
RemainAfterExit=true
|
||||||
|
ExecStartPre=/bin/sh -c 'while [ `hostname -s` == "localhost" ]; do sleep 1; done;'
|
||||||
ExecStart=/bin/sh -c 'while ! /usr/bin/grep '^[^#[:space:]]' /etc/resolv.conf > /dev/null; do sleep 1; done'
|
ExecStart=/bin/sh -c 'while ! /usr/bin/grep '^[^#[:space:]]' /etc/resolv.conf > /dev/null; do sleep 1; done'
|
||||||
[Install]
|
[Install]
|
||||||
RequiredBy=kubelet.service
|
RequiredBy=kubelet.service
|
||||||
@ -21,10 +22,14 @@ systemd:
|
|||||||
enabled: true
|
enabled: true
|
||||||
contents: |
|
contents: |
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Kubelet via Hyperkube (System Container)
|
Description=Kubelet (System Container)
|
||||||
|
Requires=afterburn.service
|
||||||
|
After=afterburn.service
|
||||||
Wants=rpc-statd.service
|
Wants=rpc-statd.service
|
||||||
[Service]
|
[Service]
|
||||||
ExecStartPre=/bin/mkdir -p /etc/kubernetes/cni/net.d
|
Environment=KUBELET_IMAGE=quay.io/poseidon/kubelet:v1.21.1
|
||||||
|
EnvironmentFile=/run/metadata/afterburn
|
||||||
|
ExecStartPre=/bin/mkdir -p /etc/cni/net.d
|
||||||
ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests
|
ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests
|
||||||
ExecStartPre=/bin/mkdir -p /opt/cni/bin
|
ExecStartPre=/bin/mkdir -p /opt/cni/bin
|
||||||
ExecStartPre=/bin/mkdir -p /var/lib/calico
|
ExecStartPre=/bin/mkdir -p /var/lib/calico
|
||||||
@ -35,42 +40,43 @@ systemd:
|
|||||||
--privileged \
|
--privileged \
|
||||||
--pid host \
|
--pid host \
|
||||||
--network host \
|
--network host \
|
||||||
|
--volume /etc/cni/net.d:/etc/cni/net.d:ro,z \
|
||||||
--volume /etc/kubernetes:/etc/kubernetes:ro,z \
|
--volume /etc/kubernetes:/etc/kubernetes:ro,z \
|
||||||
--volume /usr/lib/os-release:/etc/os-release:ro \
|
--volume /usr/lib/os-release:/etc/os-release:ro \
|
||||||
--volume /etc/ssl/certs:/etc/ssl/certs:ro \
|
|
||||||
--volume /lib/modules:/lib/modules:ro \
|
--volume /lib/modules:/lib/modules:ro \
|
||||||
--volume /run:/run \
|
--volume /run:/run \
|
||||||
--volume /sys/fs/cgroup:/sys/fs/cgroup:ro \
|
--volume /sys/fs/cgroup:/sys/fs/cgroup \
|
||||||
--volume /sys/fs/cgroup/systemd:/sys/fs/cgroup/systemd \
|
--volume /var/lib/calico:/var/lib/calico:ro \
|
||||||
--volume /etc/pki/tls/certs:/usr/share/ca-certificates:ro \
|
|
||||||
--volume /var/lib/calico:/var/lib/calico \
|
|
||||||
--volume /var/lib/docker:/var/lib/docker \
|
--volume /var/lib/docker:/var/lib/docker \
|
||||||
--volume /var/lib/kubelet:/var/lib/kubelet:rshared,z \
|
--volume /var/lib/kubelet:/var/lib/kubelet:rshared,z \
|
||||||
--volume /var/log:/var/log \
|
--volume /var/log:/var/log \
|
||||||
--volume /var/run/lock:/var/run/lock:z \
|
--volume /var/run/lock:/var/run/lock:z \
|
||||||
--volume /opt/cni/bin:/opt/cni/bin:z \
|
--volume /opt/cni/bin:/opt/cni/bin:z \
|
||||||
k8s.gcr.io/hyperkube:v1.17.1 kubelet \
|
$${KUBELET_IMAGE} \
|
||||||
--anonymous-auth=false \
|
--anonymous-auth=false \
|
||||||
--authentication-token-webhook \
|
--authentication-token-webhook \
|
||||||
--authorization-mode=Webhook \
|
--authorization-mode=Webhook \
|
||||||
|
--bootstrap-kubeconfig=/etc/kubernetes/kubeconfig \
|
||||||
--cgroup-driver=systemd \
|
--cgroup-driver=systemd \
|
||||||
--cgroups-per-qos=true \
|
--cgroups-per-qos=true \
|
||||||
--enforce-node-allocatable=pods \
|
--enforce-node-allocatable=pods \
|
||||||
--client-ca-file=/etc/kubernetes/ca.crt \
|
--client-ca-file=/etc/kubernetes/ca.crt \
|
||||||
--cluster_dns=${cluster_dns_service_ip} \
|
--cluster_dns=${cluster_dns_service_ip} \
|
||||||
--cluster_domain=${cluster_domain_suffix} \
|
--cluster_domain=${cluster_domain_suffix} \
|
||||||
--cni-conf-dir=/etc/kubernetes/cni/net.d \
|
|
||||||
--exit-on-lock-contention \
|
|
||||||
--healthz-port=0 \
|
--healthz-port=0 \
|
||||||
--kubeconfig=/etc/kubernetes/kubeconfig \
|
--kubeconfig=/var/lib/kubelet/kubeconfig \
|
||||||
--lock-file=/var/run/lock/kubelet.lock \
|
|
||||||
--network-plugin=cni \
|
--network-plugin=cni \
|
||||||
--node-labels=node.kubernetes.io/node \
|
--node-labels=node.kubernetes.io/node \
|
||||||
%{ for label in split(",", node_labels) }
|
%{~ for label in split(",", node_labels) ~}
|
||||||
--node-labels=${label} \
|
--node-labels=${label} \
|
||||||
%{ endfor ~}
|
%{~ endfor ~}
|
||||||
|
%{~ for taint in split(",", node_taints) ~}
|
||||||
|
--register-with-taints=${taint} \
|
||||||
|
%{~ endfor ~}
|
||||||
--pod-manifest-path=/etc/kubernetes/manifests \
|
--pod-manifest-path=/etc/kubernetes/manifests \
|
||||||
|
--provider-id=aws:///$${AFTERBURN_AWS_AVAILABILITY_ZONE}/$${AFTERBURN_AWS_INSTANCE_ID} \
|
||||||
--read-only-port=0 \
|
--read-only-port=0 \
|
||||||
|
--rotate-certificates \
|
||||||
--volume-plugin-dir=/var/lib/kubelet/volumeplugins
|
--volume-plugin-dir=/var/lib/kubelet/volumeplugins
|
||||||
ExecStop=-/usr/bin/podman stop kubelet
|
ExecStop=-/usr/bin/podman stop kubelet
|
||||||
Delegate=yes
|
Delegate=yes
|
||||||
@ -78,6 +84,19 @@ systemd:
|
|||||||
RestartSec=10
|
RestartSec=10
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
- name: delete-node.service
|
||||||
|
enabled: true
|
||||||
|
contents: |
|
||||||
|
[Unit]
|
||||||
|
Description=Delete Kubernetes node on shutdown
|
||||||
|
[Service]
|
||||||
|
Environment=KUBELET_IMAGE=quay.io/poseidon/kubelet:v1.21.1
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=true
|
||||||
|
ExecStart=/bin/true
|
||||||
|
ExecStop=/bin/bash -c '/usr/bin/podman run --volume /var/lib/kubelet:/var/lib/kubelet:ro,z --entrypoint /usr/local/bin/kubectl $${KUBELET_IMAGE} --kubeconfig=/var/lib/kubelet/kubeconfig delete node $HOSTNAME'
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
storage:
|
storage:
|
||||||
directories:
|
directories:
|
||||||
- path: /etc/kubernetes
|
- path: /etc/kubernetes
|
||||||
@ -87,14 +106,22 @@ storage:
|
|||||||
contents:
|
contents:
|
||||||
inline: |
|
inline: |
|
||||||
${kubeconfig}
|
${kubeconfig}
|
||||||
- path: /etc/sysctl.d/reverse-path-filter.conf
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
net.ipv4.conf.all.rp_filter=1
|
|
||||||
- path: /etc/sysctl.d/max-user-watches.conf
|
- path: /etc/sysctl.d/max-user-watches.conf
|
||||||
contents:
|
contents:
|
||||||
inline: |
|
inline: |
|
||||||
fs.inotify.max_user_watches=16184
|
fs.inotify.max_user_watches=16184
|
||||||
|
- path: /etc/sysctl.d/reverse-path-filter.conf
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
net.ipv4.conf.default.rp_filter=0
|
||||||
|
net.ipv4.conf.*.rp_filter=0
|
||||||
|
- path: /etc/systemd/network/50-flannel.link
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
[Match]
|
||||||
|
OriginalName=flannel*
|
||||||
|
[Link]
|
||||||
|
MACAddressPolicy=none
|
||||||
- path: /etc/systemd/system.conf.d/accounting.conf
|
- path: /etc/systemd/system.conf.d/accounting.conf
|
||||||
contents:
|
contents:
|
||||||
inline: |
|
inline: |
|
||||||
|
|||||||
@ -34,16 +34,21 @@ variable "instance_type" {
|
|||||||
default = "t3.small"
|
default = "t3.small"
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "os_image" {
|
variable "os_stream" {
|
||||||
type = string
|
type = string
|
||||||
description = "AMI channel for Fedora CoreOS (not yet used)"
|
description = "Fedora CoreOS image stream for instances (e.g. stable, testing, next)"
|
||||||
default = "coreos-stable"
|
default = "stable"
|
||||||
|
|
||||||
|
validation {
|
||||||
|
condition = contains(["stable", "testing", "next"], var.os_stream)
|
||||||
|
error_message = "The os_stream must be stable, testing, or next."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "disk_size" {
|
variable "disk_size" {
|
||||||
type = number
|
type = number
|
||||||
description = "Size of the EBS volume in GB"
|
description = "Size of the EBS volume in GB"
|
||||||
default = 40
|
default = 30
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "disk_type" {
|
variable "disk_type" {
|
||||||
@ -108,3 +113,22 @@ variable "node_labels" {
|
|||||||
description = "List of initial node labels"
|
description = "List of initial node labels"
|
||||||
default = []
|
default = []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variable "node_taints" {
|
||||||
|
type = list(string)
|
||||||
|
description = "List of initial node taints"
|
||||||
|
default = []
|
||||||
|
}
|
||||||
|
|
||||||
|
# unofficial, undocumented, unsupported
|
||||||
|
|
||||||
|
variable "arch" {
|
||||||
|
type = string
|
||||||
|
description = "Container architecture (amd64 or arm64)"
|
||||||
|
default = "amd64"
|
||||||
|
|
||||||
|
validation {
|
||||||
|
condition = var.arch == "amd64" || var.arch == "arm64"
|
||||||
|
error_message = "The arch must be amd64 or arm64."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -1,4 +1,14 @@
|
|||||||
|
# Terraform version and plugin versions
|
||||||
|
|
||||||
terraform {
|
terraform {
|
||||||
required_version = ">= 0.12"
|
required_version = ">= 0.13.0, < 0.16.0"
|
||||||
|
required_providers {
|
||||||
|
aws = ">= 2.23, <= 4.0"
|
||||||
|
template = "~> 2.1"
|
||||||
|
|
||||||
|
ct = {
|
||||||
|
source = "poseidon/ct"
|
||||||
|
version = "~> 0.8"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -44,7 +44,7 @@ resource "aws_autoscaling_group" "workers" {
|
|||||||
|
|
||||||
# Worker template
|
# Worker template
|
||||||
resource "aws_launch_configuration" "worker" {
|
resource "aws_launch_configuration" "worker" {
|
||||||
image_id = data.aws_ami.fedora-coreos.image_id
|
image_id = var.arch == "arm64" ? data.aws_ami.fedora-coreos-arm[0].image_id : data.aws_ami.fedora-coreos.image_id
|
||||||
instance_type = var.instance_type
|
instance_type = var.instance_type
|
||||||
spot_price = var.spot_price > 0 ? var.spot_price : null
|
spot_price = var.spot_price > 0 ? var.spot_price : null
|
||||||
enable_monitoring = false
|
enable_monitoring = false
|
||||||
@ -86,6 +86,7 @@ data "template_file" "worker-config" {
|
|||||||
cluster_dns_service_ip = cidrhost(var.service_cidr, 10)
|
cluster_dns_service_ip = cidrhost(var.service_cidr, 10)
|
||||||
cluster_domain_suffix = var.cluster_domain_suffix
|
cluster_domain_suffix = var.cluster_domain_suffix
|
||||||
node_labels = join(",", var.node_labels)
|
node_labels = join(",", var.node_labels)
|
||||||
|
node_taints = join(",", var.node_taints)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -11,13 +11,13 @@ Typhoon distributes upstream Kubernetes, architectural conventions, and cluster
|
|||||||
|
|
||||||
## Features <a href="https://www.cncf.io/certification/software-conformance/"><img align="right" src="https://storage.googleapis.com/poseidon/certified-kubernetes.png"></a>
|
## Features <a href="https://www.cncf.io/certification/software-conformance/"><img align="right" src="https://storage.googleapis.com/poseidon/certified-kubernetes.png"></a>
|
||||||
|
|
||||||
* Kubernetes v1.17.1 (upstream)
|
* Kubernetes v1.21.1 (upstream)
|
||||||
* Single or multi-master, [Calico](https://www.projectcalico.org/) or [flannel](https://github.com/coreos/flannel) networking
|
* Single or multi-master, [Calico](https://www.projectcalico.org/) or [Cilium](https://github.com/cilium/cilium) or [flannel](https://github.com/coreos/flannel) networking
|
||||||
* On-cluster etcd with TLS, [RBAC](https://kubernetes.io/docs/admin/authorization/rbac/)-enabled, [network policy](https://kubernetes.io/docs/concepts/services-networking/network-policies/)
|
* On-cluster etcd with TLS, [RBAC](https://kubernetes.io/docs/admin/authorization/rbac/)-enabled, [network policy](https://kubernetes.io/docs/concepts/services-networking/network-policies/)
|
||||||
* Advanced features like [worker pools](https://typhoon.psdn.io/advanced/worker-pools/), [preemptible](https://typhoon.psdn.io/cl/google-cloud/#preemption) workers, and [snippets](https://typhoon.psdn.io/advanced/customization/#container-linux) customization
|
* Advanced features like [worker pools](https://typhoon.psdn.io/advanced/worker-pools/), [spot](https://typhoon.psdn.io/flatcar-linux/aws/#spot) workers, and [snippets](https://typhoon.psdn.io/advanced/customization/#hosts) customization
|
||||||
* Ready for Ingress, Prometheus, Grafana, and other optional [addons](https://typhoon.psdn.io/addons/overview/)
|
* Ready for Ingress, Prometheus, Grafana, CSI, and other optional [addons](https://typhoon.psdn.io/addons/overview/)
|
||||||
|
|
||||||
## Docs
|
## Docs
|
||||||
|
|
||||||
Please see the [official docs](https://typhoon.psdn.io) and the Google Cloud [tutorial](https://typhoon.psdn.io/cl/google-cloud/).
|
Please see the [official docs](https://typhoon.psdn.io) and the AWS [tutorial](https://typhoon.psdn.io/flatcar-linux/aws/).
|
||||||
|
|
||||||
27
aws/flatcar-linux/kubernetes/ami.tf
Normal file
27
aws/flatcar-linux/kubernetes/ami.tf
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
locals {
|
||||||
|
# Pick a Flatcar Linux AMI
|
||||||
|
# flatcar-stable -> Flatcar Linux AMI
|
||||||
|
ami_id = data.aws_ami.flatcar.image_id
|
||||||
|
channel = split("-", var.os_image)[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
data "aws_ami" "flatcar" {
|
||||||
|
most_recent = true
|
||||||
|
owners = ["075585003325"]
|
||||||
|
|
||||||
|
filter {
|
||||||
|
name = "architecture"
|
||||||
|
values = ["x86_64"]
|
||||||
|
}
|
||||||
|
|
||||||
|
filter {
|
||||||
|
name = "virtualization-type"
|
||||||
|
values = ["hvm"]
|
||||||
|
}
|
||||||
|
|
||||||
|
filter {
|
||||||
|
name = "name"
|
||||||
|
values = ["Flatcar-${local.channel}-*"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -1,11 +1,10 @@
|
|||||||
# Kubernetes assets (kubeconfig, manifests)
|
# Kubernetes assets (kubeconfig, manifests)
|
||||||
module "bootstrap" {
|
module "bootstrap" {
|
||||||
source = "git::https://github.com/poseidon/terraform-render-bootstrap.git?ref=de85f1da7df0b13dfb7488350c20a510f3090cdf"
|
source = "git::https://github.com/poseidon/terraform-render-bootstrap.git?ref=ebe3d5526a59b34c8f119a206358b0c0a6f6f67d"
|
||||||
|
|
||||||
cluster_name = var.cluster_name
|
cluster_name = var.cluster_name
|
||||||
api_servers = [format("%s.%s", var.cluster_name, var.dns_zone)]
|
api_servers = [format("%s.%s", var.cluster_name, var.dns_zone)]
|
||||||
etcd_servers = aws_route53_record.etcds.*.fqdn
|
etcd_servers = aws_route53_record.etcds.*.fqdn
|
||||||
asset_dir = var.asset_dir
|
|
||||||
networking = var.networking
|
networking = var.networking
|
||||||
network_mtu = var.network_mtu
|
network_mtu = var.network_mtu
|
||||||
pod_cidr = var.pod_cidr
|
pod_cidr = var.pod_cidr
|
||||||
@ -13,5 +12,6 @@ module "bootstrap" {
|
|||||||
cluster_domain_suffix = var.cluster_domain_suffix
|
cluster_domain_suffix = var.cluster_domain_suffix
|
||||||
enable_reporting = var.enable_reporting
|
enable_reporting = var.enable_reporting
|
||||||
enable_aggregation = var.enable_aggregation
|
enable_aggregation = var.enable_aggregation
|
||||||
|
daemonset_tolerations = var.daemonset_tolerations
|
||||||
}
|
}
|
||||||
|
|
||||||
215
aws/flatcar-linux/kubernetes/cl/controller.yaml
Normal file
215
aws/flatcar-linux/kubernetes/cl/controller.yaml
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
---
|
||||||
|
systemd:
|
||||||
|
units:
|
||||||
|
- name: etcd-member.service
|
||||||
|
enabled: true
|
||||||
|
contents: |
|
||||||
|
[Unit]
|
||||||
|
Description=etcd (System Container)
|
||||||
|
Documentation=https://github.com/etcd-io/etcd
|
||||||
|
Requires=docker.service
|
||||||
|
After=docker.service
|
||||||
|
[Service]
|
||||||
|
Environment=ETCD_IMAGE=quay.io/coreos/etcd:v3.4.16
|
||||||
|
ExecStartPre=/usr/bin/docker run -d \
|
||||||
|
--name etcd \
|
||||||
|
--network host \
|
||||||
|
--env-file /etc/etcd/etcd.env \
|
||||||
|
--user 232:232 \
|
||||||
|
--volume /etc/ssl/etcd:/etc/ssl/certs:ro \
|
||||||
|
--volume /var/lib/etcd:/var/lib/etcd:rw \
|
||||||
|
$${ETCD_IMAGE}
|
||||||
|
ExecStart=docker logs -f etcd
|
||||||
|
ExecStop=docker stop etcd
|
||||||
|
ExecStopPost=docker rm etcd
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10s
|
||||||
|
TimeoutStartSec=0
|
||||||
|
LimitNOFILE=40000
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
- name: docker.service
|
||||||
|
enabled: true
|
||||||
|
- name: locksmithd.service
|
||||||
|
mask: true
|
||||||
|
- name: wait-for-dns.service
|
||||||
|
enabled: true
|
||||||
|
contents: |
|
||||||
|
[Unit]
|
||||||
|
Description=Wait for DNS entries
|
||||||
|
Wants=systemd-resolved.service
|
||||||
|
Before=kubelet.service
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=true
|
||||||
|
ExecStart=/bin/sh -c 'while ! /usr/bin/grep '^[^#[:space:]]' /etc/resolv.conf > /dev/null; do sleep 1; done'
|
||||||
|
[Install]
|
||||||
|
RequiredBy=kubelet.service
|
||||||
|
RequiredBy=etcd-member.service
|
||||||
|
- name: kubelet.service
|
||||||
|
enabled: true
|
||||||
|
contents: |
|
||||||
|
[Unit]
|
||||||
|
Description=Kubelet (System Container)
|
||||||
|
Requires=docker.service
|
||||||
|
After=docker.service
|
||||||
|
Requires=coreos-metadata.service
|
||||||
|
After=coreos-metadata.service
|
||||||
|
Wants=rpc-statd.service
|
||||||
|
[Service]
|
||||||
|
Environment=KUBELET_IMAGE=quay.io/poseidon/kubelet:v1.21.1
|
||||||
|
EnvironmentFile=/run/metadata/coreos
|
||||||
|
ExecStartPre=/bin/mkdir -p /etc/cni/net.d
|
||||||
|
ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests
|
||||||
|
ExecStartPre=/bin/mkdir -p /opt/cni/bin
|
||||||
|
ExecStartPre=/bin/mkdir -p /var/lib/calico
|
||||||
|
ExecStartPre=/bin/mkdir -p /var/lib/kubelet/volumeplugins
|
||||||
|
ExecStartPre=/usr/bin/bash -c "grep 'certificate-authority-data' /etc/kubernetes/kubeconfig | awk '{print $2}' | base64 -d > /etc/kubernetes/ca.crt"
|
||||||
|
ExecStartPre=/usr/bin/docker run -d \
|
||||||
|
--name kubelet \
|
||||||
|
--privileged \
|
||||||
|
--pid host \
|
||||||
|
--network host \
|
||||||
|
-v /etc/cni/net.d:/etc/cni/net.d:ro \
|
||||||
|
-v /etc/kubernetes:/etc/kubernetes:ro \
|
||||||
|
-v /etc/machine-id:/etc/machine-id:ro \
|
||||||
|
-v /usr/lib/os-release:/etc/os-release:ro \
|
||||||
|
-v /lib/modules:/lib/modules:ro \
|
||||||
|
-v /run:/run \
|
||||||
|
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
|
||||||
|
-v /sys/fs/cgroup/systemd:/sys/fs/cgroup/systemd \
|
||||||
|
-v /var/lib/calico:/var/lib/calico:ro \
|
||||||
|
-v /var/lib/docker:/var/lib/docker \
|
||||||
|
-v /var/lib/kubelet:/var/lib/kubelet:rshared \
|
||||||
|
-v /var/log:/var/log \
|
||||||
|
-v /opt/cni/bin:/opt/cni/bin \
|
||||||
|
$${KUBELET_IMAGE} \
|
||||||
|
--anonymous-auth=false \
|
||||||
|
--authentication-token-webhook \
|
||||||
|
--authorization-mode=Webhook \
|
||||||
|
--bootstrap-kubeconfig=/etc/kubernetes/kubeconfig \
|
||||||
|
--client-ca-file=/etc/kubernetes/ca.crt \
|
||||||
|
--cluster_dns=${cluster_dns_service_ip} \
|
||||||
|
--cluster_domain=${cluster_domain_suffix} \
|
||||||
|
--healthz-port=0 \
|
||||||
|
--kubeconfig=/var/lib/kubelet/kubeconfig \
|
||||||
|
--network-plugin=cni \
|
||||||
|
--node-labels=node.kubernetes.io/controller="true" \
|
||||||
|
--pod-manifest-path=/etc/kubernetes/manifests \
|
||||||
|
--provider-id=aws:///$${COREOS_EC2_AVAILABILITY_ZONE}/$${COREOS_EC2_INSTANCE_ID} \
|
||||||
|
--read-only-port=0 \
|
||||||
|
--register-with-taints=node-role.kubernetes.io/controller=:NoSchedule \
|
||||||
|
--rotate-certificates \
|
||||||
|
--volume-plugin-dir=/var/lib/kubelet/volumeplugins
|
||||||
|
ExecStart=docker logs -f kubelet
|
||||||
|
ExecStop=docker stop kubelet
|
||||||
|
ExecStopPost=docker rm kubelet
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
- name: bootstrap.service
|
||||||
|
contents: |
|
||||||
|
[Unit]
|
||||||
|
Description=Kubernetes control plane
|
||||||
|
Wants=docker.service
|
||||||
|
After=docker.service
|
||||||
|
ConditionPathExists=!/opt/bootstrap/bootstrap.done
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=true
|
||||||
|
WorkingDirectory=/opt/bootstrap
|
||||||
|
Environment=KUBELET_IMAGE=quay.io/poseidon/kubelet:v1.21.1
|
||||||
|
ExecStart=/usr/bin/docker run \
|
||||||
|
-v /etc/kubernetes/pki:/etc/kubernetes/pki:ro \
|
||||||
|
-v /opt/bootstrap/assets:/assets:ro \
|
||||||
|
-v /opt/bootstrap/apply:/apply:ro \
|
||||||
|
--entrypoint=/apply \
|
||||||
|
$${KUBELET_IMAGE}
|
||||||
|
ExecStartPost=/bin/touch /opt/bootstrap/bootstrap.done
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
storage:
|
||||||
|
directories:
|
||||||
|
- path: /var/lib/etcd
|
||||||
|
filesystem: root
|
||||||
|
mode: 0700
|
||||||
|
overwrite: true
|
||||||
|
files:
|
||||||
|
- path: /etc/kubernetes/kubeconfig
|
||||||
|
filesystem: root
|
||||||
|
mode: 0644
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
${kubeconfig}
|
||||||
|
- path: /opt/bootstrap/layout
|
||||||
|
filesystem: root
|
||||||
|
mode: 0544
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
#!/bin/bash -e
|
||||||
|
mkdir -p -- auth tls/etcd tls/k8s static-manifests manifests/coredns manifests-networking
|
||||||
|
awk '/#####/ {filename=$2; next} {print > filename}' assets
|
||||||
|
mkdir -p /etc/ssl/etcd/etcd
|
||||||
|
mkdir -p /etc/kubernetes/pki
|
||||||
|
mv tls/etcd/{peer*,server*} /etc/ssl/etcd/etcd/
|
||||||
|
mv tls/etcd/etcd-client* /etc/kubernetes/pki/
|
||||||
|
chown -R etcd:etcd /etc/ssl/etcd
|
||||||
|
chmod -R 500 /etc/ssl/etcd
|
||||||
|
chmod -R 700 /var/lib/etcd
|
||||||
|
mv auth/* /etc/kubernetes/pki/
|
||||||
|
mv tls/k8s/* /etc/kubernetes/pki/
|
||||||
|
mkdir -p /etc/kubernetes/manifests
|
||||||
|
mv static-manifests/* /etc/kubernetes/manifests/
|
||||||
|
mkdir -p /opt/bootstrap/assets
|
||||||
|
mv manifests /opt/bootstrap/assets/manifests
|
||||||
|
mv manifests-networking/* /opt/bootstrap/assets/manifests/
|
||||||
|
rm -rf assets auth static-manifests tls manifests-networking
|
||||||
|
- path: /opt/bootstrap/apply
|
||||||
|
filesystem: root
|
||||||
|
mode: 0544
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
#!/bin/bash -e
|
||||||
|
export KUBECONFIG=/etc/kubernetes/pki/admin.conf
|
||||||
|
until kubectl version; do
|
||||||
|
echo "Waiting for static pod control plane"
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
until kubectl apply -f /assets/manifests -R; do
|
||||||
|
echo "Retry applying manifests"
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
- path: /etc/sysctl.d/max-user-watches.conf
|
||||||
|
filesystem: root
|
||||||
|
mode: 0644
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
fs.inotify.max_user_watches=16184
|
||||||
|
- path: /etc/etcd/etcd.env
|
||||||
|
filesystem: root
|
||||||
|
mode: 0644
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
ETCD_NAME=${etcd_name}
|
||||||
|
ETCD_DATA_DIR=/var/lib/etcd
|
||||||
|
ETCD_ADVERTISE_CLIENT_URLS=https://${etcd_domain}:2379
|
||||||
|
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://${etcd_domain}:2380
|
||||||
|
ETCD_LISTEN_CLIENT_URLS=https://0.0.0.0:2379
|
||||||
|
ETCD_LISTEN_PEER_URLS=https://0.0.0.0:2380
|
||||||
|
ETCD_LISTEN_METRICS_URLS=http://0.0.0.0:2381
|
||||||
|
ETCD_INITIAL_CLUSTER=${etcd_initial_cluster}
|
||||||
|
ETCD_STRICT_RECONFIG_CHECK=true
|
||||||
|
ETCD_TRUSTED_CA_FILE=/etc/ssl/certs/etcd/server-ca.crt
|
||||||
|
ETCD_CERT_FILE=/etc/ssl/certs/etcd/server.crt
|
||||||
|
ETCD_KEY_FILE=/etc/ssl/certs/etcd/server.key
|
||||||
|
ETCD_CLIENT_CERT_AUTH=true
|
||||||
|
ETCD_PEER_TRUSTED_CA_FILE=/etc/ssl/certs/etcd/peer-ca.crt
|
||||||
|
ETCD_PEER_CERT_FILE=/etc/ssl/certs/etcd/peer.crt
|
||||||
|
ETCD_PEER_KEY_FILE=/etc/ssl/certs/etcd/peer.key
|
||||||
|
ETCD_PEER_CLIENT_CERT_AUTH=true
|
||||||
|
passwd:
|
||||||
|
users:
|
||||||
|
- name: core
|
||||||
|
ssh_authorized_keys:
|
||||||
|
- "${ssh_authorized_key}"
|
||||||
@ -36,7 +36,7 @@ resource "aws_instance" "controllers" {
|
|||||||
|
|
||||||
# network
|
# network
|
||||||
associate_public_ip_address = true
|
associate_public_ip_address = true
|
||||||
subnet_id = aws_subnet.public.*.id[count.index]
|
subnet_id = element(aws_subnet.public.*.id, count.index)
|
||||||
vpc_security_group_ids = [aws_security_group.controller.id]
|
vpc_security_group_ids = [aws_security_group.controller.id]
|
||||||
|
|
||||||
lifecycle {
|
lifecycle {
|
||||||
@ -49,10 +49,10 @@ resource "aws_instance" "controllers" {
|
|||||||
|
|
||||||
# Controller Ignition configs
|
# Controller Ignition configs
|
||||||
data "ct_config" "controller-ignitions" {
|
data "ct_config" "controller-ignitions" {
|
||||||
count = var.controller_count
|
count = var.controller_count
|
||||||
content = data.template_file.controller-configs.*.rendered[count.index]
|
content = data.template_file.controller-configs.*.rendered[count.index]
|
||||||
pretty_print = false
|
strict = true
|
||||||
snippets = var.controller_clc_snippets
|
snippets = var.controller_snippets
|
||||||
}
|
}
|
||||||
|
|
||||||
# Controller Container Linux configs
|
# Controller Container Linux configs
|
||||||
@ -67,7 +67,6 @@ data "template_file" "controller-configs" {
|
|||||||
etcd_domain = "${var.cluster_name}-etcd${count.index}.${var.dns_zone}"
|
etcd_domain = "${var.cluster_name}-etcd${count.index}.${var.dns_zone}"
|
||||||
# etcd0=https://cluster-etcd0.example.com,etcd1=https://cluster-etcd1.example.com,...
|
# etcd0=https://cluster-etcd0.example.com,etcd1=https://cluster-etcd1.example.com,...
|
||||||
etcd_initial_cluster = join(",", data.template_file.etcds.*.rendered)
|
etcd_initial_cluster = join(",", data.template_file.etcds.*.rendered)
|
||||||
cgroup_driver = local.flavor == "flatcar" && local.channel == "edge" ? "systemd" : "cgroupfs"
|
|
||||||
kubeconfig = indent(10, module.bootstrap.kubeconfig-kubelet)
|
kubeconfig = indent(10, module.bootstrap.kubeconfig-kubelet)
|
||||||
ssh_authorized_key = var.ssh_authorized_key
|
ssh_authorized_key = var.ssh_authorized_key
|
||||||
cluster_dns_service_ip = cidrhost(var.service_cidr, 10)
|
cluster_dns_service_ip = cidrhost(var.service_cidr, 10)
|
||||||
@ -25,21 +25,23 @@ resource "aws_internet_gateway" "gateway" {
|
|||||||
resource "aws_route_table" "default" {
|
resource "aws_route_table" "default" {
|
||||||
vpc_id = aws_vpc.network.id
|
vpc_id = aws_vpc.network.id
|
||||||
|
|
||||||
route {
|
|
||||||
cidr_block = "0.0.0.0/0"
|
|
||||||
gateway_id = aws_internet_gateway.gateway.id
|
|
||||||
}
|
|
||||||
|
|
||||||
route {
|
|
||||||
ipv6_cidr_block = "::/0"
|
|
||||||
gateway_id = aws_internet_gateway.gateway.id
|
|
||||||
}
|
|
||||||
|
|
||||||
tags = {
|
tags = {
|
||||||
"Name" = var.cluster_name
|
"Name" = var.cluster_name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "aws_route" "egress-ipv4" {
|
||||||
|
route_table_id = aws_route_table.default.id
|
||||||
|
destination_cidr_block = "0.0.0.0/0"
|
||||||
|
gateway_id = aws_internet_gateway.gateway.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_route" "egress-ipv6" {
|
||||||
|
route_table_id = aws_route_table.default.id
|
||||||
|
destination_ipv6_cidr_block = "::/0"
|
||||||
|
gateway_id = aws_internet_gateway.gateway.id
|
||||||
|
}
|
||||||
|
|
||||||
# Subnets (one per availability zone)
|
# Subnets (one per availability zone)
|
||||||
|
|
||||||
resource "aws_subnet" "public" {
|
resource "aws_subnet" "public" {
|
||||||
@ -17,6 +17,7 @@ resource "aws_route53_record" "apiserver" {
|
|||||||
resource "aws_lb" "nlb" {
|
resource "aws_lb" "nlb" {
|
||||||
name = "${var.cluster_name}-nlb"
|
name = "${var.cluster_name}-nlb"
|
||||||
load_balancer_type = "network"
|
load_balancer_type = "network"
|
||||||
|
ip_address_type = "dualstack"
|
||||||
internal = false
|
internal = false
|
||||||
|
|
||||||
subnets = aws_subnet.public.*.id
|
subnets = aws_subnet.public.*.id
|
||||||
@ -1,5 +1,6 @@
|
|||||||
output "kubeconfig-admin" {
|
output "kubeconfig-admin" {
|
||||||
value = module.bootstrap.kubeconfig-admin
|
value = module.bootstrap.kubeconfig-admin
|
||||||
|
sensitive = true
|
||||||
}
|
}
|
||||||
|
|
||||||
# Outputs for Kubernetes Ingress
|
# Outputs for Kubernetes Ingress
|
||||||
@ -32,7 +33,8 @@ output "worker_security_groups" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
output "kubeconfig" {
|
output "kubeconfig" {
|
||||||
value = module.bootstrap.kubeconfig-kubelet
|
value = module.bootstrap.kubeconfig-kubelet
|
||||||
|
sensitive = true
|
||||||
}
|
}
|
||||||
|
|
||||||
# Outputs for custom load balancing
|
# Outputs for custom load balancing
|
||||||
@ -52,3 +54,10 @@ output "worker_target_group_https" {
|
|||||||
value = module.workers.target_group_https
|
value = module.workers.target_group_https
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Outputs for debug
|
||||||
|
|
||||||
|
output "assets_dist" {
|
||||||
|
value = module.bootstrap.assets_dist
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
|
|
||||||
@ -13,6 +13,30 @@ resource "aws_security_group" "controller" {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "controller-icmp" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "icmp"
|
||||||
|
from_port = 8
|
||||||
|
to_port = 0
|
||||||
|
source_security_group_id = aws_security_group.worker.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "controller-icmp-self" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "icmp"
|
||||||
|
from_port = 8
|
||||||
|
to_port = 0
|
||||||
|
self = true
|
||||||
|
}
|
||||||
|
|
||||||
resource "aws_security_group_rule" "controller-ssh" {
|
resource "aws_security_group_rule" "controller-ssh" {
|
||||||
security_group_id = aws_security_group.controller.id
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
@ -44,39 +68,31 @@ resource "aws_security_group_rule" "controller-etcd-metrics" {
|
|||||||
source_security_group_id = aws_security_group.worker.id
|
source_security_group_id = aws_security_group.worker.id
|
||||||
}
|
}
|
||||||
|
|
||||||
# Allow Prometheus to scrape kube-proxy
|
resource "aws_security_group_rule" "controller-cilium-health" {
|
||||||
resource "aws_security_group_rule" "kube-proxy-metrics" {
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
security_group_id = aws_security_group.controller.id
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
type = "ingress"
|
type = "ingress"
|
||||||
protocol = "tcp"
|
protocol = "tcp"
|
||||||
from_port = 10249
|
from_port = 4240
|
||||||
to_port = 10249
|
to_port = 4240
|
||||||
source_security_group_id = aws_security_group.worker.id
|
source_security_group_id = aws_security_group.worker.id
|
||||||
}
|
}
|
||||||
|
|
||||||
# Allow Prometheus to scrape kube-scheduler
|
resource "aws_security_group_rule" "controller-cilium-health-self" {
|
||||||
resource "aws_security_group_rule" "controller-scheduler-metrics" {
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
security_group_id = aws_security_group.controller.id
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
type = "ingress"
|
type = "ingress"
|
||||||
protocol = "tcp"
|
protocol = "tcp"
|
||||||
from_port = 10251
|
from_port = 4240
|
||||||
to_port = 10251
|
to_port = 4240
|
||||||
source_security_group_id = aws_security_group.worker.id
|
self = true
|
||||||
}
|
|
||||||
|
|
||||||
# Allow Prometheus to scrape kube-controller-manager
|
|
||||||
resource "aws_security_group_rule" "controller-manager-metrics" {
|
|
||||||
security_group_id = aws_security_group.controller.id
|
|
||||||
|
|
||||||
type = "ingress"
|
|
||||||
protocol = "tcp"
|
|
||||||
from_port = 10252
|
|
||||||
to_port = 10252
|
|
||||||
source_security_group_id = aws_security_group.worker.id
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# IANA VXLAN default
|
||||||
resource "aws_security_group_rule" "controller-vxlan" {
|
resource "aws_security_group_rule" "controller-vxlan" {
|
||||||
count = var.networking == "flannel" ? 1 : 0
|
count = var.networking == "flannel" ? 1 : 0
|
||||||
|
|
||||||
@ -111,6 +127,31 @@ resource "aws_security_group_rule" "controller-apiserver" {
|
|||||||
cidr_blocks = ["0.0.0.0/0"]
|
cidr_blocks = ["0.0.0.0/0"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Linux VXLAN default
|
||||||
|
resource "aws_security_group_rule" "controller-linux-vxlan" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "udp"
|
||||||
|
from_port = 8472
|
||||||
|
to_port = 8472
|
||||||
|
source_security_group_id = aws_security_group.worker.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "controller-linux-vxlan-self" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "udp"
|
||||||
|
from_port = 8472
|
||||||
|
to_port = 8472
|
||||||
|
self = true
|
||||||
|
}
|
||||||
|
|
||||||
# Allow Prometheus to scrape node-exporter daemonset
|
# Allow Prometheus to scrape node-exporter daemonset
|
||||||
resource "aws_security_group_rule" "controller-node-exporter" {
|
resource "aws_security_group_rule" "controller-node-exporter" {
|
||||||
security_group_id = aws_security_group.controller.id
|
security_group_id = aws_security_group.controller.id
|
||||||
@ -122,6 +163,17 @@ resource "aws_security_group_rule" "controller-node-exporter" {
|
|||||||
source_security_group_id = aws_security_group.worker.id
|
source_security_group_id = aws_security_group.worker.id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Allow Prometheus to scrape kube-proxy
|
||||||
|
resource "aws_security_group_rule" "kube-proxy-metrics" {
|
||||||
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "tcp"
|
||||||
|
from_port = 10249
|
||||||
|
to_port = 10249
|
||||||
|
source_security_group_id = aws_security_group.worker.id
|
||||||
|
}
|
||||||
|
|
||||||
# Allow apiserver to access kubelets for exec, log, port-forward
|
# Allow apiserver to access kubelets for exec, log, port-forward
|
||||||
resource "aws_security_group_rule" "controller-kubelet" {
|
resource "aws_security_group_rule" "controller-kubelet" {
|
||||||
security_group_id = aws_security_group.controller.id
|
security_group_id = aws_security_group.controller.id
|
||||||
@ -143,6 +195,28 @@ resource "aws_security_group_rule" "controller-kubelet-self" {
|
|||||||
self = true
|
self = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Allow Prometheus to scrape kube-scheduler
|
||||||
|
resource "aws_security_group_rule" "controller-scheduler-metrics" {
|
||||||
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "tcp"
|
||||||
|
from_port = 10251
|
||||||
|
to_port = 10251
|
||||||
|
source_security_group_id = aws_security_group.worker.id
|
||||||
|
}
|
||||||
|
|
||||||
|
# Allow Prometheus to scrape kube-controller-manager
|
||||||
|
resource "aws_security_group_rule" "controller-manager-metrics" {
|
||||||
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "tcp"
|
||||||
|
from_port = 10252
|
||||||
|
to_port = 10252
|
||||||
|
source_security_group_id = aws_security_group.worker.id
|
||||||
|
}
|
||||||
|
|
||||||
resource "aws_security_group_rule" "controller-bgp" {
|
resource "aws_security_group_rule" "controller-bgp" {
|
||||||
security_group_id = aws_security_group.controller.id
|
security_group_id = aws_security_group.controller.id
|
||||||
|
|
||||||
@ -227,6 +301,30 @@ resource "aws_security_group" "worker" {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "worker-icmp" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "icmp"
|
||||||
|
from_port = 8
|
||||||
|
to_port = 0
|
||||||
|
source_security_group_id = aws_security_group.controller.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "worker-icmp-self" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "icmp"
|
||||||
|
from_port = 8
|
||||||
|
to_port = 0
|
||||||
|
self = true
|
||||||
|
}
|
||||||
|
|
||||||
resource "aws_security_group_rule" "worker-ssh" {
|
resource "aws_security_group_rule" "worker-ssh" {
|
||||||
security_group_id = aws_security_group.worker.id
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|
||||||
@ -257,6 +355,31 @@ resource "aws_security_group_rule" "worker-https" {
|
|||||||
cidr_blocks = ["0.0.0.0/0"]
|
cidr_blocks = ["0.0.0.0/0"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "worker-cilium-health" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "tcp"
|
||||||
|
from_port = 4240
|
||||||
|
to_port = 4240
|
||||||
|
source_security_group_id = aws_security_group.controller.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "worker-cilium-health-self" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "tcp"
|
||||||
|
from_port = 4240
|
||||||
|
to_port = 4240
|
||||||
|
self = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# IANA VXLAN default
|
||||||
resource "aws_security_group_rule" "worker-vxlan" {
|
resource "aws_security_group_rule" "worker-vxlan" {
|
||||||
count = var.networking == "flannel" ? 1 : 0
|
count = var.networking == "flannel" ? 1 : 0
|
||||||
|
|
||||||
@ -281,6 +404,31 @@ resource "aws_security_group_rule" "worker-vxlan-self" {
|
|||||||
self = true
|
self = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Linux VXLAN default
|
||||||
|
resource "aws_security_group_rule" "worker-linux-vxlan" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "udp"
|
||||||
|
from_port = 8472
|
||||||
|
to_port = 8472
|
||||||
|
source_security_group_id = aws_security_group.controller.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group_rule" "worker-linux-vxlan-self" {
|
||||||
|
count = var.networking == "cilium" ? 1 : 0
|
||||||
|
|
||||||
|
security_group_id = aws_security_group.worker.id
|
||||||
|
|
||||||
|
type = "ingress"
|
||||||
|
protocol = "udp"
|
||||||
|
from_port = 8472
|
||||||
|
to_port = 8472
|
||||||
|
self = true
|
||||||
|
}
|
||||||
|
|
||||||
# Allow Prometheus to scrape node-exporter daemonset
|
# Allow Prometheus to scrape node-exporter daemonset
|
||||||
resource "aws_security_group_rule" "worker-node-exporter" {
|
resource "aws_security_group_rule" "worker-node-exporter" {
|
||||||
security_group_id = aws_security_group.worker.id
|
security_group_id = aws_security_group.worker.id
|
||||||
@ -43,14 +43,19 @@ variable "worker_type" {
|
|||||||
|
|
||||||
variable "os_image" {
|
variable "os_image" {
|
||||||
type = string
|
type = string
|
||||||
description = "AMI channel for a Container Linux derivative (coreos-stable, coreos-beta, coreos-alpha, flatcar-stable, flatcar-beta, flatcar-alpha, flatcar-edge)"
|
description = "AMI channel for a Container Linux derivative (flatcar-stable, flatcar-beta, flatcar-alpha)"
|
||||||
default = "coreos-stable"
|
default = "flatcar-stable"
|
||||||
|
|
||||||
|
validation {
|
||||||
|
condition = contains(["flatcar-stable", "flatcar-beta", "flatcar-alpha"], var.os_image)
|
||||||
|
error_message = "The os_image must be flatcar-stable, flatcar-beta, or flatcar-alpha."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "disk_size" {
|
variable "disk_size" {
|
||||||
type = number
|
type = number
|
||||||
description = "Size of the EBS volume in GB"
|
description = "Size of the EBS volume in GB"
|
||||||
default = 40
|
default = 30
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "disk_type" {
|
variable "disk_type" {
|
||||||
@ -77,13 +82,13 @@ variable "worker_target_groups" {
|
|||||||
default = []
|
default = []
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "controller_clc_snippets" {
|
variable "controller_snippets" {
|
||||||
type = list(string)
|
type = list(string)
|
||||||
description = "Controller Container Linux Config snippets"
|
description = "Controller Container Linux Config snippets"
|
||||||
default = []
|
default = []
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "worker_clc_snippets" {
|
variable "worker_snippets" {
|
||||||
type = list(string)
|
type = list(string)
|
||||||
description = "Worker Container Linux Config snippets"
|
description = "Worker Container Linux Config snippets"
|
||||||
default = []
|
default = []
|
||||||
@ -96,12 +101,6 @@ variable "ssh_authorized_key" {
|
|||||||
description = "SSH public key for user 'core'"
|
description = "SSH public key for user 'core'"
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "asset_dir" {
|
|
||||||
type = string
|
|
||||||
description = "Absolute path to a directory where generated assets should be placed (contains secrets)"
|
|
||||||
default = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
variable "networking" {
|
variable "networking" {
|
||||||
type = string
|
type = string
|
||||||
description = "Choice of networking provider (calico or flannel)"
|
description = "Choice of networking provider (calico or flannel)"
|
||||||
@ -161,3 +160,8 @@ variable "cluster_domain_suffix" {
|
|||||||
default = "cluster.local"
|
default = "cluster.local"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variable "daemonset_tolerations" {
|
||||||
|
type = list(string)
|
||||||
|
description = "List of additional taint keys kube-system DaemonSets should tolerate (e.g. ['custom-role', 'gpu-role'])"
|
||||||
|
default = []
|
||||||
|
}
|
||||||
15
aws/flatcar-linux/kubernetes/versions.tf
Normal file
15
aws/flatcar-linux/kubernetes/versions.tf
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Terraform version and plugin versions
|
||||||
|
|
||||||
|
terraform {
|
||||||
|
required_version = ">= 0.13.0, < 0.16.0"
|
||||||
|
required_providers {
|
||||||
|
aws = ">= 2.23, <= 4.0"
|
||||||
|
template = "~> 2.1"
|
||||||
|
null = "~> 2.1"
|
||||||
|
|
||||||
|
ct = {
|
||||||
|
source = "poseidon/ct"
|
||||||
|
version = "~> 0.8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -18,7 +18,7 @@ module "workers" {
|
|||||||
ssh_authorized_key = var.ssh_authorized_key
|
ssh_authorized_key = var.ssh_authorized_key
|
||||||
service_cidr = var.service_cidr
|
service_cidr = var.service_cidr
|
||||||
cluster_domain_suffix = var.cluster_domain_suffix
|
cluster_domain_suffix = var.cluster_domain_suffix
|
||||||
clc_snippets = var.worker_clc_snippets
|
snippets = var.worker_snippets
|
||||||
node_labels = var.worker_node_labels
|
node_labels = var.worker_node_labels
|
||||||
}
|
}
|
||||||
|
|
||||||
27
aws/flatcar-linux/kubernetes/workers/ami.tf
Normal file
27
aws/flatcar-linux/kubernetes/workers/ami.tf
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
locals {
|
||||||
|
# Pick a Flatcar Linux AMI
|
||||||
|
# flatcar-stable -> Flatcar Linux AMI
|
||||||
|
ami_id = data.aws_ami.flatcar.image_id
|
||||||
|
channel = split("-", var.os_image)[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
data "aws_ami" "flatcar" {
|
||||||
|
most_recent = true
|
||||||
|
owners = ["075585003325"]
|
||||||
|
|
||||||
|
filter {
|
||||||
|
name = "architecture"
|
||||||
|
values = ["x86_64"]
|
||||||
|
}
|
||||||
|
|
||||||
|
filter {
|
||||||
|
name = "virtualization-type"
|
||||||
|
values = ["hvm"]
|
||||||
|
}
|
||||||
|
|
||||||
|
filter {
|
||||||
|
name = "name"
|
||||||
|
values = ["Flatcar-${local.channel}-*"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
122
aws/flatcar-linux/kubernetes/workers/cl/worker.yaml
Normal file
122
aws/flatcar-linux/kubernetes/workers/cl/worker.yaml
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
---
|
||||||
|
systemd:
|
||||||
|
units:
|
||||||
|
- name: docker.service
|
||||||
|
enabled: true
|
||||||
|
- name: locksmithd.service
|
||||||
|
mask: true
|
||||||
|
- name: wait-for-dns.service
|
||||||
|
enabled: true
|
||||||
|
contents: |
|
||||||
|
[Unit]
|
||||||
|
Description=Wait for DNS entries
|
||||||
|
Wants=systemd-resolved.service
|
||||||
|
Before=kubelet.service
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=true
|
||||||
|
ExecStart=/bin/sh -c 'while ! /usr/bin/grep '^[^#[:space:]]' /etc/resolv.conf > /dev/null; do sleep 1; done'
|
||||||
|
[Install]
|
||||||
|
RequiredBy=kubelet.service
|
||||||
|
- name: kubelet.service
|
||||||
|
enabled: true
|
||||||
|
contents: |
|
||||||
|
[Unit]
|
||||||
|
Description=Kubelet
|
||||||
|
Requires=docker.service
|
||||||
|
After=docker.service
|
||||||
|
Requires=coreos-metadata.service
|
||||||
|
After=coreos-metadata.service
|
||||||
|
Wants=rpc-statd.service
|
||||||
|
[Service]
|
||||||
|
Environment=KUBELET_IMAGE=quay.io/poseidon/kubelet:v1.21.1
|
||||||
|
EnvironmentFile=/run/metadata/coreos
|
||||||
|
ExecStartPre=/bin/mkdir -p /etc/cni/net.d
|
||||||
|
ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests
|
||||||
|
ExecStartPre=/bin/mkdir -p /opt/cni/bin
|
||||||
|
ExecStartPre=/bin/mkdir -p /var/lib/calico
|
||||||
|
ExecStartPre=/bin/mkdir -p /var/lib/kubelet/volumeplugins
|
||||||
|
ExecStartPre=/usr/bin/bash -c "grep 'certificate-authority-data' /etc/kubernetes/kubeconfig | awk '{print $2}' | base64 -d > /etc/kubernetes/ca.crt"
|
||||||
|
# Podman, rkt, or runc run container processes, whereas docker run
|
||||||
|
# is a client to a daemon and requires workarounds to use within a
|
||||||
|
# systemd unit. https://github.com/moby/moby/issues/6791
|
||||||
|
ExecStartPre=/usr/bin/docker run -d \
|
||||||
|
--name kubelet \
|
||||||
|
--privileged \
|
||||||
|
--pid host \
|
||||||
|
--network host \
|
||||||
|
-v /etc/cni/net.d:/etc/cni/net.d:ro \
|
||||||
|
-v /etc/kubernetes:/etc/kubernetes:ro \
|
||||||
|
-v /etc/machine-id:/etc/machine-id:ro \
|
||||||
|
-v /usr/lib/os-release:/etc/os-release:ro \
|
||||||
|
-v /lib/modules:/lib/modules:ro \
|
||||||
|
-v /run:/run \
|
||||||
|
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
|
||||||
|
-v /sys/fs/cgroup/systemd:/sys/fs/cgroup/systemd \
|
||||||
|
-v /var/lib/calico:/var/lib/calico:ro \
|
||||||
|
-v /var/lib/docker:/var/lib/docker \
|
||||||
|
-v /var/lib/kubelet:/var/lib/kubelet:rshared \
|
||||||
|
-v /var/log:/var/log \
|
||||||
|
-v /opt/cni/bin:/opt/cni/bin \
|
||||||
|
$${KUBELET_IMAGE} \
|
||||||
|
--anonymous-auth=false \
|
||||||
|
--authentication-token-webhook \
|
||||||
|
--authorization-mode=Webhook \
|
||||||
|
--bootstrap-kubeconfig=/etc/kubernetes/kubeconfig \
|
||||||
|
--client-ca-file=/etc/kubernetes/ca.crt \
|
||||||
|
--cluster_dns=${cluster_dns_service_ip} \
|
||||||
|
--cluster_domain=${cluster_domain_suffix} \
|
||||||
|
--healthz-port=0 \
|
||||||
|
--kubeconfig=/var/lib/kubelet/kubeconfig \
|
||||||
|
--network-plugin=cni \
|
||||||
|
--node-labels=node.kubernetes.io/node \
|
||||||
|
%{~ for label in split(",", node_labels) ~}
|
||||||
|
--node-labels=${label} \
|
||||||
|
%{~ endfor ~}
|
||||||
|
%{~ for taint in split(",", node_taints) ~}
|
||||||
|
--register-with-taints=${taint} \
|
||||||
|
%{~ endfor ~}
|
||||||
|
--pod-manifest-path=/etc/kubernetes/manifests \
|
||||||
|
--provider-id=aws:///$${COREOS_EC2_AVAILABILITY_ZONE}/$${COREOS_EC2_INSTANCE_ID} \
|
||||||
|
--read-only-port=0 \
|
||||||
|
--rotate-certificates \
|
||||||
|
--volume-plugin-dir=/var/lib/kubelet/volumeplugins
|
||||||
|
ExecStart=docker logs -f kubelet
|
||||||
|
ExecStop=docker stop kubelet
|
||||||
|
ExecStopPost=docker rm kubelet
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
- name: delete-node.service
|
||||||
|
enabled: true
|
||||||
|
contents: |
|
||||||
|
[Unit]
|
||||||
|
Description=Delete Kubernetes node on shutdown
|
||||||
|
[Service]
|
||||||
|
Environment=KUBELET_IMAGE=quay.io/poseidon/kubelet:v1.21.1
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=true
|
||||||
|
ExecStart=/bin/true
|
||||||
|
ExecStop=/bin/bash -c '/usr/bin/docker run -v /var/lib/kubelet:/var/lib/kubelet:ro --entrypoint /usr/local/bin/kubectl $${KUBELET_IMAGE} --kubeconfig=/var/lib/kubelet/kubeconfig delete node $HOSTNAME'
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
storage:
|
||||||
|
files:
|
||||||
|
- path: /etc/kubernetes/kubeconfig
|
||||||
|
filesystem: root
|
||||||
|
mode: 0644
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
${kubeconfig}
|
||||||
|
- path: /etc/sysctl.d/max-user-watches.conf
|
||||||
|
filesystem: root
|
||||||
|
mode: 0644
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
fs.inotify.max_user_watches=16184
|
||||||
|
passwd:
|
||||||
|
users:
|
||||||
|
- name: core
|
||||||
|
ssh_authorized_keys:
|
||||||
|
- "${ssh_authorized_key}"
|
||||||
@ -36,14 +36,19 @@ variable "instance_type" {
|
|||||||
|
|
||||||
variable "os_image" {
|
variable "os_image" {
|
||||||
type = string
|
type = string
|
||||||
description = "AMI channel for a Container Linux derivative (coreos-stable, coreos-beta, coreos-alpha, flatcar-stable, flatcar-beta, flatcar-alpha, flatcar-edge)"
|
description = "AMI channel for a Container Linux derivative (flatcar-stable, flatcar-beta, flatcar-alpha)"
|
||||||
default = "coreos-stable"
|
default = "flatcar-stable"
|
||||||
|
|
||||||
|
validation {
|
||||||
|
condition = contains(["flatcar-stable", "flatcar-beta", "flatcar-alpha"], var.os_image)
|
||||||
|
error_message = "The os_image must be flatcar-stable, flatcar-beta, or flatcar-alpha."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "disk_size" {
|
variable "disk_size" {
|
||||||
type = number
|
type = number
|
||||||
description = "Size of the EBS volume in GB"
|
description = "Size of the EBS volume in GB"
|
||||||
default = 40
|
default = 30
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "disk_type" {
|
variable "disk_type" {
|
||||||
@ -70,7 +75,7 @@ variable "target_groups" {
|
|||||||
default = []
|
default = []
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "clc_snippets" {
|
variable "snippets" {
|
||||||
type = list(string)
|
type = list(string)
|
||||||
description = "Container Linux Config snippets"
|
description = "Container Linux Config snippets"
|
||||||
default = []
|
default = []
|
||||||
@ -108,3 +113,9 @@ variable "node_labels" {
|
|||||||
description = "List of initial node labels"
|
description = "List of initial node labels"
|
||||||
default = []
|
default = []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variable "node_taints" {
|
||||||
|
type = list(string)
|
||||||
|
description = "List of initial node taints"
|
||||||
|
default = []
|
||||||
|
}
|
||||||
14
aws/flatcar-linux/kubernetes/workers/versions.tf
Normal file
14
aws/flatcar-linux/kubernetes/workers/versions.tf
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Terraform version and plugin versions
|
||||||
|
|
||||||
|
terraform {
|
||||||
|
required_version = ">= 0.13.0, < 0.16.0"
|
||||||
|
required_providers {
|
||||||
|
aws = ">= 2.23, <= 4.0"
|
||||||
|
template = "~> 2.1"
|
||||||
|
|
||||||
|
ct = {
|
||||||
|
source = "poseidon/ct"
|
||||||
|
version = "~> 0.8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -71,9 +71,9 @@ resource "aws_launch_configuration" "worker" {
|
|||||||
|
|
||||||
# Worker Ignition config
|
# Worker Ignition config
|
||||||
data "ct_config" "worker-ignition" {
|
data "ct_config" "worker-ignition" {
|
||||||
content = data.template_file.worker-config.rendered
|
content = data.template_file.worker-config.rendered
|
||||||
pretty_print = false
|
strict = true
|
||||||
snippets = var.clc_snippets
|
snippets = var.snippets
|
||||||
}
|
}
|
||||||
|
|
||||||
# Worker Container Linux config
|
# Worker Container Linux config
|
||||||
@ -85,8 +85,8 @@ data "template_file" "worker-config" {
|
|||||||
ssh_authorized_key = var.ssh_authorized_key
|
ssh_authorized_key = var.ssh_authorized_key
|
||||||
cluster_dns_service_ip = cidrhost(var.service_cidr, 10)
|
cluster_dns_service_ip = cidrhost(var.service_cidr, 10)
|
||||||
cluster_domain_suffix = var.cluster_domain_suffix
|
cluster_domain_suffix = var.cluster_domain_suffix
|
||||||
cgroup_driver = local.flavor == "flatcar" && local.channel == "edge" ? "systemd" : "cgroupfs"
|
|
||||||
node_labels = join(",", var.node_labels)
|
node_labels = join(",", var.node_labels)
|
||||||
|
node_taints = join(",", var.node_taints)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1,196 +0,0 @@
|
|||||||
---
|
|
||||||
systemd:
|
|
||||||
units:
|
|
||||||
- name: etcd-member.service
|
|
||||||
enable: true
|
|
||||||
dropins:
|
|
||||||
- name: 40-etcd-cluster.conf
|
|
||||||
contents: |
|
|
||||||
[Service]
|
|
||||||
Environment="ETCD_IMAGE_TAG=v3.4.3"
|
|
||||||
Environment="ETCD_NAME=${etcd_name}"
|
|
||||||
Environment="ETCD_ADVERTISE_CLIENT_URLS=https://${etcd_domain}:2379"
|
|
||||||
Environment="ETCD_INITIAL_ADVERTISE_PEER_URLS=https://${etcd_domain}:2380"
|
|
||||||
Environment="ETCD_LISTEN_CLIENT_URLS=https://0.0.0.0:2379"
|
|
||||||
Environment="ETCD_LISTEN_PEER_URLS=https://0.0.0.0:2380"
|
|
||||||
Environment="ETCD_LISTEN_METRICS_URLS=http://0.0.0.0:2381"
|
|
||||||
Environment="ETCD_INITIAL_CLUSTER=${etcd_initial_cluster}"
|
|
||||||
Environment="ETCD_STRICT_RECONFIG_CHECK=true"
|
|
||||||
Environment="ETCD_SSL_DIR=/etc/ssl/etcd"
|
|
||||||
Environment="ETCD_TRUSTED_CA_FILE=/etc/ssl/certs/etcd/server-ca.crt"
|
|
||||||
Environment="ETCD_CERT_FILE=/etc/ssl/certs/etcd/server.crt"
|
|
||||||
Environment="ETCD_KEY_FILE=/etc/ssl/certs/etcd/server.key"
|
|
||||||
Environment="ETCD_CLIENT_CERT_AUTH=true"
|
|
||||||
Environment="ETCD_PEER_TRUSTED_CA_FILE=/etc/ssl/certs/etcd/peer-ca.crt"
|
|
||||||
Environment="ETCD_PEER_CERT_FILE=/etc/ssl/certs/etcd/peer.crt"
|
|
||||||
Environment="ETCD_PEER_KEY_FILE=/etc/ssl/certs/etcd/peer.key"
|
|
||||||
Environment="ETCD_PEER_CLIENT_CERT_AUTH=true"
|
|
||||||
- name: docker.service
|
|
||||||
enable: true
|
|
||||||
- name: locksmithd.service
|
|
||||||
mask: true
|
|
||||||
- name: wait-for-dns.service
|
|
||||||
enable: true
|
|
||||||
contents: |
|
|
||||||
[Unit]
|
|
||||||
Description=Wait for DNS entries
|
|
||||||
Wants=systemd-resolved.service
|
|
||||||
Before=kubelet.service
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
RemainAfterExit=true
|
|
||||||
ExecStart=/bin/sh -c 'while ! /usr/bin/grep '^[^#[:space:]]' /etc/resolv.conf > /dev/null; do sleep 1; done'
|
|
||||||
[Install]
|
|
||||||
RequiredBy=kubelet.service
|
|
||||||
RequiredBy=etcd-member.service
|
|
||||||
- name: kubelet.service
|
|
||||||
enable: true
|
|
||||||
contents: |
|
|
||||||
[Unit]
|
|
||||||
Description=Kubelet via Hyperkube
|
|
||||||
Wants=rpc-statd.service
|
|
||||||
[Service]
|
|
||||||
ExecStartPre=/bin/mkdir -p /etc/kubernetes/cni/net.d
|
|
||||||
ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests
|
|
||||||
ExecStartPre=/bin/mkdir -p /opt/cni/bin
|
|
||||||
ExecStartPre=/bin/mkdir -p /var/lib/calico
|
|
||||||
ExecStartPre=/bin/mkdir -p /var/lib/kubelet/volumeplugins
|
|
||||||
ExecStartPre=/usr/bin/bash -c "grep 'certificate-authority-data' /etc/kubernetes/kubeconfig | awk '{print $2}' | base64 -d > /etc/kubernetes/ca.crt"
|
|
||||||
ExecStartPre=-/usr/bin/rkt rm --uuid-file=/var/cache/kubelet-pod.uuid
|
|
||||||
ExecStart=/usr/bin/rkt run \
|
|
||||||
--uuid-file-save=/var/cache/kubelet-pod.uuid \
|
|
||||||
--stage1-from-dir=stage1-fly.aci \
|
|
||||||
--hosts-entry host \
|
|
||||||
--insecure-options=image \
|
|
||||||
--volume etc-kubernetes,kind=host,source=/etc/kubernetes,readOnly=true \
|
|
||||||
--mount volume=etc-kubernetes,target=/etc/kubernetes \
|
|
||||||
--volume etc-machine-id,kind=host,source=/etc/machine-id,readOnly=true \
|
|
||||||
--mount volume=etc-machine-id,target=/etc/machine-id \
|
|
||||||
--volume etc-os-release,kind=host,source=/usr/lib/os-release,readOnly=true \
|
|
||||||
--mount volume=etc-os-release,target=/etc/os-release \
|
|
||||||
--volume=etc-resolv,kind=host,source=/etc/resolv.conf,readOnly=true \
|
|
||||||
--mount volume=etc-resolv,target=/etc/resolv.conf \
|
|
||||||
--volume etc-ssl-certs,kind=host,source=/etc/ssl/certs,readOnly=true \
|
|
||||||
--mount volume=etc-ssl-certs,target=/etc/ssl/certs \
|
|
||||||
--volume lib-modules,kind=host,source=/lib/modules,readOnly=true \
|
|
||||||
--mount volume=lib-modules,target=/lib/modules \
|
|
||||||
--volume run,kind=host,source=/run \
|
|
||||||
--mount volume=run,target=/run \
|
|
||||||
--volume usr-share-certs,kind=host,source=/usr/share/ca-certificates,readOnly=true \
|
|
||||||
--mount volume=usr-share-certs,target=/usr/share/ca-certificates \
|
|
||||||
--volume var-lib-calico,kind=host,source=/var/lib/calico \
|
|
||||||
--mount volume=var-lib-calico,target=/var/lib/calico \
|
|
||||||
--volume var-lib-docker,kind=host,source=/var/lib/docker \
|
|
||||||
--mount volume=var-lib-docker,target=/var/lib/docker \
|
|
||||||
--volume var-lib-kubelet,kind=host,source=/var/lib/kubelet,recursive=true \
|
|
||||||
--mount volume=var-lib-kubelet,target=/var/lib/kubelet \
|
|
||||||
--volume var-log,kind=host,source=/var/log \
|
|
||||||
--mount volume=var-log,target=/var/log \
|
|
||||||
--volume opt-cni-bin,kind=host,source=/opt/cni/bin \
|
|
||||||
--mount volume=opt-cni-bin,target=/opt/cni/bin \
|
|
||||||
docker://k8s.gcr.io/hyperkube:v1.17.1 \
|
|
||||||
--exec=/usr/local/bin/kubelet -- \
|
|
||||||
--anonymous-auth=false \
|
|
||||||
--authentication-token-webhook \
|
|
||||||
--authorization-mode=Webhook \
|
|
||||||
--client-ca-file=/etc/kubernetes/ca.crt \
|
|
||||||
--cluster_dns=${cluster_dns_service_ip} \
|
|
||||||
--cluster_domain=${cluster_domain_suffix} \
|
|
||||||
--cni-conf-dir=/etc/kubernetes/cni/net.d \
|
|
||||||
--exit-on-lock-contention \
|
|
||||||
--healthz-port=0 \
|
|
||||||
--kubeconfig=/etc/kubernetes/kubeconfig \
|
|
||||||
--lock-file=/var/run/lock/kubelet.lock \
|
|
||||||
--network-plugin=cni \
|
|
||||||
--node-labels=node.kubernetes.io/master \
|
|
||||||
--node-labels=node.kubernetes.io/controller="true" \
|
|
||||||
--pod-manifest-path=/etc/kubernetes/manifests \
|
|
||||||
--read-only-port=0 \
|
|
||||||
--register-with-taints=node-role.kubernetes.io/master=:NoSchedule \
|
|
||||||
--volume-plugin-dir=/var/lib/kubelet/volumeplugins
|
|
||||||
ExecStop=-/usr/bin/rkt stop --uuid-file=/var/cache/kubelet-pod.uuid
|
|
||||||
Restart=always
|
|
||||||
RestartSec=10
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
- name: bootstrap.service
|
|
||||||
contents: |
|
|
||||||
[Unit]
|
|
||||||
Description=Kubernetes control plane
|
|
||||||
ConditionPathExists=!/opt/bootstrap/bootstrap.done
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
RemainAfterExit=true
|
|
||||||
WorkingDirectory=/opt/bootstrap
|
|
||||||
ExecStartPre=-/usr/bin/bash -c 'set -x && [ -n "$(ls /opt/bootstrap/assets/manifests-*/* 2>/dev/null)" ] && mv /opt/bootstrap/assets/manifests-*/* /opt/bootstrap/assets/manifests && rm -rf /opt/bootstrap/assets/manifests-*'
|
|
||||||
ExecStart=/usr/bin/rkt run \
|
|
||||||
--trust-keys-from-https \
|
|
||||||
--volume config,kind=host,source=/etc/kubernetes/bootstrap-secrets \
|
|
||||||
--mount volume=config,target=/etc/kubernetes/secrets \
|
|
||||||
--volume assets,kind=host,source=/opt/bootstrap/assets \
|
|
||||||
--mount volume=assets,target=/assets \
|
|
||||||
--volume script,kind=host,source=/opt/bootstrap/apply \
|
|
||||||
--mount volume=script,target=/apply \
|
|
||||||
--insecure-options=image \
|
|
||||||
docker://k8s.gcr.io/hyperkube:v1.17.1 \
|
|
||||||
--net=host \
|
|
||||||
--dns=host \
|
|
||||||
--exec=/apply
|
|
||||||
ExecStartPost=/bin/touch /opt/bootstrap/bootstrap.done
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
storage:
|
|
||||||
files:
|
|
||||||
- path: /etc/kubernetes/kubeconfig
|
|
||||||
filesystem: root
|
|
||||||
mode: 0644
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
${kubeconfig}
|
|
||||||
- path: /opt/bootstrap/layout
|
|
||||||
filesystem: root
|
|
||||||
mode: 0544
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
#!/bin/bash -e
|
|
||||||
mkdir -p -- auth tls/etcd tls/k8s static-manifests manifests/coredns manifests-networking
|
|
||||||
awk '/#####/ {filename=$2; next} {print > filename}' assets
|
|
||||||
mkdir -p /etc/ssl/etcd/etcd
|
|
||||||
mkdir -p /etc/kubernetes/bootstrap-secrets
|
|
||||||
mv tls/etcd/{peer*,server*} /etc/ssl/etcd/etcd/
|
|
||||||
mv tls/etcd/etcd-client* /etc/kubernetes/bootstrap-secrets/
|
|
||||||
chown -R etcd:etcd /etc/ssl/etcd
|
|
||||||
chmod -R 500 /etc/ssl/etcd
|
|
||||||
mv auth/kubeconfig /etc/kubernetes/bootstrap-secrets/
|
|
||||||
mv tls/k8s/* /etc/kubernetes/bootstrap-secrets/
|
|
||||||
sudo mkdir -p /etc/kubernetes/manifests
|
|
||||||
sudo mv static-manifests/* /etc/kubernetes/manifests/
|
|
||||||
sudo mkdir -p /opt/bootstrap/assets
|
|
||||||
sudo mv manifests /opt/bootstrap/assets/manifests
|
|
||||||
sudo mv manifests-networking /opt/bootstrap/assets/manifests-networking
|
|
||||||
rm -rf assets auth static-manifests tls
|
|
||||||
- path: /opt/bootstrap/apply
|
|
||||||
filesystem: root
|
|
||||||
mode: 0544
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
#!/bin/bash -e
|
|
||||||
export KUBECONFIG=/etc/kubernetes/secrets/kubeconfig
|
|
||||||
until kubectl version; do
|
|
||||||
echo "Waiting for static pod control plane"
|
|
||||||
sleep 5
|
|
||||||
done
|
|
||||||
until kubectl apply -f /assets/manifests -R; do
|
|
||||||
echo "Retry applying manifests"
|
|
||||||
sleep 5
|
|
||||||
done
|
|
||||||
- path: /etc/sysctl.d/max-user-watches.conf
|
|
||||||
filesystem: root
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
fs.inotify.max_user_watches=16184
|
|
||||||
passwd:
|
|
||||||
users:
|
|
||||||
- name: core
|
|
||||||
ssh_authorized_keys:
|
|
||||||
- "${ssh_authorized_key}"
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
# Terraform version and plugin versions
|
|
||||||
|
|
||||||
terraform {
|
|
||||||
required_version = "~> 0.12.6"
|
|
||||||
required_providers {
|
|
||||||
azurerm = "~> 1.27"
|
|
||||||
ct = "~> 0.3"
|
|
||||||
template = "~> 2.1"
|
|
||||||
null = "~> 2.1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,138 +0,0 @@
|
|||||||
---
|
|
||||||
systemd:
|
|
||||||
units:
|
|
||||||
- name: docker.service
|
|
||||||
enable: true
|
|
||||||
- name: locksmithd.service
|
|
||||||
mask: true
|
|
||||||
- name: wait-for-dns.service
|
|
||||||
enable: true
|
|
||||||
contents: |
|
|
||||||
[Unit]
|
|
||||||
Description=Wait for DNS entries
|
|
||||||
Wants=systemd-resolved.service
|
|
||||||
Before=kubelet.service
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
RemainAfterExit=true
|
|
||||||
ExecStart=/bin/sh -c 'while ! /usr/bin/grep '^[^#[:space:]]' /etc/resolv.conf > /dev/null; do sleep 1; done'
|
|
||||||
[Install]
|
|
||||||
RequiredBy=kubelet.service
|
|
||||||
- name: kubelet.service
|
|
||||||
enable: true
|
|
||||||
contents: |
|
|
||||||
[Unit]
|
|
||||||
Description=Kubelet via Hyperkube
|
|
||||||
Wants=rpc-statd.service
|
|
||||||
[Service]
|
|
||||||
ExecStartPre=/bin/mkdir -p /etc/kubernetes/cni/net.d
|
|
||||||
ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests
|
|
||||||
ExecStartPre=/bin/mkdir -p /opt/cni/bin
|
|
||||||
ExecStartPre=/bin/mkdir -p /var/lib/calico
|
|
||||||
ExecStartPre=/bin/mkdir -p /var/lib/kubelet/volumeplugins
|
|
||||||
ExecStartPre=/usr/bin/bash -c "grep 'certificate-authority-data' /etc/kubernetes/kubeconfig | awk '{print $2}' | base64 -d > /etc/kubernetes/ca.crt"
|
|
||||||
ExecStartPre=-/usr/bin/rkt rm --uuid-file=/var/cache/kubelet-pod.uuid
|
|
||||||
ExecStart=/usr/bin/rkt run \
|
|
||||||
--uuid-file-save=/var/cache/kubelet-pod.uuid \
|
|
||||||
--stage1-from-dir=stage1-fly.aci \
|
|
||||||
--hosts-entry host \
|
|
||||||
--insecure-options=image \
|
|
||||||
--volume etc-kubernetes,kind=host,source=/etc/kubernetes,readOnly=true \
|
|
||||||
--mount volume=etc-kubernetes,target=/etc/kubernetes \
|
|
||||||
--volume etc-machine-id,kind=host,source=/etc/machine-id,readOnly=true \
|
|
||||||
--mount volume=etc-machine-id,target=/etc/machine-id \
|
|
||||||
--volume etc-os-release,kind=host,source=/usr/lib/os-release,readOnly=true \
|
|
||||||
--mount volume=etc-os-release,target=/etc/os-release \
|
|
||||||
--volume=etc-resolv,kind=host,source=/etc/resolv.conf,readOnly=true \
|
|
||||||
--mount volume=etc-resolv,target=/etc/resolv.conf \
|
|
||||||
--volume etc-ssl-certs,kind=host,source=/etc/ssl/certs,readOnly=true \
|
|
||||||
--mount volume=etc-ssl-certs,target=/etc/ssl/certs \
|
|
||||||
--volume lib-modules,kind=host,source=/lib/modules,readOnly=true \
|
|
||||||
--mount volume=lib-modules,target=/lib/modules \
|
|
||||||
--volume run,kind=host,source=/run \
|
|
||||||
--mount volume=run,target=/run \
|
|
||||||
--volume usr-share-certs,kind=host,source=/usr/share/ca-certificates,readOnly=true \
|
|
||||||
--mount volume=usr-share-certs,target=/usr/share/ca-certificates \
|
|
||||||
--volume var-lib-calico,kind=host,source=/var/lib/calico \
|
|
||||||
--mount volume=var-lib-calico,target=/var/lib/calico \
|
|
||||||
--volume var-lib-docker,kind=host,source=/var/lib/docker \
|
|
||||||
--mount volume=var-lib-docker,target=/var/lib/docker \
|
|
||||||
--volume var-lib-kubelet,kind=host,source=/var/lib/kubelet,recursive=true \
|
|
||||||
--mount volume=var-lib-kubelet,target=/var/lib/kubelet \
|
|
||||||
--volume var-log,kind=host,source=/var/log \
|
|
||||||
--mount volume=var-log,target=/var/log \
|
|
||||||
--volume opt-cni-bin,kind=host,source=/opt/cni/bin \
|
|
||||||
--mount volume=opt-cni-bin,target=/opt/cni/bin \
|
|
||||||
docker://k8s.gcr.io/hyperkube:v1.17.1 \
|
|
||||||
--exec=/usr/local/bin/kubelet -- \
|
|
||||||
--anonymous-auth=false \
|
|
||||||
--authentication-token-webhook \
|
|
||||||
--authorization-mode=Webhook \
|
|
||||||
--client-ca-file=/etc/kubernetes/ca.crt \
|
|
||||||
--cluster_dns=${cluster_dns_service_ip} \
|
|
||||||
--cluster_domain=${cluster_domain_suffix} \
|
|
||||||
--cni-conf-dir=/etc/kubernetes/cni/net.d \
|
|
||||||
--exit-on-lock-contention \
|
|
||||||
--healthz-port=0 \
|
|
||||||
--kubeconfig=/etc/kubernetes/kubeconfig \
|
|
||||||
--lock-file=/var/run/lock/kubelet.lock \
|
|
||||||
--network-plugin=cni \
|
|
||||||
--node-labels=node.kubernetes.io/node \
|
|
||||||
%{ for label in split(",", node_labels) }
|
|
||||||
--node-labels=${label} \
|
|
||||||
%{ endfor ~}
|
|
||||||
--pod-manifest-path=/etc/kubernetes/manifests \
|
|
||||||
--read-only-port=0 \
|
|
||||||
--volume-plugin-dir=/var/lib/kubelet/volumeplugins
|
|
||||||
ExecStop=-/usr/bin/rkt stop --uuid-file=/var/cache/kubelet-pod.uuid
|
|
||||||
Restart=always
|
|
||||||
RestartSec=5
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
- name: delete-node.service
|
|
||||||
enable: true
|
|
||||||
contents: |
|
|
||||||
[Unit]
|
|
||||||
Description=Waiting to delete Kubernetes node on shutdown
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
RemainAfterExit=true
|
|
||||||
ExecStart=/bin/true
|
|
||||||
ExecStop=/etc/kubernetes/delete-node
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
storage:
|
|
||||||
files:
|
|
||||||
- path: /etc/kubernetes/kubeconfig
|
|
||||||
filesystem: root
|
|
||||||
mode: 0644
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
${kubeconfig}
|
|
||||||
- path: /etc/sysctl.d/max-user-watches.conf
|
|
||||||
filesystem: root
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
fs.inotify.max_user_watches=16184
|
|
||||||
- path: /etc/kubernetes/delete-node
|
|
||||||
filesystem: root
|
|
||||||
mode: 0744
|
|
||||||
contents:
|
|
||||||
inline: |
|
|
||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
exec /usr/bin/rkt run \
|
|
||||||
--trust-keys-from-https \
|
|
||||||
--volume config,kind=host,source=/etc/kubernetes \
|
|
||||||
--mount volume=config,target=/etc/kubernetes \
|
|
||||||
--insecure-options=image \
|
|
||||||
docker://k8s.gcr.io/hyperkube:v1.17.1 \
|
|
||||||
--net=host \
|
|
||||||
--dns=host \
|
|
||||||
-- \
|
|
||||||
kubectl -- --kubeconfig=/etc/kubernetes/kubeconfig delete node $(hostname | tr '[:upper:]' '[:lower:]')
|
|
||||||
passwd:
|
|
||||||
users:
|
|
||||||
- name: core
|
|
||||||
ssh_authorized_keys:
|
|
||||||
- "${ssh_authorized_key}"
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
|
|
||||||
terraform {
|
|
||||||
required_version = ">= 0.12"
|
|
||||||
}
|
|
||||||
23
azure/fedora-coreos/kubernetes/LICENSE
Normal file
23
azure/fedora-coreos/kubernetes/LICENSE
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2020 Typhoon Authors
|
||||||
|
Copyright (c) 2020 Dalton Hubble
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
@ -11,13 +11,13 @@ Typhoon distributes upstream Kubernetes, architectural conventions, and cluster
|
|||||||
|
|
||||||
## Features <a href="https://www.cncf.io/certification/software-conformance/"><img align="right" src="https://storage.googleapis.com/poseidon/certified-kubernetes.png"></a>
|
## Features <a href="https://www.cncf.io/certification/software-conformance/"><img align="right" src="https://storage.googleapis.com/poseidon/certified-kubernetes.png"></a>
|
||||||
|
|
||||||
* Kubernetes v1.17.1 (upstream)
|
* Kubernetes v1.21.1 (upstream)
|
||||||
* Single or multi-master, [Calico](https://www.projectcalico.org/) or [flannel](https://github.com/coreos/flannel) networking
|
* Single or multi-master, [Calico](https://www.projectcalico.org/) or [Cilium](https://github.com/cilium/cilium) or [flannel](https://github.com/coreos/flannel) networking
|
||||||
* On-cluster etcd with TLS, [RBAC](https://kubernetes.io/docs/admin/authorization/rbac/)-enabled, [network policy](https://kubernetes.io/docs/concepts/services-networking/network-policies/)
|
* On-cluster etcd with TLS, [RBAC](https://kubernetes.io/docs/admin/authorization/rbac/)-enabled, [network policy](https://kubernetes.io/docs/concepts/services-networking/network-policies/), SELinux enforcing
|
||||||
* Advanced features like [worker pools](https://typhoon.psdn.io/advanced/worker-pools/), [spot](https://typhoon.psdn.io/cl/aws/#spot) workers, and [snippets](https://typhoon.psdn.io/advanced/customization/#container-linux) customization
|
* Advanced features like [worker pools](https://typhoon.psdn.io/advanced/worker-pools/), [spot priority](https://typhoon.psdn.io/fedora-coreos/azure/#low-priority) workers, and [snippets](https://typhoon.psdn.io/advanced/customization/#hosts) customization
|
||||||
* Ready for Ingress, Prometheus, Grafana, and other optional [addons](https://typhoon.psdn.io/addons/overview/)
|
* Ready for Ingress, Prometheus, Grafana, and other optional [addons](https://typhoon.psdn.io/addons/overview/)
|
||||||
|
|
||||||
## Docs
|
## Docs
|
||||||
|
|
||||||
Please see the [official docs](https://typhoon.psdn.io) and the AWS [tutorial](https://typhoon.psdn.io/cl/aws/).
|
Please see the [official docs](https://typhoon.psdn.io) and the Azure [tutorial](https://typhoon.psdn.io/fedora-coreos/azure/).
|
||||||
|
|
||||||
26
azure/fedora-coreos/kubernetes/bootstrap.tf
Normal file
26
azure/fedora-coreos/kubernetes/bootstrap.tf
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Kubernetes assets (kubeconfig, manifests)
|
||||||
|
module "bootstrap" {
|
||||||
|
source = "git::https://github.com/poseidon/terraform-render-bootstrap.git?ref=ebe3d5526a59b34c8f119a206358b0c0a6f6f67d"
|
||||||
|
|
||||||
|
cluster_name = var.cluster_name
|
||||||
|
api_servers = [format("%s.%s", var.cluster_name, var.dns_zone)]
|
||||||
|
etcd_servers = formatlist("%s.%s", azurerm_dns_a_record.etcds.*.name, var.dns_zone)
|
||||||
|
|
||||||
|
networking = var.networking
|
||||||
|
|
||||||
|
# only effective with Calico networking
|
||||||
|
# we should be able to use 1450 MTU, but in practice, 1410 was needed
|
||||||
|
network_encapsulation = "vxlan"
|
||||||
|
network_mtu = "1410"
|
||||||
|
|
||||||
|
pod_cidr = var.pod_cidr
|
||||||
|
service_cidr = var.service_cidr
|
||||||
|
cluster_domain_suffix = var.cluster_domain_suffix
|
||||||
|
enable_reporting = var.enable_reporting
|
||||||
|
enable_aggregation = var.enable_aggregation
|
||||||
|
daemonset_tolerations = var.daemonset_tolerations
|
||||||
|
|
||||||
|
# Fedora CoreOS
|
||||||
|
trusted_certs_dir = "/etc/pki/tls/certs"
|
||||||
|
}
|
||||||
|
|
||||||
151
azure/fedora-coreos/kubernetes/controllers.tf
Normal file
151
azure/fedora-coreos/kubernetes/controllers.tf
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
# Discrete DNS records for each controller's private IPv4 for etcd usage
|
||||||
|
resource "azurerm_dns_a_record" "etcds" {
|
||||||
|
count = var.controller_count
|
||||||
|
resource_group_name = var.dns_zone_group
|
||||||
|
|
||||||
|
# DNS Zone name where record should be created
|
||||||
|
zone_name = var.dns_zone
|
||||||
|
|
||||||
|
# DNS record
|
||||||
|
name = format("%s-etcd%d", var.cluster_name, count.index)
|
||||||
|
ttl = 300
|
||||||
|
|
||||||
|
# private IPv4 address for etcd
|
||||||
|
records = [azurerm_network_interface.controllers.*.private_ip_address[count.index]]
|
||||||
|
}
|
||||||
|
|
||||||
|
# Controller availability set to spread controllers
|
||||||
|
resource "azurerm_availability_set" "controllers" {
|
||||||
|
resource_group_name = azurerm_resource_group.cluster.name
|
||||||
|
|
||||||
|
name = "${var.cluster_name}-controllers"
|
||||||
|
location = var.region
|
||||||
|
platform_fault_domain_count = 2
|
||||||
|
platform_update_domain_count = 4
|
||||||
|
managed = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# Controller instances
|
||||||
|
resource "azurerm_linux_virtual_machine" "controllers" {
|
||||||
|
count = var.controller_count
|
||||||
|
resource_group_name = azurerm_resource_group.cluster.name
|
||||||
|
|
||||||
|
name = "${var.cluster_name}-controller-${count.index}"
|
||||||
|
location = var.region
|
||||||
|
availability_set_id = azurerm_availability_set.controllers.id
|
||||||
|
|
||||||
|
size = var.controller_type
|
||||||
|
custom_data = base64encode(data.ct_config.controller-ignitions.*.rendered[count.index])
|
||||||
|
|
||||||
|
# storage
|
||||||
|
source_image_id = var.os_image
|
||||||
|
os_disk {
|
||||||
|
name = "${var.cluster_name}-controller-${count.index}"
|
||||||
|
caching = "None"
|
||||||
|
disk_size_gb = var.disk_size
|
||||||
|
storage_account_type = "Premium_LRS"
|
||||||
|
}
|
||||||
|
|
||||||
|
# network
|
||||||
|
network_interface_ids = [
|
||||||
|
azurerm_network_interface.controllers.*.id[count.index]
|
||||||
|
]
|
||||||
|
|
||||||
|
# Azure requires setting admin_ssh_key, though Ignition custom_data handles it too
|
||||||
|
admin_username = "core"
|
||||||
|
admin_ssh_key {
|
||||||
|
username = "core"
|
||||||
|
public_key = var.ssh_authorized_key
|
||||||
|
}
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
ignore_changes = [
|
||||||
|
os_disk,
|
||||||
|
custom_data,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Controller public IPv4 addresses
|
||||||
|
resource "azurerm_public_ip" "controllers" {
|
||||||
|
count = var.controller_count
|
||||||
|
resource_group_name = azurerm_resource_group.cluster.name
|
||||||
|
|
||||||
|
name = "${var.cluster_name}-controller-${count.index}"
|
||||||
|
location = azurerm_resource_group.cluster.location
|
||||||
|
sku = "Standard"
|
||||||
|
allocation_method = "Static"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Controller NICs with public and private IPv4
|
||||||
|
resource "azurerm_network_interface" "controllers" {
|
||||||
|
count = var.controller_count
|
||||||
|
resource_group_name = azurerm_resource_group.cluster.name
|
||||||
|
|
||||||
|
name = "${var.cluster_name}-controller-${count.index}"
|
||||||
|
location = azurerm_resource_group.cluster.location
|
||||||
|
|
||||||
|
ip_configuration {
|
||||||
|
name = "ip0"
|
||||||
|
subnet_id = azurerm_subnet.controller.id
|
||||||
|
private_ip_address_allocation = "Dynamic"
|
||||||
|
# instance public IPv4
|
||||||
|
public_ip_address_id = azurerm_public_ip.controllers.*.id[count.index]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Associate controller network interface with controller security group
|
||||||
|
resource "azurerm_network_interface_security_group_association" "controllers" {
|
||||||
|
count = var.controller_count
|
||||||
|
|
||||||
|
network_interface_id = azurerm_network_interface.controllers[count.index].id
|
||||||
|
network_security_group_id = azurerm_network_security_group.controller.id
|
||||||
|
}
|
||||||
|
|
||||||
|
# Associate controller network interface with controller backend address pool
|
||||||
|
resource "azurerm_network_interface_backend_address_pool_association" "controllers" {
|
||||||
|
count = var.controller_count
|
||||||
|
|
||||||
|
network_interface_id = azurerm_network_interface.controllers[count.index].id
|
||||||
|
ip_configuration_name = "ip0"
|
||||||
|
backend_address_pool_id = azurerm_lb_backend_address_pool.controller.id
|
||||||
|
}
|
||||||
|
|
||||||
|
# Controller Ignition configs
|
||||||
|
data "ct_config" "controller-ignitions" {
|
||||||
|
count = var.controller_count
|
||||||
|
content = data.template_file.controller-configs.*.rendered[count.index]
|
||||||
|
strict = true
|
||||||
|
snippets = var.controller_snippets
|
||||||
|
}
|
||||||
|
|
||||||
|
# Controller Fedora CoreOS configs
|
||||||
|
data "template_file" "controller-configs" {
|
||||||
|
count = var.controller_count
|
||||||
|
|
||||||
|
template = file("${path.module}/fcc/controller.yaml")
|
||||||
|
|
||||||
|
vars = {
|
||||||
|
# Cannot use cyclic dependencies on controllers or their DNS records
|
||||||
|
etcd_name = "etcd${count.index}"
|
||||||
|
etcd_domain = "${var.cluster_name}-etcd${count.index}.${var.dns_zone}"
|
||||||
|
# etcd0=https://cluster-etcd0.example.com,etcd1=https://cluster-etcd1.example.com,...
|
||||||
|
etcd_initial_cluster = join(",", data.template_file.etcds.*.rendered)
|
||||||
|
kubeconfig = indent(10, module.bootstrap.kubeconfig-kubelet)
|
||||||
|
ssh_authorized_key = var.ssh_authorized_key
|
||||||
|
cluster_dns_service_ip = cidrhost(var.service_cidr, 10)
|
||||||
|
cluster_domain_suffix = var.cluster_domain_suffix
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data "template_file" "etcds" {
|
||||||
|
count = var.controller_count
|
||||||
|
template = "etcd$${index}=https://$${cluster_name}-etcd$${index}.$${dns_zone}:2380"
|
||||||
|
|
||||||
|
vars = {
|
||||||
|
index = count.index
|
||||||
|
cluster_name = var.cluster_name
|
||||||
|
dns_zone = var.dns_zone
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
220
azure/fedora-coreos/kubernetes/fcc/controller.yaml
Normal file
220
azure/fedora-coreos/kubernetes/fcc/controller.yaml
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
---
|
||||||
|
variant: fcos
|
||||||
|
version: 1.2.0
|
||||||
|
systemd:
|
||||||
|
units:
|
||||||
|
- name: etcd-member.service
|
||||||
|
enabled: true
|
||||||
|
contents: |
|
||||||
|
[Unit]
|
||||||
|
Description=etcd (System Container)
|
||||||
|
Documentation=https://github.com/etcd-io/etcd
|
||||||
|
Wants=network-online.target network.target
|
||||||
|
After=network-online.target
|
||||||
|
[Service]
|
||||||
|
Environment=ETCD_IMAGE=quay.io/coreos/etcd:v3.4.16
|
||||||
|
Type=exec
|
||||||
|
ExecStartPre=/bin/mkdir -p /var/lib/etcd
|
||||||
|
ExecStartPre=-/usr/bin/podman rm etcd
|
||||||
|
ExecStart=/usr/bin/podman run --name etcd \
|
||||||
|
--env-file /etc/etcd/etcd.env \
|
||||||
|
--network host \
|
||||||
|
--volume /var/lib/etcd:/var/lib/etcd:rw,Z \
|
||||||
|
--volume /etc/ssl/etcd:/etc/ssl/certs:ro,Z \
|
||||||
|
$${ETCD_IMAGE}
|
||||||
|
ExecStop=/usr/bin/podman stop etcd
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10s
|
||||||
|
TimeoutStartSec=0
|
||||||
|
LimitNOFILE=40000
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
- name: docker.service
|
||||||
|
enabled: true
|
||||||
|
- name: wait-for-dns.service
|
||||||
|
enabled: true
|
||||||
|
contents: |
|
||||||
|
[Unit]
|
||||||
|
Description=Wait for DNS entries
|
||||||
|
Before=kubelet.service
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=true
|
||||||
|
ExecStart=/bin/sh -c 'while ! /usr/bin/grep '^[^#[:space:]]' /etc/resolv.conf > /dev/null; do sleep 1; done'
|
||||||
|
[Install]
|
||||||
|
RequiredBy=kubelet.service
|
||||||
|
RequiredBy=etcd-member.service
|
||||||
|
- name: kubelet.service
|
||||||
|
enabled: true
|
||||||
|
contents: |
|
||||||
|
[Unit]
|
||||||
|
Description=Kubelet (System Container)
|
||||||
|
Wants=rpc-statd.service
|
||||||
|
[Service]
|
||||||
|
Environment=KUBELET_IMAGE=quay.io/poseidon/kubelet:v1.21.1
|
||||||
|
ExecStartPre=/bin/mkdir -p /etc/cni/net.d
|
||||||
|
ExecStartPre=/bin/mkdir -p /etc/kubernetes/manifests
|
||||||
|
ExecStartPre=/bin/mkdir -p /opt/cni/bin
|
||||||
|
ExecStartPre=/bin/mkdir -p /var/lib/calico
|
||||||
|
ExecStartPre=/bin/mkdir -p /var/lib/kubelet/volumeplugins
|
||||||
|
ExecStartPre=/usr/bin/bash -c "grep 'certificate-authority-data' /etc/kubernetes/kubeconfig | awk '{print $2}' | base64 -d > /etc/kubernetes/ca.crt"
|
||||||
|
ExecStartPre=-/usr/bin/podman rm kubelet
|
||||||
|
ExecStart=/usr/bin/podman run --name kubelet \
|
||||||
|
--privileged \
|
||||||
|
--pid host \
|
||||||
|
--network host \
|
||||||
|
--volume /etc/cni/net.d:/etc/cni/net.d:ro,z \
|
||||||
|
--volume /etc/kubernetes:/etc/kubernetes:ro,z \
|
||||||
|
--volume /usr/lib/os-release:/etc/os-release:ro \
|
||||||
|
--volume /lib/modules:/lib/modules:ro \
|
||||||
|
--volume /run:/run \
|
||||||
|
--volume /sys/fs/cgroup:/sys/fs/cgroup \
|
||||||
|
--volume /var/lib/calico:/var/lib/calico:ro \
|
||||||
|
--volume /var/lib/docker:/var/lib/docker \
|
||||||
|
--volume /var/lib/kubelet:/var/lib/kubelet:rshared,z \
|
||||||
|
--volume /var/log:/var/log \
|
||||||
|
--volume /var/run/lock:/var/run/lock:z \
|
||||||
|
--volume /opt/cni/bin:/opt/cni/bin:z \
|
||||||
|
$${KUBELET_IMAGE} \
|
||||||
|
--anonymous-auth=false \
|
||||||
|
--authentication-token-webhook \
|
||||||
|
--authorization-mode=Webhook \
|
||||||
|
--bootstrap-kubeconfig=/etc/kubernetes/kubeconfig \
|
||||||
|
--cgroup-driver=systemd \
|
||||||
|
--cgroups-per-qos=true \
|
||||||
|
--enforce-node-allocatable=pods \
|
||||||
|
--client-ca-file=/etc/kubernetes/ca.crt \
|
||||||
|
--cluster_dns=${cluster_dns_service_ip} \
|
||||||
|
--cluster_domain=${cluster_domain_suffix} \
|
||||||
|
--healthz-port=0 \
|
||||||
|
--kubeconfig=/var/lib/kubelet/kubeconfig \
|
||||||
|
--network-plugin=cni \
|
||||||
|
--node-labels=node.kubernetes.io/controller="true" \
|
||||||
|
--pod-manifest-path=/etc/kubernetes/manifests \
|
||||||
|
--read-only-port=0 \
|
||||||
|
--register-with-taints=node-role.kubernetes.io/controller=:NoSchedule \
|
||||||
|
--rotate-certificates \
|
||||||
|
--volume-plugin-dir=/var/lib/kubelet/volumeplugins
|
||||||
|
ExecStop=-/usr/bin/podman stop kubelet
|
||||||
|
Delegate=yes
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
- name: bootstrap.service
|
||||||
|
contents: |
|
||||||
|
[Unit]
|
||||||
|
Description=Kubernetes control plane
|
||||||
|
ConditionPathExists=!/opt/bootstrap/bootstrap.done
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=true
|
||||||
|
WorkingDirectory=/opt/bootstrap
|
||||||
|
ExecStartPre=-/usr/bin/podman rm bootstrap
|
||||||
|
ExecStart=/usr/bin/podman run --name bootstrap \
|
||||||
|
--network host \
|
||||||
|
--volume /etc/kubernetes/pki:/etc/kubernetes/pki:ro,z \
|
||||||
|
--volume /opt/bootstrap/assets:/assets:ro,Z \
|
||||||
|
--volume /opt/bootstrap/apply:/apply:ro,Z \
|
||||||
|
--entrypoint=/apply \
|
||||||
|
quay.io/poseidon/kubelet:v1.21.1
|
||||||
|
ExecStartPost=/bin/touch /opt/bootstrap/bootstrap.done
|
||||||
|
ExecStartPost=-/usr/bin/podman stop bootstrap
|
||||||
|
storage:
|
||||||
|
directories:
|
||||||
|
- path: /var/lib/etcd
|
||||||
|
mode: 0700
|
||||||
|
- path: /etc/kubernetes
|
||||||
|
- path: /opt/bootstrap
|
||||||
|
files:
|
||||||
|
- path: /etc/kubernetes/kubeconfig
|
||||||
|
mode: 0644
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
${kubeconfig}
|
||||||
|
- path: /opt/bootstrap/layout
|
||||||
|
mode: 0544
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
#!/bin/bash -e
|
||||||
|
mkdir -p -- auth tls/etcd tls/k8s static-manifests manifests/coredns manifests-networking
|
||||||
|
awk '/#####/ {filename=$2; next} {print > filename}' assets
|
||||||
|
mkdir -p /etc/ssl/etcd/etcd
|
||||||
|
mkdir -p /etc/kubernetes/pki
|
||||||
|
mv tls/etcd/{peer*,server*} /etc/ssl/etcd/etcd/
|
||||||
|
mv tls/etcd/etcd-client* /etc/kubernetes/pki/
|
||||||
|
chown -R etcd:etcd /etc/ssl/etcd
|
||||||
|
chmod -R 500 /etc/ssl/etcd
|
||||||
|
mv auth/* /etc/kubernetes/pki/
|
||||||
|
mv tls/k8s/* /etc/kubernetes/pki/
|
||||||
|
mkdir -p /etc/kubernetes/manifests
|
||||||
|
mv static-manifests/* /etc/kubernetes/manifests/
|
||||||
|
mkdir -p /opt/bootstrap/assets
|
||||||
|
mv manifests /opt/bootstrap/assets/manifests
|
||||||
|
mv manifests-networking/* /opt/bootstrap/assets/manifests/
|
||||||
|
rm -rf assets auth static-manifests tls manifests-networking
|
||||||
|
chcon -R -u system_u -t container_file_t /etc/kubernetes/pki
|
||||||
|
- path: /opt/bootstrap/apply
|
||||||
|
mode: 0544
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
#!/bin/bash -e
|
||||||
|
export KUBECONFIG=/etc/kubernetes/pki/admin.conf
|
||||||
|
until kubectl version; do
|
||||||
|
echo "Waiting for static pod control plane"
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
until kubectl apply -f /assets/manifests -R; do
|
||||||
|
echo "Retry applying manifests"
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
- path: /etc/sysctl.d/max-user-watches.conf
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
fs.inotify.max_user_watches=16184
|
||||||
|
- path: /etc/sysctl.d/reverse-path-filter.conf
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
net.ipv4.conf.default.rp_filter=0
|
||||||
|
net.ipv4.conf.*.rp_filter=0
|
||||||
|
- path: /etc/systemd/network/50-flannel.link
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
[Match]
|
||||||
|
OriginalName=flannel*
|
||||||
|
[Link]
|
||||||
|
MACAddressPolicy=none
|
||||||
|
- path: /etc/systemd/system.conf.d/accounting.conf
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
[Manager]
|
||||||
|
DefaultCPUAccounting=yes
|
||||||
|
DefaultMemoryAccounting=yes
|
||||||
|
DefaultBlockIOAccounting=yes
|
||||||
|
- path: /etc/etcd/etcd.env
|
||||||
|
mode: 0644
|
||||||
|
contents:
|
||||||
|
inline: |
|
||||||
|
ETCD_NAME=${etcd_name}
|
||||||
|
ETCD_DATA_DIR=/var/lib/etcd
|
||||||
|
ETCD_ADVERTISE_CLIENT_URLS=https://${etcd_domain}:2379
|
||||||
|
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://${etcd_domain}:2380
|
||||||
|
ETCD_LISTEN_CLIENT_URLS=https://0.0.0.0:2379
|
||||||
|
ETCD_LISTEN_PEER_URLS=https://0.0.0.0:2380
|
||||||
|
ETCD_LISTEN_METRICS_URLS=http://0.0.0.0:2381
|
||||||
|
ETCD_INITIAL_CLUSTER=${etcd_initial_cluster}
|
||||||
|
ETCD_STRICT_RECONFIG_CHECK=true
|
||||||
|
ETCD_TRUSTED_CA_FILE=/etc/ssl/certs/etcd/server-ca.crt
|
||||||
|
ETCD_CERT_FILE=/etc/ssl/certs/etcd/server.crt
|
||||||
|
ETCD_KEY_FILE=/etc/ssl/certs/etcd/server.key
|
||||||
|
ETCD_CLIENT_CERT_AUTH=true
|
||||||
|
ETCD_PEER_TRUSTED_CA_FILE=/etc/ssl/certs/etcd/peer-ca.crt
|
||||||
|
ETCD_PEER_CERT_FILE=/etc/ssl/certs/etcd/peer.crt
|
||||||
|
ETCD_PEER_KEY_FILE=/etc/ssl/certs/etcd/peer.key
|
||||||
|
ETCD_PEER_CLIENT_CERT_AUTH=true
|
||||||
|
passwd:
|
||||||
|
users:
|
||||||
|
- name: core
|
||||||
|
ssh_authorized_keys:
|
||||||
|
- ${ssh_authorized_key}
|
||||||
|
|
||||||
@ -72,6 +72,7 @@ resource "azurerm_lb_rule" "ingress-http" {
|
|||||||
name = "ingress-http"
|
name = "ingress-http"
|
||||||
loadbalancer_id = azurerm_lb.cluster.id
|
loadbalancer_id = azurerm_lb.cluster.id
|
||||||
frontend_ip_configuration_name = "ingress"
|
frontend_ip_configuration_name = "ingress"
|
||||||
|
disable_outbound_snat = true
|
||||||
|
|
||||||
protocol = "Tcp"
|
protocol = "Tcp"
|
||||||
frontend_port = 80
|
frontend_port = 80
|
||||||
@ -86,6 +87,7 @@ resource "azurerm_lb_rule" "ingress-https" {
|
|||||||
name = "ingress-https"
|
name = "ingress-https"
|
||||||
loadbalancer_id = azurerm_lb.cluster.id
|
loadbalancer_id = azurerm_lb.cluster.id
|
||||||
frontend_ip_configuration_name = "ingress"
|
frontend_ip_configuration_name = "ingress"
|
||||||
|
disable_outbound_snat = true
|
||||||
|
|
||||||
protocol = "Tcp"
|
protocol = "Tcp"
|
||||||
frontend_port = 443
|
frontend_port = 443
|
||||||
@ -94,18 +96,28 @@ resource "azurerm_lb_rule" "ingress-https" {
|
|||||||
probe_id = azurerm_lb_probe.ingress.id
|
probe_id = azurerm_lb_probe.ingress.id
|
||||||
}
|
}
|
||||||
|
|
||||||
# Address pool of controllers
|
# Worker outbound TCP/UDP SNAT
|
||||||
resource "azurerm_lb_backend_address_pool" "controller" {
|
resource "azurerm_lb_outbound_rule" "worker-outbound" {
|
||||||
resource_group_name = azurerm_resource_group.cluster.name
|
resource_group_name = azurerm_resource_group.cluster.name
|
||||||
|
|
||||||
|
name = "worker"
|
||||||
|
loadbalancer_id = azurerm_lb.cluster.id
|
||||||
|
frontend_ip_configuration {
|
||||||
|
name = "ingress"
|
||||||
|
}
|
||||||
|
|
||||||
|
protocol = "All"
|
||||||
|
backend_address_pool_id = azurerm_lb_backend_address_pool.worker.id
|
||||||
|
}
|
||||||
|
|
||||||
|
# Address pool of controllers
|
||||||
|
resource "azurerm_lb_backend_address_pool" "controller" {
|
||||||
name = "controller"
|
name = "controller"
|
||||||
loadbalancer_id = azurerm_lb.cluster.id
|
loadbalancer_id = azurerm_lb.cluster.id
|
||||||
}
|
}
|
||||||
|
|
||||||
# Address pool of workers
|
# Address pool of workers
|
||||||
resource "azurerm_lb_backend_address_pool" "worker" {
|
resource "azurerm_lb_backend_address_pool" "worker" {
|
||||||
resource_group_name = azurerm_resource_group.cluster.name
|
|
||||||
|
|
||||||
name = "worker"
|
name = "worker"
|
||||||
loadbalancer_id = azurerm_lb.cluster.id
|
loadbalancer_id = azurerm_lb.cluster.id
|
||||||
}
|
}
|
||||||
@ -21,7 +21,12 @@ resource "azurerm_subnet" "controller" {
|
|||||||
|
|
||||||
name = "controller"
|
name = "controller"
|
||||||
virtual_network_name = azurerm_virtual_network.network.name
|
virtual_network_name = azurerm_virtual_network.network.name
|
||||||
address_prefix = cidrsubnet(var.host_cidr, 1, 0)
|
address_prefixes = [cidrsubnet(var.host_cidr, 1, 0)]
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_subnet_network_security_group_association" "controller" {
|
||||||
|
subnet_id = azurerm_subnet.controller.id
|
||||||
|
network_security_group_id = azurerm_network_security_group.controller.id
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "azurerm_subnet" "worker" {
|
resource "azurerm_subnet" "worker" {
|
||||||
@ -29,6 +34,11 @@ resource "azurerm_subnet" "worker" {
|
|||||||
|
|
||||||
name = "worker"
|
name = "worker"
|
||||||
virtual_network_name = azurerm_virtual_network.network.name
|
virtual_network_name = azurerm_virtual_network.network.name
|
||||||
address_prefix = cidrsubnet(var.host_cidr, 1, 1)
|
address_prefixes = [cidrsubnet(var.host_cidr, 1, 1)]
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_subnet_network_security_group_association" "worker" {
|
||||||
|
subnet_id = azurerm_subnet.worker.id
|
||||||
|
network_security_group_id = azurerm_network_security_group.worker.id
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
output "kubeconfig-admin" {
|
output "kubeconfig-admin" {
|
||||||
value = module.bootstrap.kubeconfig-admin
|
value = module.bootstrap.kubeconfig-admin
|
||||||
|
sensitive = true
|
||||||
}
|
}
|
||||||
|
|
||||||
# Outputs for Kubernetes Ingress
|
# Outputs for Kubernetes Ingress
|
||||||
@ -32,7 +33,8 @@ output "security_group_id" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
output "kubeconfig" {
|
output "kubeconfig" {
|
||||||
value = module.bootstrap.kubeconfig-kubelet
|
value = module.bootstrap.kubeconfig-kubelet
|
||||||
|
sensitive = true
|
||||||
}
|
}
|
||||||
|
|
||||||
# Outputs for custom firewalling
|
# Outputs for custom firewalling
|
||||||
@ -57,3 +59,11 @@ output "backend_address_pool_id" {
|
|||||||
description = "ID of the worker backend address pool"
|
description = "ID of the worker backend address pool"
|
||||||
value = azurerm_lb_backend_address_pool.worker.id
|
value = azurerm_lb_backend_address_pool.worker.id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Outputs for debug
|
||||||
|
|
||||||
|
output "assets_dist" {
|
||||||
|
value = module.bootstrap.assets_dist
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user