ืืฉื ื, ืื ืก Kubernetes ืืืืจืืคืื ืืืจืืื - KubeCon + CloudNativeCon Europe 2020 - ืืื ืืืจืืืืื. ืขื ืืืช, ืฉืื ืื ืืื ืืคืืจืื ืื ืื ืข ืืืืชื ื ืืืขืืืจ ืืช ืืื"ื ืืืชืืื ื ืืื "ืื? ืึทืึฒืืึนื! ืืืืจื ืืช ื-Shell-operator" ืืืืงืืฉ ืืคืจืืืงื ืืงืื ืืคืชืื ืฉืื ื
ืืืืจ ืื, ืืืฉืจืืช ืืืจืฆืื, ืืฆืื ืืืฉื ืืคืืฉืื ืชืืืื ืืฆืืจืช ืืืคืจืืืจืื ืขืืืจ Kubernetes ืืืจืื ืืืฆื ืืชื ืืืื ืืืฆืืจ ืืฉืื ืืืื ืืืื ืืืืฅ ืืืืฆืขืืช ืืคืขืื ืืขืืคืช.
ืืืืจืืช
ื-Flant ืื ืื ื ืื ืืืื ืขืืฉืื ืืืคืืืืืืฆืื ืืืืืืืฆืื ืฉื ืืื. ืืืื ื ืืืจ ืขื ืขืื ืงืื ืกืคื ืืจืืฉ. ืึดืคึฐืืึนืฉื: ืกืงืจืืคืืื ืืงืืจืืื ืฉื ืืขืืคืช ืืขื ื!
ืขื ืืืช, ื ืชืืื ืืืงืฉืจ ืฉืื ืื ืื ืงืืจื: Kubernetes.
Kubernetes API ืืืงืจืื
ื ืืชื ืืืืฆื ืืช ื-API ื-Kubernetes ืืืขืื ืฉืจืช ืงืืฆืื ืขื ืกืคืจืืืช ืืื ืกืื ืืืืืืงื. ืืืืืืงืืื (ืืฉืืืื) ืืฉืจืช ืื ืืืืฆืืื ืขื ืืื ืงืืฆื YAML. ืื ืืกืฃ, ืืฉืจืช ืืฉ API ืืกืืกื ืืืืคืฉืจ ืื ืืขืฉืืช ืฉืืืฉื ืืืจืื:
- ืืงืื ืืฉืื ืืคื ืกืืื ืืฉืื;
- ืืฉื ืืช ืืฉืื (ืืืงืจื ืื, ืืฉืจืช ืืืืกื ืจืง ืืืืืืงืืื "ื ืืื ืื" - ืื ืืื ืฉื ืืฆืจื ืืฆืืจื ืฉืืืื ืื ืืืืืขืืื ืืกืคืจืืืช ืืืจืืช ื ืืืงืื);
- ืืฆืข ืขืืืจ ืืืฉืื (ืืืงืจื ืื, ืืืฉืชืืฉ ืืงืื ืืื ืืช ืืืจืกื ืื ืืืืืช/ืืขืืืื ืช ืฉืื).
ืืคืืื, Kubernetes ืคืืขื ืืืขืื ืฉืจืช ืงืืฆืื (ืขืืืจ ืื ืืคืกืืื ืฉื YAML) ืขื ืฉืืืฉ ืฉืืืืช ืืกืืกืืืช (ืื, ืืืขืฉื ืืฉ ืืืจืืช, ืืื ื ืฉืืื ืืืชื ืืขืช ืขืชื).
ืืืขืื ืืื ืฉืืฉืจืช ืืืื ืืืืกื ืจืง ืืืืข. ืืื ืฉืื ืืขืืื ืืชื ืฆืจืื ืืงืจ - ืืืืฉื ืืฉื ื ืืืฉืืืืชื ืืืืกืืกื ืืขืืื ืฉื Kubernetes.
ืืฉื ื ืฉื ื ืกืืืื ืขืืงืจืืื ืฉื ืืงืจืื. ืืจืืฉืื ืืืงื ืืืืข ื-Kubernetes, ืืขืื ืืืชื ืืคื ืืืืืงื ืืงืื ื ืช, ืืืืืืจ ืืืชื ื-K8s. ืืฉื ื ืืืงื ืืืืข ื-Kubernetes, ืืื, ืื ืืืื ืืกืื ืืจืืฉืื, ืืฉื ื ืืช ืืืฆื ืฉื ืืื ืืฉืืืื ืืืฆืื ืืื.
ืืืื ื ืกืชืื ืืงืจืื ืขื ืชืืืื ืืฆืืจืช ืคืจืืกื ื-Kubernetes:
- ืืงืจ ืคืจืืกื (ืืืื ื
kube-controller-manager
) ืืงืื ืืืืข ืขื ืคืจืืกื ืืืืฆืจ ReplicaSet. - ReplicaSet ืืืฆืจ ืฉื ื ืืขืชืงืื (ืฉื ื ืคืืืื) ืืืชืืกืก ืขื ืืืืข ืื, ืื ืืชืจืืืืื ืืืื ืืื ื ืืชืืื ื ืื ืขืืืื.
- ืืืชืืื ืืชืืื ืชืจืืืืื ืืืืกืืฃ ืืืืข ืขื ืฆืืืช ื-YAML ืฉืืื.
- Kubelets ืืืฆืขืื ืฉืื ืืืื ืืืฉืื ืืืฆืื ื (ื ืืื Docker).
ืืื ืื ืืจืฆืฃ ืืื ืืืืจ ืขื ืขืฆืื ืืกืืจ ืืคืื: ืืงืืืื ืืืืง ืืช ืืืืืืื, ืืืฉื ืืช ืืฆื ืืชืจืืื ืืฉืืื ืืืชื ืืืืจื. ืืงืจ ื-ReplicaSet ืืงืื ืืช ืืืฆื ืืืขืืื ืืช ืืฆื ืขืจืืช ืืขืชืง. ืืืชื ืืืจ ืงืืจื ืขื ื-Deployment Controller ืืืืฉืชืืฉ ืืงืื ืกืืฃ ืกืืฃ ืืช ืืกืืืืก ืืืขืืืื (ืื ืืืื).
ืืคืขืื ืืขืืคืช
ืืกืชืืจ ืฉ-Kubernetes ืืืืกืกืช ืขื ืขืืืื ืืฉืืชืคืช ืฉื ืืงืจืื ืฉืื ืื (ืื ืืคืขืืื Kubernetes ืื ืืงืจืื). ื ืฉืืืช ืืฉืืื, ืืื ืืืฆืืจ ืืคืขืื ืืฉืื ืืืื ืืืื ืืืืฅ? ืืื ื ืื ืฉืคืืชืื ื ืืืืข ืืขืืจื
ืืืืื ืคืฉืืื: ืืขืชืงืช ืกืืืืช
ืืืื ื ืกืชืื ืขื ืืืืื ืคืฉืืื.
ื ื ืื ืฉืืฉ ืื ื ืืฉืืื Kubernetes. ืืฉ ืื ืืจืื ืฉืืืช default
ืขื ืืืื ืกืื mysecret
. ืื ืืกืฃ, ืืฉื ื ืืจืืื ืฉืืืช ื ืืกืคืื ืืืฉืืื. ืืืืงื ืืืฆืืืช ืชืืืืช ืกืคืฆืืคืืช. ืืืืจื ืฉืื ื ืืื ืืืขืชืืง ืืช ืกืื ืืืจืืื ืฉืืืช ืขื ืชืืืืช.
ืืืฉืืื ืืกืืืืช ืขื ืืื ืืขืืืื ืฉืืจืืื ืฉืืืช ืืืฉืื ืขืฉืืืื ืืืืคืืข ืืืฉืืื, ืืืืืง ืืื ืขืฉืื ืืืืืช ืชืืืืช ืื. ืืฆื ืฉื ื, ืืืฉืจ ืืชืืืืช ื ืืืงืช, ืืฉ ืืืืืง ืื ืืช Secret. ืื ืืกืฃ ืืื, ืืกืื ืขืฆืื ืืืื ืื ืืืฉืชื ืืช: ืืืงืจื ืื, ืืฉ ืืืขืชืืง ืืช ืืกืื ืืืืฉ ืืื ืืจืืื ืืฉืืืช ืขื ืชืืืืืช. ืื ืกืื ื ืืืง ืืืขืืช ืืืจืื ืฉืืืช ืืืฉืื, โโืขื ืืืคืขืื ืฉืื ื ืืฉืืืจ ืืืชื ืืื.
ืืขืช, ืืืืจ ืฉืืืฉืืื ืืืืฉื, ืืืืข ืืืื ืืืชืืื ืืืืฉื ืืืชื ืืืืฆืขืืช ื- shell-operator. ืืื ืงืืื ืื ืืืื ืืืืจ ืืื ืืืืื ืขื ืืคืขืื ืืืขืืคืช ืขืฆืื.
ืืืฆื ืคืืขื ืืคืขืื ืืขืืคืช
ืืื ืขืืืกื ืขืืืื ืืืจืื ื-Kubernetes, ื-Shell-operator ืคืืขื ืืชืจืืื ืืฉืื. ืืคืื ืืื ืืกืคืจืืื /hooks
ืงืืฆื ืืคืขืื ืืืืืกื ืื. ืืื ืืืืืื ืืืืืช ืกืงืจืืคืืื ื-Bash, Python, Ruby ืืื'. ืื ื ืงืืจืืื ืืงืืฆื ืืคืขืื ืืืื Hooks (ืืืื).
Shell-operator ื ืจืฉื ืืืืจืืขื Kubernetes ืืืคืขืื ืืช ื-hooks ืืืื ืืชืืืื ืืืืชื ืืืจืืขืื ืฉืื ืื ื ืฆืจืืืื.
ืืื ืืคืขืื ืืคืื ืืืืข ืืืื ืื ืืืคืขืื ืืืชื? ืื ืงืืื ืืื ืฉืืื ืื ืืฉ ืฉื ื ืฉืืืื. ืืืืื ืืืคืขืื, ื-Shell-operator ืืคืขืื ืืช ืื ื-hooks ืขื ืืจืืืื ื --config
ืืื ืฉืื ืืืืืจื. ืืืืจืื ืืืฉืงืื ืืืื ืืฆืืจื ืจืืืื - ืืชืืืื ืืืืจืืขืื ืืืืื ืื ืืืืืจืื. ืืืงืจื ืืืืจืื, ืืงืจืก ืืงืื ืืช ืืืงืฉืจ ืืืืืื (ืืงืฉืจ ืืืืื) - ื ืชืื ืื ืืคืืจืื JSON, ืขืืืื ื ืืืจ ืืืชืจ ืคืืจืื ืืืืฉื.
ืืืฆืืข ืืคืขืื ืืืืฉ
ืขืืฉืื ืื ืื ื ืืืื ืื ืืืืฉืื. ืืฉื ืื, ืขืืื ื ืืืชืื ืฉืชื ืคืื ืงืฆืืืช (ืืื, ืื ื ืืืืืฆืื ืืกืคืจืืื
- ืืจืืฉืื ื ืืืฅ ืืฉืื ืืชืฆืืจื - ืืื ืืฆืื ืืช ืืืงืฉืจ ืืืืืื;
- ืืฉื ื ืืืื ืืช ืืืืืืื ืืขืืงืจื ืฉื ืืงืจืก.
#!/bin/bash
source /shell_lib.sh
function __config__() {
cat << EOF
configVersion: v1
# BINDING CONFIGURATION
EOF
}
function __main__() {
# THE LOGIC
}
hook::run "$@"
ืืฉืื ืืื ืืื ืืืืืื ืืืื ืืคืฆืื ืื ืื ื ืฆืจืืืื. ืืืงืจื ืฉืื ื, ืขืืื ื ืืขืงืื ืืืจ:
- ืกืื ืืงืืจ ืืฉืื ืืืื;
- ืื ืืจืืื ืืฉืืืช ืืืฉืืื, ืืื ืฉืชืืข ืืืืื ืืฉ ืชืืืืช;
- ืกืืืืช ืืขื ืืื ืืืืืื ืฉืืืื ืืกืื ืืจื ืื ืขื ืกืื ืืืงืืจ.
ืืืจืฉื ืืืงืืจ ืืกืืื
ืชืฆืืจื ืืืืืืช ืขืืืจ ืื ืืื ืื ืคืฉืืื. ืื ื ืืฆืืื ืื ืฉืื ื ืืขืื ืืื ืื ืืกืื ืขื ืืฉื mysecret
ืืืจืื ืืฉืืืช 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
ืืชืืฆืื ืืื, ื-hook ืืืคืขื ืืืฉืจ ืกืื ืืืงืืจ ืืฉืชื ื (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
ืืกื ื ืืช ืื ืืืืืข ืืืื ืืจืื ืืฉืืืช ืืืคืจืืืจ resourceVersion
. ืืคืจืืืจ ืืืืจืื ืืืขืืจ ืืืขืจื ืืขืช ืืฆืืจืช ืืกืื: ืืื ืืืคืฉืจ ืืืฉืืืช ืืจืกืืืช ืฉื ืกืืืืช ืืืขืืื ืืืชื.
ืืืง ืืืืืืจ ืืฆืืจื ืื ืืงืื, ืืืฉืจ ืืืืฆืข, ืืช ืฉืืืฉืช ืืืงืฉืจืื ืืืืืืืื ืฉืชืืืจื ืืขืื. ืืคืฉืจ ืืืฉืื ืขืืืื ืืกืื ืฉื ืชืืื ืช ืืฆื (ืชืืื ืช ืืฆื) ืืฉืืื.
ืขื ืกืื ืื ืืืืืข ืืื ื ืืชื ืืคืชื ืืืืืจืืชื ืืกืืกื. ืื ืืืืจ ืขื ืื ืืจืืื ืืฉืืืช ื:
- ืื
hasLabel
ืขื ืืื ืืtrue
ืขืืืจ ืืจืื ืืฉืืืช ืื ืืืื:- ืืฉืืื ืืช ืืกืื ืืขืืืื ืืื ืืืงืืื:
- ืื ืื ืืืื, ืื ืื ืขืืฉื ืืืื;
- ืื ืื ืฉืื ืื - ืืืฆืข
kubectl replace
ืืcreate
;
- ืืฉืืื ืืช ืืกืื ืืขืืืื ืืื ืืืงืืื:
- ืื
hasLabel
ืขื ืืื ืืfalse
ืขืืืจ ืืจืื ืืฉืืืช ืื ืืืื:- ืืืืื ืฉ-Secret ืื ื ืืฆื ืืืจืื ืืฉืืืช ืื ืชืื:
- ืื ืืกืื ืืืงืืื ืงืืื, ืืืง ืืืชื ืืืืฆืขืืช
kubectl delete
; - ืื ืืกืื ืืืงืืื ืื ืืชืืื, ืื ืื ืขืืฉื ืืืื.
- ืื ืืกืื ืืืงืืื ืงืืื, ืืืง ืืืชื ืืืืฆืขืืช
- ืืืืื ืฉ-Secret ืื ื ืืฆื ืืืจืื ืืฉืืืช ืื ืชืื:
ืื ืืฆืืื ื ืืืฆืืจ ืืงืจ Kubernetes ืคืฉืื ืืืืฆืขืืช 35 ืฉืืจืืช ืฉื ืชืฆืืจืช YAML ืืืขืจื ืืืชื ืืืืช ืฉื ืงืื Bash! ืชืคืงืืื ืฉื ืืคืขืื ืืืขืืคืช ืืื ืืงืฉืจ ืืืชื ืืื.
ืขื ืืืช, ืืขืชืงืช ืกืืืืช ืืื ื ืชืืื ืืืืฉืื ืืืืื ืฉื ืืื ืืฉืืจืืช. ืื ื ืขืื ืืื ืืืืืืืช ืืื ืืืจืืืช ืืื ืืื ืืกืืื.
ืืืืื 1: ืืืฆืืข ืฉืื ืืืื ื-ConfigMap
ืืืื ื ืกืชืื ืขื ืคืจืืกื ืืืืจืืืช ืืฉืืืฉื ืชืจืืืืื. ืคืืืื ืืฉืชืืฉืื ื-ConfigMap ืืื ืืืืกื ืชืฆืืจื ืืกืืืืช. ืืฉืืคืืืื ืืืฉืงื, ConfigMap ืืื ืืืฆื ืืกืืื (ืืืื ื ืงืจื ืืื v.1). ืืืชืื ืืื, ืื ืืคืืืื ืืฉืชืืฉืื ืืืจืกื ืืกืคืฆืืคืืช ืืื ืฉื ConfigMap.
ืืขืช ื ื ืื ืฉื-ConfigMap ืืฉืชื ื (v.2). ืขื ืืืช, ืืคืืืื ืืฉืชืืฉื ืืืจืกื ืืงืืืืช ืฉื ConfigMap (v.1):
ืืืฆื ืืืื ืืืจืื ืืื ืืขืืืจ ื-ConfigMap ืืืืฉ (v.2)? ืืชืฉืืื ืคืฉืืื: ืืฉืชืืฉ ืืชืื ืืช. ืืืื ื ืืกืืฃ ืืขืจืช ืกืืื ืืืืงื ืืงืืข template
ืชืฆืืจืืช ืคืจืืกื:
ืืชืืฆืื ืืื, ืกืืื ืืืืืงื ืืื ืืืจืฉื ืืื ืืคืืืื, ืืืื ืืืื ืืื ืืื ืฉื Deployment. ืืขืช ืืชื ืจืง ืฆืจืื ืืขืืื ืืช ืืืขืจื ืืืฉืจ ConfigMap ืืฉืชื ื. ืืืคืขืื ืืืขืืคืช ืื ืฉืืืืฉื ืืืงืจื ืืื. ืื ืื ืฉืืชื ืฆืจืื ืืขืฉืืช ืืื ืืชืื ืช ืืืง ืฉืืืจืฉื ื-ConfigMap ืืืขืืื ืืช ืกืืื ืืืืืงื.
ืื ืืืฉืชืืฉ ืืืฆืข ืฉืื ืืืื ื-ConfigMap, ืืคืขืื ืืืขืืคืช ืืืืื ืืื ืืืืฉื ืืืืฉ ืืช ืกืืื ืืืืืงื. ืืืืจ ืืื ืืงืกื ืฉื 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: ื ืืืืจ ืจืฉืช ืืฉืืื
ืืคื ืฉืืชื ืืืืข, ืฉืืืืฉ ืืคืื ื ืืื ืืืจื ืืคืฉืืื ืืืืชืจ ืื ืืจ ืจืฉืช. ืืืืืื ืื ื ืจืื ืืืฆื ืืืืฉื ื ืืืืจ ืืื ืืืืฆืขืืช 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: []
ืืื ืข ืื-hook ืืคืขืื ืืชืืืื ืืื ืืืจืืข (ืืืืืจ, ืืชืืืื ืืฉืื ืื, ืืืกืคื, ืืืืงื ืฉื ืฆืืชืื). ืขื ืืืช, ืืื ืืจืืฅ (ืืขืืื ืืช ืจืฉืืืช ืืฆืืชืื) ืขื ืคื ืืื ืืืื ืื - ืื ืืงื, ืืคื ืืืจืืืช ืืฉืื 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
.
ืื ืื ืื ืชืืจ
ืืืืจ ืื ืื ืืืื ืฉืื ืืืื ืืชืืจ ืื ืื ืื ืืฉืื ื ืืกืฃ ืืืืื ื ืืืคืขืื ืืืขืืคืช. ืชืืจื ืืขืฆืืื ืฉืืื ืืืฆืข ืกืื ืฉื ืืืง ืืชืืืื ืืืืจืืข ืืืฉืืื.
- ืื ืงืืจื ืื, ืืืืชื ืืืื, ืืฉืื ืงืืจื ืืืฉืืื? ืขืื ืืืจ ืืื ืึดืงืจึถื?
- ืืื ืืคืขืื ืืืขืืคืช ืืคืขืื ืืืคืข ื ืืกืฃ ืฉื ืืื?
- ืื ืื, ื ื ืื, ืืืืฉื ืืืจืืขืื ืืชืจืืฉืื ืืืฉืืื ืืืช ืืืช?
- ืืื ืืคืขืื ืืืขืืคืช ืืขืื ืืืชื ืืืงืืื?
- ืื ืืืื ืืฉืืืื ื ืฆืจืืื ืืื ืืืืจืื ืืืขืื?
ืืืจืื ืืืื, ืืืคืขืื ืืขืืคืช ืืฉ ืื ืื ืื ืชืืจ ืืืื ื. ืื ืืืืจืืขืื ื ืืฆืืื ืืชืืจ ืืืขืืืืื ืืจืฆืฃ.
ืืืื ื ืืืืฉ ืืืช ืืขืืจืช ืืืืืืืช. ื ื ืื ืฉืืฉ ืื ื ืฉื ื ืืืื. ืืืืจืืข ืืจืืฉืื ืขืืืจ ืืืืง ืืจืืฉืื. ืืืืจ ืืฉืืืช ืืขืืืื ืฉืื, ืืชืืจ ื ืข ืงืืืื. ืฉืืืฉืช ืืืืจืืขืื ืืืืื ืืืคื ืื ื-hook ืืฉื ื - ืื ืืืกืจืื ืืืชืืจ ืืืืื ืกืื ืืืื ื"ืฆืจืืจ". ืื ืืืง ืืงืื ืืขืจื ืืืจืืขืื - ืื, ืืืชืจ ืืืืง, ืืขืจื ืฉื ืืงืฉืจืื ืืืืืืื.
ืื ืืื ื ืืชื ืืฉืื ืืืจืืขืื ืืืื ืืืื. ืืคืจืืืจ ืืืจืื ืืื group
ืืชืฆืืจืช ืืืจืืื.
ืืชื ืืืื ืืืฆืืจ ืื ืืกืคืจ ืฉื ืชืืจืื/ืืืงืื ืืืฉืืืืืื ืืฉืื ืื ืฉืืื. ืืืืืื, ืชืืจ ืืื ืืืื ืืขืืื ืขื ืฉื ื ืืืื, ืื ืืืืคื.
ืื ืื ืฉืืชื ืฆืจืื ืืขืฉืืช ืืื ืืืืืืจ ืืช ืืฉืื ืืืชืื queue
ืืชืฆืืจืช ืืืจืืื. ืื ืื ืฆืืื ืฉื ืชืืจ, ื-hook ืคืืขื ืืชืืจ ืืจืืจืช ืืืืื (default
). ืื ืื ืื ืชืืจ ืื ืืืคืฉืจ ืื ืืคืชืืจ ืืืืืืื ืืช ืื ืืขืืืช ื ืืืื ืืืฉืืืื ืืขืช ืขืืืื ืขื ืืืื.
ืืกืงื ื
ืืกืืจื ื ืืื ืืืคืจืืืจ ืืขืืคืช, ืืจืืื ื ืืืฆื ื ืืชื ืืืฉืชืืฉ ืื ืืื ืืืฆืืจ ืืคืขืืื Kubernetes ืืืืืจืืช ืืืื ืืืืฅ, ืื ืชื ื ืืกืคืจ ืืืืืืืช ืืฉืืืืฉ ืื.
ืืืืข ืืคืืจื ืขื ืืคืขืื ืืืขืืคืช, ืืื ืื ืืืจืื ืืืืจื ืืืฆื ืืืฉืชืืฉ ืื, ืืืื ืืงืืืฅ ืืืชืืื
ืืื ืืืืชื, ืื ืื ื ืชืืื ืฉืืืื ืืจืืืช ืืืืืื ืืช/ืื"ืฆ/ืืืืืื ืืืฉืื ื-GitHub, ืฉื, ืืื, ืชืืืื ืืืฆืื ืืืจืื
ืกืจืืื ืื ืืฉืงืืคืืืช
ืกืจืืื ืืืืืคืขื (~23 ืืงืืช):
ืืฆืืช ืืื"ื:
ื .ื.
ืงืจื ืื ืืืืื ืฉืื ื:
- ยซ
ืืฆืืจื ืงืื ืฉื ืืคืขืืื Kubernetes ืขื ืืคืขืื ืืขืืคืช: ืืชืงืืืืช ืืคืจืืืงื ืืืืื ืืฉื ื "; - ยซ
ืืืืจืืช ืขื ืืคืขืื ืืขืืคืช: ืืฆืืจืช ืืืคืจืืืจืื ืขืืืจ Kubernetes ืคืฉืื ื ืขืฉืชื ืงืื ืืืชืจ "; - ยซ
ืืื ืงื ืื ืื ืืืืื ืืฉืืื Kubernetes? ืืืจืื ืขื ืืคืขืื ืชืืกืฃ "; - ยซ
ืืจืืืช ืืืฉืืื ืฉื Kubernetes" (ืกืงืืจื ืืืื ืืืืื) .
ืืงืืจ: www.habr.com