Score:2

วิธีลบเนมสเปซทั้งหมดยกเว้นระบบ kube ในคลัสเตอร์ K3s

ธง ar

ฉันมีคลัสเตอร์ K3 พร้อมพ็อดระบบ (เช่น ระบบ kube เนมสเปซ) และพ็อดแอปพลิเคชันของฉัน:

พ็อดระบบ kube/calico-node-xxxx                          
พ็อดระบบ kube/calico-kube-controllers-xxxxxx   
พ็อดระบบ kube/ตัวชี้วัดเซิร์ฟเวอร์ xxxxx
kube-system pod/local-path-provisioner-xxxxx
พ็อดระบบ kube/coredns-xxxxx
พ็อดระบบแอป/my-app-xxxx
ฐานข้อมูลระบบพ็อด/my-db-xxxxx

ฉันกำลังมองหาคำสั่ง shell/kubectl (สำหรับสคริปต์การทำงานอัตโนมัติ) ที่สามารถลบเนมสเปซแอปพลิเคชันของฉัน (ต้องการแก้ไข kubectl ลบเนมสเปซ ระบบแอป ระบบ db) โดยไม่ระบุชื่อเนมสเปซของแอปในคำสั่ง (เพราะในอนาคตหากเนมสเปซของแอปเข้ามาในคลัสเตอร์มากขึ้น ฉันต้องแก้ไขสคริปต์นี้ทุกครั้ง)

นั่นหมายความว่าฉันต้องการลบเนมสเปซทั้งหมดในคลัสเตอร์ ยกเว้น ระบบ kube

สิ่งที่ต้องการ - kubectl ลบเนมสเปซ -v kube-system (ฉันรู้ -v ไม่ใช่พารามิเตอร์ที่ถูกต้องที่นี่ เพียงแสดงวิธีใน grep -v ใช้เพื่อยกเว้นคำต่อไปนี้ สิ่งที่คล้ายกันกำลังมองหา kubectl ลบ ns... )

Valentin Bajrami avatar
br flag
คุณสามารถเขียนกระดาษห่อด้วยตัวคุณเองได้ดังนี้: `{ อ่าน -r; ขณะอ่าน -r ns _; ทำ [[ $ns == *kube-system* ]] && ดำเนินการต่อ ; echo "$ns"; เสร็จแล้ว ;}
Score:4
ธง br

ฉันได้สร้างโค้ดต่อไปนี้ ดังนั้นคุณสามารถใช้มันเป็นตัวห่อหุ้ม คุณสามารถตั้งชื่อสคริปต์อะไรก็ได้ที่คุณต้องการ ตัวอย่างเช่น exclud_ns_removal

#!/usr/bin/env ทุบตี

ตาย () 
{ 
    เสียงสะท้อน "$@" 1>&2
    ทางออก 1
}

การใช้งาน () 
{ 
    echo "การใช้งาน: $0 [-h] [-v namespace_to_ignore] " 1>&2
    ทางออก 0
}

อินอาร์เรย์ () 
{ 
    ท้องถิ่น n=$1 ชั่วโมง
    กะ
    สำหรับชั่วโมงใน "$@"
    ทำ
        [[ $n = "$h" ]] && กลับ
    เสร็จแล้ว
    กลับ 1
}

ในขณะที่รับตัวเลือก ":v:h" เลือก; ทำ
    กรณี $ เลือกใช้ 
        ชม)
            การใช้งาน
        ;;
        โวลต์)
            กรณี $OPTARG ใน 
                '' | *[0-9]*)
                    ตาย "ไม่อนุญาตให้ใช้ตัวเลข $OPTARG"
                ;;
                *)
                    val=$OPTARG
                ;;
            เอสแซค
        ;;
        :)
            ตาย "อาร์กิวเมนต์ที่จำเป็นในการ -$OPTARG"
        ;;
        *)
            ตาย "สวิตช์ไม่ถูกต้อง -$OPTARG"
        ;;
    เอสแซค
เสร็จแล้ว

กะ $((OPTIND - 1))

ในขณะที่ IFS='/' อ่าน -r _ ns; ทำ
    a+=("$ns")
เสร็จสิ้น < <(kubectl รับเนมสเปซ --no-headers -o ชื่อ)

ถ้า inarray "$val" "${a[@]}"; แล้ว
    ยกเลิกการตั้งค่า 'a'
    { 
        ในขณะที่ IFS='/' อ่าน -r _ ns; ทำ
            a+=("$ns")
            สำหรับฉันใน "${!a[@]}"
            ทำ
                ถ้า [[ ${a[i]} == $val ]]; แล้ว
                    ยกเลิกการตั้งค่า 'a[i]'
                ไฟ
            เสร็จแล้ว
        เสร็จแล้ว
    } < <(kubectl รับเนมสเปซ --no-headers -o ชื่อ)

    printf '%s\n\n' "ไม่รวม ... $val"
    สำหรับเนมสเปซใน "${a[@]}"
    ทำ
        printf 'กำลังลบ ... %s\n' "$namespace"
    เสร็จแล้ว
อื่น
    ตาย "ไม่พบเนมสเปซ"
ไฟ

ทำให้สคริปต์ทำงานได้:

chmod u+x exclud_ns_removal

เรียกใช้ดังต่อไปนี้:

./exclude_ns_removal -v ระบบ kube

ผลลัพธ์จะเป็นดังนี้:

ไม่รวม ... ระบบคุเบะ

กำลังลบ ... ระบบแอป
กำลังลบ ... db-system

หากผลลัพธ์ดูดี คุณควรแก้ไขบรรทัดนี้

printf 'กำลังลบ ... %s\n' "$namespace"

ถึง

kubectl ลบเนมสเปซ "$namespace"
Score:2
ธง hk
SYN

อาจง่ายกว่าคำตอบก่อนหน้า -- การเขียนสคริปต์หรือการวนซ้ำที่นี่นั้นเกินความจำเป็น kubernetes ทำทุกอย่างให้คุณ:

ป้ายกำกับ kubectl ns foo=bar --all
ฉลาก kubectl ns kube-ระบบ foo-
kubectl ลบ ns --selector foo=bar
Valentin Bajrami avatar
br flag
ฉันยอมรับว่าสคริปต์นั้นเกินความจำเป็นสำหรับงานง่าย ๆ นี้ คำถามคือการเลียนแบบฟังก์ชัน `grep -v` อย่างใด นอกจากนี้ สคริปต์ยังมีความยืดหยุ่นมากขึ้น ตรวจสอบว่ามี `เนมสเปซ` อยู่หรือไม่ และสามารถขยายได้เพื่อการทำงานที่มากขึ้น
SYN avatar
hk flag
SYN
การใช้ป้ายกำกับ คุณไม่จำเป็นต้องตรวจสอบเนมสเปซที่มีอยู่
Score:1
ธง sk

นั่นเป็นจำนวนมากสำหรับบางสิ่งที่สามารถแก้ไขได้

สำหรับฉันใน `k รับ ns -o ชื่อ | grep -v kube-ระบบ`; ทำ
k ลบ $i;
เสร็จแล้ว
Valentin Bajrami avatar
br flag
ขอบคุณมีคาล ฉันไม่ทราบตัวเลือก `-o name` ฉันมักจะใช้ `-o json` ฉันรวม `-o name` ไว้ในสคริปต์

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา