{"id":1538,"date":"2025-03-30T19:08:26","date_gmt":"2025-03-30T17:08:26","guid":{"rendered":"https:\/\/olvas.dev\/?p=1538"},"modified":"2025-03-30T19:08:26","modified_gmt":"2025-03-30T17:08:26","slug":"krr-%d0%b2%d0%b0%d1%88-%d0%bb%d0%b8%d1%87%d0%bd%d1%8b%d0%b9-%d1%81%d0%be%d0%b2%d0%b5%d1%82%d0%bd%d0%b8%d0%ba-%d0%bf%d0%be-%d1%80%d0%b5%d1%81%d1%83%d1%80%d1%81%d0%b0%d0%bc-%d0%b2-kubernetes","status":"publish","type":"post","link":"https:\/\/olvas.dev\/?p=1538","title":{"rendered":"KRR \u2014 \u0432\u0430\u0448 \u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u043e\u0432\u0435\u0442\u043d\u0438\u043a \u043f\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u0432 Kubernetes"},"content":{"rendered":"\n<p><a href=\"https:\/\/github.com\/robusta-dev\/krr\" rel=\"noreferrer noopener\" target=\"_blank\">KRR (Kubernetes Resource Recommender)<\/a>&nbsp;\u2014 \u044d\u0442\u043e CLI-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0432 Kubernetes. \u041e\u043d \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 Pod&#8217;\u043e\u0432, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u0435 \u0432 Prometheus, \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438&nbsp;requests&nbsp;\u0438&nbsp;limits&nbsp;\u0434\u043b\u044f CPU \u0438 \u043f\u0430\u043c\u044f\u0442\u0438. \u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0438 \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a krr \u0432 kubernetes \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0432 html \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043a\u0430\u043a web-\u0441\u0430\u0439\u0442.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u043e KRR<\/h3>\n\n\n\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044e&nbsp;<a href=\"https:\/\/sysdig.com\/blog\/millions-wasted-kubernetes\/\" rel=\"noreferrer noopener\" target=\"_blank\">Sysdig<\/a>, \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u044b Kubernetes \u0438\u043c\u0435\u044e\u0442:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>69% \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430<\/li>\n\n\n\n<li>18% \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0432\u0430\u0448\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e KRR, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c 69% \u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442\u0430\u0445.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 KRR<\/h3>\n\n\n\n<p>KRR \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 Prometheus \u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 request \u0438 limit \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CPU request<\/strong>\u00a0\u043d\u0430 66-\u0439 \u043f\u0435\u0440\u0446\u0435\u043d\u0442\u0438\u043b\u044c.<\/li>\n\n\n\n<li><strong>CPU limit<\/strong>\u00a0\u043d\u0430 95-\u0439 \u043f\u0435\u0440\u0446\u0435\u043d\u0442\u0438\u043b\u044c.<\/li>\n\n\n\n<li><strong>\u041f\u0430\u043c\u044f\u0442\u044c<\/strong>\u00a0\u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e + \u0431\u0443\u0444\u0435\u0440.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 KRR \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438<\/h3>\n\n\n\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c KRR \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435:<code>krr simple-limit -p &lt;Prometheus_URL> --formatter yaml<\/code><\/li>\n\n\n\n<li>\u0417\u0430\u043f\u0443\u0441\u043a \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u043f\u043e namespace:<code>krr simple-limit -p &lt;Prometheus_URL> -n my-namespace<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u0417\u0430\u043f\u0443\u0441\u043a KRR \u0432 \u0432\u0438\u0434\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c<\/h3>\n\n\n\n<p>\u041d\u043e \u043b\u0443\u0447\u0448\u0435 \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u0432\u0438\u0434\u0435\u043b\u0438 \u0432\u0441\u0435 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0438 \u0432\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n\n\n\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 HTML \u0440\u0430\u0431\u043e\u0442\u044b KRR&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e77\/0e2\/fd6\/e770e2fd6700241776116fea18d65030.png\" alt=\"\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c:<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Namespace<\/h4>\n\n\n\n<p>\u041a\u043e\u0434 ns.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\napiVersion: v1\nkind: Namespace\nmetadata:\n  name: krr<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">ServiceAccount<\/h4>\n\n\n\n<p>\u041a\u043e\u0434 sa.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: krr-service-account\n  namespace: krr<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">ClusterRole \u0438 ClusterRoleBinding<\/h4>\n\n\n\n<p>\u041a\u043e\u0434 ClusterRole.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\nkind: ClusterRole\napiVersion: rbac.authorization.k8s.io\/v1\nmetadata:\n  name: krr-cluster-role\nrules:\n  - apiGroups:\n      - \"\"\n    resources:\n      - configmaps\n      - daemonsets\n      - deployments\n      - namespaces\n      - pods\n      - replicasets\n      - replicationcontrollers\n      - services\n    verbs:\n      - get\n      - list\n      - watch\n  - apiGroups:\n      - \"\"\n    resources:\n      - nodes\n    verbs:\n      - get\n      - list\n      - watch\n  - apiGroups:\n      - apps\n    resources:\n      - daemonsets\n      - deployments\n      - deployments\/scale\n      - replicasets\n      - replicasets\/scale\n      - statefulsets\n    verbs:\n      - get\n      - list\n      - watch<\/code><\/pre>\n\n\n\n<p>\u041a\u043e\u0434 ClusterRoleBinding.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\napiVersion: rbac.authorization.k8s.io\/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: krr-cluster-role-binding\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: ClusterRole\n  name: krr-cluster-role\nsubjects:\n  - kind: ServiceAccount\n    name: krr-service-account\n    namespace: krr<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Deployment \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c KRR<\/h4>\n\n\n\n<p>\u041a\u043e\u0434 deploy.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: krr\n  namespace: krr\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: krr\n  template:\n    metadata:\n      labels:\n        app: krr\n    spec:\n      serviceAccount: krr-service-account\n      serviceAccountName: krr-service-account\n      volumes:\n        - name: shared-storage\n          emptyDir: {}\n      containers:\n        - name: nginx\n          image: nginx:1.27.4\n          volumeMounts:\n            - name: shared-storage\n              mountPath: \/usr\/share\/nginx\/html\n          ports:\n            - containerPort: 80\n        - name: krr\n          image: robustadev\/krr:v1.22.0\n          volumeMounts:\n            - name: shared-storage\n              mountPath: \/output\n          env:\n            - name: COLUMNS\n              value: \"400\"\n          command:\n            - \/bin\/sh\n            - -c\n            - |\n              while true; do\n                TEMP_FILE=\"\/output\/index_tmp.html\"\n                FINAL_FILE=\"\/output\/index.html\"\n                python krr.py simple-limit \\\n                  -p https:\/\/vmselect.corp\/select\/0\/prometheus \\\n                  --prometheus-label cluster -l dev \\\n                  --allow-hpa \\\n                  --use-oomkill-data \\\n                  --formatter html \\\n                  --fileoutput \"$TEMP_FILE\" &amp;&amp; mv \"$TEMP_FILE\" \"$FINAL_FILE\";\n                sleep 1d;\n              done\n          resources:\n            limits:\n              memory: 2Gi\n            requests:\n              memory: 1Gi<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e \u043a\u043e\u0434\u0443 deploy.yaml<\/h2>\n\n\n\n<p>\u0428\u0438\u0440\u0438\u043d\u0430 html \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439&nbsp;COLUMNS.<\/p>\n\n\n\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 krr \u0445\u043e\u0434\u0438\u0442 \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 k8s \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u0442\u0430\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 pod, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u044b&nbsp;ClusterRole,&nbsp;ClusterRoleBinding,&nbsp;ServiceAccount.<\/p>\n\n\n\n<p>\u0414\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430&nbsp;&#8212;prometheus-label cluster&nbsp;\u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 VictoriaMetrics.<\/p>\n\n\n\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f&nbsp;simple-limit, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439&nbsp;cpu limit&nbsp;=&nbsp;cpu request, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438&nbsp;simple&nbsp;cpu limit \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d.<\/p>\n\n\n\n<p>\u0412\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b sleep \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Service<\/h4>\n\n\n\n<p>\u041a\u043e\u0434 svc.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\napiVersion: v1\nkind: Service\nmetadata:\n  name: krr-service\n  namespace: krr\nspec:\n  selector:\n    app: krr\n  ports:\n    - protocol: TCP\n      port: 80\n      targetPort: 80<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Ingress \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c<\/h4>\n\n\n\n<p>\u041a\u043e\u0434 ingress.yaml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\napiVersion: networking.k8s.io\/v1\nkind: Ingress\nmetadata:\n  name: krr-ingress\n  namespace: krr\n  annotations:\n    cert-manager.io\/cluster-issuer: cluster-issuer\nspec:\n  ingressClassName: nginx\n  tls:\n    - hosts:\n        - krr.k8s.dev.corp\n      secretName: krr-tls\n  rules:\n    - host: krr.k8s.dev.corp\n      http:\n        paths:\n          - path: \/\n            pathType: Prefix\n            backend:\n              service:\n                name: krr-service\n                port:\n                  number: 80<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0441 Kubernetes VPA<\/h3>\n\n\n\n<p>\u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435&nbsp;<a href=\"https:\/\/github.com\/robusta-dev\/krr\" rel=\"noreferrer noopener\" target=\"_blank\">Github KRR<\/a>&nbsp;\u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0441 k8s VPA<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n\n\n\n<p><a href=\"https:\/\/github.com\/robusta-dev\/krr\" rel=\"noreferrer noopener\" target=\"_blank\">KRR<\/a>&nbsp;\u2014 \u043c\u043e\u0449\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0432 Kubernetes, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c&nbsp;<strong>CPU<\/strong>&nbsp;\u0438&nbsp;<strong>\u043f\u0430\u043c\u044f\u0442\u044c<\/strong>. \u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0435\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0434\u043b\u044f DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>KRR (Kubernetes Resource Recommender)&nbsp;\u2014 \u044d\u0442\u043e CLI-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0432 Kubernetes. \u041e\u043d \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 Pod&#8217;\u043e\u0432, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u0435 \u0432 Prometheus, \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438&nbsp;requests&nbsp;\u0438&nbsp;limits&nbsp;\u0434\u043b\u044f CPU \u0438 \u043f\u0430\u043c\u044f\u0442\u0438. \u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0438 \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1539,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[31,147,336,30,337,338],"class_list":["post-1538","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-likbez","tag-k8s","tag-k8skubernetes","tag-krr","tag-kubernetes","tag-resources","tag-robusta-krr","entry-card--landscape"],"_links":{"self":[{"href":"https:\/\/olvas.dev\/index.php?rest_route=\/wp\/v2\/posts\/1538","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/olvas.dev\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/olvas.dev\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/olvas.dev\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/olvas.dev\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1538"}],"version-history":[{"count":2,"href":"https:\/\/olvas.dev\/index.php?rest_route=\/wp\/v2\/posts\/1538\/revisions"}],"predecessor-version":[{"id":1541,"href":"https:\/\/olvas.dev\/index.php?rest_route=\/wp\/v2\/posts\/1538\/revisions\/1541"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/olvas.dev\/index.php?rest_route=\/wp\/v2\/media\/1539"}],"wp:attachment":[{"href":"https:\/\/olvas.dev\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1538"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/olvas.dev\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1538"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/olvas.dev\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}