áá»áœááºáá±á¬áºááá¯á· ááá±á¬á·ááºááŸá¬ ááŒá±á¬áá±ááŒáá²á· áá±á¬ááºážáá«ážááœá± ááŸáááŒá®ážáá¬ážáá«á
á¡áááºááŒá±á¬áá·áºáááºáž
shell-operator á á áááºáá°ážááẠá¡ááœááºááá¯ážááŸááºážáááº- Kubernetes á¡áá¬ááá¹áá¯áá»á¬ážá០á¡ááŒá áºá¡áá»ááºáá»á¬ážááᯠá á¬áááºážááœááºážááŒá®áž á€ááŒá áºáááºáá»á¬ážááᯠáááºáá¶áááŸáááá·áºá¡áá«ááœáẠááŒááºááááá¯ááááºáá áºáá¯ááᯠá áááºáᬠááŒá áºáááºááŸáá·áºáááºáááºáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááᯠáá±ážáá±á¬ááºáááº-
á¡á á¯á¡ááœá²á·áá»á¬ážá áááºáááºááŸá¯á¡ááœááºážá áá»áœááºá¯ááºááá¯á·ááẠá¡ááŸááºáááẠáááºážáááºážááŸááºááŒáá·áº á¡ááá¯á¡áá»á±á¬áẠááŒááºááœááºááá¯áá±á¬ áá¯ááºáááºážáááºáá»á¬áž á áááºáá±á«áºáá±á«ááºáá¬áá±á¬á¡áá« áááºážá¡ááœáẠááá¯á¡ááºáá¬áááºá áááºááááá·áºá¡ááá¯ááºáž Golang ááœáẠá¡á±á¬áºááá±áá¬áá»á¬ážááᯠáá±ážááŒááºážááẠááá¯áá±á¬ááºážáá±á¬áºáááºážá á€áá±ážáááºáá±á¬áá¯ááºáá±á¬ááºá áá¬á¡á¬ážáá¯á¶ážááᯠááá¯ážááŸááºážáá±á¬ bash scripts áá»á¬ážááŒáá·áº ááŒá±ááŸááºážáá¬ážáá«áááºá áááºážáá²á·ááá¯á· áá¯ááºáááºážáááºáá áºáá¯á á®á¡ááœáẠá¡á±á¬áºááá±áá¬áá áºáá¯á á¡ááŒáá·áºá¡á ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááœáẠáááºážááŸá®ážááŒáŸá¯ááºááŸá¶ááŒááºážááẠáááá±á¬ááºááŸá¯ áááŸááááºááŸá¬ áááºááŸá¬ážáá«áááºá
á¡á±á¬áºááá±áá¬á¡ááœáẠ15 áááá áº
Kubernetes á¡á á¯á¡áá±ážááœáẠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºááá¯ááºááá·áºá¡áá¬ááŸáá·áº shell-operator á áááºááá¯á·áá°áá®áá±ážááá¯ááºááŒá±á¬ááºáž á¥ááá¬áá áºáá¯á¡á¬áž ááŒáá·áºááŒáá«á áá¯á·á á¥ááá¬áá áºáá¯ááẠá¡á±á¬ááºáá«á¡ááá¯ááºážááŒá áºááá¯ááºáááº- docker ááŸááºáá¯á¶áááºááŒááºážááá¯á·áááºáá±á¬ááºááẠáá»áŸáá¯á·ááŸááºáá»ááºááᯠáá¯á¶áá°áá°ážááŒááºážá
áá®ážááá·áº ááŸááºáá¯á¶áááºááŒááºážá០áá¯á¶áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá·áº Pods áá»á¬ážááœáẠááŸááºáá¯á¶áááºááŒááºážááá¯á·áááºáá±á¬ááºááŒááºážá¡ááœáẠáá±áá¬áá«ááá·áº áá»áŸáá¯á·ááŸááºááá·áºááºáá áºáá¯ááá¯á· áááºážááá¯á·ááá±á¬áºááŒáá»ááºááœáẠáá«áááºááá«áááºá pods ááááºáá®ážáá® á€áá»áŸáá¯á·ááŸááºáá»ááºááᯠnamespace áá áºáá¯á á®ááœáẠáááºáá®ážááá«áááºá áááºážááᯠááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºááá¯ááºáá±á¬áºáááºážá áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºážááá áºáááºáááºážáá»ááºáá»á¬ážááᯠá áá áºááá·áºááœááºážáá«áá á¡ááá®áá±ážááŸááºážáá áºáá¯á¡ááœáẠnamespace ááẠáá»á¬ážá áœá¬ááŒá áºáá¬áááºááŒá áºáááºá á¡ááá®áá±ážááŸááºáž 2-3 áá¯áááºážáááŸááááº... áá»áŸáá¯á·ááŸááºáá»ááºá¡áá±á¡ááœááºá á¡áááºážáá»á¬ážáá¬áááºá áá»áŸáá¯á·ááŸááºáá»ááºáá»á¬ážá¡ááŒá±á¬ááºáž áá±á¬ááºáááºá¡áá»ááºáá áºáá»ááº- áá»áœááºá¯ááºááẠááŸááºáá¯á¶áááºááŒááºážááᯠá¡áá«á¡á¬ážáá»á±á¬áºá áœá¬ áááºáá±á¬ááºááẠáá±á¬á·ááᯠááŒá±á¬ááºážáá²ááá¯áá«áááºá áá±á¬ááºáá¯á¶ážáá±á¬á·á ááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬áž ááŒá±ááŸááºážáá»ááºá¡ááŒá Ạáá¯á¶ážá ááááá±á¬ááºáá°ážá - áá»áœááºá¯ááºááá¯á·ááẠáá»áŸáá¯á·ááŸááºáá»ááºáá»á¬ážááᯠáááºáá®ážááŒááºážááŸáá·áº á¡ááºááááºáá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááºá
ááá¯ážááŸááºážáá±á¬á¡ááá¯á¡áá»á±á¬ááºá áá áº
N á áá¹ááá·áºááá¯ááºáž áá áºááŒáááºáááºáááºááŒá®áž áá»áŸáá¯á·ááŸááºáá áºáá¯ááŸááá±ááŒááºážá¡ááœáẠnamespaces áá»á¬ážááᯠá á áºáá±ážááŒá®áž áá»áŸáá¯á·ááŸááºááŒááºážáááŸááá«á shell script ááá¯áá±ážááŒáá«á áá¯á·á á€ááŒá±ááŸááºážáá»ááºáá¡á¬ážáá¬áá»ááºááŸá¬á áá°ááá¯ááºážá¡ááœáẠááá¹ááááºááŒá áºááŒá®áž áá¬ážáááºááá¯ááºáá±á¬áá»ááºážáááºááŸá¯áá áºáá¯ááŒá áºáááºá á¡á¬ážáááºážáá»ááºááŸá¬ áááºážá launches áá»á¬ážááŒá¬ážáá¬áááœáẠnamespace á¡áá áºááᯠáááºáá®ážááá¯ááºááŒá®áž á¡áá»áááºá¡áááºááŒá¬á¡á±á¬áẠáááºážááẠáá»áŸáá¯á·ááŸááºáá¬ážááŒááºážáááŸááá² ááŸááá±áááºááŒá áºááŒá®ážá áááºážááẠpods áá»á¬ážááᯠlaunch áá¯ááºáá¬ááœáẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážááŸááá¬áááºááŒá áºáááºá
shell-operator ááŒáá·áº á¡ááá¯á¡áá»á±á¬ááºá áá áº
áá»áœááºá¯ááºááá¯á·á script ááᯠááŸááºáááºá áœá¬ áá¯ááºáá±á¬ááºááá¯ááºáááºá namespace ááᯠááá·áºááœááºážááá·áºá¡áá« classic cron launch ááᯠlaunch ááŸáá·áº á¡á á¬ážááá¯ážááẠááá¯á¡ááºáá«áááº- á€ááá á¹á ááœááºá áááºážááᯠá¡áá¯á¶ážáááŒá¯áá® áá»áŸáá¯á·ááŸááºáá»ááºááᯠáááºáááºáá®ážááá¯ááºáá«áááºá shell-operator áá¯á¶ážááŒá®áž áá«ááᯠáááºááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºáááá²ááá¯áᬠááŒáá·áºáá¡á±á¬ááºá
á¡áááºáá¯á¶áž áá¬ááºááœáŸááºážááᯠááŒáá·áºáá¡á±á¬ááºá shell-operator áá±á«áá¬ááá»á¬ážááœáẠScript áá»á¬ážááᯠhooks áá¯áá±á«áºáááºá á¡áá¶áá
áºáá¯áá²á· ááŒá±ážáá²á·á¡áá« áá»áááºááá¯ááºáž --config
shell-operator á¡á¬áž áááºážá bindings áá»á¬ážá¡ááŒá±á¬ááºážá i.e. áááºááá¯ááœá²áá»áá¯ážááŸá¬ á
áááºáá»ááºážáááá·áºáá²á áá«ááá¯á·ááá
á¹á
ááŸá¬ áá«ááá¯á·áá¯á¶ážáááºá onKubernetesEvent
:
#!/bin/bash
if [[ $1 == "--config" ]] ; then
cat <<EOF
{
"onKubernetesEvent": [
{ "kind": "namespace",
"event":["add"]
}
]}
EOF
fi
áá»áœááºá¯ááºááá¯á·ááẠááœá²áá»á¬ážááᯠáá±á«ááºážááá·áºááẠá
áááºáááºá
á¬ážááŒá±á¬ááºáž á€áá±áá¬ááœáẠáá±á¬áºááŒáá¬ážáá«áááºáadd
) á¡áá»áá¯ážá¡á
á¬áž á¡áá¬ááá¹áá¯áá»á¬áž namespace
.
ááᯠá¡ááŒá áºá¡áá»áẠááŒá áºáá±á«áºáá¬áá±á¬á¡áá«ááœáẠáá¯ááºáá±á¬ááºááá·áº áá¯ááºááᯠááẠááá·áºááœááºážááẠááá¯á¡ááºáááº-
#!/bin/bash
if [[ $1 == "--config" ]] ; then
# кПМÑОгÑÑаÑОÑ
cat <<EOF
{
"onKubernetesEvent": [
{ "kind": "namespace",
"event":["add"]
}
]}
EOF
else
# ÑеакÑОÑ:
# ÑзМаÑÑ, какПй namespace пПÑвОлÑÑ
createdNamespace=$(jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH)
# ÑПзЎаÑÑ Ð² ÐœÑÐŒ ÐœÑжМÑй ÑекÑеÑ
kubectl create -n ${createdNamespace} -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
...
data:
...
EOF
fi
ááá¯ááºáááº! ááááºááá±á¬á· áá±ážáááºááŸáááºáá»á áááºážááᯠááŒááºáááºá¡áááºááœááºážááẠá¡ááá·áºááŸá áºááá·áºáá»ááºáááº- áá¯á¶ááᯠááŒááºáááºááŒá®áž á¡á á¯á¡áá±ážááœáẠá áááºááá¯ááºáá«á
áá»áááºááŒáá·áº áá¯á¶áá áºáá¯á¶ááᯠááŒááºáááºááŒááºážá
áá¬ááºááœáŸááºážááá¯ááŒáá·áºáá»áŸáẠcommand áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯áááºááá¯ááœá±á·ááá¯ááºáááºá kubectl
О jq
. ááá¯ááá¯áááºááŸá¬ áá¯á¶ááœáẠá¡á±á¬ááºáá«á¡áá¬áá»á¬áž ááŸáááááº- áá»áœááºá¯ááºááá¯á·á áá»áááºá á¡ááŒá
áºá¡áá»ááºáá»á¬ážááᯠá
á±á¬áá·áºááŒáá·áºááŒá®áž áá»áááºááᯠáá¯ááºáá±á¬ááºáá±ážááá·áº áá»áœááºá¯ááºááá¯á·á áá»áááºá áá»ááẠ(kubectl ááŸáá·áº jq) á០á¡áá¯á¶ážááŒá¯ááá·áº ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážá Hub.docker.com ááœáẠshell-operatorá kubectl ááŸáá·áº jq ááᯠáá¯ááºááá¯ážáá¬ážááá·áº á¡áááºááá·áºáá¯ááºáá¬ážáá±á¬ áá¯á¶áá
áºáᯠááŸáááŸáá·áºááŒá®ážááŒá
áºáááºá áá»ááºáá¬ááá±á¬á· ááá¯ážááá¯ážáá»áááºáá
áºáá¯ááá·áºááá¯á·áá²áá»ááºáá±á¬á·áááºá Dockerfile
:
$ cat Dockerfile
FROM flant/shell-operator:v1.0.0-beta.1-alpine3.9
ADD namespace-hook.sh /hooks
$ docker build -t registry.example.com/my-operator:v1 .
$ docker push registry.example.com/my-operator:v1
á¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯áẠáááºáááºáá±áááºá
áá»áááºááᯠááŒááºááŒáá·áºáá¡á±á¬ááºá áá®áá áºáá«áá±á¬á· áááºáá¯ááºáá±á¬ááºáá»ááºááœá±áá²á· á¡á á¯á¡áá±ážááŸá¬ áá¯ááºáá±á¬ááºáá±áá²ááá¯áá¬ááᯠáá»áá±ážáá«á
- namespace áááºáá®ážááŸá¯ááŒá áºáááºáá»á¬ážááá¯á·á á¬áááºážááœááºážáááº;
- á áááºááá·áºáá±áá¬ááŸááœá²á á¡ááŒá¬áž namespace áá»á¬ážááœáẠáá»áŸáá¯á·ááŸááºáá»ááºáá áºáᯠáááºáá®ážáááºá
áá»áœááºá¯ááºááá¯á·ááá¯á¶ááᯠá áááºáá¯ááºáá±ááá·áº pod ááœáẠá€áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠááœáá·áºááŒá¯áá»ááºáá»á¬ážááŸááááẠááŒá áºáááºááᯠááœá±á·ááá«áááºá ááá·áºááá¯ááºááá¯áẠServiceAccount áááºáá®ážááŒááºážááŒáá·áº áááºážááᯠáá¯ááºáá±á¬ááºááá¯ááºáá«áááºá ááœáá·áºááŒá¯áá»ááºááᯠClusterRole ááŸáá·áº ClusterRoleBinding áá¯á¶á á¶ááŒáá·áº áá¯ááºáá±á¬ááºááááºááŒá áºáá±á¬ááŒá±á¬áá·áºá á¡á á¯á¡ááœá²á·áá áºáá¯áá¯á¶ážá០á¡áá¬ááá¹áá¯áá»á¬ážááᯠáá»áœááºá¯ááºááá¯á· á áááºáááºá á¬ážáá«áááºá
YAML ááœáẠáá±á¬ááºáá¯á¶ážáá±á¬áºááŒáá»ááºááẠá€áá²á·ááá¯á· ááœá±á·ááááá·áºáááº-
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: monitor-namespaces-acc
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: monitor-namespaces
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "watch", "list"]
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list", "create", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: monitor-namespaces
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: monitor-namespaces
subjects:
- kind: ServiceAccount
name: monitor-namespaces-acc
namespace: example-monitor-namespaces
á á¯á ááºážáá¬ážáá±á¬ áá¯á¶á¡á¬áž ááá¯ážááŸááºážáá±á¬ ááŒáá·áºáá»ááºááŸá¯á¡ááŒá Ạáááºá áááºááá¯ááºáááº-
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-operator
spec:
template:
spec:
containers:
- name: my-operator
image: registry.example.com/my-operator:v1
serviceAccountName: monitor-namespaces-acc
á¡áááºááŒá±á á±áááºá¡ááœááºá shell-operator ááá¯ááœáá·áºááá·áºáá±áá¬ááœáẠáá®ážááŒá¬áž namespace ááᯠáááºáá®ážáá¬ážááŒá®áž áááºáá®ážáá¬ážáá±á¬ manifests áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááº-
$ kubectl create ns example-monitor-namespaces
$ kubectl -n example-monitor-namespaces apply -f rbac.yaml
$ kubectl -n example-monitor-namespaces apply -f deployment.yaml
áá«áá«áá²- shell-operator ááẠá áááºáááºááŒá áºááŒá®ážá namespace áááºáá®ážááŸá¯ááŒá áºáááºáá»á¬ážááᯠá á¬áááºážááœááºážááŒá®áž ááá¯á¡ááºáá«á áá»áááºááᯠrun áá«áááºá
ááá¯á·ááŒá±á¬áá·áº ááá¯ážááŸááºážáá±á¬ shell script ááẠKubernetes á¡ááœáẠáááá·áºá¡á±á¬áºááá±áá¬áá
áºáá¯á¡ááŒá
áºááá¯á· ááŒá±á¬ááºážáá²ááœá¬ážáááºá á¡á
á¯á¡ááœá²á·áá
áºáá¯á áá
áºá
áááºáá
áºááá¯ááºážá¡ááŒá
Ạáá¯ááºáá±á¬ááºáááºá Golang ááœáẠá¡á±á¬áºááá±áá¬áá»á¬áž ááœá¶á·ááŒáá¯ážááá¯ážáááºááẠááŸá¯ááºááœá±ážáá±á¬ áá¯ááºáááºážá
ááºáá»á¬áž ááá«áá²á
áá®ááá
á¹á
áá²á· áááºáááºááŒá®áž áá±á¬ááºááẠáá¯á¶áá
áºáá¯á¶ ááŸááá«áá±ážáááº...
áááºážáá¡áááá¹áá«ááºááᯠá¡á±á¬ááºáá«á
á¬áá±áá»á¬ážáá²á០áá
áºáá¯ááœáẠá¡áá±ážá
áááºáá±á¬áºááŒáá«áááºá
filtering ááá¯
á¡áá¬ááá¹áá¯áá»á¬ážááᯠááŒá±áá¬áá¶ááŒááºážááẠáá±á¬ááºážááœááºáá±á¬áºáááºáž áááŒá¬áá áá¯á¶á·ááŒááºááẠááá¯á¡ááºáááºá á¡áá¬ááá¹áá¯á¡áá»áá¯á·ááá¯ááºááá¹áááá»á¬ážááá¯ááŒá±á¬ááºážáá²ááŒááºážáá¥ááá¬á¡á¬ážááŒáá·áºá ááŒáá·áºáá»ááºááŸá¯ááœáẠáá¯á¶áá°á¡áá±á¡ááœááºááᯠááŒá±á¬ááºážáá²ááẠááá¯á·ááá¯áẠá¡áá¬ááá¹áá¯á¡ááœáŸááºážáá»á¬ážááᯠááŒá±á¬ááºážáá²áááºá
ááœá²áá
áºáá¯áá±á¬ááºáá¬áá±á¬á¡áá«á shell-operator ááẠá¡áá¬ááá¹áá¯á JSON manifest ááᯠáááºáá¶áááŸáááẠá ဠJSON ááœááºáá»áœááºá¯ááºááá¯á·á
áááºáááºá
á¬ážáá±á¬áá¯ááºááá¹áááá»á¬ážááá¯ááœá±ážáá»ááºááŒá®ážáá»áááºááá¯ááœáá·áºááá¯ááºáááºá áᬠáá°ááá¯á·ááŒá±á¬ááºážáá²á·á¡áá«á áá®á¡ááœáẠááœááºáááºáá
áºáá¯ááŸááááºá jqFilter
JSON áááºáá®ážáááºá
áºááœáẠá¡áá¯á¶ážááŒá¯ááá·áº jq á
áá¬ážáááºááᯠáááºááŸááºááẠááá¯á¡ááºáá«áááºá
á¥ááá¬á¡á¬ážááŒáá·áºá Deployment objects á¡ááœáẠá¡ááœáŸááºážáá»á¬ážááœáẠá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠáá¯á¶á·ááŒááºáááºá á¡ááœááºááᯠá
á
áºáá¯ááºááẠááá¯á¡ááºáááºá labels
áááºááŒááºáá²á metadata
. config áááºá€áá²á·ááá¯á·ááŒá
áºáááá·áºáááº-
cat <<EOF
{
"onKubernetesEvent": [
{ "kind": "deployment",
"event":["update"],
"jqFilter": ".metadata.labels"
}
]}
EOF
ဠjqFilter á áá¬ážáááºááẠááŒáá·áºáá»ááºááŸá¯á ááŸááºáá»á¬ážáá±á¬ JSON ááᯠá¡ááá¯áá±á¬áẠá¡ááœáŸááºážáá»á¬ážááŒáá·áº JSON á¡ááŒá ẠááŒá±á¬ááºážáá²áá±ážáááº-
á€ááá¯áá±á¬ááºážáá±á¬ JSON ááŒá±á¬ááºážáá²ááá·áºá¡áá«ááŸáᬠshell-operator ááẠáá»áááºááᯠrun áááºááŒá
áºááŒá®áž á¡ááŒá¬ážáá¯ááºááá¹áááá»á¬ážááá¯ááºáᬠááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠáá»á
áºáá»á°ááŸá¯áá«áááºá
á¡áá»áááºá¡áááºá¡á ááº
áá»ááẠconfig ááẠááá·áºá¡á¬áž ááœá²áá»á¬ážá¡ááœáẠááœá±ážáá»ááºá áá¬áá»á¬ážá áœá¬ááᯠáááºááŸááºááœáá·áºááŒá¯ááẠ- á¥ááá¬á Kubernetes á០ááŒá áºáááºáá»á¬ážá¡ááœáẠááœá±ážáá»ááºá áᬠ2 áá¯ááŸáá·áº á¡áá»áááºááá¬áž 2 áá¯-
{"onKubernetesEvent":[
{"name":"OnCreatePod",
"kind": "pod",
"event":["add"]
},
{"name":"OnModifiedNamespace",
"kind": "namespace",
"event":["update"],
"jqFilter": ".metadata.labels"
}
],
"schedule": [
{ "name":"every 10 min",
"crontab":"* */10 * * * *"
}, {"name":"on Mondays at 12:10",
"crontab": "* 10 12 * * 1"
]}
áá±ážáááºáá±á¬ digression- áá¯ááºáá²á·á shell-operator á áá¶á·ááá¯ážáá«áááºá crontab á
ááá¯áẠscripts áá»á¬ážááᯠáá¯ááºáá±á¬ááºáá±áááºá. á¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠááœáẠááŒáá·áºááŸá¯ááá¯ááºáá«áááºá
áá»áááºááᯠá¡áááºááŒá±á¬áá·áº á
áááºáá²á·áááºááᯠááœá²ááŒá¬ážááááŸááááºá shell-operator ááẠáá¬áá®ááá¯ááºáá
áºáᯠáááºáá®ážááŒá®áž hook ááá¯á· ááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ áááºážááŒá±á¬ááºážáá
áºáá¯ááŒáá·áº áááºážáá¶ááá¯á· áááºážááŒá±á¬ááºážááᯠááŒááºáááºážáááºá BINDING_CONTEXT_TYPE
. ááá¯ááºááœááºáá»áááºááá¯á¡áá¯á¶ážááŒá¯áááŒááºážá¡ááŒá±á¬ááºážá¡áááºážá JSON áá±á¬áºááŒáá»ááºáá«ááŸááááºá á¥ááá¬á¡á¬ážááŒáá·áºá 10 áááá
áºááá¯ááºáž áá»áááºááẠá¡á±á¬ááºáá«á¡ááŒá±á¬ááºážá¡áá¬ááŒáá·áº áááºáááºáá«áááº-
[{ "binding": "every 10 min"}]
... ááááºá¹áá¬áá±á·ááœáẠá€á¡áá¬ááŒáá·áº á áááºáá«áááºá
[{ "binding": "every 10 min"}, { "binding": "on Mondays at 12:10"}]
á¡ááœáẠonKubernetesEvent
á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº JSON á¡á
áá»áá¯ážááŸá¯áá»á¬áž áá±á¬ááºáááºááŸááá«áááºá áááºážááœáẠá¡áá¬ááá¹áá¯á áá±á¬áºááŒáá»ááºáá«ááŸááááºá
[
{
"binding": "onCreatePod",
"resourceEvent": "add",
"resourceKind": "pod",
"resourceName": "foo",
"resourceNamespace": "bar"
}
]
á¡ááœááºáá»á¬ážá á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠáááºážááá¯á·áá¡áááºáá»á¬ážá០áá¬ážáááºááá¯ááºááŒá®áž á¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠááœáẠáááºááŸá¯ááá¯ááºáá«áááºá resourceName
jq ááᯠá¡áá¯á¶ážááŒá¯á áá»áŸáá¯á·ááŸááºáá»ááºáá»á¬ážááᯠáá¯á¶áá°áá°ážáá¬ážáá±á¬ áá»áááºáá
áºáá¯ááœáẠááŒááá¬ážááŒá®ážááŒá
áºáááº-
jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH
á¡áá¬ážáá°áááºážááŒáá·áº á¡ááŒá¬ážáááºáááºáá»á¬ážááᯠáááºáááá¯ááºáááºá
áá¬áááºá·áá¬áá²?
ááá±á¬áá»áẠrepository ááœááºá in
Prometheus ááᯠá¡áá¯á¶ážááŒá¯á áááºááá
áºáá»á¬áž á
á¯áá±á¬ááºážááŒááºážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ ááŸáááẠ- áááŸáááá¯ááºáá±á¬ áááºááá
áºáá»á¬ážááᯠááá¹áááœáẠáá±á¬áºááŒáá¬ážáá«áááºá
áááºááá·áºááŸááºážáá¬ážááá·áºá¡ááá¯ááºážá shell-operator ááᯠGo ááœááºáá±ážáá¬ážáá¬ážááŒá®áž Open Source ááá¯ááºá
áẠ(Apache 2.0) á¡á±á¬ááºááœáẠááŒáá·áºáá±áá¬ážáááºá ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážá¡áá°á¡áá®á¡ááœáẠáá»áœááºá¯ááºááá¯á· áá»á±ážáá°ážáááºáá«áááºá
áá»áŸáá¯á·ááŸááºáá¯á¶ážá¡á¯ááºááᯠáá¯ááºááááºážááŒá®áž shell-operator ááŒá
áºáááºááᯠáá»áœááºá¯ááºááá¯á·áááºáž á¡áááá±ážáá«áááºá áá±ážáááºááẠKubernetes á¡á
á¯á¡áá±ážááœáẠááá·áºááœááºážáá¬ážáá±á¬ á¡ááá¯áááá¯ááááºáá»á¬ážááᯠá¡ááºááááºáá¯ááºáá¬ážááá¯ááºááŒá®áž á¡áá»áá¯ážáá»áá¯ážáá±á¬ á¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºááá·áº áá»áœááºá¯ááºááá¯á·áá
áá
áºááá
áºá
áááºáá
áºááá¯ááºážá á€á
áá
áºá¡ááŒá±á¬ááºážááá¯ááá¯áááºáá«á
á€á
áá
áºááá»ááºáá»á¬ážááá¯ááœáá·áºááẠáá»áœááºá¯ááºááá¯á·ááœáẠá¡á
á®á¡á
ááºááŸááááº- addon-operator ááŸáá·áºáá»áœááºá¯ááºááá¯á·ááá»áááºáá»á¬ážááŸáá·áº module áá»á¬ážá
á¯á
ááºážááŸá¯ááŸááááºá á
áá¬ážáá
ááºá addon-operator á ááŸáááŒá®ážáá¬ážáá«á
áááºááŒá®ážáá¬ážáá±á¬ááºáá«!
PS
áá»áœááºá¯ááºááá¯á·áááá±á¬á·ááºááœááºáááºážáááºáá«
- «
Kubernetes á¡ááœáẠá¡á±á¬áºááá±áá¬áá»á¬áž- ááá¯ááºáá¶ááá¯ááºá¡ááá®áá±ážááŸááºážáá»á¬ážááᯠáááºááá¯á·áá¯ááºáá±á¬ááºááááºáááºážá "; - «
Golang ááŸá Kubernetes á¡ááœáẠá¡á±á¬áºááá±áá¬áá áºáᯠáá±ážáá±áááºá "; - «
Grafana - Statusmap á¡ááá·áºá¡ááœáẠááááºá¡ááºá¡áá áºáá áºáá¯ááᯠááááºáááºááŒááºážá "; - «
Loghouse ááᯠááááºáááºááŒááºáž - Kubernetes ááœáẠááŸááºáááºážáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºáááºá¡ááœáẠááœáá·áºáááºážáá±á¬á¡áááºážá¡ááŒá áºá áá áºáá áºáᯠ"; - «
áá»áœááºá¯ááºááá¯á·ááẠdapp - CI/CD ááŒá¯ááŒááºááááºážááááºážááŸá¯á¡ááœáẠDevOps utility áá áºáá¯ááᯠááá¬ážáááºáááºááŒáá¬ážáá«áááºá "á
source: www.habr.com