自動化神器 nushell ,kubernetes 好幫手
December 23, 2023•190 words
有時候我們會臨時想要修改一下 kubernetes 的相關設定,不過不需要變更到檔案。所以就想說如果可以直接修改 kubernetes 資源就好。過去可能是靠 kubernetes edit 還編輯。但是編輯久了,有時候會覺得沒效率。這時候可以靠 nushell 幫你自度化修改。
下面範例為修改 deployment 的一些設定
def "complete deployment" [ ] {
kubectl get deployments -o name|lines
}
export def use-host-namespace [ name: string@"complete deployment" ] {
mut yaml = (kubectl get $name -o yaml |from yaml)
$yaml = ($yaml | upsert spec.template.spec.hostNetwork true)
$yaml = ($yaml | upsert spec.template.spec.hostPID true)
$yaml = ($yaml | upsert spec.template.spec.hostIPC true)
$yaml | to yaml | kubectl apply -f -
}
export def set-admin [ name: string@"complete deployment" ] {
mut yaml = (kubectl get $name -o yaml |from yaml)
$yaml.spec.template.spec.containers = ($yaml.spec.template.spec.containers | each { $in | upsert securityContext.privileged true })
$yaml.spec.template.spec.containers = ($yaml.spec.template.spec.containers | each { $in | upsert securityContext.allowPrivilegeEscalation true })
$yaml | to yaml | kubectl apply -f -
}
export def set-hosts [ name: string@"complete deployment", ip: string, domain: list ] {
mut yaml = (kubectl get $name -o yaml |from yaml)
mut hosts = ($yaml| get spec.template.spec.hostAliases? | default [])
$hosts = ($hosts | filter {|it| $it.ip != $ip})
$hosts = ($hosts | append {ip: $ip, hostnames: $domain})
$yaml | to yaml | kubectl apply -f -
}