ááá¯ááŸá
áºááœááºá áááºáá¥áá±á¬á Kubernetes ááœááºáááá·áº - KubeCon + CloudNativeCon Europe 2020 - ááẠvirtual ááŒá
áºáá²á·áááºá ááá¯á·áá±á¬áºá á€áá¯á¶á
á¶ááŒá±á¬ááºážáá²ááŸá¯ááẠáá»áœááºá¯ááºááá¯á·á áá¬áááŸááºá
á®á
ááºáá¬ážáá±á¬ á¡á
á®áááºáá¶á
ᬠâGo? Bash! áá»áœááºá¯ááºááá¯á·á Open Source ááá±á¬áá»ááºá¡ááœáẠáááºááœááºáá¬ážáá±á¬ Shell-á¡á±á¬áºááá±áá¬ááŸáá·áº ááœá±á·áá¯á¶áá«á
áá±á¬ááŒá±á¬áá»ááºá០ááŸá¯á¶á·áá±á¬áºáá±ážááá·áº á€áá±á¬ááºážáá«ážááẠKubernetes á¡ááœáẠá¡á±á¬áºááá±áá¬áá»á¬áž áááºáá®ážááŒááºáž áá¯ááºáááºážá ááºááᯠááá¯ážááŸááºážá á±ááá·áº áá»ááºážáááºáááºážááᯠáááºáááºáá¬ážááŒá®áž shell-operator ááᯠá¡áá¯á¶ážááŒá¯á á¡áááºážáá¯á¶áž á¡á¬ážáá¯ááºááŸá¯ááŒáá·áº ááá·áºááá¯ááºááá¯áẠáááºáá®ážááá¯ááºáá¯á¶ááᯠááŒááá¬ážáááºá
ááááºáááºáá±ážááŒááºáž
Flant ááœáẠáá»áœááºá¯ááºááá¯á·ááẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠá¡áááºáááŒáẠoptimize áá¯ááºááŒá®áž á¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá«áááºá áá®áá±á·áá±á¬á· áá±á¬ááºááẠá áááºááŸá¯ááºááŸá¬ážá áᬠá¡áá°á¡ááá áºáá¯á¡ááŒá±á¬ááºáž ááŒá±á¬ááŒáá»ááºáá«áááºá ááœá±á·áá¯á¶áááº- cloud-native shell scripting!
ááá¯á·áá±á¬áºá á€á¡áá¬á¡á¬ážáá¯á¶ážááŒá áºáá»ááºááá·áºá¡ááŒá±á¬ááºážá¡áá¬ááŸáá·áºá ááŒáá«á áá¯á·- Kubernetesá
Kubernetes API ááŸáá·áº ááááºážáá»á¯ááºáááááá¬áá»á¬áž
Kubernetes ááŸá API ááᯠá¡áá¬ááá¹áá¯á¡áá»áá¯ážá¡á á¬ážáá áºáá¯á á®á¡ááœáẠáááºážááœáŸááºáá»á¬ážáá«ááŸááá±á¬ ááá¯ááºáá¬áá¬á¡áá»áá¯ážá¡á á¬ážáá áºáá¯á¡ááŒá Ạááá¯ááºá á¬ážááŒá¯ááá¯ááºáá«áááºá á€áá¬áá¬ááŸá á¡áá¬ááá¹áá¯áá»á¬áž (á¡áááºážá¡ááŒá áºáá»á¬áž) ááᯠYAML ááá¯ááºáá»á¬ážááŒáá·áº ááá¯ááºá á¬ážááŒá¯áá«áááºá ááá¯á·á¡ááŒááºá áá¬áá¬ááœáẠááá·áºá¡á¬áž á¡áá¬áá¯á¶ážáá¯ááᯠáá¯ááºáá±á¬ááºááá¯ááºá á±ááá·áº á¡ááŒá±áᶠAPI áá áºáá¯ááŸááááºá
- áá¶áá° á¡áááºážá¡ááŒá áºá
- á¡ááŒá±á¬ááºážá¡áá² á¡áááºážá¡ááŒá áºáá»á¬áž (á€ááá á¹á ááœááºá áá¬áá¬ááẠ"ááŸááºáááºáá±á¬" á¡áá¬ááá¹áá¯áá»á¬ážááá¯áᬠááááºážáááºážááẠ- ááŸá¬ážááœááºážá áœá¬ááœá²á·á ááºážáá¬ážáá±á¬ á¡áá¬áá»á¬áž ááá¯á·ááá¯áẠá¡ááŒá¬ážáááºážááœáŸááºáá»á¬ážá¡ááœáẠáááºááœááºáá¬ážáá±á¬ á¡á¬ážáá¯á¶ážááᯠá áœáá·áºáá áºááá¯ááºáááº)
- áá áºáá¯áẠá¡áááºážá¡ááŒá áºá¡ááœáẠ(á€ááá á¹á ááœááºá á¡áá¯á¶ážááŒá¯áá°ááẠáááºážááááºááŸá/ááœááºážáá¶áá¬ážáá±á¬áá¬ážááŸááºážááᯠáá»ááºáá»ááºážáááºáá¶áááŸááááº)á
ááá¯á·ááŒá±á¬áá·áºá Kubernetes ááẠá¡ááŒá±áá¶áááºážáááºážáá¯á¶ážáá»áá¯ážááŒáá·áº ááá¯ááºáá¬áá¬áá áºáá»áá¯áž (YAML manifests á¡ááœááº) áá¯ááºáá±á¬ááºááẠ(áá¯ááºáá«áááºá á¡ááŸááºááááºááœáẠá¡ááŒá¬ážáá°áá»á¬ážááŸááá±á¬áºáááºáž áááºážááá¯á·ááᯠááá¯áá±á¬áá±á¬ááẠáá»ááºááŸááºáá¬ážáááº)á
ááŒá¿áá¬ááŸá¬ áá¬áá¬ááẠá¡áá»ááºá¡áááºáá»á¬ážááá¯áᬠááááºážáááºážááá¯ááºáá±á¬ááŒá±á¬áá·áºááŒá
áºáááºá áááºážááá¯áá¯ááºáá±á¬ááºáááºáááºááá¯á¡ááºáááºá controller ááᯠ- Kubernetes áááá¹áá¬ááœááºáá¯áááá¡áá±ážááŒá®ážáá¯á¶ážááŸáá·áºá¡ááŒá±áá¶áá»áá±á¬á¡áá°á¡áá
Controller á¡áá»áá¯ážá¡á á¬áž ááŸá áºáá»áá¯ážááŸááá«áááºá áááá¡áá»ááºá Kubernetes á០á¡áá»ááºá¡áááºáá»á¬ážááᯠááá°ááŒá®áž nested logic á¡á áááºážááᯠáá¯ááºáá±á¬ááºááŒá®áž K8s ááá¯á· ááŒááºáá±ážáááºá áá¯ááááá áºáá»áá¯ážááẠKubernetes á០á¡áá»ááºá¡áááºáá»á¬ážááᯠááá°áá±á¬áºáááºáž áááá¡áá»áá¯ážá¡á á¬ážááŸáá·áºááá°áá² ááŒááºáá¡áááºážá¡ááŒá áºá¡áá»áá¯á·á á¡ááŒá±á¡áá±ááᯠááŒá±á¬ááºážáá²áá«áááºá
Kubernetes ááœáẠá¡áá¯á¶ážáá»ááŸá¯ áááºáá®ážááŒááºáž áá¯ááºáááºážá ááºááᯠá¡áá®ážááẠáá±á·áá¬ááŒáá·áºááŒáá«á áá¯á·á
- Deployment Controller (áá²ááœáẠáá«áááºáááºá
kube-controller-manager
) ááŒáá·áºáá»ááºááŒááºážááá¯ááºáᬠá¡áá»ááºá¡áááºááᯠáááºáá¶áááŸáááŒá®áž ReplicaSet áá áºáá¯ááᯠáááºáá®ážáá±ážáááºá - ReplicaSet ááẠá€á¡áá»ááºá¡áááºá¡áá±á«áºá¡ááŒá±áá¶á áá¯á¶áá°ááŸá áºááẠ(ááŸá áºáᯠpods) ááᯠáááºáá®ážáá±ážáá±á¬áºáááºáž ဠpods áá»á¬ážááᯠá á®á ááºáá¬ážááŒááºážáááŸááá±ážáá«á
- á¡á á®á¡á ááºááœá²áá°ááẠpods áá»á¬ážááᯠá¡áá»áááºááá¬ážááœá²ááŒá®áž áááºážááá¯á·á YAML áá»á¬ážááá¯á· node á¡áá»ááºá¡áááºáá»á¬ážááᯠáá±á«ááºážááá·áºáááºá
- Kubelets ááẠááŒááºáá¡áááºážá¡ááŒá áºáá áºáá¯ááá¯á· ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááŒá¯áá¯ááºááẠ(Docker áá¯ááá¯áá«)á
ááá¯á·áá±á¬áẠá€á¡á á®á¡á á¥áºáá áºáá¯áá¯á¶ážááᯠááŒá±á¬ááºážááŒááºá¡á á®á¡á á¥áºááŒáá·áº áááºáá«ááá²áá² ááŒá¯áá¯ááºáááº- kubelet ááẠááœááºááááºáá¬áá»á¬ážááᯠá á áºáá±ážááŒá®ážá áá°ážá á¡ááŒá±á¡áá±ááᯠááœááºáá»ááºáᬠááŒááºááá¯á·áá±ážáá«áááºá ReplicaSet ááááºážáá»á¯ááºáá°ááẠá¡ááŒá±á¡áá±ááá¯áááºáá¶áááŸáááŒá®áž áá¯á¶á á¶áá°á¡á á¯áá¡ááŒá±á¡áá±ááᯠá¡ááºááááºáá¯ááºáááºá Deployment Controller ááœáẠá¡áá¬ážáá°á¡áá¬áá»áá¯áž ááŒá¯á¶áááŒá®áž áá¯á¶ážá áœá²áá°ááẠáá±á¬ááºáá¯á¶ážááœáẠá¡ááºááááºáá¯ááºáá¬ážáá±á¬ (áááºááŸá) á¡ááŒá±á¡áá±ááᯠáááŸááááºááŒá áºáááºá
ááŸá²ááº-á¡á±á¬áº
Kubernetes ááẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ ááááºážáá»á¯ááºáááááá¬áá»á¬ážá áá°ážááœá²áá¯ááºáá±á¬ááºááŸá¯á¡áá±á«áº á¡ááŒá±áá¶áá¬ážááẠ(Kubernetes á¡á±á¬áºááá±áá¬áá»á¬ážááẠááááºážáá»á¯ááºáá°áá»á¬ážáááºážááŒá
áºáááº)á áá±ážá
áá¬ááŸááá¬áá¬áá ááá·áºááá¯ááºááá¯ááºá¡á±á¬áºááá±áá¬ááᯠá¡á¬ážáá¯ááºááŸá¯á¡áááºážáá¯á¶ážáá²á· áááºááá¯áááºáá®ážááá²á á€áá±áá¬ááœáẠáá»áœááºá¯ááºááá¯á·áá®ááœááºáá¬ážááá·áºá¡áá¬ááẠáááºáááºááŒááºážááá¯á·áá±á¬ááºáá«áááºá
ááá¯ážááŸááºážáá±á¬ á¥ááá¬- áá»áŸáá¯á·ááŸááºáá»ááºáá»á¬ážááᯠáá°ážáá°ááŒááºážá
ááá¯ážááŸááºážáá±á¬á¥ááá¬ááá¯ááŒáá·áºááŒáá«á áá¯á·á
áá»áœááºá¯ááºááá¯á·ááœáẠKubernetes á¡á
á¯á¡áá±ážáá
áºáá¯ááŸáááẠááá¯ááŒáá«á
áá¯á·á áááºážááœáẠnamespace ááŸááááºá default
áá»áŸáá¯á·ááŸááºáá»ááºá¡áá»áá¯á·ááŸáá·áº mysecret
. ááá¯á·á¡ááŒááºá á¡á
á¯á¡áá±ážááœáẠá¡ááŒá¬ážá¡áááºááœááºáá»á¬áž ááŸááá±ážáááºá áááºážááá¯á·ááœáẠá¡áá»áá¯á·áá±á¬ áá®ážááŒá¬ážáá¶ááááºáá
áºáá¯áá«ááŸááááºá áá»áœááºá¯ááºááá¯á·ááááºááœááºáá»ááºááŸá¬ áá»áŸáá¯á·ááŸááºáá»ááºááᯠá¡ááœáŸááºážáá
áºáá¯ááŒáá·áº namespaces ááá¯á· áá°ážáá°áááºááŒá
áºáááºá
á¡áá áºáá±á¬ namespaces á¡á á¯á¡áá±ážááœááºáá±á«áºáá¬ááá¯ááºáááºáá°áá±á¬á¡áá»ááºááŒá±á¬áá·áºá¡áá¯ááºáááºááŸá¯ááºááœá±ážáááºá áááºážááá¯á·áá²ááŸá¡áá»áá¯á·áááºá€áá¶ááááºáá«ááá¯ááºáááºá á¡ááŒá¬ážáá áºáááºááœááºá á¡ááœáŸááºážááá¯áá»ááºáá±á¬á¡áá«á áá»áŸáá¯á·ááŸááºáá»ááºááá¯áááºážáá»ááºááá·áºáááºá áááºážá¡ááŒááºá áá»áŸáá¯á·ááŸááºáá»ááºááá¯ááºááá¯ááºáááºáž ááŒá±á¬ááºážáá²ááá¯ááºáááº- á€ááá á¹á ááœááºá áá»áŸáá¯á·ááŸááºáá»ááºá¡áá áºááᯠá¡ááœáŸááºážáá»á¬ážáá«ááá·áº áá±áá¬á¡á¬ážáá¯á¶ážááá¯á· áá°ážáá°ááááºááŒá áºáááºá á¡áááºá áá»áŸáá¯á·ááŸááºáá»ááºááᯠáááºááá·áº namespace ááœááºáááᯠááá±á¬áºáá áá»ááºáááá«áá áá»áœááºá¯ááºááá¯á·á á¡á±á¬áºááá±áá¬ááẠáááºážááᯠáá»ááºáá»ááºáž ááŒááºáááºááá°ááá·áºáááºá
ááᯠáá¯ááºáá±á¬ááºá áá¬ááᯠáá¯á¶áá±á¬áºááŒá®ážáááºááŸáá·áºá shell-operator ááᯠá¡áá¯á¶ážááŒá¯á áááºážááᯠá áááºá¡áá±á¬ááºá¡áááºáá±á¬áºááẠá¡áá»áááºáá»áá±á¬ááºááŒá®ááŒá áºáááºá ááá¯á·áá±á¬áº ááááŠážá áœá¬ shell-operator ááá¯ááºááá¯ááºá¡ááŒá±á¬ááºáž á áá¬ážá¡áááºážáááºááŒá±á¬ááá·áºáá«áááºá
shell-operator á¡áá¯ááºáá¯ááºáá¯á¶
Kubernetes ááŸá á¡ááŒá¬ážá¡áá¯ááºáá»á¬ážáá²á·ááá¯á·áááºá shell-operator ááẠáááºážáááá¯ááºááá¯áẠpod ááœááºá¡áá¯ááºáá¯ááºáááºá áá® pod áá²ááŸá¬ directory áá²ááŸá¬ /hooks
executable ááá¯ááºáá»á¬ážááá¯ááááºážáááºážáá¬ážáááºá áááºážááá¯á·ááẠBashá Pythoná Ruby á
áááºááá¯á·ááœáẠscript áá»á¬ážááŒá
áºááá¯ááºáááºá executable files hooks áá¯áá±á«áºááẠ(áá»áááº).
Shell-operator ááẠKubernetes ááœá²áá»á¬ážááᯠá
á¬áááºážááœááºážááŒá®áž áá»áœááºá¯ááºááá¯á· ááá¯á¡ááºááá·áº á¡ááŒá
áºá¡áá»ááºáá»á¬ážááᯠáá¯á¶á·ááŒááºáááºá¡ááœáẠá€áá»áááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáá«áááºá
shell-operator á áááºáá»áááºááᯠrun áááá²á áááºá¡áá»áááºááŸá¬ áááºááá¯áááá¬áá²á á¡áááá¡áá»ááºááŸá¬ áá»áááºááá¯ááºážááœáẠá¡ááá·áºááŸá
áºááá·áºááŸááááºá á
áááºáá»áááºááœááºá shell-operator ááẠá¡ááŒááºážá¡áá¯á¶áá
áºáá¯ááŒáá·áº áá»áááºá¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºáááºá --config
á€áááºááŸá¬ ááœá²á·á
ááºážááŸá¯á¡ááá·áºááŒá
áºáááºá áááºážáá±á¬ááºááœááºá áááºážááá¯á·ááœá²áá±ááá·áºááŒá
áºáááºáá»á¬ážááᯠáá¯á¶á·ááŒááºáááºá¡ááœáẠáá»áááºáá»á¬ážááᯠáá¯á¶ááŸááºáááºážáááºážá¡ááá¯ááºáž á
áááºáá¯ááºáá±á¬ááºáááºá áá±á¬ááºáá¯á¶ážá¡ááŒá±á¡áá±ááœááºá áá»áááºááẠbinding context ááá¯áááºáá¶ááẠ(binding áááºá
ááº) - JSON áá±á¬áºáááºááŸá áá±áá¬á á¡á±á¬ááºááœáẠááá¯ááá¯á¡áá±ážá
áááºááŒá±á¬áá«áááºá
Bash ááœáẠá¡á±á¬áºááá±áá¬áá áºáᯠááŒá¯áá¯ááºááŒááºážá
á¡áá¯áá±á¬á· á¡áá±á¬ááºá¡áááºáá±á¬áºááá¯á· á¡áááºááá·áºááŒá
áºáá±áá«ááŒá®á áá«ááá¯áá¯ááºááá¯á·á function ááŸá
áºáá¯áá±ážááá¯á·ááá¯ááẠ(áááºážáááºážá¡á¬ážááŒáá·áºáá»áœááºá¯ááºááá¯á·á¡ááŒá¶ááŒá¯áááºá á
á¬ááŒáá·áºááá¯ááº
- configuration á¡ááá·áºá¡ááœáẠááááá¯á¶áž ááá¯á¡ááºááẠ- áááºážááẠbinding context ááá¯ááŒááááºá
- áá¯áááááœáẠhook áá¡ááááá¯áá¹áááá«ááŸááááºá
#!/bin/bash
source /shell_lib.sh
function __config__() {
cat << EOF
configVersion: v1
# BINDING CONFIGURATION
EOF
}
function __main__() {
# THE LOGIC
}
hook::run "$@"
áá±á¬ááºáá áºááá·áºááŸá¬ áá»áœááºá¯ááºááá¯á·ááá¯á¡ááºááá·áºá¡áá¬áá»á¬ážááᯠáá¯á¶ážááŒááºáááºááŒá áºáááºá áá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¡áá±ááœááºá áá»áœááºá¯ááºááá¯á·ááẠááŒá±áá¬áá¶ááẠááá¯á¡ááºáááº-
- á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážá¡ááœáẠá¡áááºážá¡ááŒá áºáá»áŸáá¯á·ááŸááºáá»ááº
- á¡á á¯á¡áá±ážááŸá namespaces áá»á¬ážá¡á¬ážáá¯á¶ážááẠáááºážááá¯á·ááŸáá·áº ááœá²áá¬ážáá±á¬ á¡ááœáŸááºážáá áºáá¯ááŸááááºááᯠáááºááá á±áááºá
- áááºážááá¯á·á¡á¬ážáá¯á¶ážááẠá¡áááºážá¡ááŒá áºáá»áŸáá¯á·ááŸááºáá»ááºááŸáá·áº áááºáá°áá»ááŒá±á¬ááºáž áá±áá»á¬á á±ááẠáá áºááŸááºáá¬áž áá»áŸáá¯á·ááŸááºáá»ááºáá»á¬ážá
áá»áŸáá¯á·ááŸááºá¡áááºážá¡ááŒá áºááᯠá á¬áááºážááœááºážáá«á
Binding configuration ááẠá¡áá±á¬áºáá±ážááá¯ážááŸááºážáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áŸáá¯á·ááŸááºá¡áááºááŒáá·áº á
áááºáááºá
á¬ážááŒá±á¬ááºáž áá±á¬áºááŒáá«áááºá mysecret
namespace ááœáẠdefault
:
function __config__() {
cat << EOF
configVersion: v1
kubernetes:
- name: src_secret
apiVersion: v1
kind: Secret
nameSelector:
matchNames:
- mysecret
namespace:
nameSelector:
matchNames: ["default"]
group: main
EOF
ááááºá¡áá±ááŒáá·áº á¡áááºážá¡ááŒá
áºáá»áŸáá¯á·ááŸááºáá»áẠááŒá±á¬ááºážáá²áá±á¬á¡áá«ááœáẠáá»áááºááᯠá¡á
áá»áá¯ážáááá·áºááẠ(src_secret
) ááŸáá·áº á¡á±á¬ááºáá« binding context ááᯠáááºáá¶ááá°áá« á
áááºááŒááºááá·áºá¡ááá¯ááºážá áááºážááœáẠá¡áááºááŸáá·áº á¡áá¬ááá¹áá¯áá
áºáá¯áá¯á¶ážáá«ááŸááááºá
namespace áá»á¬ážááá¯ááŒá±áá¬áá¶ááŒááºážá
ááá¯ááẠnamespaces ááá¯á á¬áááºážááœááºážáááºááá¯á¡ááºáá«áááºá áááºážááá¯áá¯ááºáá±á¬ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá« binding configuration ááᯠáááºááŸááºáá±ážáááº-
- name: namespaces
group: main
apiVersion: v1
kind: Namespace
jqFilter: |
{
namespace: .metadata.name,
hasLabel: (
.metadata.labels // {} |
contains({"secret": "yes"})
)
}
group: main
keepFullObjectsInMemory: false
áááºááœá±á·ááŒááºáááá·áºá¡ááá¯ááºáž á¡áááºááŒáá·áº ááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶ááœáẠá¡ááœááºá¡áá
áºáá
áºáᯠáá±á«áºáá¬áááºá jqFilter áá¬áááºá¡áá jqFilter
áááá¯á¡ááºáá±á¬ á¡áá»ááºá¡áááºá¡á¬ážáá¯á¶ážááᯠá
á
áºáá¯ááºááŒá®áž áá»áœááºá¯ááºááá¯á·á
áááºáááºá
á¬ážáá±á¬ á¡ááœááºáá»á¬ážááŒáá·áº JSON á¡áá¬ááá¹áá¯á¡áá
áºááᯠáááºáá®ážáá±ážáá«áááºá á¡áá¬ážáá° ááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶áá
áºáá¯áá«áá±á¬ áá»áááºáá
áºáá¯ááẠá¡á±á¬ááºáá«á
ááºážááŸá±á¬ááºááŸá¯ááá¯ááºáᬠá¡ááŒá±á¬ááºážá¡áá¬ááᯠáááŸááááá·áºáááº-
áááºážááœáẠarray áá
áºáá¯áá«ááŸááááºá filterResults
á¡á
á¯á¡áá±ážááŸá namespace áá
áºáá¯á
á®á¡ááœááºá Boolean ááŒá±á¬ááºážáá²ááŸá¯ hasLabel
áá±ážáá¬ážáá±á¬ namespace ááœáẠá¡ááœáŸááºážáá
áºáᯠááœá²áá¬ážááŒááºáž ááŸááááŸá áá±á¬áºááŒáááºá ááœá±ážáá»ááºáá° keepFullObjectsInMemory: false
ááŒá®ážááŒáá·áºá
á¯á¶áá±á¬ á¡áá¬ááá¹áá¯áá»á¬ážááᯠááŸááºáá¬ááºááœáẠááááºážáááºážáá¬ážááẠáááá¯á¡ááºááŒá±á¬ááºáž ááœáŸááºááŒáááºá
áá áºááŸááºáá»áŸáá¯á·ááŸááºáá»ááºáá»á¬ážááᯠááŒá±áá¬áá¶ááŒááºážá
ááŸááºáá»ááºáá
áºáᯠáááºááŸááºáá¬ážááá·áº áá»áŸáá¯á·ááŸááºáá»ááºá¡á¬ážáá¯á¶ážááᯠáá»áœááºá¯ááºááá¯á· á
á¬áááºážááœááºážáá«áááºá managed-secret: "yes"
(áá«á áá«ááá¯á·áá²á· áá
áºááŸááºáá²á dst_secrets
):
- name: dst_secrets
apiVersion: v1
kind: Secret
labelSelector:
matchLabels:
managed-secret: "yes"
jqFilter: |
{
"namespace":
.metadata.namespace,
"resourceVersion":
.metadata.annotations.resourceVersion
}
group: main
keepFullObjectsInMemory: false
á€ááá
á¹á
ááœááºáá¯ááŸá
áº, jqFilter
namespace ááŸáá·áº parameter ááŸááœá²á á¡áá»ááºá¡áááºá¡á¬ážáá¯á¶ážááᯠá
á
áºáá¯ááºáááºá resourceVersion
. áá»áŸáá¯á·ááŸááºáá»ááºááᯠáááºáá®ážáá±á¬á¡áá«ááœáẠáá±á¬ááºáá¯á¶áž ááá·áºáááºáá»ááºá¡á¬áž ááŸááºáá»ááºááá¯á· áá°ážááœá¬ážáááº- áááºážááẠááá·áºá¡á¬áž áá»áŸáá¯á·ááŸááºáá¬ážááŸááºážáá»á¬ážááᯠááŸáá¯ááºážááŸááºáᬠáááºážááá¯á·ááᯠáá±á¬ááºáá¯á¶ážáá±á«áº áá¬ážááŸáááá¯ááºá
á±áááºááŒá
áºáááºá
á€áááºážááŒáá·áº ááŒááºáááºáá¬ážáá±á¬ áá»áááºáá áºáá¯ááẠááœááºáá»ááºááá·áºá¡áá«ááœááºá á¡áááºááœááºáá±á¬áºááŒáá¬ážáá±á¬ á ááºážááŸá±á¬ááºááŸá¯áá¯á¶ážáá¯ááᯠáááºáá¶áááŸááááºááŒá áºáááºá áááºážááá¯á·ááᯠáá»áŸááºáá áºááŒááºááá¯ááºáá»ááºáá áºáá¯á¡ááŒá Ạáá°áááá¯ááºááẠ(áá»áŸááºáá áºááŒááº) á¡á á¯á¡ááœá²á·á
á€á¡áá»ááºá¡áááºá¡á¬ážáá¯á¶ážááᯠá¡ááŒá±áá¶á á¡ááŒá±áᶠalgorithm áá
áºáá¯ááᯠáá®ááœááºááá¯ááºáááºá áááºážááẠnamespaces á¡á¬ážáá¯á¶ážá¡áá±á«áº áááºááá²áá² ááŸáá·áº-
- áá»áŸááº
hasLabel
ááá á¹á áááºáá»á¬ážtrue
áááºááŸá namespace á¡ááœááº-- ááá¹áá¬áá¯á¶ážááá¯ááºáá¬áá»áŸáá¯á·ááŸááºáá»ááºááᯠááŒááºááœááºážáá
áºáá¯ááŸáá·áº ááŸáá¯ááºážááŸááºáááº-
- áá°áá®áá»áŸáẠáá¬ááŸááá¯ááºáááºá
- ááœá²ááŒá¬ážáá»áŸáẠ- ááœááºáá»ááºáááºá
kubectl replace
ááá¯á·ááá¯ááºcreate
;
- ááá¹áá¬áá¯á¶ážááá¯ááºáá¬áá»áŸáá¯á·ááŸááºáá»ááºááᯠááŒááºááœááºážáá
áºáá¯ááŸáá·áº ááŸáá¯ááºážááŸááºáááº-
- áá»áŸááº
hasLabel
ááá á¹á áááºáá»á¬ážfalse
áááºááŸá namespace á¡ááœááº-- áá»áŸáá¯á·ááŸááºáá»ááºááẠáá±ážáá¬ážáá±á¬ namespace ááœááºáááŸáááŒá±á¬ááºáž áá±áá»á¬á
á±áááº-
- ááŒááºááœááºážáá»áŸáá¯á·ááŸááºáá»ááºááŸááá±áá«á áááºážááá¯á¡áá¯á¶ážááŒá¯á áá»ááºáá«á
kubectl delete
; - ááŒááºááœááºážáá»áŸáá¯á·ááŸááºáá»ááºááᯠááŸá¬áááœá±á·áá«á áá¬ááŸáá¯ááºáááºááá¯ááºáá«á
- ááŒááºááœááºážáá»áŸáá¯á·ááŸááºáá»ááºááŸááá±áá«á áááºážááá¯á¡áá¯á¶ážááŒá¯á áá»ááºáá«á
- áá»áŸáá¯á·ááŸááºáá»ááºááẠáá±ážáá¬ážáá±á¬ namespace ááœááºáááŸáááŒá±á¬ááºáž áá±áá»á¬á
á±áááº-
áá«á០YAML config 35 ááá¯ááºážáá²á· Bash code ááá¬ááá±á¬ááºááᯠá¡áá¯á¶ážááŒá¯ááŒá®áž ááá¯ážááŸááºážáá²á· Kubernetes controller ááᯠáááºáá®ážááá¯ááºáá²á·áááºá shell-operator áá¡áá¯ááºááŸá¬ áááºážááá¯á·ááᯠáá»áááºáááºáááºááŒá áºáááºá
ááá¯á·áá±á¬áº áá»áŸáá¯á·ááŸááºáá»ááºáá»á¬ážááᯠáá°ážáá°ááŒááºážááẠá¡áá¯á¶ážáááºááŸá¯á áá áºáá¯áááºážáá±á¬ áááºáááºááá¯ááºáá±á á€áááºááŸá¬ áá°áá¬á áœááºážáá±á¬ááºááá¯ááºáááºááᯠááŒáááẠáá±á¬ááºáááºá¥ááá¬á¡áá»áá¯á·ááŒá áºáááºá
á¥ááᬠ1- ConfigMap ááá¯á· ááŒá±á¬ááºážáá²ááŸá¯áá»á¬áž ááŒá¯áá¯ááºááŒááºážá
pod áá¯á¶ážáá¯áá«áááºááá·áº Deployment ááᯠááŒáá·áºááŒáá«á áá¯á·á áá¯á¶á á¶á¡áá»áá¯á·ááᯠááááºážáááºážááẠPods áá»á¬ážááẠConfigMap ááá¯á¡áá¯á¶ážááŒá¯áááºá pods áá»á¬ážááᯠá áááºááá¯ááºáá±á¬á¡áá«á ConfigMap ááẠáááºááŸááºáá¬ážáá±á¬ á¡ááŒá±á¡áá±ááœáẠááŸááá±ááẠ(áááºážááᯠv.1 áá¯áá±á«áºááŒáá«á áá¯á·)á ááá¯á·ááŒá±á¬áá·áºá pod áá»á¬ážá¡á¬ážáá¯á¶ážááẠConfigMap áá€á¡áá°ážáá¬ážááŸááºážááá¯á¡áá¯á¶ážááŒá¯áááºá
ááᯠConfigMap (v.2) ááŒá±á¬ááºážááœá¬ážááŒá®áᯠáá°áááŒáá«á áá¯á·á ááá¯á·áá±á¬áºá áá±á«á·ááºáá»á¬ážááẠConfigMap (v.1) á ááááºáá¬ážááŸááºážááᯠá¡áá¯á¶ážááŒá¯áá«áááº-
ConfigMap (v.2) á¡áá
áºááá¯á· áááºážááá¯á·ááᯠáááºááá¯á·ááŒá±á¬ááºážááá¯ááºáááºáááºážá á¡ááŒá±á ááá¯ážááŸááºážáá«áááº- ááá°áá¬áá¯á¶á
á¶ááᯠá¡áá¯á¶ážááŒá¯áá«á á¡ááá¯ááºážááá¯á· checksum ááŸááºáá»ááºáá»á¬ážááᯠááá·áºááŒáá«á
áá¯á· template
ááŒáá·áºáá»ááºááœá²á·á
ááºážáá¯á¶áá»á¬áž-
ááááºá¡áá±ááŒáá·áº ဠchecksum ááẠpods á¡á¬ážáá¯á¶ážááœáẠá
á¬áááºážááœááºážáááºááŒá
áºááŒá®ážá áááºážááẠDeployment ááŸáá·áº á¡áá°áá°áááºááŒá
áºáááá·áºáááºá ááᯠConfigMap ááŒá±á¬ááºážáá²áá±á¬á¡áá«ááœáẠááŸááºáá»ááºááᯠá¡ááºááááºáá¯ááºááẠááá¯á¡ááºáá«áááºá ááŒá®ážáá±á¬á· shell-operator á áá®ááá
á¹á
ááŸá¬ á¡áááºááŒá±áá«áááºá áááºáá¯ááºáááºá¡á¬ážáá¯á¶ážáááºá¡á
á®á¡á
ááºááŒá
áºáááºá ConfigMap ááᯠá
á¬áááºážááœááºážááŒá®áž checksum ááᯠá¡ááºááááºáá¯ááºááá·áº áá»áááºáá
áºáá¯.
á¡áá¯á¶ážááŒá¯áá°á ConfigMap ááᯠá¡ááŒá±á¬ááºážá¡áá²áá¯ááºáá«áá shell-operator á០áááºážááá¯á·ááᯠáááááŒá¯ááááŒá®áž checksum ááᯠááŒááºáááºááœááºáá»ááºáááºááŒá
áºáááºá ááá¯á·áá±á¬áẠKubernetes á ááŸá±á¬áºá¡áááºáá»á¬áž áá«áááºáá¬áááº- áá®ážááŸá¯ááºáá°ááẠáá°ážááᯠáááºáááºá á¡áá
áºáá
áºáᯠáááºáá®ážáááºá ááŒá
áºáá¬ááẠá
á±á¬áá·áºáá« Ready
á áá±á¬ááºáá
áºáá¯ááá¯á· áááºááœá¬ážáá«á ááááºá¡áá±ááŒáá·áºá ááŒáá·áºáá»ááºááŸá¯ááẠáá
áºááŒáá¯ááºáááºážáá¯ááºáá±á¬ááºááŒá®áž ConfigMap áá¬ážááŸááºážá¡áá
áºááá¯á· ááŒá±á¬ááºážáá«áááºá
á¥ááᬠ2- á áááºááŒáá¯ááºá¡áááºážá¡ááŒá Ạá¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºááŒááºážá
áááºááááá·áºá¡ááá¯ááºáž Kubernetes ááẠááá·áºá¡á¬áž á
áááºááŒáá¯ááºá¡áá¬ááá¹áá¯á¡áá»áá¯ážá¡á
á¬ážáá»á¬ážááᯠáááºáá®ážááá¯ááºá
á±áá«áááºá á¥ááá¬á¡á¬ážááŒáá·áº áá
áºáá»áá¯ážáááºáá®ážááá¯á·ááááºá MysqlDatabase
. á€á¡áá»áá¯ážá¡á
á¬ážááœáẠáááºáá¬áá±áᬠáá±á¬ááºááŸá
áºáᯠááŸáááẠááá¯ááŒáá«á
áá¯á·á name
О namespace.
apiVersion: example.com/v1alpha1
kind: MysqlDatabase
metadata:
name: foo
namespace: bar
áá»áœááºá¯ááºááá¯á·ááœáẠMySQL áá±áá¬áá±á·á
áºáá»á¬ážááᯠáááºáá®ážááá¯ááºááá·áº ááá°áá®áá±á¬ namespace áá»á¬ážáá«ááŸááá±á¬ Kubernetes á¡á
á¯á¡áá±ážáá
áºáá¯ááŸááááºá á€ááá
á¹á
ááœáẠá¡áááºážá¡ááŒá
áºáá»á¬ážááᯠááŒá±áá¬áá¶ááẠshell-operator ááᯠáá¯á¶ážááá¯ááºáááºá MysqlDatabase
áááºážááá¯á·ááᯠMySQL áá¬áá¬ááá¯á· áá»áááºáááºááŒá®áž á¡á
á¯á¡áá±ážá á¡ááá¯ááŸááá±á¬ ááŸáá·áº á
á±á¬áá·áºááŒáá·áºáá¬ážáá±á¬ á¡ááŒá±á¡áá±áá»á¬ážááᯠáááºáá°ááŒá¯ááŒááºážá
á¥ááᬠ3- Cluster Network Monitoring
áááºááááá·áºá¡ááá¯ááºáž ping ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááẠááœááºáááºáá áºáá¯ááᯠá á±á¬áá·áºááŒáá·áºááẠá¡ááá¯ážááŸááºážáá¯á¶ážáááºážáááºážááŒá áºáááºá á€ááá°áá¬ááœáẠshell-operator ááᯠá¡áá¯á¶ážááŒá¯á ááá¯áá²á·ááá¯á· á á±á¬áá·áºááŒáá·áºááŒááºážááᯠáááºááá¯á·á¡áá±á¬ááºá¡áááºáá±á¬áºááááºááᯠááŒááá«áááºá
ááááŠážá áœá¬á áááºááẠnode áá»á¬ážááá¯á·á á¬áááºážááœááºážáááºááá¯á¡ááºáááá·áºáááºá shell operator ááẠnode áá áºáá¯á á®á á¡áááºááŸáá·áº IP ááááºá ᬠááá¯á¡ááºáááºá áááºážááá¯á·áá¡áá°á¡áá®ááŒáá·áºá áá°ááẠá€áá¯á¶ááŸááºáá»á¬ážááᯠping áááá·áºáááºá
configVersion: v1
kubernetes:
- name: nodes
apiVersion: v1
kind: Node
jqFilter: |
{
name: .metadata.name,
ip: (
.status.addresses[] |
select(.type == "InternalIP") |
.address
)
}
group: main
keepFullObjectsInMemory: false
executeHookOnEvent: []
schedule:
- name: every_minute
group: main
crontab: "* * * * *"
parameter ááẠexecuteHookOnEvent: []
áááºááá·áºááŒá
áºáááºá¡ááœááºáááᯠáá¯á¶á·ááŒááºááŸá¯ááœáẠáá»áááºááᯠáááºáááºááŒááºážá០áá¬ážáá®ážááẠ(ááá¯ááá¯áá¬á ááŒá±á¬ááºážáá²ááŒááºážá ááá·áºááŒááºážá áá»ááºááŒááºážá¡ááœáẠáá¯á¶á·ááŒááºááŒááºáž)á ááá¯á·áá±á¬áº áá° ááŒá±ážáááºá (ááŸáá·áº node á
á¬áááºážááᯠá¡ááºááááºáá¯ááºáá«) á
á®á
ááºáá¬ážáááºá - áááºáááºááááºááŸááºáá¬ážááá·áºá¡ááá¯ááºážáááá
áºááá¯ááºáž schedule
.
á¡áá¯áá±ážá áá¬áá±á«áºáá¬áá¬á packet áá¯á¶ážááŸá¯á¶ážááŸá¯ááᯠááŒá¿áá¬ááœá±ááᯠá¡ááá¡áá» áááºááá¯ááááá¯ááºááá²á áá¯ááºááᯠááŒáá·áºáá¡á±á¬ááºá
function __main__() {
for i in $(seq 0 "$(context::jq -r '(.snapshots.nodes | length) - 1')"); do
node_name="$(context::jq -r '.snapshots.nodes['"$i"'].filterResult.name')"
node_ip="$(context::jq -r '.snapshots.nodes['"$i"'].filterResult.ip')"
packets_lost=0
if ! ping -c 1 "$node_ip" -t 1 ; then
packets_lost=1
fi
cat >> "$METRICS_PATH" <<END
{
"name": "node_packets_lost",
"add": $packets_lost,
"labels": {
"node": "$node_name"
}
}
END
done
}
áá»áœááºá¯ááºááá¯á·ááẠnode áá»á¬ážá
á¬áááºážááŸáááá·áº áááºááá²áá²áá¯ááºáᬠáááºážááá¯á·áá¡áááºáá»á¬ážááŸáá·áº IP ááááºá
á¬áá»á¬ážááᯠááá°áᬠáááºážááá¯á·ááᯠping áá¯ááºááŒá®áž ááááºáá»á¬ážááᯠPrometheus ááá¯á· áá±ážááá¯á·áá«áááºá Shell-operator ááẠPrometheus ááá¯á· áááºááá
áºáá»á¬ážááᯠáááºááá¯á·ááá¯ááºáááºáá áááºážááá¯á·ááᯠEnvironment variable ááœáẠáááºááŸááºáá¬ážááá·áº áááºážááŒá±á¬ááºážá¡ááá¯ááºáž áááºááŸááá±á¬ ááá¯ááºáá
áºáá¯ááœáẠááááºážáááºážáá«á $METRICS_PATH
.
áááºážá á®ááŒááºáž ááá¹ááá¬áž
shell-operator ááœááºáááºáá±á¬ááºáá¬ážáá±á¬á¡ááŒá¬ážá¡áá±ážááŒá®ážáá±á¬ááá¹ááá¬ážá¡ááŒá±á¬ááºážáá±á¬áºááŒááŒááºážáááŸááá²á€áá±á¬ááºážáá«ážáááºáááŒáá·áºá á¯á¶áá«á á¡á á¯á¡áá±ážááŸá ááŒá áºáááºáá áºáá¯ááᯠáá¯á¶á·ááŒááºáá¬ááœáẠáááºážááẠáá»áááºáá áºáá»áá¯ážáá»áá¯ážááᯠáá¯ááºáá±á¬ááºáááºáᯠááŒááºáá±á¬ááºááŒáá·áºáá«á
- áá áºáá»áááºáááºážááœááºá á¡á á¯á¡áá±ážááœáẠáá áºáá¯áá¯ááŒá áºááœá¬ážáá«á áá¬ááŒá áºáááºáááºážá áá±á¬ááºáááºáá áºáᯠááœá²áá¬áž?
- shell-operator ááẠhook áá¡ááŒá¬ážá¥ááá¬ááᯠrun áááºáá¬ážá
- á¡á á¯á¡áá±ážááœáẠá¡ááŒá áºá¡áá»ááºáá«ážáᯠáá áºááŒáá¯ááºááẠááŒá áºáá»ááºáááºááá¯áá«á á¡áááºáááºážá
- shell-operator á áááºážááá¯á·ááᯠá¡ááŒáá¯ááºáá¯ááºáá±á¬ááºááŸá¬áá¬ážá
- Memory ááŸáá·áº CPU áá²á·ááá¯á·áá±á¬ áá¯á¶ážá áœá²áá¬ážáá±á¬ á¡áááºážá¡ááŒá áºáá»á¬ážáá±á¬á
áá¶áá±á¬ááºážáá±á¬ááºáá áœá¬á shell-operator ááœáẠbuilt-in áááºážá á®ááŒááºážááá¹ááá¬ážááŸááááºá á¡á á®á¡á ááºá¡á¬ážáá¯á¶ážááᯠáááºážá á®ááŒá®áž áááºááá¯ááºáá¯ááºáá±á¬ááºáá«áááºá
áá«ááᯠá¥ááá¬ááœá±áá²á· á¥ááá¬ááŒááŒáá·áºáá¡á±á¬ááºá áá»áááºááŸá áºáá¯ááŸááááºááá¯áá«á áá¯á·á áááááœá²á ááááá»áááºá áááºážááá¯ááºáá±á¬ááºááŸá¯ááŒá®ážááœá¬ážáááºááŸáá·áºá áááºážá á®ááẠááŸá±á·ááá¯á·ááœá±á·ááœá¬ážáá«áááºá áá±á¬ááºáááºááŒá áºáááºáá¯á¶ážáá¯ááᯠáá¯ááááá»áááºááá¯á· ááŒááºááœáŸááºážááẠ- áááºážááá¯á·ááᯠáááºážá á®ááŸáááºááŸá¬ážááŒá®áž áááºážááᯠ"á¡á á¯á¡áá±áž" ááœáẠááá·áºááœááºážáá¬ážáááºá á¡á²áá«áá«áá²á hook ááẠá¡ááŒá áºá¡áá»ááºáá»á¬ážááᯠáááºáá¶áááŸáááẠâ ááá¯á·ááá¯áẠááá¯ááááá»áááºááŸá¬á á ááºážááŸá±á¬ááºááŸá¯ááá¯ááºáᬠá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážá
áá«ááœá±áááºážáá«áááºá á¡ááŒá
áºá¡áá»ááºáá»á¬ážááᯠá¡ááŒá®ážááŒá®ážáá
áºáá¯á¡ááŒá
Ạáá±á«ááºážá
ááºááá¯ááºáááºá. ááá·áºáááºáá»ááºááẠá€á¡ááœáẠáá¬áááºááŸááááºá group
binding configuration ááœááºá
áááºážá
á®ááŒááºáž/áá»áááºáá¶áá«ááºáá»á¬ážááŸáá·áº áááºážááá¯á·á á¡áá»áá¯ážáá»áá¯ážáá±á¬áá±á«ááºážá
ááºááŸá¯áá»á¬ážááᯠáááºáááºáá®ážááá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºážá
á®áá
áºáá¯ááẠáá»áááºááŸá
áºáá¯ááŒáá·áº á¡áá¯ááºáá¯ááºááá¯ááºáááºá ááá¯á·ááá¯áẠá¡ááŒááºá¡ááŸááºá¡á¬ážááŒáá·áº áá¯ááºáá±á¬ááºááá¯ááºáááºá
áááºáá¯ááºáááŸá¬á á¡ááœááºááᯠááá¯ááºáá»á±á¬áá®ááœá±ááŒá
áºá¡á±á¬áẠááŒááºáááºáá«á queue
binding configuration ááœááºá áááºážá
á®á¡áááºááᯠááááºááŸááºáá¬ážáá«áá áá»áááºááẠáá¯á¶áá±áááºážá
á®ááœáẠá¡áá¯ááºáá¯ááºááẠ(default
) á€áááºážá
á®ááŒááºážááá¹ááá¬ážááẠáá»áááºááŒáá·áºá¡áá¯ááºáá¯ááºáá±á¬á¡áá« á¡áááºážá¡ááŒá
áºá
á®áá¶ááá·áºááœá²ááŸá¯ááŒá¿áá¬á¡á¬ážáá¯á¶ážááᯠáá¯á¶ážáá¯á¶ážáá»á¬ážáá»á¬ážááŒá±ááŸááºážááá¯ááºá
á±áá«áááºá
áá±á¬ááºáá»ááº
Shell-operator ááá¯áááºááŸá¬ áááºáá²á·ááá¯á· á¡áá¯á¶ážááŒá¯ááááºááᯠááŸááºážááŒáá²á·ááŒá®áž Kubernetes á¡á±á¬áºááá±áá¬áá»á¬ážááᯠáá»ááºááŒááºá áœá¬ááŸáá·áº á áá¯ááºáá¯ááºááẠáááœááºáá°ááŒá±á¬ááºáž ááŒááá²á·ááŒá®áž áááºážáá¡áá¯á¶ážááŒá¯ááŸá¯á á¥ááá¬áá»á¬ážá áœá¬ááᯠáá±ážáá²á·áááºá
shell-operator á¡ááŒá±á¬ááºážá¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážá¡ááŒáẠáááºážááá¯á¡áá¯á¶ážááŒá¯áá¯á¶ááŸáá·áºáááºáááºáá±á¬ áá»ááºááŒááºáá±á¬áááºáááºážá
á¬ááᯠáááºááá¯ááºáá¬á
á¬áá»á¬ážááœáẠáááá¯ááºáá«áááº
áááºážááᯠáááºááŸá
áºáááºáá«áá GitHub ááœáẠááŒá¿áá¬á¡áá
áºáá»á¬áž/ PR/ ááŒááºááœáá·áºáá»á¬ážááᯠááŒááºááœá±á·ááááºááŸá¬ á¡ááŒá²áá»á±á¬áºááœáŸááºáá±áá«áááºá
áá®áá®ááá¯áá»á¬ážááŸáá·áº áááá¯ááºáá»á¬áž
áá»á±á¬áºááŒá±ááœá²á០áá®áá®ááᯠ(~23 áááá áº)
á¡á á®áááºáá¶á á¬áááºááŒáá»ááº-
PS
áá»áœááºá¯ááºááá¯á·áááá±á¬á·ááºááœááºáááºážáááºáá«
- «
Shell-á¡á±á¬áºááá±áá¬ááŒáá·áº Kubernetes á¡á±á¬áºááá±áá¬áá»á¬ážááᯠááœááºáá°á áœá¬áááºáá®ážááá¯ááºáááº- áá áºááŸá áºáááºáá¯á¶áž ááá±á¬áá»ááºááá¯ážáááºááŸá¯ "; - «
shell-operator ááᯠááááºáááºáá±ážááŒááºáž- Kubernetes á¡ááœáẠá¡á±á¬áºááá±áá¬áá»á¬áž áááºáá®ážááŒááºážááẠááá¯ááá¯ááœááºáá°áá¬áá«áááºá "; - «
Kubernetes á¡á á¯á¡áá±ážááᯠááŒááºáááºááẠááœááºáá°ááŒá®áž á¡áááºááŒá±áá«ááá¬ážá addon-operator ááá¯ááŒá±ááŒá¬ááŒááºážá "; - «
Kubernetes ááᯠáá»á²á·ááœááºááŒááºážááŸáá·áº ááŒáá·áºá áœááºááŒááºáž" (ááŒááºáááºáá¯á¶ážáááºááŒááºážááŸáá·áº áá®áá®ááá¯á¡á á®áááºáá¶á á¬) .
source: www.habr.com