<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.cless.pro/index.php?action=history&amp;feed=atom&amp;title=Kubernetes._%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Pod_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_Node</id>
	<title>Kubernetes. Распределение Pod между Node - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cless.pro/index.php?action=history&amp;feed=atom&amp;title=Kubernetes._%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Pod_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_Node"/>
	<link rel="alternate" type="text/html" href="https://wiki.cless.pro/index.php?title=Kubernetes._%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Pod_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_Node&amp;action=history"/>
	<updated>2026-10-22T22:05:42Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.36.2</generator>
	<entry>
		<id>https://wiki.cless.pro/index.php?title=Kubernetes._%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Pod_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_Node&amp;diff=1148&amp;oldid=prev</id>
		<title>Cless в 20:02, 24 октября 2022</title>
		<link rel="alternate" type="text/html" href="https://wiki.cless.pro/index.php?title=Kubernetes._%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Pod_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_Node&amp;diff=1148&amp;oldid=prev"/>
		<updated>2022-10-24T20:02:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия 20:02, 24 октября 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l220&quot;&gt;Строка 220:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 220:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      enc           enc-httpd-php-6f7cb667df-kp6sv             1/1     Running   0                9s      172.16.213.168    '''kub-node-1'''     &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      enc           enc-httpd-php-6f7cb667df-kp6sv             1/1     Running   0                9s      172.16.213.168    '''kub-node-1'''     &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      ...&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      ...&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Категория:Kubernetes]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Cless</name></author>
	</entry>
	<entry>
		<id>https://wiki.cless.pro/index.php?title=Kubernetes._%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Pod_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_Node&amp;diff=1147&amp;oldid=prev</id>
		<title>Cless: Новая страница: «= Ссылки = [https://blog.kubecost.com/blog/kubernetes-node-affinity/https://prudnitskiy.pro/post/2021-01-15-k8s-pod-distribution/ https://blog.kubecost.com/...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.cless.pro/index.php?title=Kubernetes._%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_Pod_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_Node&amp;diff=1147&amp;oldid=prev"/>
		<updated>2022-10-24T20:01:55Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «= Ссылки = [https://blog.kubecost.com/blog/kubernetes-node-affinity/https://prudnitskiy.pro/post/2021-01-15-k8s-pod-distribution/ https://blog.kubecost.com/...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Ссылки =&lt;br /&gt;
[https://blog.kubecost.com/blog/kubernetes-node-affinity/https://prudnitskiy.pro/post/2021-01-15-k8s-pod-distribution/ https://blog.kubecost.com/blog/kubernetes-node-affinity/]&lt;br /&gt;
&lt;br /&gt;
[https://blog.kubecost.com/blog/kubernetes-node-affinity/https://prudnitskiy.pro/post/2021-01-15-k8s-pod-distribution/ https://prudnitskiy.pro/post/2021-01-15-k8s-pod-distribution/]&lt;br /&gt;
&lt;br /&gt;
= Входные данные =&lt;br /&gt;
3 ноды:&lt;br /&gt;
&lt;br /&gt;
'''''kub-node-1'''''&lt;br /&gt;
&lt;br /&gt;
'''''kub-node-2'''''&lt;br /&gt;
&lt;br /&gt;
'''''kub-node-3'''''&lt;br /&gt;
&lt;br /&gt;
= Способы управления распределением =&lt;br /&gt;
&lt;br /&gt;
== NodeSelector ==&lt;br /&gt;
Распределение POD по нодам на основании маркировки нод&lt;br /&gt;
&lt;br /&gt;
Маркируем ноды в кластере&lt;br /&gt;
&lt;br /&gt;
Например по типам ЖД&amp;lt;blockquote&amp;gt;--overwrite - перезаписывает label, если label с таким именем уже имеется&amp;lt;/blockquote&amp;gt;&amp;lt;code&amp;gt;kubectl label nodes kub-node-1 --overwrite disk='''ssd'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;kubectl label nodes kub-node-2 --overwrite disk='''ssd'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;kubectl label nodes kub-node-3 --overwrite disk='''hdd'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Деплоим приложение, указывая по нодам с какими метками распределять поды: &amp;quot;nodeSelector: disk: ssd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano deployment_nodeSelector.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: enc-httpd-php&lt;br /&gt;
   namespace: enc&lt;br /&gt;
   labels:&lt;br /&gt;
     app: enc-httpd-php&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 3&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: enc-httpd-php&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         app: enc-httpd-php&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
       - name: enc-httpd-php&lt;br /&gt;
         image: registry.domain123.ru:5000/centos7-apache24-php54:v1.0&lt;br /&gt;
         ports:&lt;br /&gt;
         - containerPort: 80&lt;br /&gt;
       imagePullSecrets:&lt;br /&gt;
         - name: registry.domain123.ru.5000&lt;br /&gt;
       '''nodeSelector:&lt;br /&gt;
         disk: ssd'''&lt;br /&gt;
&amp;lt;code&amp;gt;kubectl apply -f deployment_nodeSelector.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Видим что поды распределены только по нодам с меткой &amp;quot;ssd&amp;quot;, на ноде с меткой &amp;quot;hdd&amp;quot; под не будет деплоиться&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;kubectl get pods -o wide -n enc&amp;lt;/code&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
     NAME                             READY   STATUS    RESTARTS   AGE   IP               NODE         NOMINATED NODE   READINESS GATES&lt;br /&gt;
     enc-httpd-php-65b5b9b48f-2r9ff   1/1     Running   0          13h   172.16.213.73    kub-node-2   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
     enc-httpd-php-65b5b9b48f-59g6c   1/1     Running   0          13h   172.16.213.159   kub-node-1   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
     enc-httpd-php-65b5b9b48f-r5m5n   1/1     Running   0          13h   172.16.213.160   kub-node-1   &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
&lt;br /&gt;
== NodeAffinity ==&lt;br /&gt;
Более гибкий и универсальный способ распределения&lt;br /&gt;
&lt;br /&gt;
=== Особенности ===&lt;br /&gt;
&lt;br /&gt;
* Логические операторы для выбора условия размещения – IN (размещать на одной из нод с разными метками) или AND (размещать на нодах, имеющих обе метки сразу)&lt;br /&gt;
* Можно выбрать политики размещения pod-ов относительно друг друга: например – запретить экземплярам кэша оказываться на одной физической машине или требовать размещение приложения вместе с экземпляром кеша на одном физическом узле&lt;br /&gt;
&lt;br /&gt;
=== Общий принцип ===&lt;br /&gt;
 ...&lt;br /&gt;
 spec:&lt;br /&gt;
   affinity:&lt;br /&gt;
     nodeAffinity:&lt;br /&gt;
       '''{affinityClass}''':&lt;br /&gt;
         nodeSelectorTerms:&lt;br /&gt;
         - matchExpressions:&lt;br /&gt;
           - key: '''{affinityKey}'''&lt;br /&gt;
             operator: '''{affinityOperator}'''&lt;br /&gt;
             values:&lt;br /&gt;
             - '''{affinityValues}'''&lt;br /&gt;
 ...&lt;br /&gt;
- '''affinityClass''' влияет на строгость выбора узла:&lt;br /&gt;
&lt;br /&gt;
   - '''requiredDuringSchedulingIgnoredDuringExecution''': обязательно размещать pod-ы по требованию nodeAffinity. Если разместить не получится – pod застрянет в статусе Pending&lt;br /&gt;
&lt;br /&gt;
   - '''preferredDuringSchedulingIgnoredDuringExecution''': по возможности размещать pod-ы по требованиям affinity. Если поды не влезли – scheduler разместит их &amp;quot;как получится&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- '''affinityKey''' – это метка (ключ), по которой мы будем искать ноды для размещения pod-ов.&lt;br /&gt;
&lt;br /&gt;
- '''affinityValues''' – это значения метки, которые нам подойдут&lt;br /&gt;
&lt;br /&gt;
- '''affinityOperator''' – это тот логический оператор, по которому будет производится выбор метки.&lt;br /&gt;
&lt;br /&gt;
   Варианты:&lt;br /&gt;
&lt;br /&gt;
       '''In''' – подойдет любое из перечисленных значений&lt;br /&gt;
&lt;br /&gt;
       '''NotIn''' – противоположно In&lt;br /&gt;
&lt;br /&gt;
       '''Exists''' – метка просто есть (values игнорируется)&lt;br /&gt;
&lt;br /&gt;
       '''DoesNotExists''' – противоположно Exists&lt;br /&gt;
&lt;br /&gt;
       '''Gt''' – Greater than – значение метки больше указанного в политике числа. Сработает только для чисел&lt;br /&gt;
&lt;br /&gt;
       '''Lt''' – Less than – противоположно Gt&lt;br /&gt;
&lt;br /&gt;
=== Настройка ===&lt;br /&gt;
Маркируем ноды в кластере&lt;br /&gt;
&lt;br /&gt;
Например по типам ЖД&amp;lt;blockquote&amp;gt;--overwrite - перезаписывает label, если label с таким именем уже имеется&amp;lt;/blockquote&amp;gt;&amp;lt;code&amp;gt;kubectl label nodes kub-node-1 --overwrite disk='''ssd'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;kubectl label nodes kub-node-2 --overwrite disk='''hdd'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;kubectl label nodes kub-node-3 --overwrite disk='''streamer'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Деплоим приложение, указывая по нодам с какими метками распределять поды (используя &amp;quot;'''requiredDuringSchedulingIgnoredDuringExecution'''&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano deployment_nodeAffinity.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: enc-httpd-php&lt;br /&gt;
   namespace: enc&lt;br /&gt;
   labels:&lt;br /&gt;
     app: enc-httpd-php&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 3&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: enc-httpd-php&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         app: enc-httpd-php&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
       - name: enc-httpd-php&lt;br /&gt;
         image: registry.domain123.ru:5000/centos7-apache24-php54:v1.0&lt;br /&gt;
         ports:&lt;br /&gt;
         - containerPort: 80&lt;br /&gt;
       imagePullSecrets:&lt;br /&gt;
         - name: registry.domain123.ru.5000&lt;br /&gt;
       affinity:&lt;br /&gt;
         nodeAffinity:&lt;br /&gt;
           requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
             nodeSelectorTerms:&lt;br /&gt;
             - matchExpressions:&lt;br /&gt;
               - key: '''disk'''&lt;br /&gt;
                 operator: '''In'''&lt;br /&gt;
                 values:&lt;br /&gt;
                 - '''ssd'''&lt;br /&gt;
                 - '''hdd'''&lt;br /&gt;
Применяем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;kubectl apply -f deployment_nodeAffinity.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смотрим&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;kubectl get pods -o wide --all-namespaces&amp;lt;/code&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
     NAMESPACE     NAME                                       READY   STATUS    RESTARTS         AGE     IP                NODE           NOMINATED NODE   READINESS GATES&lt;br /&gt;
     enc           enc-httpd-php-77f449d9dc-2pxn9             1/1     Running   0                11m     172.16.213.165    '''kub-node-1'''     &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
     enc           enc-httpd-php-77f449d9dc-ggfds             1/1     Running   0                11m     172.16.213.76     '''kub-node-2'''     &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
     enc           enc-httpd-php-77f449d9dc-wqnz8             1/1     Running   0                11m     172.16.213.166    '''kub-node-1'''     &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
Деплоим приложение, указывая по нодам с какими метками распределять поды (используя &amp;quot;'''preferredDuringSchedulingIgnoredDuringExecution'''&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nano deployment_nodeAffinity.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: enc-httpd-php&lt;br /&gt;
   namespace: enc&lt;br /&gt;
   labels:&lt;br /&gt;
     app: enc-httpd-php&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 3&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: enc-httpd-php&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         app: enc-httpd-php&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
       - name: enc-httpd-php&lt;br /&gt;
         image: registry.domain123.ru:5000/centos7-apache24-php54:v1.0&lt;br /&gt;
         ports:&lt;br /&gt;
         - containerPort: 80&lt;br /&gt;
       imagePullSecrets:&lt;br /&gt;
         - name: registry.domain123.ru.5000&lt;br /&gt;
       affinity:&lt;br /&gt;
         nodeAffinity:&lt;br /&gt;
           preferredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
           - weight: 1&lt;br /&gt;
             preference:&lt;br /&gt;
               matchExpressions:&lt;br /&gt;
               - key: '''disk'''&lt;br /&gt;
                 operator: '''In'''&lt;br /&gt;
                 values:&lt;br /&gt;
                 - '''ssd'''&lt;br /&gt;
                 - '''streamer'''&lt;br /&gt;
&amp;lt;code&amp;gt;kubectl apply -f deployment_nodeAffinity.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;kubectl get pods -o wide --all-namespaces&amp;lt;/code&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
     NAMESPACE     NAME                                       READY   STATUS    RESTARTS         AGE     IP                NODE           NOMINATED NODE   READINESS GATES&lt;br /&gt;
     enc           enc-httpd-php-6f7cb667df-9ct6z             1/1     Running   0                9s      172.16.213.167    '''kub-node-1'''     &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
     enc           enc-httpd-php-6f7cb667df-hf878             1/1     Running   0                9s      172.16.213.202    '''kub-node-3'''     &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
     enc           enc-httpd-php-6f7cb667df-kp6sv             1/1     Running   0                9s      172.16.213.168    '''kub-node-1'''     &amp;lt;none&amp;gt;           &amp;lt;none&amp;gt;&lt;br /&gt;
     ...&lt;/div&gt;</summary>
		<author><name>Cless</name></author>
	</entry>
</feed>