Policy Controller מגיע עם ספריית ברירת מחדל של תבניות הגבלות שאפשר להשתמש בהן עם חבילת המדיניות בנושא עלות ואמינות. החבילה הזו עוזרת לאמץ שיטות מומלצות להרצת אשכולות GKE חסכוניים בלי לפגוע בביצועים או באמינות של עומסי העבודה.
בדף הזה מוסבר איך להחיל חבילת מדיניות באופן ידני. אפשרות אחרת היא להחיל חבילות מדיניות ישירות.
מגבלות של חבילת כללי מדיניות בנושא עלות ואמינות
| שם המגבלה | תיאור המגבלה |
|---|---|
| cost-reliability-v2023-pod-disruption-budget | נדרשת הגדרה של PodDisruptionBudget עבור Deployments, ReplicaSets, StatefulSets ו-ReplicationControllers. |
| cost-reliability-v2023-pod-resources-best-practices | נדרש להגדיר בקשות למשאבים עבור קונטיינרים ולפעול לפי השיטות המומלצות. |
| cost-reliability-v2023-required-labels | כל ה-Pods וה-Controllers (ReplicaSet, Deployment, StatefulSet ו-DaemonSet) צריכים לכלול את התוויות הנדרשות: environment, team ו-app. |
| cost-reliability-v2023-restrict-repos | הגבלת קובצי אימג' של קונטיינרים לרשימת מאגרים מותרים כדי להשתמש ב-Artifact Registry וליהנות מהזרמת תמונות. |
| cost-reliability-v2023-spotvm-termination-grace | נדרש ערך של 15 שניות או פחות ל-terminationGracePeriodSeconds עבור Pods ו-Pod Templates עם nodeSelector או nodeAfffinty ל-gke-spot. |
לפני שמתחילים
- מתקינים ומאתחלים את Google Cloud CLI, שמספק את הפקודות
gcloudו-kubectlשמשמשות בהוראות האלה. אם אתם משתמשים ב-Cloud Shell, Google Cloud CLI מותקן מראש. - מתקינים את Policy Controller באשכול עם ספריית ברירת המחדל של תבניות אילוץ. בנוסף, צריך להפעיל תמיכה באילוצים שלמותיים כי החבילה הזו מכילה אילוצים כאלה.
הגדרת Policy Controller לאילוצים של הפניות
שומרים את מניפסט ה-YAML הבא בקובץ בשם
policycontroller-config.yaml. קובץ המניפסט מגדיר את Policy Controller כך שיעקוב אחרי סוגים ספציפיים של אובייקטים.apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec: sync: syncOnly: - group: "" version: "v1" kind: "Service" - group: "policy" version: "v1" kind: "PodDisruptionBudget"החלת המניפסט
policycontroller-config.yaml:kubectl apply -f policycontroller-config.yaml
הגדרת האשכול ועומס העבודה
- כל
podשנבחר על ידיserviceחייב לכלול בדיקות מוכנות. - כל הערכים של
deployment,replicaset,statefulsetו-replicationcontrollerחייבים לכלולpoddisruptionbudget. - כל מאגרי התגים צריכים לכלול בקשות מסוג
cpuו-memory, והמגבלה שלmemoryצריכה להיות שווה לבקשות מסוגmemoryבהתאם לשיטות המומלצות. - מוסיפים את התוויות
environment,teamו-appלכל ה-Pods ולכל תבניות ה-Pods. - כדי להפעיל הזרמת תמונות, צריך לארח קובצי אימג' של קונטיינרים באמצעות Artifact Registry באותו אזור שבו נמצא האשכול.
מאשרים את הגישה ל-Artifact Registry הרלוונטי לפי הדוגמה במאמר
cost-reliability-v2023-restrict-repos. - כל ה-Pods ותבניות ה-Pods שמשתמשים ב-
gke-spotחייבים לכלולterminationGracePeriodSecondsבאורך של 15 שניות או פחות.
חבילת מדיניות לביקורת על עלות ואמינות
בעזרת Policy Controller אפשר לאכוף מדיניות באשכול Kubernetes. כדי לבדוק את עומסי העבודה ואת התאימות שלהם למדיניות בנושא עלות ואמינות שמפורטת בטבלה שלמעלה, אפשר לפרוס את האילוצים האלה במצב 'ביקורת' כדי לזהות הפרות, וחשוב מכך, כדי לתת לעצמכם הזדמנות לתקן אותן לפני האכיפה באשכול Kubernetes.
אפשר להחיל את כללי המדיניות האלה עם spec.enforcementAction שמוגדר ל-dryrun באמצעות kubectl, kpt או סנכרון תצורות.
kubectl
(אופציונלי) מציגים בתצוגה מקדימה את אילוצי המדיניות באמצעות kubectl:
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
מחילים את אילוצי המדיניות באמצעות kubectl:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
הפלט שיתקבל:
gkespotvmterminationgrace.constraints.gatekeeper.sh/cost-reliability-v2023-spotvm-termination-grace created k8sallowedrepos.constraints.gatekeeper.sh/cost-reliability-v2023-restrict-repos created k8spoddisruptionbudget.constraints.gatekeeper.sh/cost-reliability-v2023-pod-disruption-budget created k8spodresourcesbestpractices.constraints.gatekeeper.sh/cost-reliability-v2023-pod-resources-best-practices created k8srequiredlabels.constraints.gatekeeper.sh/cost-reliability-v2023-required-labels created
מוודאים שאילוצי המדיניות הותקנו ובודקים אם יש הפרות בכל האשכול:
kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023
הפלט אמור להיראות כך:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS gkespotvmterminationgrace.constraints.gatekeeper.sh/cost-reliability-v2023-spotvm-termination-grace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spodresourcesbestpractices.constraints.gatekeeper.sh/cost-reliability-v2023-pod-resources-best-practices dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spoddisruptionbudget.constraints.gatekeeper.sh/cost-reliability-v2023-pod-disruption-budget dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sallowedrepos.constraints.gatekeeper.sh/cost-reliability-v2023-restrict-repos dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/cost-reliability-v2023-required-labels dryrun 0
kpt
מתקינים ומגדירים את kpt.
ההוראות האלה מתבססות על kpt כדי להתאים אישית ולפרוס משאבי Kubernetes.
מורידים את חבילת המדיניות PCI-DSS v3.2.1 מ-GitHub באמצעות kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
מריצים את הפונקציה
set-enforcement-actionkpt כדי להגדיר את פעולת האכיפה של המדיניות לערךdryrun:kpt fn eval cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
מאתחלים את ספריית העבודה באמצעות kpt, שיוצר משאב למעקב אחרי שינויים:
cd cost-reliability-v2023 kpt live init
מחילים את אילוצי המדיניות באמצעות kpt:
kpt live apply
מוודאים שאילוצי המדיניות הותקנו ובודקים אם יש הפרות בכל האשכול:
kpt live status --output table --poll-until current
הסטטוס
CURRENTמאשר שההתקנה של האילוצים בוצעה בהצלחה.
סנכרון תצורות
מתקינים ומגדירים את kpt.
ההוראות האלה מתבססות על kpt כדי להתאים אישית ולפרוס משאבי Kubernetes.
מפעילים שמשתמשים ב-סנכרון תצורות כדי לפרוס מדיניות באשכולות שלהם יכולים להשתמש בהוראות הבאות:
עוברים לספריית הסנכרון של סנכרון תצורות:
cd SYNC_ROOT_DIR
כדי ליצור או להוסיף
.gitignoreעםresourcegroup.yaml:echo resourcegroup.yaml >> .gitignore
יוצרים ספרייה ייעודית של
policies:mkdir -p policies
מורידים את חבילת המדיניות בנושא עלות ואמינות מ-GitHub באמצעות kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023 policies/cost-reliability-v2023
מריצים את הפונקציה
set-enforcement-actionkpt כדי להגדיר את פעולת האכיפה של המדיניות לערךdryrun:kpt fn eval policies/cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(אופציונלי) מציגים בתצוגה מקדימה את אילוצי המדיניות שייווצרו:
kpt live init policies/cost-reliability-v2023 kpt live apply --dry-run policies/cost-reliability-v2023
אם ספריית הסנכרון של סנכרון תצורות משתמשת ב-Kustomize, צריך להוסיף את
policies/cost-reliability-v2023ל-rootkustomization.yaml. אחרת, מסירים את הקובץpolicies/cost-reliability-v2023/kustomization.yaml:rm SYNC_ROOT_DIR/policies/cost-reliability-v2023/kustomization.yaml
דחיפת השינויים למאגר סנכרון תצורות:
git add SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Adding Cost and Reliability policy audit enforcement' git push
מאמתים את סטטוס ההתקנה:
watch gcloud beta container fleet config-management status --project PROJECT_ID
הסטטוס
SYNCEDמאשר שהמדיניות הותקנה.
הצגת הפרות מדיניות
אחרי שמתקינים את האילוצים של המדיניות במצב ביקורת, אפשר לראות את ההפרות באשכול בממשק המשתמש באמצעות לוח הבקרה של Policy Controller.
אפשר גם להשתמש ב-kubectl כדי לראות את ההפרות באשכול באמצעות הפקודה הבאה:
kubectl get constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
אם יש הפרות, אפשר לראות רשימה של הודעות ההפרה לכל אילוץ באמצעות הפקודה:
kubectl get constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
שינוי פעולת האכיפה של חבילת המדיניות בנושא עלות ומהימנות
אחרי שבודקים את הפרות המדיניות באשכול, אפשר לשנות את מצב האכיפה כך שבקרת הכניסה תהיה warn מופעלת או אפילו deny תחסום את היישום של משאב שלא עומד בדרישות באשכול.
kubectl
משתמשים ב-kubectl כדי להגדיר את פעולת האכיפה של כללי המדיניות ל-
warn:kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'מוודאים שפעולת האכיפה של הגבלות המדיניות עודכנה:
kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023
kpt
מריצים את הפונקציה
set-enforcement-actionkpt כדי להגדיר את פעולת האכיפה של המדיניות לערךwarn:kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
החלת האילוצים של מדיניות הארגון:
kpt live apply
סנכרון תצורות
מפעילים שמשתמשים ב-סנכרון תצורות כדי לפרוס מדיניות באשכולות שלהם יכולים להשתמש בהוראות הבאות:
עוברים לספריית הסנכרון של סנכרון תצורות:
cd SYNC_ROOT_DIR
מריצים את הפונקציה
set-enforcement-actionkpt כדי להגדיר את פעולת האכיפה של המדיניות לערךwarn:kpt fn eval policies/cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
דחיפת השינויים למאגר סנכרון תצורות:
git add SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Adding Cost and Reliability policy bundle warn enforcement' git push
מאמתים את סטטוס ההתקנה:
nomos status
האשכול צריך להציג סטטוס של
SYNCEDעם המדיניות המותקנת.
בדיקת אכיפת המדיניות
יוצרים משאב לא תואם באשכול באמצעות הפקודה הבאה:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
namespace: default
name: wp-non-compliant
labels:
app: wordpress
spec:
containers:
- image: wordpress
name: wordpress
ports:
- containerPort: 80
hostPort: 80
name: wordpress
EOF
בקרת הכניסה צריכה להפיק אזהרה שמפרטת את הפרות המדיניות שמתרחשות במשאב הזה, כמו בדוגמה הבאה:
Warning: [cost-reliability-v2023-pod-resources-best-practices] Container <wordpress> must set <cpu> request. Warning: [cost-reliability-v2023-pod-resources-best-practices] Container <wordpress> must set <memory> request. Warning: [cost-reliability-v2023-required-labels] This app is missing one or more required labels: `environment`, `team`, and `app`. Warning: [cost-reliability-v2023-restrict-repos] container <wordpress> has an invalid image repo <wordpress>, allowed repos are ["gcr.io/gke-release/", "gcr.io/anthos-baremetal-release/", "gcr.io/config-management-release/", "gcr.io/kubebuilder/", "gcr.io/gkeconnect/", "gke.gcr.io/"] pod/wp-non-compliant created
הסרה של חבילת מדיניות בנושא עלות ואמינות
במקרה הצורך, אפשר להסיר את חבילת המדיניות בנושא עלות ומהימנות מהאשכול.
kubectl
משתמשים ב-kubectl כדי להסיר את כללי המדיניות:
kubectl delete constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023
kpt
מסירים את כללי המדיניות:
kpt live destroy
סנכרון תצורות
מפעילים שמשתמשים ב-סנכרון תצורות כדי לפרוס מדיניות באשכולות שלהם יכולים להשתמש בהוראות הבאות:
דחיפת השינויים למאגר סנכרון תצורות:
git rm -r SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Removing Cost and Reliability policies' git push
בודקים את הסטטוס:
nomos status
האשכול אמור להציג סטטוס של
SYNCEDעם המשאבים שהוסרו.