Puncte:2

Cum să ștergeți toate spațiile de nume, cu excepția sistemului kube din clusterul K3s

drapel ar

Am un cluster K3s cu pod-uri de sistem (de ex. sistem-kube namespace) și aplicațiile mele:

kube-system pod/calico-node-xxxx                          
kube-system pod/calico-kube-controllers-xxxxxx   
kube-system pod/metrics-server-xxxxx
kube-system pod/local-path-provisioner-xxxxx
kube-system pod/coredns-xxxxx
pod-sistem-aplicație/aplicația-mea-xxxx
db-system pod/my-db-xxxxx

Caut o comandă shell/kubectl (pentru script de automatizare) care să-mi șteargă spațiul de nume al aplicației (dor să modific kubectl șterge spațiul de nume app-system db-system) fără a menționa numele spațiilor de nume ale aplicației în comandă (ca și în viitor, dacă mai multe spații de nume pentru aplicații ar veni în cluster, trebuie să editez acest script de fiecare dată).

Asta înseamnă că vreau să șterg tot spațiul de nume din cluster cu exceptia sistem-kube

ceva asemănător cu - kubectl șterge spațiul de nume -v kube-system (Știu -v nu este un parametru valid aici, arătând doar cum în grep -v este folosit pentru a excepta următoarele cuvinte. Lucru similar cautat kubectl șterge ns... )

Valentin Bajrami avatar
drapel br
Puteți scrie singur un wrapper ceva de genul: `{ citește -r; în timp ce se citește -r ns _; face [[ $ns == *kube-system* ]] && continua ; ecou „$ns”; Terminat ;}
Puncte:4
drapel br

Am creat următorul cod, așa că îl puteți folosi ca un wrapper. Puteți denumi scriptul cum doriți. De exemplu exclude_ns_removal

#!/usr/bin/env bash

a muri () 
{ 
    ecou „$@” 1>&2
    iesirea 1
}

utilizare () 
{ 
    echo "utilizare: $0 [-h] [-v namespace_to_ignore] " 1>&2
    iesirea 0
}

inarray () 
{ 
    local n=$1 h
    schimb
    pentru h în „$@”
    do
        [[ $n = "$h" ]] && return
    Terminat
    întoarce 1
}

while getopts „:v:h” opt; do
    cazul $opt in 
        h)
            utilizare
        ;;
        v)
            caz $OPTARG în 
                '' | *[0-9]*)
                    die "Numărul de cifre nu este permis $OPTARG"
                ;;
                *)
                    val=$OPTARG
                ;;
            esac
        ;;
        :)
            die "argument necesar pentru a -$OPTARG"
        ;;
        *)
            die "comutator nevalid -$OPTARG"
        ;;
    esac
Terminat

shift $((OPTIND - 1))

în timp ce IFS='/' citește -r _ ns; do
    a+=("$ns")
terminat <<(kubectl obține spații de nume --no-headers -o nume)

if inarray "$val" "${a[@]}"; atunci
    dezactivați „a”
    { 
        în timp ce IFS='/' citește -r _ ns; do
            a+=("$ns")
            pentru i în „${!a[@]}”
            do
                dacă [[ ${a[i]} == $val ]]; atunci
                    dezactivați „a[i]”
                fi
            Terminat
        Terminat
    } < <(kubectl obține spații de nume --no-headers -o nume)

    printf '%s\n\n' "Excluzând... $val"
    pentru spațiul de nume în „${a[@]}”
    do
        printf „Se șterge... %s\n” „$namespace”
    Terminat
altfel
    die „Nu a fost găsit niciun spațiu de nume”
fi

Faceți scriptul executabil:

chmod u+x exclude_ns_removal

Rulați-l după cum urmează:

./exclude_ns_removal -v kube-system

Rezultatul va fi ceva de genul:

Excluzând ... kube-system

Se șterge... sistem de aplicații
Se șterge... db-system

Dacă rezultatul arată bine, ar trebui să modificați această linie

printf „Se șterge... %s\n” „$namespace”

la

kubectl șterge spațiul de nume „$namespace”
Puncte:2
drapel hk
SYN

Poate fi mai simplu decât răspunsurile anterioare - scrierea de scripturi sau bucle aici este exagerată, kubernetes face totul pentru tine:

kubectl label ns foo=bar --all
kubectl label ns kube-system foo-
kubectl delete ns --selector foo=bar
Valentin Bajrami avatar
drapel br
Sunt de acord că scenariul este exagerat doar pentru această sarcină simplă. Întrebarea a fost să imitem cumva funcționalitatea `grep -v`. De asemenea, scriptul oferă mai multă flexibilitate, verifică dacă există un „spațiu de nume” și poate fi extins pentru mai multe funcționalități.
SYN avatar
drapel hk
SYN
Folosind etichete, nu ar trebui să verificați totuși că există un spațiu de nume.
Puncte:1
drapel sk

Asta e mult pentru ceva cu care s-ar putea rezolva

pentru i în `k obține ns -o nume | grep -v kube-system`; do
k șterge $i;
Terminat
Valentin Bajrami avatar
drapel br
Multumesc Michal. Nu știam opțiunea „-o nume”. Folosesc adesea `-o json`. Am încorporat `-o nume` în script

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.