zoukankan      html  css  js  c++  java
  • 如何一键导出k8s某个namespace下的所有yaml?

    脚本如下

    #!/bin/bash
    set -e
    
    useage(){
        echo "useage:"
        echo "  dumpk8s.sh DUMPDIR [NAMESPACE]"
    }
    
    if [ $# -lt 1 ];then
        useage
        exit
    fi
    
    DUMPDIR=$1
    NAMESPACE=$2
    
    list_names(){
        kubectl -n "${1}" get "${2}" -o custom-columns='NAME:metadata.name' --no-headers
    }
    
    dump_workload(){
        local NAMESPACE=$1
        local WORKLOAD_NAME=$2
        local i
        mkdir -p "${DUMPDIR}/${NAMESPACE}/${WORKLOAD_NAME}"
        mapfile -t WORKLOADS < <(list_names "${NAMESPACE}" "${WORKLOAD_NAME}")
        for ((i=1;i<=${#WORKLOADS[@]};i++ )); do
            WORKLOAD="${WORKLOADS[$i-1]}"
            echo "Dumping ${NAMESPACE} ${WORKLOAD_NAME} ${WORKLOAD}"
            kubectl -n "${NAMESPACE}" get "${WORKLOAD_NAME}" "${WORKLOAD}" -o yaml --export > "${DUMPDIR}/${NAMESPACE}/${WORKLOAD_NAME}/${WORKLOAD}.yaml" 2>/dev/null
        done
    }
    
    if [ -z "${NAMESPACE}" ];then
    mapfile -t WORKLOAD_NAMES < <(kubectl api-resources -oname --namespaced=false | grep -vE "(componentstatuses|authentication.k8s.io|authorization.k8s.io)")
    NAMESPACE="default"
    else
    mapfile -t WORKLOAD_NAMES < <(kubectl api-resources -oname --namespaced=true | grep -vE "(bindings|secrets|authorization.k8s.io)")
    fi
    mkdir -p "${DUMPDIR}/${NAMESPACE}"
    for ((i=1;i<=${#WORKLOAD_NAMES[@]};i++ )); do
        WORKLOAD_NAME="${WORKLOAD_NAMES[$i-1]}"
        dump_workload "${NAMESPACE}" "${WORKLOAD_NAME}"
    done
    
    echo "Done"
    

    使用方法

    dumpk8s ./testnamespace testnamespace
    
  • 相关阅读:
    泛型的内部原理:类型擦除以及类型擦除带来的问题
    Redis的那些最常见面试问题
    线程池全面解析
    对线程调度中Thread.sleep(0)的深入理解
    集群环境下Redis分布式锁
    3.8
    3.7
    3.6任务
    3.5任务
    3.4
  • 原文地址:https://www.cnblogs.com/futuretea/p/11999897.html
Copyright © 2011-2022 走看看