Điểm:2

Cách xóa tất cả các không gian tên ngoại trừ hệ thống kube trong cụm K3s

lá cờ ar

Tôi có một cụm K3 với các nhóm hệ thống (tức là hệ thống kube namespace) và nhóm ứng dụng của tôi:

kube-system pod/calico-node-xxxx                          
kube-system pod/calico-kube-controls-xxxxxx   
kube-system pod/metrics-server-xxxxx
kube-system pod/local-path-provisioner-xxxxx
kube-system pod/coredns-xxxxx
nhóm hệ thống ứng dụng/my-app-xxxx
db-system pod/my-db-xxxxx

Tôi đang tìm lệnh shell/kubectl (dành cho tập lệnh tự động hóa) có thể xóa không gian tên ứng dụng của tôi (muốn sửa đổi kubectl xóa không gian tên hệ thống ứng dụng hệ thống db) mà không đề cập đến tên không gian tên ứng dụng trong lệnh (vì trong tương lai nếu nhiều không gian tên ứng dụng xuất hiện trong cụm, tôi phải chỉnh sửa tập lệnh này mỗi lần).

Điều đó có nghĩa là tôi muốn xóa tất cả không gian tên trong cụm ngoại trừ hệ thống kube

cái gì đó như - kubectl xóa không gian tên -v kube-system (Tôi biết -v không phải là một tham số hợp lệ ở đây, chỉ hiển thị như thế nào trong grep -v được sử dụng để loại trừ các từ sau đây. Điều tương tự đang tìm kiếm kubectl xóa ns... )

Valentin Bajrami avatar
lá cờ br
Bạn có thể tự viết một trình bao bọc như: `{ đọc -r; trong khi đọc -r ns _; làm [[ $ns == *kube-system* ]] && tiếp tục ; tiếng vang "$ns"; xong ;}
Điểm:4
lá cờ br

Tôi đã tạo đoạn mã sau, vì vậy bạn có thể sử dụng nó làm trình bao bọc. Bạn có thể đặt tên cho kịch bản bất cứ điều gì bạn muốn. Ví dụ loại trừ_ns_removal

#!/usr/bin/env bash

chết () 
{ 
    tiếng vang "$@" 1>&2
    thoát 1
}

cách sử dụng () 
{ 
    tiếng vang "cách sử dụng: $0 [-h] [-v namespace_to_ignore] " 1>&2
    thoát 0
}

inarray () 
{ 
    cục bộ n=$1 h
    sự thay đổi
    cho h trong "$@"
    làm
        [[ $n = "$h" ]] && quay lại
    xong
    trả lại 1
}

trong khi getopts ":v:h" opt; làm
    trường hợp $chọn tham gia 
        h)
            cách sử dụng
        ;;
        v)
            trường hợp $OPTARG trong 
                '' | *[0-9]*)
                    chết "Chữ số không được phép $OPTARG"
                ;;
                *)
                    val=$OPTARG
                ;;
            thoát hiểm
        ;;
        :)
            chết "đối số cần thiết để -$OPTARG"
        ;;
        *)
            chết "công tắc không hợp lệ -$OPTARG"
        ;;
    thoát hiểm
xong

thay đổi $((OPTIND - 1))

trong khi IFS='/' read -r _ ns; làm
    a+=("$ns")
xong < <(kubectl get namespaces --no-headers -o name)

nếu inarray "$val" "${a[@]}"; sau đó
    bỏ đặt 'a'
    { 
        trong khi IFS='/' read -r _ ns; làm
            a+=("$ns")
            cho tôi trong "${!a[@]}"
            làm
                nếu [[ ${a[i]} == $val ]]; sau đó
                    bỏ đặt 'a[i]'
                fi
            xong
        xong
    } < <(kubectl get namespaces --no-headers -o name)

    printf '%s\n\n' "Không bao gồm ... $val"
    cho không gian tên trong "${a[@]}"
    làm
        printf 'Đang xóa ... %s\n' "$namespace"
    xong
khác
    chết "Không tìm thấy không gian tên"
fi

Làm cho tập lệnh có thể thực thi được:

chmod u+x loại trừ_ns_removal

Chạy nó như sau:

./exclude_ns_removal -v kube-system

Kết quả sẽ là một cái gì đó như:

Không bao gồm ... hệ thống kube

Đang xóa ... hệ thống ứng dụng
Đang xóa ... hệ thống db

Nếu đầu ra có vẻ tốt, bạn nên sửa đổi dòng này

printf 'Đang xóa ... %s\n' "$namespace"

đến

kubectl xóa không gian tên "$namespace"
Điểm:2
lá cờ hk
SYN

Có thể đơn giản hơn các câu trả lời trước -- viết tập lệnh hoặc vòng lặp ở đây là quá mức cần thiết, kubernetes sẽ làm tất cả cho bạn:

nhãn kubectl ns foo=bar --all
nhãn kubectl ns kube-system foo-
xóa kubectl ns --selector foo=bar
Valentin Bajrami avatar
lá cờ br
Tôi đồng ý rằng kịch bản là quá mức cần thiết cho nhiệm vụ đơn giản này. Câu hỏi là bằng cách nào đó bắt chước chức năng `grep -v`. Ngoài ra, tập lệnh cung cấp tính linh hoạt hơn, kiểm tra xem `không gian tên` có tồn tại hay không và có thể được mở rộng để có thêm chức năng.
SYN avatar
lá cờ hk
SYN
Tuy nhiên, khi sử dụng nhãn, bạn sẽ không phải kiểm tra xem không gian tên có tồn tại hay không.
Điểm:1
lá cờ sk

Đó là rất nhiều cho một cái gì đó có thể được giải quyết với

for i in `k get ns -o name | grep -v kube-system`; làm
k xóa $i;
xong
Valentin Bajrami avatar
lá cờ br
Cảm ơn Michal. Tôi không biết tùy chọn `-o name`. Tôi thường sử dụng `-o json`. Tôi đã kết hợp `-o name` vào tập lệnh

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.