αα
ααααΆαααα ααααα·ααΈα Kubernetes α’αΊααα»αααααααΆαα - KubeCon + CloudNativeCon Europe 2020 - ααΊααΆαα·αααα·αα αααααΆαααΆαααΆααααα ααΆαααααΆααααααΌααααααααααααααα·αααΆαααΆααΆααααΎαααΈααΆααααααααΌααααΆαααΆααααααααΆαααααααα»αααΌαααααααΎα βαα
? ααΆα! αα½αααΆαα½α Shell-operatorβ α§αααα·αααααααααα Open Source ααααααΎαα
α’αααααααααααααααΌαααΆααααα»ααααα·ααααααΆααα·ααΆααααΆ αααα αΆαααΈαα·ααΈααΆααααααααα»αααΆαααααα½ααααααααΎαααΆαααααΆααααααΎαααααα·ααααα·αααααααΆαα Kubernetes αα·ααααα αΆαααΈαααααααα’αααα’αΆα αααααΎαααααααα½αα―ααααααΆααα·αααααααΉαααααααα·α αα½α αααα»ααααααααΎ shell-operator α
ααΆαααααΆα
αα Flant ααΎαααααααααααΎαααααα·αααααΆα αα·αααααΎα’αααΈαααααααααΆααααααααααααααααα·α αααααααααΎαααΉααα·ααΆαα’αααΈαααα·ααααα½αα±ααααααΎααα½ααααα αα½αα ααΆααααααααααααΈααααααΎαααααΎαααα!
ααααααΆαααΆααααα α αΌαα αΆααααααΎαααΆαα½αααΉαααα·αααααα’αααΈαααΆααα’αααααααΎαα‘αΎαα Kubernetesα
Kubernetes API αα·αα§ααααααααααΆ
API αα αααα»α Kubernetes α’αΆα ααααΌαααΆαααααΆαααΆαααααααααΆαααΈαααα―αααΆααααααΆααααααααΆααααααααααααα»ααΈαα½ααα ααααα» (ααααΆα) αα ααΎαααΆαααΈααααααααααΌαααΆαααααΆααααα―αααΆα YAML α ααΎαααΈαααααααααΆαααΈαααααΆα API ααΌαααααΆααααα’αα»ααααΆαα±ααα’αααααααΎααΏαααΈαααΆαα
- ααα½αααΆα ααααΆαααΆααααααααα·ααααααααααααΆ;
- ααααΆααααααΌα ααααΆα (αααα»αααααΈααααααΆαααΈααααααααΆαα»αααααααα» "ααααΉαααααΌα" - ααΆααα’αααααααΆααααααΎαα‘αΎααα·αααααΉαααααΌαα¬ααΆααααααααααΆααααααααααααααααΌαααΆααα»αα αα);
- αα αααααΆααααααΆα (αααα»αααααΈαααα’αααααααΎααααΆααααα½αααΆααααααα αα α»αααααα / α’αΆαααααααααααΆ) α
ααΌα αααα Kubernetes ααΎααα½ααΆαααααααααααΆαααΈαααα―αααΆα (αααααΆαα YAML manifests) ααΆαα½αααΉααα·ααΈααΆαααααααΌαααααΆαα ααα½αααΈ (ααΆα ααΆααα·αααΆααααααααα ααα»ααααααΎαααΉααα»αααΆα αααααααΆαααααααα)α
αααα αΆααΊααΆαααΆαααΈαααα’αΆα
αααααΆαα»αααααααααΆαααα»αααααα ααΎααααΈααααΎα±ααααΆααααΎαααΆαα’αααααααΌαααΆα α§ααααααααααΆ - αααα·αααααΆαα αα·αααΆααΌαααααΆαααΈααΈααα
αααα»ααα·αα Kubernetes α
ααΆαα§ααααααααααΆααααΆααααΈαααααααα ααΈαα½αααααααααΆαααΈ Kubernetes ααααΎαααΆαααΆααΆααααααα·ααααΆαααααΆαααΆααα αΎααααααΌαααΆαα K8s α ααΈααΈαααααααααΆαααΈ Kubernetes ααα»αααααα·αααΌα ααααααααΈαα½ααα ααααΆααααααΌαααααΆαααΆαααααααΆαααΆααααα αα½αα ααα½αα
ααΌααααα‘ααααΎαα±ααααΆααααα αααΆααα’αααΈααααΎαααΆαααααΆααααααΎαααΆαααΆααα±ααααααΎααααΆαααα αααα»α Kubernetesα
- α§ααααααααα½ααα·αα·αααααΆαααΆαααααααΆα (αα½ααααα
αΌααααα»α
kube-controller-manager
) ααα½αααααααΆαα’αααΈααΆαααΆααα±ααααααΎααααΆαα αα·ααααααΎααααα»αα ααααα - ReplicaSet αααααΎαααΆαα ααααααΈα (ααααααΈα) αααααα’ααααΎααααααΆαααα ααα»ααααααααΆααααααα·αααΆααααααΌαααΆααααααααααα α‘αΎαααα
- αααααα·ααΈαααααααααααααααα pods αα·αααααααααααααΆα node αα YAMLs αααααα½αααα
- Kubelets ααααΎααΆαααααΆααααααΌαααααΆαααΆααααα (αα·ααΆαααΆ Docker) α
αααααΆααααααααΆααααΆααααΌααααααααΌαααΆαααααΎααααααααα αααα»αααααΆαααααα αααΆα: kubelet αα·αα·ααααα»α, ααααΆααααΆαααΆααααα pod αα·ααααααΌαααΆαααα‘αααααα·αα α§ααααααααααΆ ReplicaSet ααα½αααΆαααααΆαααΆα αα·αααααΎαα αα α»ααααααααΆαααααΆαααΆααααααα»αα ααααα ααΏααααααααααΎαα‘αΎαααΆαα½α Deployment Controller α αΎαααΈαααα»αα’αααααααΎααααΆααααα½αααΆαααααΆαααΆαα’αΆααααα (αα αα α»αααααα)α
ααααα·ααααα·ααααα
ααΆααααααΆ Kubernetes ααΊααα’ααααΎααΆαααΆααα½αααααΆααα§ααααααααααΆαααααα (ααααα·ααααα·αα Kubernetes ααααΆα§ααααααααααΆααααα) α αααα½αααΎαα‘αΎαααΎααααΎααΌα
ααααα
ααΎααααΈαααααΎαααααα·ααααα·ααααααΆαααααα½αααααα’ααααααααΆααα·αααααααΉαααααααα·α
αα½α
αααα»α? α αΎααα
ααΈαααααΎαααΆααααααΎααααα½ααααααααα
α§ααΆα αααααΆααααα ααΆαα ααααα’αΆααααααΆαα
ααΌααααα‘ααααΎαα§ααΆα αααααααΆαααααα½αα
α§αααΆααΆααΎαααΆαα
ααααα Kubernetes α ααΆααΆαα
αααααααααα default
ααΆαα½αααΉαα’αΆααααααΆαααα½αα
ααα½α mysecret
. ααΎαααΈααα ααΆαβα
αααααβαααααβααααααααβαα
αααα»αβα
αααααα αα½αααααααααΆαααααΆαααΆααααΆαααα½αααααΆααααΆαα½ααα½αααα ααααα
ααααααΎαααΊα
αααα Secret αα
αααα»α namespaces ααΆαα½αααΉαααααΆααα½αα
αα·α αα ααΆαααΆαααΆααααα»αααααΆααααααΆααα·ααααααΆ α ααααααααααααααΈα’αΆα ααα α‘αΎααααα»αα ααααα α αΎααα½αααΆααααα’αΆα ααΆαααααΆααααα αααααΆααα·αααααα ααααααααααΆαααααΌαααΆααα»α Secret αααα½αααααααΌαααΆααα»ααααααα ααααααααΈααΎααα α’αΆααααααΆαααααα½αα―αααα’αΆα ααααΆααααααΌααααααα αααα»αααααΈααα αααααΆααααααΈααααΌαααα αααααα ααααααααΆαααααααααΆααα’αααααααΆαααααΆαα ααααα·αααΎααΆααααααΆααααααΌαααΆααα»ααααα ααααααα αααα»α namespace ααΆαα½α ααααα·ααααα·ααααααααΎααα½αααααααΆαααΆα‘αΎααα·αααααΆααα
α₯α‘αΌαβαααβαααβαα·α αα ααΆαβααααΌαβααΆαβαααααΎα ααΆβααΆβαααβααααΆβααΎααααΈβα αΆααβααααΎαβα’αα»ααααβααΆβαααβααααΎ shell-operatorα ααα»ααααααΆααααΌαααΆααΆαααααααα·ααΆαααΆαααααΈαααΈα’αααΈααα - ααααα·ααααα·αααααα½αα―αα
αααααααααα-ααααα·ααααα·ααααααΎαααΆα
ααΌα
ααΆααααα»αααΆαααΆααααααααααα
αααα»α Kubernetes ααααα·ααααα·αααααααααΎαααΆααα
αααα»αααααααΆααααααααΆα αα
αααα»αααααααα
αααα»ααα /hooks
α―αααΆααααα’αΆα
ααααα·ααααα·ααΆαααααΌαααΆααααααΆαα»αα ααΆαααααα’αΆα
ααΆααααααΈααα
αααα»α Bash, Python, Ruby ααΆααΎαα ααΎαα α
α―αααΆααααα’αΆα
ααααα·ααααα·ααΆαααααααααΆ ααααα (ααααα).
Shell-operator ααΆαααααΉαααα·ααΆααα Kubernetes α αΎαααααΎαααΆααααααααΆαααααααΎααααΈααααΎααααα
ααΉαααααΉαααα·ααΆαααααΆααααααααααΎαααααΌαααΆαα
ααΎ shell-operator ααΉααααααααααΆααΆααααααα½αααΆααααΌαααααΎαααΆα αα·ααα
αααααΆ? α
ααα»α
ααΊααΆααΆαααααααααΆαααΈαααααΆααααΆαα ααα‘α»ααααα
αΆααααααΎα ααααα·ααααα·αααααααααΎαααΆααααααααΆααα’ααααΆαα½αααΉαα’αΆαα»ααααααα½αα --config
αααααΊααΆααααΆααααΆαααααΆααααααα α αΎααααααΆααααΈααΆαααααααααΌαααΆαααΆααα±ααααααΎαααΆαααΆαααααααααααΆ - ααΎααααΈααααΎααααα
ααΉαααααΉαααα·ααΆαααααααα½αααααααΌαααΆαααααΆααα αααα»αααααΈα
α»αααααα αααααααα½αααΆαααα·ααα
α (ααα·ααα
α) - αα·αααααααααα»ααααααα JSON αααααΎαααΉααα·ααΆαα’αααΈααααααΆααααα’α·αααΆααααααα
αααααΎαααααα·ααααα·αααα αααα»α Bash
α₯α‘αΌααααααΎαααααααα½α
ααΆαααααααΆααααΆαα’αα»ααααα ααΎααααΈααααΎααΌα
αααααΎαααααΌαααααααα»αααΆαααΈα (ααααα·ααΈαααααΎαααααΆα αααααΆααα
- ααΈαα½αααΊα αΆαααΆα ααααααΆααααααΆααααΆαααααααα ααΆαααααααα - ααΆαααα αΆαααα·ααα αα
- ααΈααΈαααΆααααααα·ααααΆααααΆαααααααααα
#!/bin/bash
source /shell_lib.sh
function __config__() {
cat << EOF
configVersion: v1
# BINDING CONFIGURATION
EOF
}
function __main__() {
# THE LOGIC
}
hook::run "$@"
ααα αΆααααααΆααααΊααααΌααααααα α α·αααααΆααΎααΎαααααΌαααΆαααααα»α’αααΈα αααα»αααααΈααααααΎα ααΎαααααΌαααΆαααΆαα
- ααααααααααΆαααααααΆααααΆαααααΆααααααΌα;
- α αααααβαααααβααΆααα’ααβαααα»αβα ααααα ααΌα ααααβα’αααβααΉαβααΆβαα½αβααΆβααΆαβααααΆαβααααΆααβααΆαα½αβαα½αααΆα
- αααααααααα αααααΆαα ααΎααααΈααΆααΆααΆαα½αααΆααΆααα’ααααααΌαααααΆααΆαα½αα’αΆααααααΆαααααααα
ααΆαααααααααααΆαα
ααΆαααααααα
ααΆααααααααα
ααααααΆααααΆααΊααΆααααααΆααα ααΎααααα αΆαααΆααΎαα
αΆααα’αΆααααααααΎ Secret ααΆαα½αααΉαααααα 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
) αα·αααα½αααΆαααα·ααα
αααΆααααααα
ααΌα
αααα’αααα’αΆα
ααΎαααΆααΆαααααααα·αααααα»ααΆααααΌαα
ααΆααααααΆααΆαααα αααααααααα
α₯α‘αΌαβααα α’αααβααααΌαβααΆαβααααααβααΆααβαααααα ααΎααααΈααααΎααΌα αααα ααΎααααααΆααααΆαααααααα ααΆααααααααα αααΆααααααα
- 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 ααααΈααΆαα½αααΉαααΆααααααΎαα
αΆααα’αΆααααααα αααααβαααβααΆαβααΆαβαααααβαα
ααΆααααααααβααααααβααααΆβααΉαβααα½αβααΆαβααα·ααβα
αβααΌα
βααΆαβαααααα
ααΆααΆαα’αΆαα filterResults
αααααΆααβα
αααααβαααααβααΈαα½ααβαααα»αβα
αααααα α’ααααααΌααΈα hasLabel
αααα αΆαααΆααΎααααΆααα½αααααΌαααΆαααααΆαααα
ααααααααΆααααααααααααΆααααααα±ααα¬α’ααα α’αααααααΎαααΎα 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 αα·ααααΆαααΆαααααα resourceVersion
. αααΆαααΆααααααα
α»ααααααααααΌαααΆααααααΌααα
α
αααΆααααααααα
ααααααααΎαα’αΆααααααΆααα ααΆα’αα»ααααΆαα±ααα’αααααααααααααααααα’αΆααααααΆαα αα·ααααααΆααΆα±ααααΆααααααα
αααααβαααβααΆαβαααααβαα ααΆααααααααβααΆαβαα·ααΈβαααβααΉαβααα½αβααΆαβααα·ααβα αβααΆααβααΈβαααβααΆαβαα·αααααΆβααΆαααΎβα ααβα’αΆα βαα·αβααΆβααΆβααααααβααΌαααβαα½αβαααααα (ααΌααα) α αααααα
αααααα’ααααΎααααααΆαααΆααα’ααααα αααα½ααααααααΆαααΆααΌαααααΆαα’αΆα
ααααΌαααΆααααααΎαα‘αΎαα ααΆααααΎαααααααααΎα
ααααααααααααΆααα’αα αα·αα
- ααααα·αααΎ
hasLabel
αααα αΆtrue
αααααΆααβααα βαααααβαα αα α»ααααααα- ααααααααβα’αΆααααααΆααβαααβααΆαα½αβααΉαβααααααΆαβαααα»ααααα»αα
- ααααα·αααΎαα½αααααΌα ααααΆ ααΆαα·αααααΎα’αααΈαααα
- ααααα·αααΎαα½ααααα»αααααΆ - ααααα·ααααα·
kubectl replace
α¬create
;
- ααααααααβα’αΆααααααΆααβαααβααΆαα½αβααΉαβααααααΆαβαααα»ααααα»αα
- ααααα·αααΎ
hasLabel
αααα αΆfalse
αααααΆααβααα βαααααβαα αα α»ααααααα- ααααΌαααααΆααααΆ Secret αα·ααααα·ααα
αααα»αααααααααααΆααααααα±ααα
- ααααα·αααΎααΆααααααΆαααααα»ααααααααΆαααααααΆα ααΌααα»αααΆαααααααΎ
kubectl delete
; - ααααα·αααΎααΆααααααΆαααααα»αααααααα·αααααΌαααΆαααααΎα ααΆαα·αααααΎα’αααΈααΆααα’ααα
- ααααα·αααΎααΆααααααΆαααααα»ααααααααΆαααααααΆα ααΌααα»αααΆαααααααΎ
- ααααΌαααααΆααααΆ Secret αα·ααααα·ααα
αααα»αααααααααααΆααααααα±ααα
αααα αΎαααΆαααααααααΎαα’αΆα αααααΎαα§ααααααααααΆ Kubernetes ααΆαααααααααααΎααΆαααααααα ααΆαααααααα YAML α ααα½α 35 αααααΆαα αα·αα’αααΈα ααα½αααΌα ααααΆααααΌα Bash! ααΆαααΆααααα shell-operator ααΊααααΆαααα½αααΆααΆαα½αααααΆα
αααααΆαααΆαααΆαααααααΆαα ααααα’αΆααααααΆαααα·ααααααΆααααααααα½ααααααααΆαα’αα»ααααα§αααααααααΎααααΆαααααααα αααααΊααΆα§ααΆα ααααα½αα ααα½αααα ααΎααααΈαααα αΆαααΈα’αααΈαααααΆααααΆααααααααΆαα
α§ααΆα αααααΈ 1α ααααΎααΆαααααΆααααααΌααα ConfigMap
ααΌααααα‘ααααΎαααΆαααΆαααααααΆααααααΆαααΈααα Pods ααααΎ ConfigMap ααΎααααΈαααααΆαα»αααΆαααααααα ααΆαααααααααα½αα ααα½αα αα ααααααααααααΌαααΆαααΎαααααΎαααΆα ConfigMap ααΊαααα·ααα αααα»αααααΆαααΆαααΆααααΆαααα½α (ααΌαα α ααΆααΆ v.1)α ααΌα ααααα αΎα pods ααΆααα’ααααααΎαααααα·ααααα ConfigMap αααα
α₯α‘αΌαααα α αΌααααααααΆ ConfigMap ααΆαααααΆααααααΌα (v.2)α ααααααΆαααΆααααα αααααααΉαααααΎαααααα»ααα ConfigMap (v.1)α
ααΎαααα»αα’αΆα
α±αααα½αααααααΌααα
ConfigMap ααααΈ (v.2) αααααααααΆ? α
ααααΎαααΊααΆααααα ααααΎααααΌα αααααααααα
αααΆαααααααα’αααΈ checksum αα
ααααα template
ααΆαααααααα
ααΆααααααααααΆααα±ααααααΎααααΆααα
ααΆαααααα ααΌααααααΆαααααααααααΉαααααΌαααΆαα
α»αααααααα
αααα»αααααΆααα’αα α αΎαααΆααΉαααΌα
ααααΆααΉαααΆαααΆαααααααΆααααα α₯α‘αΌααααα’αααααααΆααααααααΌαααΆαααααΎαα
αα
α»ααααααααΆαα
αααΆααααααααα
ααα ConfigMap ααααΆααααααΌαα α αΎαααα - ααααα·ααααα·αααααα
αααα»αααΆαααΆααααα½ααααα»αααααΈαααα α’αααΈαααα’αααααααΌαααααΎααΊαααααα·ααΈ ααααααααααΉαααΆα 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
ααΎαβααΆαβα
ααααα Kubernetes αααβααΆαβα
αααααβαααααβαααααβααααΆ αααβααΎαβα’αΆα
βαααααΎαβααΌαααααΆαβαα·αααααα MySQL α αααα»αααααΈααα shell-operator α’αΆα
ααααΌαααΆαααααΎααΎααααΈααΆαααΆαααααΆα MysqlDatabase
ααααΆαααα½αααΆαα
αααΆαααΈααα MySQL αα·αααααΎααααΆαααααααααΆαααΆααααα
ααααΆα αα·αααααααααααα
αααααα
α§ααΆα αααααΈ 3α ααΆααααα½ααα·αα·ααααααααΆαα ααααα
ααΌα αααα’αααααΆαααΉαα αΎαααΆααΆαααααΎ ping ααΊααΆαα·ααΈααΆαααααααα»ααααα»αααΆααααα½ααα·αα·ααααααααΆαα αααα»αα§ααΆα αααααα ααΎαααΉααααα αΆαααΈααααα’αα»ααααααΆααααα½ααα·αα·ααααααααααααααααΎ shell-operator α
ααΆααααΌαα’αααααΉαααααΌαααΆαααααΆααα ααααα·ααααα·αααααααααΌαααΆαααααα αα·αα’αΆααααααΆα IP ααααααααΆααααΈαα½ααα αααααΆααααα½ααααααα½ααα ααΆααααΉαααΆαααααΆααααΆαααααα
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: "* * * * *"
αααΆαααΆαααααα executeHookOnEvent: []
ααΆααΆααααααααα·αα±ααααααΎαααΆααααα»αααΆαααααΎααααα
ααΉαααααΉαααα·ααΆαααααΆαα½α (αααααΊααΆααΆαααααΎααααα
ααΉαααΆαααααΆααααααΌα αααααα ααΆααα»αααααΆαα)α ααααααΆαααΆαααααααΆαα ααΉαααα (αα·αααααΎαα
αα
α»ααααααααΆααααααΈααααΆαα) ααΆααααααααα - ααΆααααΆααΈ ααΆαααΆαααααααααααΆα schedule
.
α₯α‘αΌαααααααα½αααΎαα‘αΎαααΎααΎαααΉααααΆααα·αααααΆααα’αααΈαααα αΆααΌα ααΆααΆαααΆααααααααα ααααααααΆα? αααααΎαααΌαααΆααα’ααααααΆα
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
}
ααΎαααααΎαααααααααΆαααααααααΈααααΆαα ααα½αααΆαααααα αα·αα’αΆααααααΆα IP αααααα½ααα ααΆααα½αααΆ α αΎαααααΎαααααααα
Prometheus α Shell-operator α’αΆα
ααΆαα
αααααααααα
PrometheusαααααΆαα»ααα½αααΆαα
αααα»αα―αααΆααααααΆαααΈααΆαααα
ααΆαααααΌααααααΆααααααΆαααα
αααα»αα’αααααα·ααααΆα $METRICS_PATH
.
ααααααΆααααααααα½α
α’ααααααααααΉααα·ααααααααα ααααα·αααΆααα·αααααΆα’αααΈααααααΆαααααΆαααα½αααααααααΆααααααΎαα‘αΎααα αααα»αααα-ααααα·ααααα·ααα αααααααΆααΆααααα·ααααα·ααααααααααααααα½αα ααα½ααααα»αααΆαααααΎααααα ααΉαααααΉαααα·ααΆααααα αααα»αα αααααα
- ααΎααΆαα’αααΈααΎαα‘αΎαααααα·αααΎαααα»αααααααα½αααΆαα’αααΈαα½αααΎαα‘αΎααα αααα»αα ααααα? αα½αααα ααααΉαααα·ααΆααα?
- ααΎ shell-operator ααΉαααααΎαααΆαα§ααΆα ααααααααααααα hook αααα¬αα?
- α α»αβααΎβαα·ααΆαβααΆ ααααΉαααα·ααΆαααβααααΆαβααΎαβα‘αΎαβαααα»αβα αααααβααβαα½α?
- ααΎ shell-operator ααΉαααααΎαααΆααα½αααΆααααααααΆαααα¬αα?
- α α»αβααααΆαβαααβααααΎβααααΆααβααΌα βααΆ α’αααβα αα αΆα αα·α CPU αα·α?
ααΆααααΆαααα’ ααααα·ααααα·αααααααΆαααααααΆααααααααα½ααααααααΆααααααΆαα½αα ααααΉαααα·ααΆαααααΆααα’ααααααΌαααΆααααααααα½α αα·αααααΎαααΆαααΆαααααααααΆααα
α αΌαααΎααααα αΆαααΆααΆαα½αααΉαα§ααΆα αααα α§αααΆααΆααΎαααΆααααααααΈαα ααααΉαααα·ααΆαααααααΌαααΊαα αααααααααΌαα αα ααααααααααΎαααΆαααααααΆααΆααααα αα αα½αααΉααα αα»αα ααααΉαααα·ααΆαααααΈαααααΆααααααΌαααΆααααααΌααααααα αααααααΈααΈα - αα½αααααααΌαααΆαααα ααααΈαα½αα αΎααααα αΌααα αααα»αααΆαα αααα»α "ααΆα α" α αααααΊααΆ hook ααα½αααΆαα’αΆααααααααΉαααα·ααΆααα β α¬ααΆααααα αααΆααααΆαααααα ααα α’αΆααααααα·ααα αα
ααΆααααααααααα ααααΉαααα·ααΆαααα’αΆα
ααααΌαααΆααα½ααααα
αΌαααααΆαα
ααΆαααα½αα. αααΆαααΆααααααααα½ααα»αααααΌαα
αααααααα αΆααα group
αα
αααα»αααΆαααααααα
ααΆααααααααα
αα
α’αααα’αΆα
αααααΎαα
ααα½ααα½α/αααααααΆαα½α αα·ααααααααααααααααααΆα α§ααΆα ααα αα½ααα½αα’αΆα
ααααΎααΆαααΆαα½ααααααααΈα α¬α
αααΆααααα·αα
α’αααΈααΆααα’αααααα’αααααααΌαααααΎααΊααααααα
ααΆααααααααααΆαααααααΆα queue
αα
αααα»αααΆαααααααα
ααΆααααααααα
αα ααααα·αααΎααααααα½ααα·αααααΌαααΆααααααΆαα ααααααααααααΎαααΆαααΎαα½αααααΆαααΎα (default
) ααααααΆαααΆαααα½ααααα’αα»ααααΆαα±ααα’ααααααααααΆααααα αΆαααααααααααααΆαααΆαααααα»ααα
αααααααΎααΆαααΆαα½ααααααα
ααα ααααΈααααα·ααααΆα
ααΎαααΆαααααααααΈα’αααΈαααααΆααααα·ααααα·ααααα ααΆααααα αΆαααΈαααααααααΆα’αΆα ααααΌαααΆαααααΎααΎααααΈαααααΎαααααα·ααααα·αα Kubernetes αααΆαααΆαααα αα αα·αααααα·αα αΆαααΆα αααααΉαααααα α αΎαααΆααααααα§ααΆα αααααΆα αααΎαααααΆαααααΎααααΆααααααααΆα
ααααααΆααααα’α·αα’αααΈααααα·ααααα·ααααα ααααΌα
ααΆααΆααααααααα ααα’αααΈααααααααΎααΆ ααΆααα
αααα»αα―αααΆααααααααΌαααααΆα
α αΎαααααα·αααΎα’αααα
αΌαα
α·αααααΆ ααΎααααααααΈαααΆααααα»αααΆαααΎααααα αΆααααΈα / PR / ααΆααΆαα
ααΎ GitHub αααααΆαααααααααα’αααα’αΆα
αααααααα’ααααααααααα
ααΈααα’αΌ αα·αααααΆα
ααΈααα’αΌααΈααΆααααααα (~α’α£ ααΆααΈ)α
αααααα αΆααααααΆαααΆαααα
PS
ααΌαα’αΆαααααααα ααΎαααααααααααΎαα
- Β«
ααΆαααΆααααα½αααααΆααααααΎαααααα·ααααα·αα Kubernetes ααΆαα½αααα-ααααα·ααααα·ααα ααααΎαααΆααααααααααα»ααααααααα½αααααΆα Β» - Β«
ααΆαααααΆαααα-ααααα·ααααα·ααα ααΆααααααΎαααααα·ααααα·αααααααΆαα Kubernetes ααΆααααααΆααααα½αααΆααα»α Β» - Β«
ααΎααΆααΆααααα½α αα·αααΆααααα½ααααα»αααΆααααα αα ααααα Kubernetes αα? αααααΆαβααααα·ααααα·αα addon Β» - Β«
ααΆααααααΈα αα·αααααααααααα Kubernetes" (ααΆααα·αα·αααα‘αΎααα·α αα·ααααΆαααΆαααααΈααα’αΌ) .
ααααα: www.habr.com