[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/linux/k8s-resource-quotas":3,"mdc-7lapge-key":1152,"mdc-45zbql-key":1162,"mdc-6a1chw-key":1179,"mdc-6lawvn-key":1195,"mdc-g7iot9-key":1203,"mdc--hqstmo-key":1219,"mdc-5crxgn-key":1227,"mdc--9cz4wb-key":1264,"mdc-q9t6nu-key":1280,"related-/guides/linux/k8s-limitrange,/guides/linux/k8s-namespace-management":1296},{"id":4,"title":5,"appliesTo":6,"author":9,"body":10,"canonical":1085,"code":1085,"createdAt":1086,"description":1087,"difficulty":1088,"draft":1089,"estimatedTime":1090,"extension":1091,"faq":1092,"howToSteps":1105,"howToTotalTime":1121,"image":1085,"keywords":1122,"locale":1131,"meta":1132,"navigation":1133,"path":1134,"platform":1135,"related":1136,"section":1139,"seo":1140,"severity":1088,"stem":1141,"summary":1142,"tags":1143,"twitterCreator":1085,"twitterSite":1085,"type":1150,"updatedAt":1086,"__hash__":1151},"content_ru/guides/linux/k8s-resource-quotas.md","Настройка Resource Quotas в Kubernetes: контроль ресурсов",[7,8],"Kubernetes 1.20+","kubectl 1.20+","FixPedia Team",{"type":11,"value":12,"toc":1072},"minimark",[13,18,22,26,108,111,115,120,131,186,196,226,230,237,385,390,436,440,443,462,465,473,477,480,503,521,613,615,618,622,625,879,881,885,928,932,1068],[14,15,17],"h2",{"id":16},"введение-зачем-это-нужно","Введение / Зачем это нужно",[19,20,21],"p",{},"Resource Quota — это механизм Kubernetes, который ограничивает суммарное потребление вычислительных ресурсов (CPU, память) и количество объектов (поды, сервисы, PersistentVolumeClaims) в рамках одного namespace. Это критически важно в мультитенантных средах, где несколько команд или проектов используют общий кластер. Без квот один \"прожорливый\" проект может исчерпать все ресурсы кластера, что приведёт к сбоям в работе других приложений. С помощью ResourceQuota администратор кластера может гарантировать справедливое распределение и предотвратить \"шумные соседи\".",[14,23,25],{"id":24},"требования-подготовка","Требования / Подготовка",[27,28,29,50,83],"ol",{},[30,31,32,36,37,41,42,45,46,49],"li",{},[33,34,35],"strong",{},"Доступ к кластеру Kubernetes:"," У вас должен быть настроенный ",[38,39,40],"code",{},"kubectl"," с правами на создание ресурсов в целевом namespace (обычно требуются права ",[38,43,44],{},"admin"," или ",[38,47,48],{},"edit",").",[30,51,52,55,56],{},[33,53,54],{},"Существующий namespace:"," Если тестового namespace нет, создайте его:\n",[57,58,63],"pre",{"className":59,"code":60,"language":61,"meta":62,"style":62},"language-bash shiki shiki-themes github-light github-dark","kubectl create namespace test-quota\n","bash","",[38,64,65],{"__ignoreMap":62},[66,67,70,73,77,80],"span",{"class":68,"line":69},"line",1,[66,71,40],{"class":72},"sScJk",[66,74,76],{"class":75},"sZZnC"," create",[66,78,79],{"class":75}," namespace",[66,81,82],{"class":75}," test-quota\n",[30,84,85,88,89,92,93,96,97,100,101,100,104,107],{},[33,86,87],{},"Понимание базовых концепций:"," Знание о запросах (",[38,90,91],{},"requests",") и лимитах (",[38,94,95],{},"limits",") для контейнеров, а также о таких ресурсах, как ",[38,98,99],{},"pods",", ",[38,102,103],{},"services",[38,105,106],{},"persistentvolumeclaims",".",[109,110],"hr",{},[14,112,114],{"id":113},"пошаговая-инструкция","Пошаговая инструкция",[116,117,119],"h3",{"id":118},"шаг-1-определение-политики-квоты","Шаг 1: Определение политики квоты",[19,121,122,123,126,127,130],{},"Прежде чем писать манифест, решите, какие именно ресурсы и в каком объёме нужно ограничить. Типичные параметры для ",[38,124,125],{},"hard"," (жёсткий лимит) в ",[38,128,129],{},"ResourceQuota",":",[132,133,134,144,152,161,168,174,180],"ul",{},[30,135,136,139,140,143],{},[38,137,138],{},"requests.cpu"," — Суммарные ",[33,141,142],{},"запросы"," на CPU для всех подов в namespace.",[30,145,146,139,149,151],{},[38,147,148],{},"requests.memory",[33,150,142],{}," на память.",[30,153,154,139,157,160],{},[38,155,156],{},"limits.cpu",[33,158,159],{},"лимиты"," на CPU.",[30,162,163,139,166,151],{},[38,164,165],{},"limits.memory",[33,167,159],{},[30,169,170,173],{},[38,171,172],{},"count.pods"," — Максимальное количество подов.",[30,175,176,179],{},[38,177,178],{},"count.services"," — Максимальное количество сервисов.",[30,181,182,185],{},[38,183,184],{},"count.persistentvolumeclaims"," — Количество PVC.",[19,187,188,191,192,195],{},[33,189,190],{},"Пример политики:"," Для тестового namespace ",[38,193,194],{},"test-quota"," установим:",[132,197,198,205,211,217,223],{},[30,199,200,201,204],{},"Запросы CPU: 2 ядра (",[38,202,203],{},"2",")",[30,206,207,208,204],{},"Запросы памяти: 4 ГиБ (",[38,209,210],{},"4Gi",[30,212,213,214,204],{},"Лимиты CPU: 4 ядра (",[38,215,216],{},"4",[30,218,219,220,204],{},"Лимиты памяти: 8 ГиБ (",[38,221,222],{},"8Gi",[30,224,225],{},"Количество подов: 10",[116,227,229],{"id":228},"шаг-2-создание-манифеста-resourcequota","Шаг 2: Создание манифеста ResourceQuota",[19,231,232,233,236],{},"Создайте файл ",[38,234,235],{},"quota.yaml"," со следующим содержимым:",[57,238,242],{"className":239,"code":240,"language":241,"meta":62,"style":62},"language-yaml shiki shiki-themes github-light github-dark","apiVersion: v1\nkind: ResourceQuota\nmetadata:\n  name: compute-resources-quota\n  namespace: test-quota  # Укажите ваш namespace\nspec:\n  hard:\n    requests.cpu: \"2\"\n    requests.memory: 4Gi\n    limits.cpu: \"4\"\n    limits.memory: 8Gi\n    count.pods: \"10\"\n    # count.services: \"5\"  # Можно раскомментировать для ограничения сервисов\n    # count.persistentvolumeclaims: \"4\" # Или PVC\n","yaml",[38,243,244,257,268,277,288,302,310,318,329,340,351,362,373,379],{"__ignoreMap":62},[66,245,246,250,254],{"class":68,"line":69},[66,247,249],{"class":248},"s9eBZ","apiVersion",[66,251,253],{"class":252},"sVt8B",": ",[66,255,256],{"class":75},"v1\n",[66,258,260,263,265],{"class":68,"line":259},2,[66,261,262],{"class":248},"kind",[66,264,253],{"class":252},[66,266,267],{"class":75},"ResourceQuota\n",[66,269,271,274],{"class":68,"line":270},3,[66,272,273],{"class":248},"metadata",[66,275,276],{"class":252},":\n",[66,278,280,283,285],{"class":68,"line":279},4,[66,281,282],{"class":248},"  name",[66,284,253],{"class":252},[66,286,287],{"class":75},"compute-resources-quota\n",[66,289,291,294,296,298],{"class":68,"line":290},5,[66,292,293],{"class":248},"  namespace",[66,295,253],{"class":252},[66,297,194],{"class":75},[66,299,301],{"class":300},"sJ8bj","  # Укажите ваш namespace\n",[66,303,305,308],{"class":68,"line":304},6,[66,306,307],{"class":248},"spec",[66,309,276],{"class":252},[66,311,313,316],{"class":68,"line":312},7,[66,314,315],{"class":248},"  hard",[66,317,276],{"class":252},[66,319,321,324,326],{"class":68,"line":320},8,[66,322,323],{"class":248},"    requests.cpu",[66,325,253],{"class":252},[66,327,328],{"class":75},"\"2\"\n",[66,330,332,335,337],{"class":68,"line":331},9,[66,333,334],{"class":248},"    requests.memory",[66,336,253],{"class":252},[66,338,339],{"class":75},"4Gi\n",[66,341,343,346,348],{"class":68,"line":342},10,[66,344,345],{"class":248},"    limits.cpu",[66,347,253],{"class":252},[66,349,350],{"class":75},"\"4\"\n",[66,352,354,357,359],{"class":68,"line":353},11,[66,355,356],{"class":248},"    limits.memory",[66,358,253],{"class":252},[66,360,361],{"class":75},"8Gi\n",[66,363,365,368,370],{"class":68,"line":364},12,[66,366,367],{"class":248},"    count.pods",[66,369,253],{"class":252},[66,371,372],{"class":75},"\"10\"\n",[66,374,376],{"class":68,"line":375},13,[66,377,378],{"class":300},"    # count.services: \"5\"  # Можно раскомментировать для ограничения сервисов\n",[66,380,382],{"class":68,"line":381},14,[66,383,384],{"class":300},"    # count.persistentvolumeclaims: \"4\" # Или PVC\n",[19,386,387],{},[33,388,389],{},"Важно:",[132,391,392,403,429],{},[30,393,394,395,398,399,402],{},"Значения для CPU можно указывать в ",[38,396,397],{},"m"," (миллиядрах, например ",[38,400,401],{},"500m"," = 0.5 ядра) или в целых числах.",[30,404,405,406,100,409,100,412,415,416,100,419,100,422,425,426,107],{},"Значения для памяти используют суффиксы ",[38,407,408],{},"Ki",[38,410,411],{},"Mi",[38,413,414],{},"Gi"," (кратные 1024) или ",[38,417,418],{},"K",[38,420,421],{},"M",[38,423,424],{},"G"," (кратные 1000). Рекомендуется ",[38,427,428],{},"Gi/Mi",[30,430,431,432,435],{},"Поля ",[38,433,434],{},"count.*"," принимают целые числа.",[116,437,439],{"id":438},"шаг-3-применение-квоты-к-namespace","Шаг 3: Применение квоты к namespace",[19,441,442],{},"Примените созданный манифест:",[57,444,446],{"className":59,"code":445,"language":61,"meta":62,"style":62},"kubectl apply -f quota.yaml\n",[38,447,448],{"__ignoreMap":62},[66,449,450,452,455,459],{"class":68,"line":69},[66,451,40],{"class":72},[66,453,454],{"class":75}," apply",[66,456,458],{"class":457},"sj4cs"," -f",[66,460,461],{"class":75}," quota.yaml\n",[19,463,464],{},"Вы должны увидеть подтверждение:",[57,466,471],{"className":467,"code":469,"language":470},[468],"language-text","resourcequota/compute-resources-quota created\n","text",[38,472,469],{"__ignoreMap":62},[116,474,476],{"id":475},"шаг-4-проверка-состояния-квоты","Шаг 4: Проверка состояния квоты",[19,478,479],{},"Чтобы убедиться, что квота активна и посмотреть текущее использование ресурсов, выполните:",[57,481,483],{"className":59,"code":482,"language":61,"meta":62,"style":62},"kubectl describe quota compute-resources-quota -n test-quota\n",[38,484,485],{"__ignoreMap":62},[66,486,487,489,492,495,498,501],{"class":68,"line":69},[66,488,40],{"class":72},[66,490,491],{"class":75}," describe",[66,493,494],{"class":75}," quota",[66,496,497],{"class":75}," compute-resources-quota",[66,499,500],{"class":457}," -n",[66,502,82],{"class":75},[19,504,505,506,509,510,513,514,516,517,520],{},"В выводе вы увидите две таблицы: ",[38,507,508],{},"Hard"," (установленные лимиты) и ",[38,511,512],{},"Used"," (текущее потребление). Пока что ",[38,515,512],{}," будет ",[38,518,519],{},"0 / \u003Cvalue>"," для каждого ресурса.",[57,522,524],{"className":59,"code":523,"language":61,"meta":62,"style":62},"Name:            compute-resources-quota\nNamespace:       test-quota\nResource         Used  Hard\n--------         ----  ----\nlimits.cpu       0     4\nlimits.memory    0     8Gi\nrequests.cpu     0     2\nrequests.memory  0     4Gi\ncount.pods       0     10\n",[38,525,526,534,542,553,564,574,584,594,604],{"__ignoreMap":62},[66,527,528,531],{"class":68,"line":69},[66,529,530],{"class":72},"Name:",[66,532,533],{"class":75},"            compute-resources-quota\n",[66,535,536,539],{"class":68,"line":259},[66,537,538],{"class":72},"Namespace:",[66,540,541],{"class":75},"       test-quota\n",[66,543,544,547,550],{"class":68,"line":270},[66,545,546],{"class":72},"Resource",[66,548,549],{"class":75},"         Used",[66,551,552],{"class":75},"  Hard\n",[66,554,555,558,561],{"class":68,"line":279},[66,556,557],{"class":72},"--------",[66,559,560],{"class":457},"         ----",[66,562,563],{"class":457},"  ----\n",[66,565,566,568,571],{"class":68,"line":290},[66,567,156],{"class":72},[66,569,570],{"class":457},"       0",[66,572,573],{"class":457},"     4\n",[66,575,576,578,581],{"class":68,"line":304},[66,577,165],{"class":72},[66,579,580],{"class":457},"    0",[66,582,583],{"class":75},"     8Gi\n",[66,585,586,588,591],{"class":68,"line":312},[66,587,138],{"class":72},[66,589,590],{"class":457},"     0",[66,592,593],{"class":457},"     2\n",[66,595,596,598,601],{"class":68,"line":320},[66,597,148],{"class":72},[66,599,600],{"class":457},"  0",[66,602,603],{"class":75},"     4Gi\n",[66,605,606,608,610],{"class":68,"line":331},[66,607,172],{"class":72},[66,609,570],{"class":457},[66,611,612],{"class":457},"     10\n",[109,614],{},[616,617],"in-article-ad",{},[116,619,621],{"id":620},"шаг-5-тестирование-работы-квоты","Шаг 5: Тестирование работы квоты",[19,623,624],{},"Теперь попробуйте создать ресурс, который проверит работу квоты. Создайте простой под с явными запросами и лимитами.",[27,626,627,793,817,846],{},[30,628,629,634,783,786,787,100,790,49],{},[33,630,232,631,130],{},[38,632,633],{},"test-pod.yaml",[57,635,637],{"className":239,"code":636,"language":241,"meta":62,"style":62},"apiVersion: v1\nkind: Pod\nmetadata:\n  name: quota-test-pod\n  namespace: test-quota\nspec:\n  containers:\n  - name: nginx\n    image: nginx:latest\n    resources:\n      requests:\n        cpu: \"500m\"   # 0.5 ядра\n        memory: \"1Gi\"\n      limits:\n        cpu: \"1\"      # 1 ядро\n        memory: \"2Gi\"\n",[38,638,639,647,656,662,671,680,686,693,706,716,723,730,743,753,760,773],{"__ignoreMap":62},[66,640,641,643,645],{"class":68,"line":69},[66,642,249],{"class":248},[66,644,253],{"class":252},[66,646,256],{"class":75},[66,648,649,651,653],{"class":68,"line":259},[66,650,262],{"class":248},[66,652,253],{"class":252},[66,654,655],{"class":75},"Pod\n",[66,657,658,660],{"class":68,"line":270},[66,659,273],{"class":248},[66,661,276],{"class":252},[66,663,664,666,668],{"class":68,"line":279},[66,665,282],{"class":248},[66,667,253],{"class":252},[66,669,670],{"class":75},"quota-test-pod\n",[66,672,673,675,677],{"class":68,"line":290},[66,674,293],{"class":248},[66,676,253],{"class":252},[66,678,679],{"class":75},"test-quota\n",[66,681,682,684],{"class":68,"line":304},[66,683,307],{"class":248},[66,685,276],{"class":252},[66,687,688,691],{"class":68,"line":312},[66,689,690],{"class":248},"  containers",[66,692,276],{"class":252},[66,694,695,698,701,703],{"class":68,"line":320},[66,696,697],{"class":252},"  - ",[66,699,700],{"class":248},"name",[66,702,253],{"class":252},[66,704,705],{"class":75},"nginx\n",[66,707,708,711,713],{"class":68,"line":331},[66,709,710],{"class":248},"    image",[66,712,253],{"class":252},[66,714,715],{"class":75},"nginx:latest\n",[66,717,718,721],{"class":68,"line":342},[66,719,720],{"class":248},"    resources",[66,722,276],{"class":252},[66,724,725,728],{"class":68,"line":353},[66,726,727],{"class":248},"      requests",[66,729,276],{"class":252},[66,731,732,735,737,740],{"class":68,"line":364},[66,733,734],{"class":248},"        cpu",[66,736,253],{"class":252},[66,738,739],{"class":75},"\"500m\"",[66,741,742],{"class":300},"   # 0.5 ядра\n",[66,744,745,748,750],{"class":68,"line":375},[66,746,747],{"class":248},"        memory",[66,749,253],{"class":252},[66,751,752],{"class":75},"\"1Gi\"\n",[66,754,755,758],{"class":68,"line":381},[66,756,757],{"class":248},"      limits",[66,759,276],{"class":252},[66,761,763,765,767,770],{"class":68,"line":762},15,[66,764,734],{"class":248},[66,766,253],{"class":252},[66,768,769],{"class":75},"\"1\"",[66,771,772],{"class":300},"      # 1 ядро\n",[66,774,776,778,780],{"class":68,"line":775},16,[66,777,747],{"class":248},[66,779,253],{"class":252},[66,781,782],{"class":75},"\"2Gi\"\n",[784,785],"br",{},"Этот под запрашивает 0.5 CPU и 1Gi памяти, что вписывается в наши лимиты (",[38,788,789],{},"requests.cpu: 2",[38,791,792],{},"requests.memory: 4Gi",[30,794,795,798,814,816],{},[33,796,797],{},"Создайте под:",[57,799,801],{"className":59,"code":800,"language":61,"meta":62,"style":62},"kubectl apply -f test-pod.yaml\n",[38,802,803],{"__ignoreMap":62},[66,804,805,807,809,811],{"class":68,"line":69},[66,806,40],{"class":72},[66,808,454],{"class":75},[66,810,458],{"class":457},[66,812,813],{"class":75}," test-pod.yaml\n",[784,815],{},"Под должен успешно создаться.",[30,818,819,822,840,842,843,845],{},[33,820,821],{},"Проверьте обновлённую квоту:",[57,823,824],{"className":59,"code":482,"language":61,"meta":62,"style":62},[38,825,826],{"__ignoreMap":62},[66,827,828,830,832,834,836,838],{"class":68,"line":69},[66,829,40],{"class":72},[66,831,491],{"class":75},[66,833,494],{"class":75},[66,835,497],{"class":75},[66,837,500],{"class":457},[66,839,82],{"class":75},[784,841],{},"Теперь в колонке ",[38,844,512],{}," появятся значения, соответствующие запросам созданного пода (0.5 CPU, 1Gi памяти).",[30,847,848,851,852,855,856,858,859,862,863,865,866,869,870,876,878],{},[33,849,850],{},"Попробуйте превысить квоту."," Создайте ещё один под, который запросит, например, ",[38,853,854],{},"2Gi"," памяти. После применения второго пода, суммарные ",[38,857,148],{}," станут ",[38,860,861],{},"3Gi",". Попробуйте создать третий под с запросом ",[38,864,854],{}," памяти. Операция ",[33,867,868],{},"провалится"," с ошибкой, похожей на:",[57,871,874],{"className":872,"code":873,"language":470},[468],"Error from server (Forbidden): error when creating \"pod2.yaml\": ... \"exceeded quota: compute-resources-quota, requested: requests.memory=2Gi, used: requests.memory=3Gi, limited: requests.memory=4Gi\"\n",[38,875,873],{"__ignoreMap":62},[784,877],{},"Это доказывает, что квота работает.",[109,880],{},[14,882,884],{"id":883},"проверка-результата","Проверка результата",[27,886,887,899,911],{},[30,888,889,892,893,895,896,898],{},[33,890,891],{},"Основная проверка:"," Вы успешно создали ",[38,894,129],{}," и наблюдаете за ростом поля ",[38,897,512],{}," при создании новых ресурсов (подов, PVC).",[30,900,901,904,905,907,908,107],{},[33,902,903],{},"Проверка на превышение:"," Попытка создать ресурс, который приведёт к превышению любого из ",[38,906,125],{},"-лимитов, завершается с ошибкой ",[38,909,910],{},"exceeded quota",[30,912,913,916,917,920,921,923,924,927],{},[33,914,915],{},"Команда статуса:"," ",[38,918,919],{},"kubectl get quota -n \u003Cnamespace>"," показывает имя квоты и её ",[38,922,508],{}," лимиты. ",[38,925,926],{},"kubectl describe quota"," — детализированное использование.",[14,929,931],{"id":930},"возможные-проблемы","Возможные проблемы",[132,933,934,983,1007,1037],{},[30,935,936,942],{},[33,937,938,939,941],{},"Ошибка ",[38,940,910],{}," при создании подa, который, кажется, вписывается в лимиты.",[132,943,944,971],{},[30,945,946,949,950,955,956,958,959,916,961,965,966,968,969,107],{},[33,947,948],{},"Причина:"," ResourceQuota суммирует ",[33,951,952,953,204],{},"запросы (",[38,954,91],{}," всех подов в namespace. Убедитесь, что сумма ",[38,957,138],{}," и ",[38,960,148],{},[962,963,964],"em",{},"всех существующих подов"," плюс запросы нового пода не превысят ",[38,967,125],{},"-значения. Проверьте текущее использование через ",[38,970,926],{},[30,972,973,976,977,979,980,982],{},[33,974,975],{},"Решение:"," Либо увеличьте значения в ",[38,978,129],{},", либо уменьшите ",[38,981,91],{}," в манифесте нового пода.",[30,984,985,988],{},[33,986,987],{},"Квота не применяется к уже запущенным подам.",[132,989,990,999],{},[30,991,992,994,995,998],{},[33,993,948],{}," Это ожидаемое поведение. ResourceQuota проверяет запросы на создание ",[962,996,997],{},"новых"," объектов. Уже работающие поды не затрагиваются.",[30,1000,1001,1003,1004,1006],{},[33,1002,975],{}," Чтобы включить существующие поды в учёт, необходимо либо вручную удалить и пересоздать их с корректными ",[38,1005,91],{},", либо увеличить квоту до уровня, который покрывает и существующие, и будущие запросы.",[30,1008,1009,1015],{},[33,1010,1011,1012,107],{},"Ошибка при создании ResourceQuota: ",[38,1013,1014],{},"unable to recognize \"...\": no matches for kind \"ResourceQuota\" in version \"v1\"",[132,1016,1017,1025],{},[30,1018,1019,1021,1022,107],{},[33,1020,948],{}," Обычно указывает на устаревший кластер. В очень старых версиях Kubernetes (до 1.8) ResourceQuota мог быть в ",[38,1023,1024],{},"extensions/v1beta1",[30,1026,1027,1029,1030,1033,1034,107],{},[33,1028,975],{}," Обновите кластер или используйте корректную apiVersion (",[38,1031,1032],{},"v1"," для Kubernetes 1.8+). Проверьте версию кластера: ",[38,1035,1036],{},"kubectl version --short",[30,1038,1039,1042],{},[33,1040,1041],{},"Неясно, какой именно ресурс исчерпан.",[132,1043,1044,1054],{},[30,1045,1046,1048,1049,1051,1052,49],{},[33,1047,948],{}," Сообщение об ошибке ",[38,1050,910],{}," обычно содержит имя квоты и конкретный ресурс, который превышен (например, ",[38,1053,148],{},[30,1055,1056,1058,1059,1062,1063,1065,1066,107],{},[33,1057,975],{}," Всегда смотрите на имя квоты в ошибке и проверяйте её описание (",[38,1060,1061],{},"kubectl describe quota \u003Cname>",") для сравнения ",[38,1064,512],{}," vs ",[38,1067,508],{},[1069,1070,1071],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":62,"searchDepth":259,"depth":259,"links":1073},[1074,1075,1076,1083,1084],{"id":16,"depth":259,"text":17},{"id":24,"depth":259,"text":25},{"id":113,"depth":259,"text":114,"children":1077},[1078,1079,1080,1081,1082],{"id":118,"depth":270,"text":119},{"id":228,"depth":270,"text":229},{"id":438,"depth":270,"text":439},{"id":475,"depth":270,"text":476},{"id":620,"depth":270,"text":621},{"id":883,"depth":259,"text":884},{"id":930,"depth":259,"text":931},null,"2026-02-17 14:05:33","Пошаговая инструкция по настройке лимитов ресурсов (CPU, память) для namespace в Kubernetes. Узнайте, как предотвратить исчерпание ресурсов кластера.","medium",false,"15-25 мин","md",[1093,1096,1099,1102],{"question":1094,"answer":1095},"ResourceQuota влияет на уже запущенные поды?","Нет, ResourceQuota применяется только к новым запросам на создание ресурсов (Pod, PVC, Service и т.д.). Существующие поды не будут автоматически удалены или ограничены.",{"question":1097,"answer":1098},"Как проверить текущие квоты namespace?","Используйте команду: `kubectl describe quota -n \u003Cnamespace>`. Она покажет установленные лимиты и текущее использование.",{"question":1100,"answer":1101},"Что происходит, если квота превышена?","Новые запросы на создание ресурсов (например, новый Pod) будут отклоняться API-сервером с ошибкой `exceeded quota`. Существующие ресурсы продолжают работать.",{"question":1103,"answer":1104},"Можно ли установить разные квоты для разных типов ресурсов?","Да, в одном объекте ResourceQuota можно задавать лимиты для requests.cpu, limits.memory, count.of.pods, count.of.services и многих других типов ресурсов одновременно.",[1106,1109,1112,1115,1118],{"name":1107,"text":1108},"Подготовка кластера и namespace","Убедитесь, что у вас есть доступ к кластеру через `kubectl` и создайте тестовый namespace, если его нет.",{"name":1110,"text":1111},"Определение необходимых лимитов","Решите, какие ресурсы (CPU, память, количество объектов) нужно ограничить для namespace. Например: 2 ядра CPU, 4Gi памяти, 10 подов.",{"name":1113,"text":1114},"Создание YAML-манифеста ResourceQuota","Напишите файл `quota.yaml` с определением `ResourceQuota`, указав нужные поля `hard` и (опционально) `scopeSelector`.",{"name":1116,"text":1117},"Применение квоты к namespace","Примените манифест командой `kubectl apply -f quota.yaml -n \u003Cnamespace>`.",{"name":1119,"text":1120},"Проверка применения и тестирование","Попробуйте создать ресурс, который превышает квоту, чтобы убедиться в её работе. Используйте `kubectl describe quota` для просмотра статуса.","PT20M",[1123,1124,1125,1126,1127,1128,1129,1130],"k8s resource quota","ограничение ресурсов kubernetes","как создать resourcequota","kubernetes namespace quota","лимиты cpu memory k8s","ResourceQuota пример","установка квоты kubernetes","контроль ресурсов namespace","ru_RU",{},true,"/guides/linux/k8s-resource-quotas","linux",[1137,1138],"/guides/linux/k8s-limitrange","/guides/linux/k8s-namespace-management","Гайды Kubernetes",{"title":5,"description":1087},"guides/linux/k8s-resource-quotas","В этом гайде вы научитесь создавать и применять ResourceQuota в Kubernetes для ограничения потребления CPU и памяти в namespace. Это предотвратит ситуацию, когда один проект monopolizes ресурсы кластера.",[1144,1145,1146,1147,1148,1149],"kubernetes","k8s","ресурсы","мониторинг","администрирование","quota","guide","ZkO9_g9zCIKb-7DJ5ro3c442tPPkFEO4Zr05wnfa-nQ",{"data":1153,"body":1154},{},{"type":1155,"children":1156},"root",[1157],{"type":1158,"tag":19,"props":1159,"children":1160},"element",{},[1161],{"type":470,"value":1095},{"data":1163,"body":1164},{},{"type":1155,"children":1165},[1166],{"type":1158,"tag":19,"props":1167,"children":1168},{},[1169,1171,1177],{"type":470,"value":1170},"Используйте команду: ",{"type":1158,"tag":38,"props":1172,"children":1174},{"className":1173},[],[1175],{"type":470,"value":1176},"kubectl describe quota -n \u003Cnamespace>",{"type":470,"value":1178},". Она покажет установленные лимиты и текущее использование.",{"data":1180,"body":1181},{},{"type":1155,"children":1182},[1183],{"type":1158,"tag":19,"props":1184,"children":1185},{},[1186,1188,1193],{"type":470,"value":1187},"Новые запросы на создание ресурсов (например, новый Pod) будут отклоняться API-сервером с ошибкой ",{"type":1158,"tag":38,"props":1189,"children":1191},{"className":1190},[],[1192],{"type":470,"value":910},{"type":470,"value":1194},". Существующие ресурсы продолжают работать.",{"data":1196,"body":1197},{},{"type":1155,"children":1198},[1199],{"type":1158,"tag":19,"props":1200,"children":1201},{},[1202],{"type":470,"value":1104},{"data":1204,"body":1205},{},{"type":1155,"children":1206},[1207],{"type":1158,"tag":19,"props":1208,"children":1209},{},[1210,1212,1217],{"type":470,"value":1211},"Убедитесь, что у вас есть доступ к кластеру через ",{"type":1158,"tag":38,"props":1213,"children":1215},{"className":1214},[],[1216],{"type":470,"value":40},{"type":470,"value":1218}," и создайте тестовый namespace, если его нет.",{"data":1220,"body":1221},{},{"type":1155,"children":1222},[1223],{"type":1158,"tag":19,"props":1224,"children":1225},{},[1226],{"type":470,"value":1111},{"data":1228,"body":1229},{},{"type":1155,"children":1230},[1231],{"type":1158,"tag":19,"props":1232,"children":1233},{},[1234,1236,1241,1243,1248,1250,1255,1257,1263],{"type":470,"value":1235},"Напишите файл ",{"type":1158,"tag":38,"props":1237,"children":1239},{"className":1238},[],[1240],{"type":470,"value":235},{"type":470,"value":1242}," с определением ",{"type":1158,"tag":38,"props":1244,"children":1246},{"className":1245},[],[1247],{"type":470,"value":129},{"type":470,"value":1249},", указав нужные поля ",{"type":1158,"tag":38,"props":1251,"children":1253},{"className":1252},[],[1254],{"type":470,"value":125},{"type":470,"value":1256}," и (опционально) ",{"type":1158,"tag":38,"props":1258,"children":1260},{"className":1259},[],[1261],{"type":470,"value":1262},"scopeSelector",{"type":470,"value":107},{"data":1265,"body":1266},{},{"type":1155,"children":1267},[1268],{"type":1158,"tag":19,"props":1269,"children":1270},{},[1271,1273,1279],{"type":470,"value":1272},"Примените манифест командой ",{"type":1158,"tag":38,"props":1274,"children":1276},{"className":1275},[],[1277],{"type":470,"value":1278},"kubectl apply -f quota.yaml -n \u003Cnamespace>",{"type":470,"value":107},{"data":1281,"body":1282},{},{"type":1155,"children":1283},[1284],{"type":1158,"tag":19,"props":1285,"children":1286},{},[1287,1289,1294],{"type":470,"value":1288},"Попробуйте создать ресурс, который превышает квоту, чтобы убедиться в её работе. Используйте ",{"type":1158,"tag":38,"props":1290,"children":1292},{"className":1291},[],[1293],{"type":470,"value":926},{"type":470,"value":1295}," для просмотра статуса.",[1297],{"id":1298,"title":1299,"appliesTo":1300,"author":9,"body":1304,"canonical":1085,"code":1085,"createdAt":2005,"description":2006,"difficulty":1088,"draft":1089,"estimatedTime":2007,"extension":1091,"faq":2008,"howToSteps":2018,"howToTotalTime":2031,"image":1085,"keywords":2032,"locale":1131,"meta":2040,"navigation":1133,"path":1137,"platform":2041,"related":2042,"section":1139,"seo":2046,"severity":1085,"stem":2047,"summary":2048,"tags":2049,"twitterCreator":1085,"twitterSite":1085,"type":1150,"updatedAt":2005,"__hash__":2056},"content_ru/guides/linux/k8s-limitrange.md","Настройка LimitRange в Kubernetes: управление ресурсами подов",[1301,1302,1303],"Kubernetes 1.24+","Minikube / K3s / EKS / GKE","kubectl 1.24+",{"type":11,"value":1305,"toc":1993},[1306,1308,1317,1320,1322,1325,1352,1358,1360,1364,1367,1408,1411,1438,1442,1456,1697,1717,1719,1723,1726,1742,1745,1749,1752,1827,1830,1874,1883,1885,1888,1928,1930,1950,1960,1990],[14,1307,17],{"id":16},[19,1309,1310,1311,1313,1314,1316],{},"В кластерах Kubernetes разработчики часто забывают или намеренно не указывают запросы (",[38,1312,91],{},") и ограничения (",[38,1315,95],{},") для контейнеров. Без чётких границ один «прожорливый» под способен забрать всю доступную оперативную память или процессорное время, вызывая падение соседних сервисов и нестабильность узла.",[19,1318,1319],{},"LimitRange решает эту проблему на уровне пространства имён. Он автоматически назначает значения по умолчанию, блокирует создание ресурсов, выходящих за допустимые рамки, и гарантирует предсказуемое поведение планировщика. Следуя этому гайду, вы настроите политику распределения ресурсов за несколько минут и защитите кластер от случайных перегрузок.",[14,1321,25],{"id":24},[19,1323,1324],{},"Перед началом убедитесь, что у вас есть:",[132,1326,1327,1335,1341,1344],{},[30,1328,1329,1330,45,1332,1334],{},"Доступ к кластеру с правами ",[38,1331,44],{},[38,1333,48],{}," на уровне нужного пространства имён.",[30,1336,1337,1338,1340],{},"Установленный и настроенный ",[38,1339,40],{}," версии 1.24 или выше.",[30,1342,1343],{},"Существующий namespace, в котором планируется применить ограничения.",[30,1345,1346,1347,1349,1350,107],{},"Базовое понимание структуры подов и понятий ",[38,1348,91],{}," / ",[38,1351,95],{},[1353,1354,1355],"blockquote",{},[19,1356,1357],{},"💡 Совет: Если вы работаете в production-окружении, сначала протестируйте конфигурацию в staging-пространстве, чтобы не заблокировать легитимные развертывания.",[14,1359,114],{"id":113},[116,1361,1363],{"id":1362},"шаг-1-проверка-целевого-пространства-имён","Шаг 1: Проверка целевого пространства имён",[19,1365,1366],{},"Сначала убедитесь, что вы работаете в правильном контексте. Выведите список доступных пространств имён и переключитесь на нужное:",[57,1368,1370],{"className":59,"code":1369,"language":61,"meta":62,"style":62},"kubectl get namespaces\nkubectl config set-context --current --namespace=\u003Cyour-namespace>\n",[38,1371,1372,1382],{"__ignoreMap":62},[66,1373,1374,1376,1379],{"class":68,"line":69},[66,1375,40],{"class":72},[66,1377,1378],{"class":75}," get",[66,1380,1381],{"class":75}," namespaces\n",[66,1383,1384,1386,1389,1392,1395,1398,1402,1405],{"class":68,"line":259},[66,1385,40],{"class":72},[66,1387,1388],{"class":75}," config",[66,1390,1391],{"class":75}," set-context",[66,1393,1394],{"class":457}," --current",[66,1396,1397],{"class":457}," --namespace=",[66,1399,1401],{"class":1400},"szBVR","\u003C",[66,1403,1404],{"class":457},"your-namespace",[66,1406,1407],{"class":1400},">\n",[19,1409,1410],{},"Проверьте текущие привязки и убедитесь, что в пространстве ещё нет конфликтующих политик:",[57,1412,1414],{"className":59,"code":1413,"language":61,"meta":62,"style":62},"kubectl get limitrange -n \u003Cyour-namespace>\n",[38,1415,1416],{"__ignoreMap":62},[66,1417,1418,1420,1422,1425,1427,1430,1433,1436],{"class":68,"line":69},[66,1419,40],{"class":72},[66,1421,1378],{"class":75},[66,1423,1424],{"class":75}," limitrange",[66,1426,500],{"class":457},[66,1428,1429],{"class":1400}," \u003C",[66,1431,1432],{"class":75},"your-namespac",[66,1434,1435],{"class":252},"e",[66,1437,1407],{"class":1400},[116,1439,1441],{"id":1440},"шаг-2-создание-манифеста-limitrange","Шаг 2: Создание манифеста LimitRange",[19,1443,1444,1445,1448,1449,1452,1453,1455],{},"Подготовьте файл ",[38,1446,1447],{},"limitrange-dev.yaml",". В примере ниже заданы минимальные, максимальные и дефолтные значения для контейнеров. Обратите внимание на поле ",[38,1450,1451],{},"defaultRequest",": оно применяется только если разработчик не указал ",[38,1454,91],{}," в спецификации контейнера.",[57,1457,1459],{"className":239,"code":1458,"language":241,"meta":62,"style":62},"apiVersion: v1\nkind: LimitRange\nmetadata:\n  name: resource-limits\n  namespace: \u003Cyour-namespace>\nspec:\n  limits:\n    - type: Container\n      # Максимально допустимые значения для одного контейнера\n      max:\n        cpu: \"2\"\n        memory: \"2Gi\"\n      # Минимально допустимые значения\n      min:\n        cpu: \"50m\"\n        memory: \"64Mi\"\n      # Значения по умолчанию, если разработчик не указал limits\n      default:\n        cpu: \"500m\"\n        memory: \"512Mi\"\n      # Значения по умолчанию для requests, если они пропущены\n      defaultRequest:\n        cpu: \"100m\"\n        memory: \"128Mi\"\n    - type: Pod\n      # Суммарные лимиты на все контейнеры внутри одного пода\n      max:\n        cpu: \"4\"\n        memory: \"4Gi\"\n",[38,1460,1461,1469,1478,1484,1493,1502,1508,1515,1528,1533,1540,1548,1556,1561,1568,1577,1586,1592,1600,1610,1620,1626,1634,1644,1654,1665,1671,1678,1687],{"__ignoreMap":62},[66,1462,1463,1465,1467],{"class":68,"line":69},[66,1464,249],{"class":248},[66,1466,253],{"class":252},[66,1468,256],{"class":75},[66,1470,1471,1473,1475],{"class":68,"line":259},[66,1472,262],{"class":248},[66,1474,253],{"class":252},[66,1476,1477],{"class":75},"LimitRange\n",[66,1479,1480,1482],{"class":68,"line":270},[66,1481,273],{"class":248},[66,1483,276],{"class":252},[66,1485,1486,1488,1490],{"class":68,"line":279},[66,1487,282],{"class":248},[66,1489,253],{"class":252},[66,1491,1492],{"class":75},"resource-limits\n",[66,1494,1495,1497,1499],{"class":68,"line":290},[66,1496,293],{"class":248},[66,1498,253],{"class":252},[66,1500,1501],{"class":75},"\u003Cyour-namespace>\n",[66,1503,1504,1506],{"class":68,"line":304},[66,1505,307],{"class":248},[66,1507,276],{"class":252},[66,1509,1510,1513],{"class":68,"line":312},[66,1511,1512],{"class":248},"  limits",[66,1514,276],{"class":252},[66,1516,1517,1520,1523,1525],{"class":68,"line":320},[66,1518,1519],{"class":252},"    - ",[66,1521,1522],{"class":248},"type",[66,1524,253],{"class":252},[66,1526,1527],{"class":75},"Container\n",[66,1529,1530],{"class":68,"line":331},[66,1531,1532],{"class":300},"      # Максимально допустимые значения для одного контейнера\n",[66,1534,1535,1538],{"class":68,"line":342},[66,1536,1537],{"class":248},"      max",[66,1539,276],{"class":252},[66,1541,1542,1544,1546],{"class":68,"line":353},[66,1543,734],{"class":248},[66,1545,253],{"class":252},[66,1547,328],{"class":75},[66,1549,1550,1552,1554],{"class":68,"line":364},[66,1551,747],{"class":248},[66,1553,253],{"class":252},[66,1555,782],{"class":75},[66,1557,1558],{"class":68,"line":375},[66,1559,1560],{"class":300},"      # Минимально допустимые значения\n",[66,1562,1563,1566],{"class":68,"line":381},[66,1564,1565],{"class":248},"      min",[66,1567,276],{"class":252},[66,1569,1570,1572,1574],{"class":68,"line":762},[66,1571,734],{"class":248},[66,1573,253],{"class":252},[66,1575,1576],{"class":75},"\"50m\"\n",[66,1578,1579,1581,1583],{"class":68,"line":775},[66,1580,747],{"class":248},[66,1582,253],{"class":252},[66,1584,1585],{"class":75},"\"64Mi\"\n",[66,1587,1589],{"class":68,"line":1588},17,[66,1590,1591],{"class":300},"      # Значения по умолчанию, если разработчик не указал limits\n",[66,1593,1595,1598],{"class":68,"line":1594},18,[66,1596,1597],{"class":248},"      default",[66,1599,276],{"class":252},[66,1601,1603,1605,1607],{"class":68,"line":1602},19,[66,1604,734],{"class":248},[66,1606,253],{"class":252},[66,1608,1609],{"class":75},"\"500m\"\n",[66,1611,1613,1615,1617],{"class":68,"line":1612},20,[66,1614,747],{"class":248},[66,1616,253],{"class":252},[66,1618,1619],{"class":75},"\"512Mi\"\n",[66,1621,1623],{"class":68,"line":1622},21,[66,1624,1625],{"class":300},"      # Значения по умолчанию для requests, если они пропущены\n",[66,1627,1629,1632],{"class":68,"line":1628},22,[66,1630,1631],{"class":248},"      defaultRequest",[66,1633,276],{"class":252},[66,1635,1637,1639,1641],{"class":68,"line":1636},23,[66,1638,734],{"class":248},[66,1640,253],{"class":252},[66,1642,1643],{"class":75},"\"100m\"\n",[66,1645,1647,1649,1651],{"class":68,"line":1646},24,[66,1648,747],{"class":248},[66,1650,253],{"class":252},[66,1652,1653],{"class":75},"\"128Mi\"\n",[66,1655,1657,1659,1661,1663],{"class":68,"line":1656},25,[66,1658,1519],{"class":252},[66,1660,1522],{"class":248},[66,1662,253],{"class":252},[66,1664,655],{"class":75},[66,1666,1668],{"class":68,"line":1667},26,[66,1669,1670],{"class":300},"      # Суммарные лимиты на все контейнеры внутри одного пода\n",[66,1672,1674,1676],{"class":68,"line":1673},27,[66,1675,1537],{"class":248},[66,1677,276],{"class":252},[66,1679,1681,1683,1685],{"class":68,"line":1680},28,[66,1682,734],{"class":248},[66,1684,253],{"class":252},[66,1686,350],{"class":75},[66,1688,1690,1692,1694],{"class":68,"line":1689},29,[66,1691,747],{"class":248},[66,1693,253],{"class":252},[66,1695,1696],{"class":75},"\"4Gi\"\n",[1353,1698,1699],{},[19,1700,1701,1702,1705,1706,1709,1710,1713,1714,1716],{},"⚠️ Важно: Значения ",[38,1703,1704],{},"default"," всегда должны быть меньше или равны ",[38,1707,1708],{},"max",", а ",[38,1711,1712],{},"min"," — меньше или равны ",[38,1715,1704],{},". Нарушение этого правила приведёт к ошибке валидации при создании ресурса.",[616,1718],{},[116,1720,1722],{"id":1721},"шаг-3-применение-конфигурации-в-кластере","Шаг 3: Применение конфигурации в кластере",[19,1724,1725],{},"Примените манифест к целевому namespace:",[57,1727,1729],{"className":59,"code":1728,"language":61,"meta":62,"style":62},"kubectl apply -f limitrange-dev.yaml\n",[38,1730,1731],{"__ignoreMap":62},[66,1732,1733,1735,1737,1739],{"class":68,"line":69},[66,1734,40],{"class":72},[66,1736,454],{"class":75},[66,1738,458],{"class":457},[66,1740,1741],{"class":75}," limitrange-dev.yaml\n",[19,1743,1744],{},"После успешного применения политика вступает в силу мгновенно. Все новые поды в этом пространстве имён будут проходить проверку на соответствие указанным границам.",[116,1746,1748],{"id":1747},"шаг-4-тестирование-на-реальном-поде","Шаг 4: Тестирование на реальном поде",[19,1750,1751],{},"Проверьте, как LimitRange обрабатывает под без явных лимитов. Создайте тестовый манифест:",[57,1753,1755],{"className":239,"code":1754,"language":241,"meta":62,"style":62},"apiVersion: v1\nkind: Pod\nmetadata:\n  name: test-limitrange\n  namespace: \u003Cyour-namespace>\nspec:\n  containers:\n    - name: nginx\n      image: nginx:latest\n",[38,1756,1757,1765,1773,1779,1788,1796,1802,1808,1818],{"__ignoreMap":62},[66,1758,1759,1761,1763],{"class":68,"line":69},[66,1760,249],{"class":248},[66,1762,253],{"class":252},[66,1764,256],{"class":75},[66,1766,1767,1769,1771],{"class":68,"line":259},[66,1768,262],{"class":248},[66,1770,253],{"class":252},[66,1772,655],{"class":75},[66,1774,1775,1777],{"class":68,"line":270},[66,1776,273],{"class":248},[66,1778,276],{"class":252},[66,1780,1781,1783,1785],{"class":68,"line":279},[66,1782,282],{"class":248},[66,1784,253],{"class":252},[66,1786,1787],{"class":75},"test-limitrange\n",[66,1789,1790,1792,1794],{"class":68,"line":290},[66,1791,293],{"class":248},[66,1793,253],{"class":252},[66,1795,1501],{"class":75},[66,1797,1798,1800],{"class":68,"line":304},[66,1799,307],{"class":248},[66,1801,276],{"class":252},[66,1803,1804,1806],{"class":68,"line":312},[66,1805,690],{"class":248},[66,1807,276],{"class":252},[66,1809,1810,1812,1814,1816],{"class":68,"line":320},[66,1811,1519],{"class":252},[66,1813,700],{"class":248},[66,1815,253],{"class":252},[66,1817,705],{"class":75},[66,1819,1820,1823,1825],{"class":68,"line":331},[66,1821,1822],{"class":248},"      image",[66,1824,253],{"class":252},[66,1826,715],{"class":75},[19,1828,1829],{},"Примените его и изучите спецификацию запущенного контейнера:",[57,1831,1833],{"className":59,"code":1832,"language":61,"meta":62,"style":62},"kubectl apply -f test-pod.yaml\nkubectl get pod test-limitrange -n \u003Cyour-namespace> -o jsonpath='{.spec.containers[0].resources}'\n",[38,1834,1835,1845],{"__ignoreMap":62},[66,1836,1837,1839,1841,1843],{"class":68,"line":69},[66,1838,40],{"class":72},[66,1840,454],{"class":75},[66,1842,458],{"class":457},[66,1844,813],{"class":75},[66,1846,1847,1849,1851,1854,1857,1859,1861,1863,1865,1868,1871],{"class":68,"line":259},[66,1848,40],{"class":72},[66,1850,1378],{"class":75},[66,1852,1853],{"class":75}," pod",[66,1855,1856],{"class":75}," test-limitrange",[66,1858,500],{"class":457},[66,1860,1429],{"class":1400},[66,1862,1432],{"class":75},[66,1864,1435],{"class":252},[66,1866,1867],{"class":1400},">",[66,1869,1870],{"class":457}," -o",[66,1872,1873],{"class":75}," jsonpath='{.spec.containers[0].resources}'\n",[19,1875,1876,1877,958,1880,107],{},"В выводе вы должны увидеть автоматически подставленные ",[38,1878,1879],{},"requests: 100m / 128Mi",[38,1881,1882],{},"limits: 500m / 512Mi",[14,1884,884],{"id":883},[19,1886,1887],{},"Чтобы убедиться, что политика работает корректно, выполните два сценария:",[27,1889,1890,1908],{},[30,1891,1892,1895,1896,1899,1900,1903,1904,1907],{},[33,1893,1894],{},"Проверка подстановки значений по умолчанию:"," как в Шаге 4. Используйте ",[38,1897,1898],{},"kubectl describe pod \u003Cname>"," и обратите внимание на секцию ",[38,1901,1902],{},"Containers -> Limits/Requests",". Если там указаны значения из ",[38,1905,1906],{},"limitrange.yaml",", интеграция успешна.",[30,1909,1910,1913,1914,45,1917,1920,1921,45,1924,1927],{},[33,1911,1912],{},"Проверка блокировки превышения:"," запустите под с ",[38,1915,1916],{},"cpu: \"3\"",[38,1918,1919],{},"memory: \"3Gi\"",". Планировщик должен отклонить создание с ошибкой ",[38,1922,1923],{},"exceeded max cpu",[38,1925,1926],{},"exceeded max memory",". Это подтверждает, что жёсткие границы активны.",[14,1929,931],{"id":930},[19,1931,1932,1938,1939,45,1941,1943,1944,1946,1947,107],{},[33,1933,938,1934,1937],{},[38,1935,1936],{},"forbidden: exceeded quota"," при создании LimitRange","\nЭта ошибка возникает, если заданные вами ",[38,1940,1704],{},[38,1942,1708],{}," превышают свободный лимит ",[38,1945,129],{}," в пространстве имён. Либо уменьшите значения в LimitRange, либо увеличьте квоту через ",[38,1948,1949],{},"kubectl edit resourcequota",[19,1951,1952,1955,1956,1959],{},[33,1953,1954],{},"Под не получает значения по умолчанию","\nLimitRange работает только на этапе создания объекта. Если под уже существовал до применения политики, он останется без изменений. Пересоздайте под (",[38,1957,1958],{},"kubectl delete pod \u003Cname> && kubectl apply -f pod.yaml","), чтобы триггернуть валидацию.",[19,1961,1962,1971,1972,1974,1975,1978,1979,1974,1981,1984,1985,1709,1987,1989],{},[33,1963,1964,1965,1065,1968,204],{},"Конфликт типов ресурсов (",[38,1966,1967],{},"type: Container",[38,1969,1970],{},"type: Pod","\nЕсли вы задаёте ",[38,1973,1708],{}," для ",[38,1976,1977],{},"Pod",", но не указываете ",[38,1980,1708],{},[38,1982,1983],{},"Container",", может возникнуть ситуация, когда один контейнер занимает всё доступное пространство. Всегда определяйте ограничения на уровне ",[38,1986,1983],{},[38,1988,1977],{}," используйте как дополнительный предохранитель для sidecar-архитектур.",[1069,1991,1992],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":62,"searchDepth":259,"depth":259,"links":1994},[1995,1996,1997,2003,2004],{"id":16,"depth":259,"text":17},{"id":24,"depth":259,"text":25},{"id":113,"depth":259,"text":114,"children":1998},[1999,2000,2001,2002],{"id":1362,"depth":270,"text":1363},{"id":1440,"depth":270,"text":1441},{"id":1721,"depth":270,"text":1722},{"id":1747,"depth":270,"text":1748},{"id":883,"depth":259,"text":884},{"id":930,"depth":259,"text":931},"2026-04-07 22:48:56","Пошаговая инструкция по настройке LimitRange в Kubernetes. Ограничьте потребление CPU и памяти для контейнеров и избежите сбоев в кластере.","10-15 мин",[2009,2012,2015],{"question":2010,"answer":2011},"Чем LimitRange отличается от ResourceQuota?","LimitRange задаёт лимиты и значения по умолчанию для каждого отдельного пода или контейнера, тогда как ResourceQuota ограничивает суммарное потребление ресурсов всем пространством имён.",{"question":2013,"answer":2014},"Что будет, если я не укажу requests и limits в манифесте пода?","LimitRange автоматически подставит значения из секции default. Если и они не заданы, планировщик может отклонить под или распределить ресурсы неоптимально.",{"question":2016,"answer":2017},"Как изменить уже применённый LimitRange?","Отредактируйте YAML-файл и выполните `kubectl apply -f limitrange.yaml -n \u003Cnamespace>` или используйте `kubectl edit limitrange \u003Cname> -n \u003Cnamespace>` для прямого изменения в кластере.",[2019,2022,2025,2028],{"name":2020,"text":2021},"Проверьте целевое пространство имён","Убедитесь, что нужное пространство имён существует, и переключите контекст kubectl на него.",{"name":2023,"text":2024},"Создайте манифест LimitRange","Подготовьте YAML-файл с указанием минимальных, максимальных и дефолтных значений для CPU и памяти.",{"name":2026,"text":2027},"Примените конфигурацию в кластере","Используйте команду kubectl apply для активации политики в выбранном namespace.",{"name":2029,"text":2030},"Протестируйте ограничения","Разверните тестовый под без явных лимитов и проверьте, подставились ли значения по умолчанию.","PT15M",[2033,2034,2035,2036,2037,2038,2039],"LimitRange Kubernetes","ограничение ресурсов k8s","kubernetes limitrange пример","как настроить лимиты контейнеров","ResourceQuota vs LimitRange","управление памятью и CPU в k8s","ошибка exceeded limitrange",{},"general",[2043,2044,2045],"/guides/linux/k8s-resourcequota","/guides/linux/k8s-hpa-setup","/guides/general/kubernetes-pod-troubleshooting",{"title":1299,"description":2006},"guides/linux/k8s-limitrange","Узнайте, как задать дефолтные и максимальные лимиты на ресурсы в пространстве имён. После прочтения вы сможете предотвратить исчерпаемость памяти и защитить кластер от аномальных нагрузок.",[2050,2051,2052,2053,2054,2055],"Kubernetes","управление ресурсами","DevOps","YAML","cluster-admin","контейнеры","KTX9cMHZEqyYpQKPecYXw9jn_dNQxR545ZStw23QsXE"]