- Kube-планировщик : เป็น Процесс หลัก ใน การ ทำ เรื่อง Расписание โดย มี หลัก การ ทำ งาน 2 ขั้นตอน คือ
Фильтрация
คือ Узлы фильтра ที่ ไม่ เหมาะสม ออก ไป และЗабил
เป็น การ ให้ คะแนน Узел ที่ ผ่าน การ การ การ การ หา หา ที่ ้ เหมาะสม กับ pod มาก ที่ สุด - Предикаты и приоритеты : เป็น Политика расписания ตัว Устойчивые ของ Kubernetes
- Удлинительные точки и плагины : เป็น Политика расписания ตัว ใหม่ ของ Kubernetes ที่ เพิ่ง เป็น Beta ใน v1.18
- Спецификация стручка : เรา สามารถ กำหนด ความ สามารถ พิเศษ และ ความ ต้องการ ของ สามารถ พิเศษ และ ความ ต้องการ ของ Pod ใน Спецификация POD เพื่อ ชี้ นำ การ Расписание POD ไป ยัง Узел ที่ เหมาะสม ของ Kubernetes ได้
- Указание удовольствия : เป็น การ ระบุ hostname ของ Узел ที่ เรา ต้องการ ให้ POD ไป อยู้
- Указание Nodeselector : เป็น การ ระบุ Этикетки ของ Узел ที่ POD ต้องการ ให้ Планировщик ส่ง POD ไป Run
- Правила аффинности подвода : เป็น การ ระบุ ให้ POD ชุด หนึ่ง อยู่ ใน Расположение เดียว กับ
- Узел аффинности правил : เหมือน Nodeselector แต่ เพิ่ม ความ ยืดหยุ่น ของ аффинность เข้า มา
- Taints : เป็น การ ระบุ ข้อ จำกัด ของ ของ ของ เช่น เช่น เฉพาะ กลุ่ม หรือ มี оборудование พิเศษ ติดตั้ง อยู่
- Терпение : เป็น การ ระบุ ความ ทนทาน ต่อ Taints ของ Pods โดย ถ้า POD มี Толерация ต่อ Taints ของ Узел จะ สามารถ ถูก Расписание ไป Запустить ใน Узел นั้น ได้.
- Пользовательский планировщик : ถ้า планировщик ที่ เป็น по умолчанию ไม่ ถูกใจ เรา สามารถ запустить ตัว планировщик นี้ ขึ้น ขึ้น มา ตัว โดย ที่ ที่ ขึ้น ตาม ตาม ความ ต้องการ เรา เพื่อ เป็น вторичный планировщик ได้ หรือ เขียน ใหม่ เอง หมด ก็ ยัง ได้ แต่ ใน ใน ใน ต้อง ต้อง ระบุ имя планировщика ที่ ต้องการ ต้องการ ต้องการ ใช้ ด้วย ไม่ งั้น จะ จะ ใช้ планировщик по умолчанию
Kube-планировщик
ทำ หน้าที่ ใน การ หา หา Узел рабочего ที่ เหมาะสม ให้ POD ไป Run โดย ใช้ Algorithm ที่ ชื่อ ว่า «Осознание топологии» ผู้ ใช้ สามารถ ตั้ง Приоритет ของ POD ได้ โดย POD ไหน มี Приоритет มาก กว่า จะ สามารถ แซงคิว POD ที่ มี Приоритет น้อย กว่า ใน การ Планирование ที่ มี
ใน การ Расписание POD ไป Run นั้น Kube-планировщик
จะ ทำ 2 шага คือ.
- Фильтрация : ทำ การ Фильтр ให้ เหลือ แค่ Узел คุณสมบัติ ที่ เหมาะสม กับ POD
- Забил : ทำ ให้ คิด คะแนน (Рейтинг) ด้วย Algorithm ต่าง ๆ เพือ หา Узел ที่ เหมาะสม ที่ สุด ที่ จะ นำ POD ไป бегать
ซึ่ง Политика расписания ที่ เลือก ใช้ ได้ มี 2 แบบ
- Предикаты และ Приоритеты : Предикаты เป็น การ Фильтрация โดย พิจารณา สถานะ และ พฤติกรรม ส่วน Приоритет เป็น การ ใช้ Функция มา คำนวณ คะแนน เพื่อ หา Узел ที่ เหมาะสม ที่ สุด
- Усилительные точки และ Плагины : เป็น การ ใช้ Профиль ที่ เกิด จาก การ นำ Состояние หรือ เป็น มา การ เรียน ว่า «Усилительные точки» มา รวม กัน เช่น
Queuesort
,Фильтр
,Оценка
,Bind
,Резерв
,Разрешить
, เป็น ต้น มา รวม กัน เพื่อ หา หา หา ที่ ที่ ที่ สุด
เรา สามารถ ชี้ นำ การ ตัดสินใจ ของ Kube-планировщик
ได้ ด้วย การ ระบุคุณสมบัติ พิเศษ พิเศษ ( Этикетки
) หรือ ข้ออ จำกัด ( Taints
) ให้ กับ узлы หรือ pods ที่ มี อยู่ ก่อน และ ระบุ ระบุ สามารถ ที่ สอดคล้องกัน ให้ กับ กับ ที่ ที่ ที่ สอดคล้องกัน ให้ กับ กับ กับ ที่ ที่ เรา จะ расписание โดย ตัวอย่าง การ ชี้น ของ планировщик по умолчанию มี ดัง นี้
аффинность
: ระบุ ว่า Pods นี้ ต้อง Run ใน Узел ที Pods ที่ มี Этикетки นี้ Run อยู่ ก่อน แล้วАнтифнология
: ระบุ ว่า Pods นี้ Run ใน Узел ที ไม่ มี Pods ที่ มี Этикетки นี้ Run อยู่Taint
: เป็น ข้อ จำกัด ของ узлы ที่ เรา ระบุ เข้า ไป ไปТолерация
: เป็น Недвижимость ของ POD ที่ ทน ต่อ Taints ที่ Узел มี ได้ (ทน ได้ ก็ คือ Расписание PODS ไป Run ได้)
นอก จาก นี้ เรา ยัง สามารถ เขียน программа ของ ของ เรา เรา มา มา เป็น เป็น เป็น пользовательский планировщик ใน Kubernetes Cluster ก็
ราย ละเอียด เพิ่มเติม ดู ได้ ใน หัวข้อ ด้าน ล่าง เลย 😁 😁 😁 😁 😁
Предикаты (Поднесено в V1.18)
เป็น ชุด ของ filter ที่ ใช้ ใน การ ตรวจสอบ ความ พร้อม ของ ของ โดย ถ้า ถ้า ความ พร้อม ของ ของ ของ ถ้า ถ้า ถ้า ถ้า ถ้า ไหน ไหน ไหน ถ้า ถ้า ผ่าน ก็ จะ ถูก filter ทิ้ง ไป โดย Список ของ предикаты มี ดัง นี้
- CheckNodeConditredPred
- CheckNodeunschedulablePred
- Генерал
- HostnamePred
- Подфитшостпортно
- MatchNodeselpred
- Подфитрсурспрессия
- Odiskconflictpred
- Подтолератноделирование
- ПодтолератеноДеноденоекэктуация
- Checknodelabelpresencepred
- CheckserviceAFhinityPred
- Maxebsvolumecountpred
- Maxgcepdvolumecountpred
- Maxcsivolumecoundpred
- Maxazurediskvolumecountpred
- Maxcindervolumecountpred
- CheckVolumebindingPred
- NovolumeZoneConFlictpred
- ChecknodeMemoryPrepressred
- CheckNoDePIdressurepred
- CheckNodedEncePruredred
- Даже
- MatchinterPodaffinityPred
Приоритеты (Поднесено в V1.18)
เป็น การ จัด ลำดับ ความ สำคัญ ของ Resources ถ้า POD และ Узел Affinity ไม่ ได้ Настройка ไว้ ว่า เป็น
SelectorSpreadPriority
(จัด ลำดับ ตาม จำนวน Pods ที่ Run อยู่ ใน Узел)Kube-планировщик
จะ เลือก Узел ที่ มี จำนวน POD ถูก Расписание ไป น้อย ที่ สุด Список ของ Приоритеты มี ดัง นี้- Равноправность
- MOSTREQUEDPRIORIONITY
- Запрос одобрения
- SelectorSPreadPriority.
- ServicesPreadingPriority.
- Интерподафсинтуальность
- Как минимум
- BalancedResourceallocation
- NodePreferavoidPodsPriority.
- Приоритет Nodeafity
- TaintTolerationPriority.
- ImagelocaltyPriority.
- ResourceLimitsPriority.
- Dearpodsspreadpriority.
Планирование политики
เรา สามารถ Пользовательские предикаты และ Приоритеты เพื่อ สร้าง เป็น Пользовательский планировщик ได้ โดย สร้าง Файл ดัง นี้
และ Запуск планировщика ขึ้น มา อีก ตัว โดย แก้ опция
--Policy-Config-файл = <Файл>
,--use-Legacy-Policy-Config = True
และ- scheduler-name = <Имя>
จาก นั้น запустить POD โดย ระบุ имя планировщика ดัง นี้
เป็น Функция ใหม่ ใน v1.18 เลย แต่ ยัง เป็น Beta อยู่
เป็น Профиль планирования ที่ เกิด จาก การ รวม Усилительные точки เข้า ด้วย กัน เรา สามารถ ระบุ Профиль ด้วย การ เพิ่ม опция ให้ Kube-планировщик
ดัง นี้ Kube-Scheduler --config <имя файла>
สามารถ ระ บุหลาย Профиль และ ให้ Pods เรียก ใช้ โดย การ บ้างอิง Название планировщика ใน Спецификация POD
- Точки расширения
Queuesort
: เป็น การ Сортировать стручки ที่ อยู่ ใน очередь планированияПрефильтр
: เป็น การ Предварительный процесс หรือ Проверьте pod และ кластер ก่อน ทำ การ фильтрФильтрация
: เหมือน предикаты เป็น การ фильтр เอา узлы ที่ มี คุณสมบัติ ไม่ ผ่าน ออก ไป ไปPrescore
: เป็น การ ทำ предварительно оценкаОценка
: ให้ คะแนน แต่ละ Узел และ เลือก Узел ที่ มี คะแนน มาก ที่ สุดРезерв
: เป็น этап ที่ Уведомить плагин ว่า Ресурс กำลัง ถูก Reserve ให้ กับ PODРазрешить
: สามารถ ป้องกัน (предотвращение) หรือ น่วง เวลา (задержка) การ Привязка POD ไป ยัง УзелПребингинд
: ทำ งาน ต่าง ๆ ๆ ๆ ก่อน ที่ จะ связывание PODBind
: ทำ การ Привязка POD ไป ยัง Узел ที่ Резервный ресурс ไว้.Postbind
: เป็น Этап หลัง หลัง Bind Pod ไป ยัง Узел เรียบร้อยНерассудят
: เป็น Этап ที่ POD ถูก Отклонить หลัง จาก ทำ การ Резервное копирование ресурсов ไม่ สำเร็จ POD จะ กลับ ไป อยู่ ЭтапРазрешить
อีก ครั้ง.
- Планирование плагинов
- Включить โดย по умолчанию
DefaultTopogySPread
(Prescore, Оценка): กระจาย PODS ไป ยัง Узел ตาม Услуги, реплизет และ Установка состояния ของ มันImageLocality
(Оценка): กระจาย posd ไม่ ยัง Узел ที่ มี Изображение ของ POD นั้น อยู่ แล้วTaintTolation
(Filter, Prescore, Оценка): กระจาย ตาม หลัก Taint и TainworyNodeName
(Фильтр): แจก POD ไป ยัง Узел ที มี Название узла ตรง กับ ที่ ระบุ ไว้ ใน Спецификация PODNodePorts
(Prefilter, Filter): แจก POD ไป ยัง Узел ที่ มี Port ที่ ต้องการ ใช้ ว่าง อยู้NodePreferavoidPods
(Оценка): ให้ คะแนน Узел ตาม Аннотацияstrulener.alpha.kubernetes.io/preferavoidPods.
Ideaffinity
(Фильтр, оценка): แจก POD ตามNodeselector
иideaffinity.
ПодтопологическийИслой
(Фильтр, прескор, оценка): แจก POD ตาม POD топологияNodeunschedulable
(Фильтр): Узел фильтра ที่ มี.spec.unschedulable = True
ออก ไป.Noderesourcesfit
(Prefilter, Filter): Узел фильтра ที่ มี Ресурс ไม่ พอ ตาม ที่ POD Project ออก ไปNoderesourcesballangedSlocation
(Оценка): เลือก Узел ที่ ถ้า Расписание POD ไป จะ ทำ ให้ Ресурс ใน แต่ละ Узел ใน Баланс кластера ขึ้นNoderesourcesLeastallocated
(Оценка): เลือก Узел ที่ มี Ресурс เหลือ เยอะ ที่ สุดОбъемБиндинг
(Фильтр): เลือก Узел ที่ มี Volume ที่ POD ต้องการ Привязка อยู่Воломмерики
(Фильтр): เลือก Узел ที่ มี Объем ที่ POD ต้องการ Привязка อยู่ และ POD มี สิทธิ์ ใช้Томзон
(Фильтр): เลือก Узел ที่ มี Объем ที่ อยู่ ใน Зона ที่ POD ต้องการNODEVOLUMELIMITS
(Фильтр): เลือก узел ที่ удовлетворять ограничения объема CSIEBSlimits
(Фильтр): เลือก Узел ที่ удовлетворять тому AWS EBS пределыGCEPDLICTLITS
(Фильтр): เลือก Узел ที่ Удовлетворяйте ограничения объема GCP-PDAzudedisklimits
(Фильтр): เลือก Узел ที่ Удовлетворяйте пределы объема диска AzureИнтерподавление
(Prefilter, Filter, Prescore, Оценка): แจก POD ตาม Межпод-Сродская аффинность и анти-аффинностьПриоритетсорщик
(Квинсухорт): เลือก Узел ตาม Приоритетная сортировка на основе แบบ по умолчаниюDefaultBinder
(Привязка): เลือก Узел ตาม Механизм привязки แบบ по умолчанию
- ต้อง Руководство Включить เอง ผ่าน API
NoderesourcesStallocated
(Оценка): เลือก Узел ที่ มี Ресурс เหลือ น้อย ที่ สุดЗапросtocapacityRatio
(Оценка): เลือก Узел ตาม Функция ของ Ресурс ที่ выделитьNoderesourcelimits
(Пресскор, Оценка): เลือก Узел ที่ มี Ресурс พอ ตาม ที่ POD запросCindervolume
(Фильтр): เลือก Узел ที่ удовлетворять ограничения объема OpenStack CinderNodelabel
(Фильтр, оценка): фильтр และ ให้ คะแนน Узел ตาม Этикетки ที่ Настройка ไว้.СЕРВИСИЧНОСТЬ
(Prefilter, Filter, Score): กระจาย PODS ที่ อยู่ ใน Сервис เดียว กัน ไป ยัง แต่ละ Узел ไม่ ซ้ำ กัน
- Включить โดย по умолчанию
ใน การ Расписание POD ไป Run ใน Узел ที่ เหมาะสมนอก จาก ความ พร้อม ของ Узел แล้ว อีก ปัจจัย ที่ สำคัญ คือ Спецификация POD โดย параметр ที่ มี ผล ต่อ การ расписание เช่น
NodeName
: ใช้ ระบุ ชื่อ Узел ที่ ต้องการ ให้ Планировщик นำ POD ไป бегатьNodeselector
: ใช้ ระบุ метка ของ узлы ที่ เหมาะสม กับ POD ตัว นั้น ๆаффинность
: มี ทั้ง аффинность ซึ่ง บอก ว่า POD นี้ ต้อง อยู่ ร่วม กับ POD ใด และ Anti-Affinity คือ ไม่ อยู่ ร่วม กับ POD ใดРасписание пользователя
: ระบุ ชื่อ ของ планировщик ที่ ใช้ ใน การ расписание POD ถ้า ไม่ ระบุ ระบุ ใช้ планировщик по умолчаниютерпение
: บอก ว่า POD นี้ ทน ต่อ ข้อ จำกัด (Taints) อะไร ของ Узел ได้ บ้าง
เป็น การ ระบุ ที่ ง่าย ที่ สุด ที่ ไม่ แนะนำ ซึ่ง มา ด้วย ข้อ จำกัด หลาย อย่าง เช่น เช่น
- ถ้า Название узла ที่ เรา ระบุ ไป ไม่ มี อยู่ จริง pod ก็ จะ ไม่ ถูก запустить
- ถ้า Имя узла ที่ เรา ระบุ ไว้ มี Ресурс ไม่ เพียงพอ POD ก็ จะ ไม่ ถูก Run เช่น กัน
- ใน облачная среда เรา ไม่ สามารถ คาดเดา имя узла ได้ ทำ ให้ เรา ต้อง แก้ไข configure ของ เรา ทุก ครั้ง ที่ ย้าย кластер หรือ Узел ที่ เรา ระบุ ตาย ไป ไป
ตัวอย่าง ของ Спецификация POD ที่ ใช้ odname.
$ kubectl get nodes NAME STATUS ROLES AGE VERSION kube-0001.novalocal Ready master 88d v1.17.1 kube-0002.novalocal Ready88d v1.17.1 kube-0003.novalocal Ready 88d v1.17.1 $ cat > nodename.yaml << EOF apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeName: kube-0003.novalocal EOF $ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 3m 192.168.32.60 kube-0003.novalocal
เป็น การ ระบุ ที่ ง่าย ที่ สุด ที่ แนะนำ เนื่อง จาก เรา สามารถ สร้าง наклеивает เดียว กัน ที่ หลาย Узел ทำ ให้ ถ้า Узел ก ใด Узел หนึ่ง ตาย ไป หรือ ไม่ พร้อม ด้วย สาเหตุ ใด ก็ ตาม ก็ มี มี อื่น ให้ Расписание ไป
โดย เรา ต้อง ทำ การ การ NoDe ก่อน ดัง นี้ นี้
$ kubectl label nodes kube-0003.novalocal disktype=ssd
จาก นั้น Создать POD ด้วย Спецификация ดัง นี้
$ kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS kube-0001.novalocal Ready master 88d v1.17.1 (...),node-role.kubernetes.io/master= kube-0002.novalocal Ready88d v1.17.1 (...) kube-0003.novalocal Ready 88d v1.17.1 (...) $ kubectl label nodes kube-0003.novalocal disktype=ssd node/kube-0003.novalocal labeled $ kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS kube-0001.novalocal Ready master 88d v1.17.1 (...),node-role.kubernetes.io/master= kube-0002.novalocal Ready 88d v1.17.1 (...) kube-0003.novalocal Ready 88d v1.17.1 (...),disktype=ssd,(...) $ cat > nodeselector.yaml << EOF apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent nodeSelector: disktype: ssd EOF $ kubectl create -f nodeselector pod/nginx created $ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 19s 192.168.32.61 kube-0003.novalocal
โดย POD จะ ถูก Расписание ไป ยัง Узел ที่ มี ทุก метка ที่ เรา กำหนด ไว้ ใน Спецификация POD ถ้า หา ไม่ มี Узел ไหน ตรง กับ Спецификация POD นั้น จะ มี สถานะ เป็น В ожидании
เรา สามารถ ใช้ ideaffinity แทน nodeselector ก็ ได้
Узел ใน Kubernetes Cluster โดย ปกติ จะ มี Встроенные этикетки ที่ เรา นำ มา ใช้ ได้ โดย ที่ เรา ไม่ ต้อง กำหนด เอง แก่ แก่ แก่ แก่ แก่ แก่
kubernetes.io/hostname
failure-domain.beta.kubernetes.io/zone
failure-domain.beta.kubernetes.io/region
topology.kubernetes.io/zone
topology.kubernetes.io/region
beta.kubernetes.io/instance-type
node.kubernetes.io/instance-type
kubernetes.io/os
kubernetes.io/arch
Сходство POD เป็น การ Расписание POD ตาม POD ที่ มี อยู่ ก่อน หน้า เนื่อง จาก จาก จาก อยู่ ก่อน หน้า เนื่อง จาก จาก จาก ต้อง เข้า เข้า ตรวจสอบ ทุก ทุก ทุก ดัง ใน ใน ใน ทุก ใหญ่ ที่ มี ใน หลัก หลัก ร้อย узлы การ ใช้ วิธี นี้ จะ มี ผล ต่อ производительность ของ кластер
โดย Правила аффинности มี 2 แบบ คือ.
Аффинность
คือ PODS เหล่า นี้ ต้อง อยู่ ใน Местоположение เดียว กัน (совместное место) มัก จะ เป็น POD ที่ Соблюдайте данные กัน เป็น จำนวน มากАнти-аффинность
คือ Pods เหล่า นี้ ต้อง อยู่ คน ละ Местоположение กัน เหมาะ กับ Pods ที่ ต้องการ Допуск неисправностей
Операции ที่ สามารถ ใช้ ใน การ ระบุ Этикетки เช่น
В
: เลือก POD ที่ มี Этикетки ที่ มี ค่า ตาม ที่ ระบุ ไว้ ไว้ ไว้Ничего
: เลือก POD ที่ ไม่ มี Этикетки ที่ มี ค่า ตาม ที่ ระบุ ไว้ ไว้Существует
: เลือก POD ที่ มี Этикетки ที่ ระบุНеотекст
: เลือก POD ที่ ไม่ มี Этикетки ที่ ระบุ
นอก จาก นี้ ยัง มี การ ระบุ ราย ละเอียด การ การ расписание Pods ลง ไป อีก 2 параметра คือ
ОбязательноеedUringschedulingignoreddurgeExecution
: ต้อง มี Этикетки ตาม Условия ที่ กำหนด เท่า นั้น ถ้า ไม่ มี ไม่ Расписание (жесткое аффинность)ПредпочтениеDuringschedulingignoreddurgeExecution
: ถ้า ไม่ มี Этикетки ตาม Условия ที่ กำหนด ก็ ไม่ เป็น ไร แต่ ถ้า มี ก็ จะ Расписание ตาม Условия ที่ กำหนด กำหนด (Мягкая сродство)
มาก ไป กว่า นั้น เรา ยัง สามารถ ใช้ ร่วม กับ Топология
ได้ อีก ด้วย ดัง นี้ นี้
- ถ้า ระบุ
Аффинность
พร้อม กับАнти-аффинность
ที่ เป็นОбязательноеДеренообразноеedUlingignoreddurgeExecution
ต้อง ระบุТопология
- ถ้า ระบุ
Анти-аффинность
ที่ เป็นОбязательноеedUringschedulingignoreddurgeExecution
เท่า นั้น.Топология
ต้อง เป็นKubernetes.io/hostname.
- ถ้า ระบุ
Анти-аффинность
ที่ เป็นПредпочтениеDuringschedulingignoreddurgeExecution
เท่า นั้น.Топология
ต้อง ระบุТопология
- นอก เหนือ จาก ข้าง บน
Топология
เป็น ค่า อะไร ก็ ได้ ใน встроенные этикетки
ตัวอย่าง
หาก เรา ต้องการ Развертывание ของ redis Cluster ที่ มี 3 реплики ซึ่ง แต่ละ Реплика อยู่ คน ละ Узел กัน เพื่อ เพิ่ม Развертывание неисправности เพิ่ม จะ เป็น ดัง นี้
แต่ละ Pods ใน Развертывание มี Этикетки เป็น
Приложение: Магазин
และ ใน.Подантиаффективность
ว่า ไม่ ให้ อยู่ ร่วม กับ กับ pods ที่ มี меткаПриложение: Магазин
นั้น หมาย ความ ว่า ห้าม POD Redis นี้ อยู่ ร่วม กันหาก เรา ต้องการ Развертывание Frontend ของ Web Ecommerce ที Frestend และ Redis ต้อง อยู่ Узел เดียว กัน โดย แต่ละ คู่ ต้อง อยู่ คน ละ ละ ละ узел กัน เพื่อ เพิ่ม Развертывание неисправности เพิ่ม จะ เป็น ดัง นี้
เรา ให้ pod ของ foreend มี метка เป็น
Приложение: веб-магазин
โดย.- ระบุ
Подантиаффективность
ด้วย этикеткаПриложение: веб-магазин
ซึ่ง หมาย ความ ว่า ห้าม frontend อยู่ ร่วม узел กัน. - ระบุ
Корманье
ด้วย этикеткаПриложение: Магазин
ซึ่ง หมาย ความ ว่า frontend ต้อง อยู่ ร่วม ใน ใน Узел เดียว กับ Backend
- ระบุ
เหมือน กับ Nodeselector
แต่ เพิ่มเติม ความ สามารถ ของ Affinity เช่น Операторы ( В
, Ничего
, Существует
, Неотекст
) และ ОбязательноеedUringschedulingignoreddurgeExecution
/ ПредпочтениеDuringschedulingignoreddurgeExecution
เข้า มา.
พร้อม กัน นั้น ก็ มี แผน ที่ จะ ทำ ОбязательноеedUringschedulingignoreddurgeExecution
เพิ่ม ด้วย ซึ่ง ถ้า มี การ เปลี่ยน เปลี่ยน เปลี่ยน ของ ของ ของ Узлы จะ มี ผล กับ POD ที่ Run อยู่ ด้วย
ตัวอย่าง.
apiVersion: v1 kind: Pod metadata: name: with-node-affinity spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/e2e-az-name operator: In values: - e2e-az1 - e2e-az2 preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: another-node-label-key operator: In values: - another-node-label-value containers: - name: with-node-affinity image: k8s.gcr.io/pause:2.0
ถ้า มี Узел ที่ มี Label ДРУГОЙ-УЗДА-ЛИКТ-КЛЮЧ-КИМА: ДРУГОЙ-УСТОЙКА - ЗНАЧЕНИЕ МЕТАЛЕЙ
POD นี้ จะ ถูก Расписание ไป ยัง Узел นั้น แต่ ถ้า ไม่ มี จะ ไป ดู Узел ที่ มี Этикетки Kubernetes.io/e2e-az-Name: E2E-AZ1
หรือ. Kubernetes.io/e2e-az-name: E2E-AZ2.
$ kubectl label nodes kube-0002.novalocal kubernetes.io/e2e-az-name=e2e-az2 node/kube-0002.novalocal labeled $ kubectl get nodes --show-labels NAME STATUS ROLES AGE VERSION LABELS kube-0001.novalocal Ready master 88d v1.17.1 (...) kube-0002.novalocal Ready88d v1.17.1 (...),kubernetes.io/e2e-az-name=e2e-az2,(...) kube-0003.novalocal Ready 88d v1.17.1 (...) $ cat > node-affinity.yaml << EOF apiVersion: v1 kind: Pod metadata: name: with-node-affinity spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/e2e-az-name operator: In values: - e2e-az1 - e2e-az2 preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: another-node-label-key operator: In values: - another-node-label-value containers: - name: with-node-affinity image: k8s.gcr.io/pause:2.0 EOF $ kubectl create -f node-affinity.yaml pod/with-node-affinity created $ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES with-node-affinity 1/1 Running 0 23s 192.168.52.69 kube-0002.novalocal
Taints คือ ความ สามารถ ของ ของ ใน ใน การ ที่ จะ ไม่ ให้ ให้ ให้ ที่ ที่ ที่ จะ มา ให้ ให้ ที่ ที่ ที่ ได้ โดย pod ที่ ไม่ มี Толерация ต่อ Taints ของ Узел จะ ไม่ สามารถ Расписание POD มา Run ที่ Узел นั้น ได้.
Taints จะ มี ลักษณะ แบบ นี้ ключ = значение: эффект
โดย ключ
กับ ценность
เป็น ค่า ใด ๆ ก็ ได้ ที่ กำหนด โดย adistrator และ эффект
มี ให้ เลือก 3 แบบ คือ
Noschedule
: ห้าม Расписание POD มา ยัง Узел โดย POD ที่ Run อยู่ ก่อน Назначить Taints จะ ไม่ ได้ รับ ผล กระทบПредпочтение предпочтению
: ถ้า หา Узел ที่ เหมาะสม ไม่ ได้ แล้ว จริง ๆ ก็ Расписание POD มา ยัง Узел นี้ ได้Noexecute
: POD ใหม่ ก็ ห้าม Расписание มา POD เก่า ก็ ต้อง อพยบ ไป ที่ อื่น โดย ถ้า pod มีТолераниямиконд
กำหนด อยู่ มัน จะ รอ จน กว่า จะ ครบТолераниямиконд
ถึง จะ. อบยพ ออก ไป
ถ้า Узел มี หลาย Taints Pods ที่ มี Толерации ทุก Taints ถึง จะ มา Run ใน Узел นั้น ๆ ได้
# วิธีการเพิ่ม taints ให้กับ node $ kubectl taint nodes node1 key=value:NoSchedule # วิธีการลบ taints ออกจาก node $ kubectl taint nodes node1 key:NoSchedule-
เป็น การ ใส่ ความ สามารถ ให้ POD ทน ต่อ Taints ของ Узел ได้ โดย ต้อง Соответствие ทั้ง Ключ, значение และ Эффект
ซึ่ง Ключ และ Значение เรา สามารถ กำหนด Толерации ได้ ด้วย 2 операторы คือ
Существует
: ถ้า Толерации ที่ เรา กำหนด มี Ключ ตรง กับ Taints ของ Узел ก็ ถือ ว่า Match แล้วРавный
: ต้อง ตรง ทั้ง Ключ และ Значение ถึง จะ ถือ ว่า Match (оператор по умолчанию)
ถ้า ไม่ ระบุ Effect ถือ ว่า ทน (толерация) ได้ ทุก Effect ดัง นั้น เรา สามารถ สามารถ ระบุ Уровень толерации 999 ที่ ทนทาน ได้ แทน ทุก Taint ดัง นี้
ระบุ แค่
Оператор: существует
-> ทน ได้ ทุก Taintsระบุ แค่
Оператор: существует
และКлюч: «Ключ»
-> ทน ได้ ทุก Taints ที่ มี มี มี ตรง ตรง กัน
ถ้า Узел มี หลาย Taints Pods ที่ จะ Расписание ได้ ต้อง มี Толерации ครบ ทุก Taints ถ้า ไม่ ครบ Pods จะ ถูก ปฏิบัติ ด้วย Effect ของ Taints ที่ มี ความ แรง ที่ สุด ที่ ไม่ ไม่ соответствовать
Используйте случаи ของ Taints และ Толерация เช่น
- Выделенные узлы ที่ เรา จะ Reserve ไว้ ให้ แค่ บาง กลุ่ม ของ ของ ของ ใช้ งาน งาน
- Узлы со специальным оборудованием
ถ้า Сродство, Taints และ Политики ยัง ไม่ พอ ดับ ความ ต้องการ ของ เรา เรา เรา สามารถ สร้าง планировщик ของ เรา เอง ได้ โดย สามารถ สามารถ ไป ดู ได้ ที่ Гадость
เพื่อ ใช้ планировщик ใหม่ ของ เรา เรา ต้อง ระบุ имя планировщика เข้า ไป ใน Спецификация POD ด้วย ถ้า ไม่ ระบุ จะ ใช้ планировщик по умолчанию แต่ ถ้า เรา ระบุ планировщик ผิด pod ของ เรา จะ อยู่ ใน สถานะ สถานะ В ожидании
เรา สามารถ ดู ข้อมูล ของ Планировщик และ Информация อื่น ๆ ได้ ด้วย Kubectl Получить события
$ kubectl get events LAST SEEN TYPE REASON OBJECT MESSAGE 41s Normal Killing pod/nginx Stopping container nginx 2s Normal Scheduled pod/nginx Successfully assigned default/nginx to kube-0003.novalocal 1s Normal Pulled pod/nginx Container image "nginx" already present on machine 1s Normal Created pod/nginx Created container nginx 1s Normal Started pod/nginx Started container nginx
Оригинал: «https://dev.to/peepeepopapapeepeepo/lfs258-10-15-scheduling-419n»