主頁 >  其他 > k8s~節點的親和性

k8s~節點的親和性

2023-07-12 08:18:55 其他

在Kubernetes中,你可以使用節點親和性(Node Affinity)來控制Pod部署在哪些節點上,通過配置節點親和性,你可以指定一些規則,以確保多個服務不會被調度到同一個節點上,

兩種策略

  • requiredDuringSchedulingIgnoredDuringExecution:通過 requiredDuringSchedulingIgnoredDuringExecution,可以定義在調度期間必須滿足的 Affinity 規則,這意味著規則在調度期間必須滿足,但如果在運行時不滿足,則不會強制執行,

  • preferredDuringSchedulingIgnoredDuringExecution:使用 preferredDuringSchedulingIgnoredDuringExecution,可以定義首選的 Affinity 規則,這意味著規則是首選的,但不是強制的,如果無法滿足則可以繼續調度,

節點親和性實作

以下是一些在部署Deployment時避免多個服務部署到同一節點的常用方法:

  1. 使用節點親和性標簽(Node Affinity):你可以給每個服務定義一個獨特的節點親和性標簽,然后通過affinity欄位將這些標簽添加到對應的PodSpec中,例如,給服務A定義service=a的標簽,給服務B定義service=b的標簽,然后,在Deployment的PodSpec中使用nodeAffinity欄位來指定節點親和性規則,確保兩個服務不會調度到同一個節點上,
  • 使用requiredDuringSchedulingIgnoredDuringExecution強制策略,如果不滿足,你的pod將不能被調度
  • 節點A上添加標簽type=product,service-a將被調度到這個節點
  • 節點B上添加標簽type=order,service-b將被調度到這個節點
  • service-a.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: service-a
spec:
  replicas: 1
  selector:
    matchLabels:
      app: service-a
  template:
    metadata:
      labels:
        app: service-a
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: In
                values:
                - product
      containers:
      - name: service-a
        image: nginx:stable-alpine

  • service-b.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: service-b
spec:
  replicas: 1
  selector:
    matchLabels:
      app: service-b
  template:
    metadata:
      labels:
        app: service-b
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: In
                values:
                - order
      containers:
      - name: service-b
        image: nginx:stable-alpine

上面使用正則運算式matchExpressions來確定目標,也可以使用標簽matchLabels的方式,更簡潔,如下:

     # 親和性
      affinity:
        # Pod親和性規則
        podAffinity:
          # 強制性的調度規則, 但不會影響已在節點上運行的Pod
          requiredDuringSchedulingIgnoredDuringExecution:
          - topologyKey: kubernetes.io/hostname
            # 標簽選擇器
            labelSelector:
              matchLabels:
                app: service-a
  1. 使用非強制策略,配置weight權重一起使用
apiVersion: apps/v1
kind: Deployment
metadata:  
  name: service-a-order
spec:  
  # Pod副本數量
  replicas: 4
  selector:
    matchLabels:
      app: service-a-order
  # Pod模板
  template:
    metadata:
      # 標簽資訊: 應用的后端服務
      labels:
        app: service-a-order
    spec:
    # 親和性
      affinity:
        # Pod親和性規則
        podAntiAffinity:
          # 強制性的調度規則, 但不會影響已在節點上運行的Pod
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100  
            podAffinityTerm:
                topologyKey: kubernetes.io/hostname
                # 標簽選擇器
                labelSelector:
                  matchExpressions: # 也需要matchLabels
                  - key: app
                    operator: In
                    values:
                    - service-a-order
      # 容器資訊
      containers:
      - name: service-a-order
        image: nginx:stable-alpine

擴展閱讀

app.kubernetes.io/instance Kubernetes的應用標識

在Kubernetes中,app.kubernetes.io/instance是一個標簽(Label),用于標識應用程式實體的實體ID或名稱,

標簽是鍵值對的形式,用于為資源物件(如Pod、Deployment、Service等)添加元資料資訊,app.kubernetes.io/instance是一個預定義的標簽鍵,用于表示應用程式實體的唯一識別符號,

通常,當您使用Kubernetes部署多個相同型別的應用程式實體時,每個實體都會被分配一個唯一的實體ID或名稱,您可以使用app.kubernetes.io/instance標簽來標識和區分這些應用程式實體,

例如,假設您使用Kubernetes部署了一個名為"my-app"的應用程式,并在該應用程式的多個副本之間進行了擴展,每個副本都會被分配一個唯一的實體ID或名稱,通過為每個副本設定app.kubernetes.io/instance標簽,您可以區分和識別每個應用程式實體,

標簽可以通過Kubernetes API或命令列工具(如kubectl)進行管理和查詢,您可以使用kubectl get pods --show-labels命令來查看資源物件的標簽資訊,包括app.kubernetes.io/instance標簽和對應的實體ID或名稱值,

kubernetes.io/hostname 節點的主機名

在Kubernetes中,kubernetes.io/hostname是一個節點標簽(Node Label),用于標識節點的主機名(Hostname),

節點標簽是一種鍵值對的形式,用于為節點添加自定義的元資料資訊,通過為節點添加標簽,您可以根據標簽進行節點選擇和調度,kubernetes.io/hostname是一個預定義的標簽鍵,用于表示節點的主機名,

節點的主機名是節點所在主機的唯一識別符號,Kubernetes使用主機名來識別和管理節點,并在集群中唯一標識每個節點,kubernetes.io/hostname標簽的值將設定為節點的實際主機名,

例如,假設您在Kubernetes集群中有多個節點,并且每個節點都有不同的主機名,通過查看節點的kubernetes.io/hostname標簽,您可以了解到每個節點的實際主機名,并在進行節點選擇或調度時使用這些資訊,

節點標簽可以通過Kubernetes API或命令列工具(如kubectl)進行管理和查詢,您可以使用kubectl get nodes --show-labels命令來查看節點標簽資訊,包括kubernetes.io/hostname標簽和對應的主機名值,

作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980

支付寶掃一掃,為大叔打賞!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/557034.html

標籤:其他

上一篇:2023年最具威脅的25種安全漏洞(CWE TOP 25)

下一篇:返回列表

標籤雲
其他(162402) Python(38274) JavaScript(25530) Java(18294) C(15239) 區塊鏈(8275) C#(7972) AI(7469) 爪哇(7425) MySQL(7294) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5876) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4615) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2438) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) HtmlCss(1995) .NET技术(1986) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1882) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • k8s~節點的親和性

    在Kubernetes中,你可以使用節點親和性(Node Affinity)來控制Pod部署在哪些節點上。通過配置節點親和性,你可以指定一些規則,以確保多個服務不會被調度到同一個節點上。 # 兩種策略 * requiredDuringSchedulingIgnoredDuringExecution: ......

    uj5u.com 2023-07-12 08:18:55 more
  • 2023年最具威脅的25種安全漏洞(CWE TOP 25)

    摘要: CWE Top 25 是通過分析美國國家漏洞資料庫(NVD)中的公共漏洞資料來計算的,以獲取前兩個日歷年 CWE 弱點的根本原因映射。 本文分享自華為云社區《2023年最具威脅的25種安全漏洞(CWE TOP 25)》,作者: Uncle_Tom 。 CWE Top 25 是通過分析美國國家 ......

    uj5u.com 2023-07-12 08:18:48 more
  • 資料結構鏈表的基本操作

    ```java /*資料結構單向鏈表基本操作 節點類 */ import java.util.Iterator; import java.util.function.Consumer; public class shujujiegou implements Iterable {//整體 privat ......

    uj5u.com 2023-07-12 08:18:40 more
  • 智慧化考慮運用資料、資訊、知識及反饋機制提升微表情識別準確度

    一、什么是微表情 微表情是一種快速呈現的表情,一般認為其持續時間在 1/25 秒~1/5 秒之間,也有學者認為其持續時間在 1/2秒以內,反映了人們壓抑的真實情緒。當前微表情識別技術廣泛應用在銀行業務領域,例如反欺詐等助力金融服務智慧化。例如平安銀行微表情識別技術能夠遠程抓取客戶微小表情變化,識別貸 ......

    uj5u.com 2023-07-12 08:18:08 more
  • 第一章 云計算概述

    ### 1 IT發展趨勢 #### 1.1 什么是IT `IT就是資訊處理的總集,包括:軟體、硬體、通信和相關服務等。` IT的核心:以資料中心為基礎的核心架構 > 傳統的IT基礎架構由常見的硬體和軟體組件構成: > > 設施、資料中心、服務器、網路硬體、桌面計算機,以及企業應用軟體解決方案。 ![ ......

    uj5u.com 2023-07-12 08:17:37 more
  • 【HDC.Cloud 2023】華為云區塊鏈分論壇內容值得再讀!

    摘要:在Web3時代,基礎設施不僅僅是傳統意義上的服務器、網路等,還包括了區塊鏈節點、智能合約等,這些基礎設施的穩定性和可信度直接影響著Web3的發展。 本文分享自華為云社區《【HDC.Cloud 2023】華為云區塊鏈分論壇內容值得再讀!》,作者:華為云PaaS服務小智 。 Web3是全新的互聯網 ......

    uj5u.com 2023-07-12 08:12:11 more
  • 判斷是否是完全平方數[容易]和排列箱子[容易]

    1.1.1. 完全平方數(PerfectSquare) 判斷正整數y是否是完全平方數。如果能找到正整數x,使得x*x==y,則y是平方數。 1. 思路 條件 處理 x*x>y 丟棄右半部分 x*x==y y是完全平方數 x*x<y 丟棄左半部分 x的取值范圍是[1,y],我們用左閉右開空間,就是[1 ......

    uj5u.com 2023-07-12 08:11:30 more
  • 資料結構鏈表的基本操作

    ```java /*資料結構單向鏈表基本操作 節點類 */ import java.util.Iterator; import java.util.function.Consumer; public class shujujiegou implements Iterable {//整體 privat ......

    uj5u.com 2023-07-12 08:11:25 more
  • 代碼審計工具Fortify基本使用

    最近接觸到一款代碼審計的工具 Fortify SCA and Applications 22.2.0,現就其基本使用做一簡單介紹! Fortify是一個應用安全測驗軟體,是Micro Focus旗下AST(應用程式安全測驗)產品。 Fortify能夠提供靜態和動態應用程式安全測驗技術,以及運行時應用 ......

    uj5u.com 2023-07-12 08:09:43 more
  • 語音平臺原始碼搭建開發之表情功能的實作

    語音平臺原始碼搭建開發表情功能對用戶不管是語言表達或是體驗新歌都是非常重要的,經過一番操作,我們就成功實作了語音平臺原始碼表情功能,后續我會繼續為大家分享語音平臺原始碼搭建開發知識。 ......

    uj5u.com 2023-07-12 08:09:34 more