בדף הזה מתואר אופרטור Kubernetes מיוחד של פונקציית רשת ש-Google Distributed Cloud נשלח איתו. האופרטור הזה מטמיע קבוצה של CustomResourceDefinitions (CRD) שמאפשרים ל-Distributed Cloud להריץ עומסי עבודה עם ביצועים גבוהים.
הפונקציונליות של Network Function operator ו-SR-IOV לא זמינה ב-Distributed Cloud Servers.
האופרטור Network Function מאפשר לבצע את הפעולות הבאות:
- שליחת בקשת מידע על מכשירי רשת קיימים בצומת.
- שאילתה של כתובת ה-IP ומצב הקישור הפיזי של כל מכשיר רשת בצומת.
- הקצאת ממשקי רשת נוספים בצומת.
- הגדרה של תכונות מערכת ברמה נמוכה במכונה הפיזית של הצומת שנדרשות לתמיכה בעומסי עבודה עם ביצועים גבוהים.
- משתמשים בווירטואליזציה של קלט/פלט עם שורש יחיד (SR-IOV) בממשקי רשת של PCI Express כדי להפוך אותם לווירטואליים לממשקים וירטואליים מרובים. לאחר מכן תוכלו להגדיר את עומסי העבודה ב-Distributed Cloud כך שישתמשו בממשקי הרשת הווירטואליים האלה.
התמיכה של Distributed Cloud ב-SR-IOV מבוססת על הפרויקטים הבאים בקוד פתוח:
דרישות מוקדמות
מפעיל פונקציית הרשת מאחזר את תצורת הרשת מ-Distributed Cloud Edge Network API.
כדי לאפשר זאת, צריך להקצות לחשבון השירות של מפעיל פונקציית הרשת את התפקיד Edge Network Viewer (roles/edgenetwork.viewer) באמצעות הפקודה הבאה:
gcloud projects add-iam-policy-binding PROJECT_ID \ --role roles/edgenetwork.viewer \ --member "serviceAccount:PROJECT_ID.svc.id.goog[nf-operator/nf-angautomator-sa]"
מחליפים את PROJECT_ID במזהה של פרויקט היעד. Google Cloud
משאבים של מפעילי פונקציות רשת
אופרטור הפונקציה של Distributed Cloud Network מטמיע את ה-CRD הבאים של Kubernetes:
-
Network. מגדיר רשת וירטואלית שקבוצות ה-Pod יכולות להשתמש בה כדי לתקשר עם משאבים פנימיים וחיצוניים. לפני שמציינים את ה-VLAN במשאב הזה, צריך ליצור את ה-VLAN המתאים באמצעות Distributed Cloud Edge Network API. הוראות מפורטות מופיעות במאמר יצירת רשת. -
NetworkInterfaceState. מאפשרת לגלות את מצבי ממשק הרשת ולשאול את ממשק הרשת לגבי מצב הקישור וכתובת ה-IP. -
NodeSystemConfigUpdate. מאפשרת להגדיר תכונות מערכת ברמה נמוכה, כמו אפשרויות ליבה ודגלים שלKubelet. -
SriovNetworkNodePolicy. בוחר קבוצה של ממשקי רשת וירטואליים של SR-IOV ומפעיל את הקבוצה כמשאב Kubernetes. אפשר להשתמש במשאב הזה במשאבNetworkAttachmentDefinition. -
SriovNetworkNodeState. מאפשרת לשלוח שאילתה לגבי מצב ההקצאה של משאבSriovNetworkNodePolicyבצומת של Distributed Cloud. -
NetworkAttachmentDefinition. מאפשרת לכם לצרף Distributed Cloud Pods לרשת לוגית או פיזית אחת או יותר בצומת Distributed Cloud. צריך ליצור את ה-VLAN המתאים לפני שמציינים אותו במשאב הזה. לפני שמציינים את ה-VLAN במשאב הזה, צריך ליצור את ה-VLAN המתאים באמצעות Distributed Cloud Edge Network API. הוראות מפורטות מופיעות במאמר יצירת רשת.
מפעיל פונקציית הרשת מאפשר גם להגדיר ממשקי רשת משניים שלא משתמשים בפונקציות וירטואליות של SR-IOV.
משאב Network
משאב Network מגדיר רשת וירטואלית במתלה של Distributed Cloud, שבה יכולים להשתמש פודים באשכול Distributed Cloud כדי לתקשר עם משאבים פנימיים וחיצוניים.
משאב Network מספק את הפרמטרים הבאים שאפשר להגדיר עבור ממשק הרשת שנחשף כשדות שאפשר לכתוב בהם:
-
spec.type: מציין את שכבת התעבורה ברשת עבור הרשת הזו. הערך החוקי היחיד הואL2. צריך לציין גם ערךnodeInterfaceMatcher.interfaceName. -
spec.nodeInterfaceMatcher.interfaceName: השם של ממשק הרשת הפיזי בצומת היעד של Distributed Cloud שבו רוצים להשתמש ברשת הזו. -
spec.gateway4: כתובת ה-IP של שער הרשת עבור הרשת הזו. -
spec.l2NetworkConfig.prefixLength4: מציין את טווח ה-CIDR של הרשת הזו.
בדוגמה הבאה אפשר לראות את מבנה המשאב:
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: vlan200-network
annotations:
networking.gke.io/gdce-vlan-id: 200
networking.gke.io/gdce-vlan-mtu: 1500
spec:
type: L2
nodeInterfaceMatcher:
interfaceName: gdcenet0.200
gateway4: 10.53.0.1
משאב NetworkInterfaceState
המשאב NetworkInterfaceState הוא משאב לקריאה בלבד שמאפשר לכם לגלות ממשקי רשת פיזיים בצומת ולאסוף נתונים סטטיסטיים בזמן הריצה על תעבורת הרשת שעוברת דרך הממשקים האלה.
Distributed Cloud יוצר NetworkInterfaceState משאב לכל צומת באשכול.
ההגדרה שמוגדרת כברירת מחדל במכונות Distributed Cloud כוללת ממשק רשת מאוגד בכרטיס הבת של הרשת לבחירת מתלים (rNDC) שנקרא gdcenet0. הממשק הזה מאגד את ממשקי הרשת eno1np0 ו-eno2np1. כל אחד מהם מחובר למתג ToR של Distributed Cloud.
המשאב NetworkInterfaceState מספק את הקטגוריות הבאות של מידע על ממשק הרשת, שמוצגות כשדות סטטוס לקריאה בלבד.
מידע כללי:
-
status.interfaces.ifname: השם של ממשק הרשת של היעד. status.lastReportTime: השעה והתאריך של דוח הסטטוס האחרון של ממשק היעד.
פרטי ההגדרה של כתובת ה-IP:
-
status.interfaces.interfaceinfo.address: כתובת ה-IP שהוקצתה לממשק היעד. -
status.interfaces.interfaceinfo.dns: כתובת ה-IP של שרת ה-DNS שהוקצתה לממשק היעד. -
status.interfaces.interfaceinfo.gateway: כתובת ה-IP של שער הרשת שמשרת את ממשק היעד. -
status.interfaces.interfaceinfo.prefixlen: אורך קידומת ה-IP.
מידע על החומרה:
-
status.interfaces.linkinfo.broadcast: כתובת ה-MAC של השידור של ממשק היעד. -
status.interfaces.linkinfo.businfo: הנתיב של מכשיר PCIe בפורמטbus:slot.function. -
status.interfaces.linkinfo.flags: הסימונים של הממשק, לדוגמה,BROADCAST. -
status.interfaces.linkinfo.macAddress: כתובת ה-MAC של שידור יחיד של ממשק היעד. -
status.interfaces.linkinfo.mtu: ערך ה-MTU של ממשק היעד.
נתוני קבלה:
-
status.interfaces.statistics.rx.bytes: המספר הכולל של הבייטים שהתקבלו בממשק היעד. -
status.interfaces.statistics.rx.dropped: המספר הכולל של חבילות הנתונים שהופלו על ידי ממשק היעד. -
status.interfaces.statistics.rx.errors: סך השגיאות בקבלת חבילות הנתונים בממשק היעד. -
status.interfaces.statistics.rx.multicast: המספר הכולל של חבילות הנתונים של שידור מרובה משתתפים שהתקבלו בממשק היעד. -
status.interfaces.statistics.rx.overErrors: סך חבילות הנתונים שהתקבלו על פני שגיאות בממשק היעד. -
status.interfaces.statistics.rx.packets: המספר הכולל של חבילות הנתונים שהתקבלו בממשק היעד.
נתונים סטטיסטיים של הפצה:
-
status.interfaces.statistics.tx.bytes: המספר הכולל של הבייטים שמועברים על ידי ממשק היעד. -
status.interfaces.statistics.tx.carrierErrors: סך השגיאות של הספק שנתקלו בהן בממשק היעד. -
status.interfaces.statistics.tx.collisions: המספר הכולל של התנגשויות חבילות הנתונים שהממשק של היעד נתקל בהן. -
status.interfaces.statistics.tx.dropped: המספר הכולל של חבילות הנתונים שהופלו על ידי ממשק היעד. -
status.interfaces.statistics.tx.errors: סך שגיאות השידור בממשק היעד. -
status.interfaces.statistics.tx.packets: המספר הכולל של חבילות הנתונים שמועברות על ידי ממשק היעד.
בדוגמה הבאה אפשר לראות את מבנה המשאב:
apiVersion: networking.gke.io/v1
kind: NetworkInterfaceState
metadata:
name: MyNode1
nodeName: MyNode1
status:
interfaces:
- ifname: eno1np0
linkinfo:
businfo: 0000:1a:00.0
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 1098522811
errors: 2
multicast: 190926
packets: 4988200
tx:
bytes: 62157709961
packets: 169847139
- ifname: eno2np1
linkinfo:
businfo: 0000:1a:00.1
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 33061895405
multicast: 110203
packets: 110447356
tx:
bytes: 2370516278
packets: 11324730
- ifname: enp95s0f0np0
interfaceinfo:
- address: fe80::63f:72ff:fec4:2bf4
prefixlen: 64
linkinfo:
businfo: 0000:5f:00.0
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:f4
mtu: 9000
statistics:
rx:
bytes: 37858381
multicast: 205645
packets: 205645
tx:
bytes: 1207334
packets: 6542
- ifname: enp95s0f1np1
interfaceinfo:
- address: fe80::63f:72ff:fec4:2bf5
prefixlen: 64
linkinfo:
businfo: 0000:5f:00.1
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:f5
mtu: 9000
statistics:
rx:
bytes: 37852406
multicast: 205607
packets: 205607
tx:
bytes: 1207872
packets: 6545
- ifname: enp134s0f0np0
interfaceinfo:
- address: fe80::63f:72ff:fec4:2b6c
prefixlen: 64
linkinfo:
businfo: 0000:86:00.0
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:6c
mtu: 9000
statistics:
rx:
bytes: 37988773
multicast: 205584
packets: 205584
tx:
bytes: 1212385
packets: 6546
- ifname: enp134s0f1np1
interfaceinfo:
- address: fe80::63f:72ff:fec4:2b6d
prefixlen: 64
linkinfo:
businfo: 0000:86:00.1
flags: up|broadcast|multicast
macAddress: 04:3f:72:c4:2b:6d
mtu: 9000
statistics:
rx:
bytes: 37980702
multicast: 205548
packets: 205548
tx:
bytes: 1212297
packets: 6548
- ifname: gdcenet0
interfaceinfo:
- address: 208.117.254.36
prefixlen: 28
- address: fe80::b816:3ff:fe9e:9c87
prefixlen: 64
linkinfo:
flags: up|broadcast|multicast
macAddress: ba:16:03:9e:9c:87
mtu: 9000
statistics:
rx:
bytes: 34160422968
errors: 2
multicast: 301129
packets: 115435591
tx:
bytes: 64528301111
packets: 181171964
.. <remaining interfaces omitted>
lastReportTime: "2022-03-30T07:35:44Z"
משאב NodeSystemConfigUpdate
המשאב NodeSystemConfigUpdate מאפשר לכם לבצע שינויים בהגדרות של מערכת ההפעלה של הצומת, וגם לשנות את הדגלים Kubelet. כדי שהשינויים ייכנסו לתוקף, צריך להפעיל מחדש את הצומת, למעט שינויים ב-sysctl.
כשמפעילים את המשאב הזה, צריך לציין את צמתי היעד בשדה nodeSelector. בשדה nodeSelector צריך לכלול את כל צמדי מפתח/ערך לכל צומת יעד. אם מציינים יותר מצומת יעד אחד בשדה הזה, צמתי היעד מתעדכנים אחד בכל פעם. השדה הזה מחליף את השדה nodeName.
שימו לב: השדה nodeName הוצא משימוש. השימוש בפקודה הזו יגרום להפעלה מחדש מיידית של צמתי היעד, כולל צמתי מישור הבקרה המקומיים, ועלול לעצור עומסי עבודה קריטיים.
משאב NodeSystemConfigUpdate מספק את שדות ההגדרה הבאים שספציפיים ל-Distributed Cloud:
-
spec.containerRuntimeDNSConfig.ip: מציין רשימה של כתובות IP עבור מאגרי תמונות פרטיים.
spec.containerRuntimeDNSConfig: מציין רשימה של רשומות DNS בהתאמה אישית שמשמשות את סביבת זמן הריצה של הקונטיינר בכל צומת של Distributed Cloud. כל רשומה כוללת את השדות הבאים:-
ip: מציינת את כתובת ה-IPv4 של היעד, -
domain: מציין את הדומיין המתאים, -
interface: מציין את ממשק היציאה מהרשת שדרכו אפשר להגיע לכתובת ה-IP שצוינה בשדהip. אפשר לציין ממשק שמוגדר באמצעות המשאבים הבאים:CustomNetworkInterfaceConfig,Network(באמצעות הערה),NetworkAttachmentDefinition(באמצעות הערה). זו תכונה בגרסת טרום-השקה (Preview).
-
spec.kubeletConfig.cpuManagerPolicy: מציין את המדיניות של Kubernetes CPUManager. הערכים התקינים הםNoneו-Static.
spec.kubeletConfig.topologyManagerPolicy: מציין את המדיניות של Kubernetes TopologyManager. הערכים התקפים הםNone,BestEffort,Restrictedו-SingleNumaMode.
spec.osConfig.hugePagesConfig: מציין את ההגדרה של דפים ענקיים לכל צומת NUMA. הערכים התקינים הם2MBו-1GB. מספר הדפים הענקיים שנדרשים מתחלק באופן שווה בין שני צמתי ה-NUMA במערכת. לדוגמה, אם מקצים 16 דפים גדולים בגודל של 1 GB כל אחד, כל צומת מקבל הקצאה מראש של 8 GB.
spec.osConfig.isolatedCpusPerSocket: מציין את מספר המעבדים המבודדים לכל שקע. חובה אם הערך שלcpuManagerPolicyהואStatic.
spec.osConfig.cpuIsolationPolicy: מציין את מדיניות הבידוד של המעבד. המדיניותDefaultמבודדת רק משימותsystemdממעבדים ששמורים לעומסי עבודה. המדיניותKernelמסמנת את המעבדים כ-isolcpusומגדירה את הדגליםrcu_nocb,nohz_fullו-rcu_nocb_pollבכל מעבד.
spec.sysctls.NodeLevel: מציין את הפרמטרים שלsysctlsשאפשר להגדיר באופן גלובלי בצומת באמצעות האופרטור Network Function. הפרמטרים שניתנים להגדרה הם:fs.inotify.max_user_instancesfs.inotify.max_user_watcheskernel.sched_rt_runtime_uskernel.core_patternnet.ipv4.tcp_wmemnet.ipv4.tcp_rmemnet.ipv4.tcp_slow_start_after_idlenet.ipv4.udp_rmem_minnet.ipv4.udp_wmem_minnet.ipv4.tcp_rmemnet.ipv4.tcp_wmemnet.core.rmem_maxnet.core.wmem_maxnet.core.rmem_defaultnet.core.wmem_defaultnet.netfilter.nf_conntrack_tcp_timeout_unacknowledgednet.netfilter.nf_conntrack_tcp_timeout_max_retransnet.sctp.auth_enablenet.sctp.sctp_memnet.ipv4.udp_memnet.ipv4.tcp_memnet.ipv4.tcp_slow_start_after_idlenet.sctp.auth_enablevm.max_map_count
אפשר גם להגדיר את הפרמטרים
sysctlsהבטוחים והלא בטוחים כך שיחולו על Pod או על מרחב שמות ספציפיים באמצעות התוסףtuningContainer Networking Interface (CNI).
במשאב NodeSystemConfigUpdate מופיעים שדות הסטטוס הכלליים הבאים לקריאה בלבד:
status.lastReportTime: הפעם האחרונה שבה דווח על הסטטוס של ממשק היעד.status.conditions.lastTransitionTime: הפעם האחרונה שבה השתנה התנאי של הממשק.-
status.conditions.observedGeneration: מציין את הערך.metadata.generationשעליו התבסס התנאי הראשוני. -
status.conditions.message: הודעה אינפורמטיבית שמתארת את השינוי במצב הממשק. -
status.conditions.reason: מזהה פרוגרמטי שמציין את הסיבה לשינוי האחרון במצב הממשק. status.conditions.status: תיאור הסטטוס של התנאי. הערכים התקפים הםTrue,Falseו-Unknown.-
status.conditions.type: סוג התנאי ב-camelCase.
בדוגמה הבאה אפשר לראות את מבנה המשאב:
apiVersion: networking.gke.io/v1
kind: NodeSystemConfigUpdate
metadata:
name: node-pool-1-config
namespace: default
spec:
nodeSelector:
baremetal.cluster.gke.io/node-pool: node-pool-1
networking.gke.io/worker-network-sriov.capable: true
sysctls:
nodeLevel:
"net.ipv4.udp_mem" : "12348035 16464042 24696060"
kubeletConfig:
topologyManagerPolicy: BestEffort
cpuManagerPolicy: Static
osConfig:
hugePagesConfig:
"TWO_MB": 0
"ONE_GB": 16
isolatedCpusPerSocket:
"0": 10
"1": 10
משאב SriovNetworkNodePolicy
המשאב SriovNetworkNodePolicy מאפשר להקצות קבוצה של פונקציות וירטואליות (VF) של SR-IOV במכונה פיזית של Distributed Cloud וליצור מופע של הקבוצה הזו כמשאב Kubernetes. אחר כך תוכלו להשתמש במשאב הזה במשאב NetworkAttachmentDefinition.
אפשר לבחור כל פונקציה וירטואלית לפי ספק ה-PCIe ומזהה המכשיר, לפי כתובות המכשיר ב-PCIe או לפי שם המכשיר שמופיע ברשימה ב-Linux. מפעיל הרשת SR-IOV מגדיר כל ממשק רשת פיזי כדי להקצות את הפונקציות הווירטואליות של היעד. התהליך כולל עדכון של הקושחה של ממשק הרשת, הגדרה של מנהל ההתקן של ליבת Linux והפעלה מחדש של מכונת Distributed Cloud, אם יש צורך.
כדי לגלות את ממשקי הרשת שזמינים בצומת, אפשר לחפש את NetworkInterfaceState המשאבים בצומת הזה במרחב השמות nf-operator.
בדוגמה הבאה אפשר לראות את מבנה המשאב:
apiVersion: sriovnetwork.k8s.cni.cncf.io/v1
kind: SriovNetworkNodePolicy
metadata:
name: mlnx6-p2-sriov-en2
namespace: sriov-network-operator
spec:
deviceType: netdevice
isRdma: true
mtu: 9000
nicSelector:
pfNames:
- enp134s0f1np1
nodeSelector:
edgecontainer.googleapis.com/network-sriov.capable: "true"
numVfs: 31
priority: 99
resourceName: mlnx6_p2_sriov_en2
בדוגמה הקודמת נוצרות עד 31 פונקציות וירטואליות מהיציאה השנייה בממשק הרשת שנקרא enp134s0f1np1 עם ערך MTU של 9000 (הערך המקסימלי המותר). אפשר להשתמש בתווית לבחירת צומת edgecontainer.googleapis.com/network-sriov.capable, שמופיעה בכל הצמתים של Distributed Cloud שתומכים ב-SR-IOV.
מידע על השימוש במשאב הזה זמין במאמר SriovNetworkNodeState.
משאב SriovNetworkNodeState
המשאב לקריאה בלבד SriovNetworkNodeState מאפשר לשלוח שאילתה לגבי מצב ההקצאה של המשאב SriovNetworkNodePolicy בצומת של Distributed Cloud. היא מחזירה את ההגדרה המלאה של משאב SriovNetworkNodePolicy בצומת, וגם רשימה של פונקציות וירטואליות פעילות בצומת. השדה status.syncStatus מציין אם כל המשאבים SriovNetworkNodePolicy שהוגדרו לצומת SriovNetworkNodePolicy הוחלו בצורה תקינה.
בדוגמה הבאה אפשר לראות את מבנה המשאב:
apiVersion: sriovnetwork.k8s.cni.cncf.io/v1
kind: SriovNetworkNodeState
metadata:
name: MyNode1
namespace: sriov-network-operator
spec:
dpConfigVersion: "1969684"
interfaces:
- mtu: 9000
name: enp134s0f1np1
numVfs: 31
pciAddress: 0000:86:00.1
vfGroups:
- deviceType: netdevice
mtu: 9000
policyName: mlnx6-p2-sriov-en2
resourceName: mlnx6_p2_sriov_en2
vfRange: 0-30
status:
Status:
Interfaces:
Device ID: 1015
Driver: mlx5_core
Link Speed: 25000 Mb/s
Link Type: ETH
Mac: ba:16:03:9e:9c:87
Mtu: 9000
Name: eno1np0
Pci Address: 0000:1a:00.0
Vendor: 15b3
Device ID: 1015
Driver: mlx5_core
Link Speed: 25000 Mb/s
Link Type: ETH
Mac: ba:16:03:9e:9c:87
Mtu: 9000
Name: eno2np1
Pci Address: 0000:1a:00.1
Vendor: 15b3
Vfs:
- Vfs:
- deviceID: 101e
driver: mlx5_core
mac: c2:80:29:b5:63:55
mtu: 9000
name: enp134s0f1v0
pciAddress: 0000:86:04.1
vendor: 15b3
vfID: 0
- deviceID: 101e
driver: mlx5_core
mac: 7e:36:0c:82:d4:20
mtu: 9000
name: enp134s0f1v1
pciAddress: 0000:86:04.2
vendor: 15b3
vfID: 1
.. <omitted 29 other VFs here>
syncStatus: Succeeded
מידע על השימוש במשאב הזה זמין במאמר SriovNetworkNodeState.
משאב NetworkAttachmentDefinition
המשאב NetworkAttachmentDefinition מאפשר לכם לצרף Distributed Cloud Pods לרשת לוגית או פיזית אחת או יותר בצומת Distributed Cloud. הוא מבוסס על מסגרת Multus-CNI ועל הפלאגין SRIOV-CNI.
אפשר להשתמש בהערה כדי להפנות לשם של משאב SriovNetworkNodePolicy מתאים. כשיוצרים את ההערה הזו, צריך לבצע את הפעולות הבאות:
- משתמשים במקש
k8s.v1.cni.cncf.io/resourceName. - משתמשים בקידומת
gke.io/בערך שלה, ואחריה בשם של משאב היעדSriovNetworkNodePolicy.
בדוגמה הבאה אפשר לראות את מבנה המשאב:
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: sriov-net1
namespace: mynamespace
annotations:
k8s.v1.cni.cncf.io/resourceName: gke.io/mlnx6_p2_sriov_en2
spec:
config: '{
"type": "sriov",
"cniVersion": "0.3.1",
"name": "sriov-network",
"ipam": {
"type": "host-local",
"subnet": "10.56.217.0/24",
"routes": [{
"dst": "0.0.0.0/0"
}],
"gateway": "10.56.217.1"
}
}'
שדרוג משאבי NetworkAttachmentDefinition ל-Distributed Cloud 1.4.0
ב-Distributed Cloud גרסה 1.4.0, הממשק bond0 מוחלף בממשק חדש בשם gdcenet0. ממשק gdcenet0 מאפשר לכם להשתמש בכרטיס ממשק הרשת (NIC) של המארח בכל מכונה של Distributed Cloud במתקן שלכם לעומסי העבודה, תוך שמירה על הפרדה מוחלטת בין התנועה ברשת של מישור הניהול והבקרה של Distributed Cloud. כדי להשתמש בפונקציונליות הזו, צריך לבצע את השלבים שמפורטים בקטע הזה כדי להגדיר מחדש את משאבי NetworkAttachmentDefinition, ואז לפעול לפי ההוראות במאמר הגדרת רשתות ב-Distributed Cloud כדי להקצות את הרשתות ותתי-הרשתות המתאימות.
לכל אשכול של Distributed Cloud שבו פרסתם משאב אחד או יותר של NetworkAttachmentDefinition, חלים כללי ההעברה הבאים:
- לכל משאב חדש מסוג
NetworkAttachmentDefinition, משתמשים בערךgdcenet0במקום בערךbond0בשדהmaster. אם מחילים משאב שמשתמש בערךbond0או בערך ריק בשדה הזה, Distributed Cloud מחליף את הערך ב-gdcenet0, ואז מאחסן את המשאב ומחיל אותו על האשכול. - לכל משאב
NetworkAttachmentDefinitionקיים, מחליפים אתbond0ב-gdcenet0כערך של השדהmaster, ואז מחילים מחדש את המשאב על האשכול כדי לשחזר את קישוריות הרשת המלאה ל-Pods המושפעים.
מידע על השימוש במשאב הזה זמין במאמר NetworkAttachmentDefinition.
הגדרת ממשק משני ב-Pod באמצעות SR-IOV VFs
אחרי שמגדירים משאב SriovNetworkNodePolicy ומשאב NetworkAttachmentDefinition תואם, אפשר להגדיר ממשק רשת משני ב-Distributed Cloud Pod באמצעות פונקציות וירטואליות של SR-IOV.
כדי לעשות זאת, מוסיפים הערה להגדרת ה-Pod של Distributed Cloud באופן הבא:
- מקש:
k8s.v1.cni.cncf.io/networks - ערך:
nameSpace/<NetworkAttachmentDefinition1,nameSpace/NetworkAttachmentDefinition2...
בדוגמה הבאה אפשר לראות איך ההערה הזו נראית:
apiVersion: v1
kind: Pod
metadata:
name: sriovpod
annotations:
k8s.v1.cni.cncf.io/networks: mynamespace/sriov-net1
spec:
containers:
- name: sleeppodsriov
command: ["sh", "-c", "trap : TERM INT; sleep infinity & wait"]
image: alpine
securityContext:
capabilities:
add:
- NET_ADMIN
הגדרת ממשק משני ב-Pod באמצעות מנהל ההתקן MacVLAN
ב-Distributed Cloud יש גם תמיכה ביצירת ממשק רשת משני ב-Pod באמצעות מנהל ההתקן MacVLAN. רק בממשק gdcenet0 אפשר להגדיר את ההגדרה הזו, ורק ב-Pods שמריצים עומסי עבודה מבוססי-קונטיינרים.
כדי להגדיר ממשק לשימוש במנהל ההתקן MacVLAN:
מגדירים משאב
NetworkAttachmentDefinitionכמו בדוגמה הבאה:apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: macvlan-b400-1 annotations: networking.gke.io/gdce-vlan-id: 400 spec: config: '{ "type": "macvlan", "master": "gdcenet0.400", "ipam": { "type": "static", "addresses": [ { "address": "192.168.100.20/27", "gateway": "192.168.100.1" } ] ... } }'מוסיפים הערה להגדרת Distributed Cloud Pod באופן הבא:
apiVersion: v1 kind: Pod metadata: name: macvlan-testpod1 annotations: k8s.v1.cni.cncf.io/networks: macvlan-b400-1
הגדרה של ממשק משני ב-Pod באמצעות רשתות מרובות ב-Distributed Cloud
ב-Distributed Cloud אפשר ליצור ממשק רשת משני ב-Pod באמצעות התכונה 'רשתות מרובות'. כדי לעשות זאת, צריך לבצע את השלבים הבאים:
מגדירים
Networkמשאב. לדוגמה:apiVersion: networking.gke.io/v1 kind: Network metadata: name: vlan200-network spec: type: L2 nodeInterfaceMatcher: interfaceName: vlan200-interface gateway4: 10.53.0.1מוסיפים הערה להגדרת ה-Pod של Distributed Cloud באופן הבא:
apiVersion: v1 kind: Pod metadata: name: myPod annotations: networking.gke.io/interfaces: [{"interfaceName":"eth1","network":"vlan200-network"}] networking.gke.io/default-interface: eth1 ...המאמרים הבאים