เบกเบตเบเบปเบเบเบงเบฒเบกเบเปเบฝเบงเบเบฑเบ blog เบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบ
เปเบเบฑเบเบซเบเบฑเบ?
เปเบเบงเบเบงเบฒเบกเบเบดเบเบเบญเบ shell-operator เปเบกเปเบเบเปเบญเบเบเปเบฒเบเบเปเบฒเบเบเบฒเบ: เบเบญเบเปเบซเบเบเบฒเบเบเบฒเบเบงเบฑเบเบเบธ Kubernetes, เปเบฅเบฐเปเบกเบทเปเบญเปเบซเบเบเบฒเบเปเบซเบผเบปเปเบฒเบเบตเปเปเบเปเบฎเบฑเบ, เปเบเบตเบเบเบปเบงเปเบเบเบเบฒเบเบเบฒเบเบเบญเบ, เปเบซเปเบเปเปเบกเบนเบเบเปเบฝเบงเบเบฑเบเปเบซเบเบเบฒเบ:
เบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบกเบฑเบเปเบเบตเบเบเบทเปเบเปเบเปเบงเบฅเบฒเบเบตเป, เปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบญเบเบเบธเปเบก, เบงเบฝเบเบเบฒเบเบเบฐเบซเบเบฒเบเบเปเบญเบเปเบฅเบตเปเบกเบเบฒเบเบปเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบเบเบฒเบเบเบตเปเบเบทเบเบเปเบญเบ. เบงเบฝเบเบเบฒเบเบเปเบญเบเปเปเบซเบผเบปเปเบฒเบเบตเปเบเบทเบเปเบเปเปเบเปเบเบเปเบเป bash scripts เบเปเบฒเบเบเบฒเบ, เปเบเบดเบเปเบกเปเบเบงเปเบฒ, เบเบฒเบกเบเบตเปเบเปเบฒเบเบฎเบนเป, เบกเบฑเบเบเบตเบเบงเปเบฒเบเบตเปเบเบฐเบเบฝเบเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบ Golang. เปเบเปเบเบญเบ, เบเบฒเบเบฅเบปเบเบเบถเบเปเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบขเปเบฒเบเปเบเบฑเบกเบเบตเปเบเบญเบเบเบนเปเบเบฐเบเบญเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบงเบฝเบเบเบฒเบเบเบฐเบซเบเบฒเบเบเปเบญเบเบเบฑเปเบเบเปเบฒเบงเบเบฐเบเปเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบ.
เบเบนเปเบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบ 15 เบเบฒเบเบต
เปเบซเปเปเบเบดเปเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบชเบดเปเบเบเบตเปเบชเบฒเบกเบฒเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบเบเบธเปเบก Kubernetes เปเบฅเบฐเบงเบดเบเบตเบเบฒเบเบเบตเปเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบเบฐเบชเบฒเบกเบฒเบเบเปเบงเบเปเบเป. เบเบปเบงเบขเปเบฒเบเบเบฐเปเบเบฑเบเบเบฑเปเบเบเปเปเปเบเบเบตเป: replicating เบเบงเบฒเบกเบฅเบฑเบเปเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบฒเบเบฅเบปเบเบเบฐเบเบฝเบ docker.
Pods เบเบตเปเปเบเปเบฎเบนเบเบเบฒเบเบเบฒเบเบเบฐเบเบฝเบเปเบญเบเบฐเบเบปเบเบเปเบญเบเบกเบตเบขเบนเปเปเบ manifest เบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบเบงเบฒเบกเบฅเบฑเบเบเบตเปเบกเบตเบเปเปเบกเบนเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบฒเบเบฅเบปเบเบเบฐเบเบฝเบ. เบเบงเบฒเบกเบฅเบฑเบเบเบตเปเบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบเบชเปเบฒเบเปเบเปเบเปเบฅเบฐ namespace เบเปเบญเบเบเบตเปเบเบฐเบชเปเบฒเบ pods. เบเบตเปเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเปเบเปเบงเบเบเบปเบเปเบญเบ, เปเบเปเบเปเบฒเบเบงเบเปเบฎเบปเบฒเบเบฑเปเบเบเปเบฒเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเปเบเบเปเบเบทเปเบญเบเปเบซเบง, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, namespace เบชเปเบฒเบฅเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบซเบเบถเปเบเบเบฐเบเบฒเบเปเบเบฑเบเบซเบผเบฒเบ. เปเบฅเบฐเบเปเบฒเบเปเปเบกเบต 2-3 เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ ... เบเปเบฒเบเบงเบเบเบญเบเบเบงเบฒเบกเบฅเบฑเบเบเบฐเบเบฒเบเปเบเบฑเบเบเบฐเบซเบเบฒเบเปเบซเบเปเบซเบผเบฒเบ. เปเบฅเบฐเบญเบตเบเบขเปเบฒเบเบซเบเบถเปเบเบเปเบฝเบงเบเบฑเบเบเบงเบฒเบกเบฅเบฑเบ: เบเปเบญเบเบขเบฒเบเบเปเบฝเบเบฅเบฐเบซเบฑเบเปเบเบทเปเบญเปเบเบปเปเบฒเปเบเบดเบเบเบฒเบเบฅเบปเบเบเบฐเบเบฝเบเปเบเบฑเบเบเบฒเบเบเบฑเปเบเบเบฒเบง. เปเบเบเบตเปเบชเบธเบ, เบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบนเปเบกเบท เปเบเบฑเบเบเบฒเบเปเบเปเปเบ เบเปเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบปเบเบขเปเบฒเบเบชเบปเบกเบเบนเบ โ เบเบงเบโเปเบฎเบปเบฒโเบเปเบฒโเปเบเบฑเบโเบเปเบญเบโเปเบเปโเบญเบฑเบโเบเบฐโเปเบโเบกเบฑเบโเบเบฒเบโเบชเปเบฒเบโเปเบฅเบฐโเบเบฒเบโเบเบฑเบโเบเบธเบโเบเบงเบฒเบกโเบฅเบฑเบโ.
เบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบเบเบเปเบฒเบเบเบฒเบ
เปเบซเปเบเบฝเบเบชเบฐเบเบฃเบดเบเปเบเบฐเบเบตเปเปเบฅเปเบเบเบธเบเป N เบงเบดเบเบฒเบเบต เปเบฅเบฐเบเบงเบเปเบเบดเปเบ namespaces เปเบเบทเปเบญเปเบเบดเปเบเบเบงเบฒเบกเบฅเบฑเบ, เปเบฅเบฐเบเปเบฒเบเปเปเบกเบตเบเบงเบฒเบกเบฅเบฑเบ, เบกเบฑเบเบเบฐเบเบทเบเบชเปเบฒเบเบเบทเปเบ. เบเบฐเปเบซเบเบเบเบญเบเบเบฒเบเปเบเปเปเบเบเบตเปเปเบกเปเบเบงเปเบฒเบกเบฑเบเบเปเบฒเบเบเบท script shell เปเบ cron - เปเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเบฅเบฒเบชเบชเบดเบเปเบฅเบฐเปเบเบปเปเบฒเปเบเปเบเปเบเบฑเบเบเบธเบเบเบปเบ. เบเปเปเปเบชเบเปเบกเปเบเบงเปเบฒเปเบเปเบฅเบเบฐเปเบงเบฅเบฒเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเปเบเบตเบเบเบปเบงเบเบญเบเบกเบฑเบเบชเบฒเบกเบฒเบเบชเปเบฒเบ namespace เปเบซเบกเปเปเบฅเบฐเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบงเบฅเบฒเบกเบฑเบเบเบฐเบเบฑเบเบเบปเบเบขเบนเปเปเบเบเบเปเปเบกเบตเบเบงเบฒเบกเบฅเบฑเบ, เปเบเบดเปเบเบเบฐเบเปเบฒเปเบเบชเบนเปเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบเบเบฒเบเปเบเบตเบเบเบปเบง pods.
เบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเปเบงเบ shell-operator
เปเบเบทเปเบญเปเบซเปเบชเบฐเบเบดเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบฎเบฑเบเบงเบฝเบเบขเปเบฒเบเบเบทเบเบเปเบญเบ, เบเบฒเบเปเบเบตเบเบเบปเบง cron เบเบฅเบฒเบชเบชเบดเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบทเบเปเบเบเบเบตเปเบเปเบงเบเบเบฒเบเปเบเบตเบเบเบปเบงเปเบกเบทเปเบญ namespace เบเบทเบเปเบเบตเปเบก: เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเปเบฒเบเบเบงเบฒเบกเบฅเบฑเบเบเปเบญเบเบเบตเปเบเบฐเปเบเปเบกเบฑเบ. เปเบซเปเปเบเบดเปเบเบงเบดเบเบตเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเปเบเบเปเบเป shell-operator.
เบเปเบฒเบญเบดเบ, เปเบซเปเปเบเบดเปเบ script เปเบเป. scripts เปเบเปเบเบทเปเบญเบเปเบ shell-operator เปเบญเบตเปเบเบงเปเบฒ hook. เบเบธเบเป hook เปเบกเบทเปเบญเปเบฅเปเบเบเปเบงเบเบเบธเบ --config
เปเบเปเบเปเบซเปเบเบนเปเบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบเบฐเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบนเบเบกเบฑเบเบเบญเบเบกเบฑเบ, 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
เบเบดเปเบเปเบซเบเป! เบเบปเบเปเบเปเบฎเบฑเบเปเบกเปเบ script เบเบฐเบซเบเบฒเบเบเปเบญเบ, เบเบตเปเบชเบงเบเบเบฒเบก. เปเบเบทเปเบญ "เบเบทเปเบเบเบน" เบกเบฑเบ, เบกเบตเบชเบญเบเบเบฑเปเบเบเบญเบเบเบตเปเบเบฑเบเปเบซเบผเบทเบญ: เบเบฐเบเบฝเบกเบฎเบนเบเบเบฒเบเปเบฅเบฐเปเบเบตเบเบเบปเบงเปเบเบเบธเปเบก.
เบเบฒเบเบเบฐเบเบฝเบกเบฎเบนเบเบเบฒเบเบเบตเปเบกเบต hook เปเบเป
เบเปเบฒเบเปเบฒเบเปเบเบดเปเบเบชเบฐเบเบดเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบซเบฑเบเปเบเปเบงเปเบฒเบเปเบฒเบชเบฑเปเบเบเบทเบเบเปเบฒเปเบเป kubectl
ะธ jq
. เบเบตเปเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบฎเบนเบเบเบฒเบเบเปเบญเบเบกเบตเบชเบดเปเบเบเปเปเปเบเบเบตเป: hook เบเบญเบเบเบงเบเปเบฎเบปเบฒ, shell-operator เบเบตเปเบเบฐเบเบฑเบเปเบซเบเบเบฒเบเปเบฅเบฐเบเปเบฒเปเบเบตเบเบเบฒเบ hook, เปเบฅเบฐเบเปเบฒเบชเบฑเปเบเบเบตเปเปเบเปเปเบเบ hook (kubectl เปเบฅเบฐ jq). Hub.docker.com เบกเบตเบฎเบนเบเบเบฒเบเบเบตเปเบเบฝเบกเบเปเบญเบกเปเบฅเปเบง, เปเบเบดเปเบเบเบฑเบเบเบธ Shell-operator, kubectl เปเบฅเบฐ jq. เบเบฑเบเบซเบกเบปเบเบเบตเปเบเบฑเบเปเบซเบผเบทเบญเปเบกเปเบเบเบฒเบเปเบเบตเปเบก hook เบเปเบฒเบเบเบฒเบ 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
เปเบฅเปเบเบขเบนเปเปเบเบเบธเปเบก
เปเบซเปเปเบเบดเปเบเบเบตเป hook เบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบเปเบฅเบฐเปเบงเบฅเบฒเบเบตเปเบเบฝเบเบชเบดเปเบเบเบตเปเบเบฐเบเบดเบเบฑเบเปเบฅเบฐเบชเบดเปเบเบเบตเปเบกเบฑเบเบเบฐเบเบดเบเบฑเบเปเบเบเบธเปเบก:
- เบเบญเบเปเบซเบเบเบฒเบเบเบฒเบเบชเปเบฒเบ namespace;
- เบชเปเบฒเบเบเบงเบฒเบกเบฅเบฑเบเปเบ namespaces เบญเบทเปเบเบเบญเบเปเบซเบเบทเบญเบเบฒเบเบเปเบญเบเบเบตเปเบกเบฑเบเบเบทเบเปเบเบตเบเบเบปเบง.
เบกเบฑเบ turns เปเบซเปโเปเบซเบฑเบโเบงเปเบฒโเบเบฑเบโเบเบตเปโเบฎเบนเบโเบเบฒเบโเบเบญเบโเบเบงเบโเปเบฎเบปเบฒโเบเบฐโเปเบเปโเบฎเบฑเบโเบเบฒเบโเปเบเบตเบโเบเบปเบงโเบเปเบญเบโเบกเบตโเบเบฒเบโเบญเบฐโเบเบธโเบเบฒเบโเปเบซเปโเปเบฎเบฑเบโเบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเปเบซเบผเบปเปเบฒโเบเบตเปโ. เบเบตเปเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเปเปเบเบเบเบฒเบเบชเปเบฒเบเบเบฑเบเบเบต 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
เปเบเบทเปเบญเบเบงเบฒเบกเบชเบฐเบเบงเบ, namespace เปเบเบเบเปเบฒเบเบซเบฒเบเปเบกเปเบเบเบทเบเบชเปเบฒเบเบเบถเปเบเบเปเบญเบเบเบตเป shell-operator เบเบฐเบเบทเบเปเบเบตเบเบเบปเบงเปเบฅเบฐ 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 เปเบฅเบฐเบเปเบฒเปเบเบตเบเบเบฒเบ hook เปเบกเบทเปเบญเบเปเบฒเปเบเบฑเบ.
เบเบฑเปเบเบเบฑเปเบ, script shell เบเปเบฒเบเปเบเบฒเบเปเบเบฑเบเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบตเปเปเบเปเบเบดเบเบชเปเบฒเบฅเบฑเบ Kubernetes เปเบฅเบฐเปเบฎเบฑเบเบงเบฝเบเปเบเบฑเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบเบเบธเปเบก. เปเบฅเบฐเบเบฑเบเบซเบกเบปเบเบเบตเปเปเบเบเบเปเปเบกเบตเบเบฐเบเบงเบเบเบฒเบเบชเบฐเบฅเบฑเบเบชเบฑเบเบเปเบญเบเบเบญเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบเบนเปเบเบฐเบเบญเบเบเบฒเบเปเบ Golang:
เบกเบตเบเบปเบงเบขเปเบฒเบเบญเบตเบเบญเบฑเบเปเบถเปเบเบเปเบฝเบงเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเป...
เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบตเบเปเบเบตเบเบเบงเบฒเบกเบซเบกเบฒเบเบเบญเบเบกเบฑเบเปเบซเปเบฅเบฐเบญเบฝเบเบเบทเปเบกเบขเบนเปเปเบเบซเบเบถเปเบเปเบเบชเบดเปเบเบเบดเบกเบเปเปเปเบเบเบตเป.
เบเบฒเบเบเบฑเปเบเบเบญเบ
เบเบฒเบเบเบดเบเบเบฒเบกเบงเบฑเบเบเบธเปเบกเปเบเบเบต, เปเบเปเบกเบฑเบเบเบฐเบกเบตเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเบเบญเบเบชเบฐเบซเบเบญเบเบเปเป เบเบฒเบเบเปเบฝเบเปเบเบเบเบฒเบเบเบธเบเบชเบปเบกเบเบฑเบเบงเบฑเบเบเบธ, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบ, เบเบฒเบเบเปเบฝเบเปเบเบเบเปเบฒเบเบงเบเบเบญเบ replicas เปเบ Deployment เบซเบผเบทเบเบฒเบเบเปเบฝเบเปเบเบเบเปเบฒเบเบงเบฑเบเบเบธ.
เปเบกเบทเปเบญเปเบซเบเบเบฒเบเบกเบฒเบฎเบญเบ, shell-operator เปเบเปเบฎเบฑเบ JSON manifest เบเบญเบเบงเบฑเบเบเบธ. เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบฅเบทเบญเบเบเบธเบเบชเบปเบกเบเบฑเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบชเบปเบเปเบเปเบ JSON เบเบตเปเปเบฅเบฐเบเปเบฒเปเบเบตเบเบเบฒเบ hook เปเบเป เบเบฝเบเปเบเป เปเบกเบทเปเบญเบเบงเบเปเบเบปเบฒเบเปเบฝเบเปเบเบ. เบกเบตเบเบฒเบเบชเบฐเบซเบเบฒเบกเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบตเป jqFilter
, เบเปเบญเบเบเบตเปเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบฅเบฐเบเบธเบเบฒเบเบชเบฐเปเบเบเบญเบญเบ jq เบเบตเปเบเบฐเบเบทเบเบเปเบฒเปเบเปเบเบฑเบ JSON manifest.
เบเบปเบงเบขเปเบฒเบ, เปเบเบทเปเบญเบเบญเบเบชเบฐเบซเบเบญเบเบเบฒเบเบเปเบฝเบเปเบเบเปเบเบเปเบฒเบเบเบทเปเบชเปเบฒเบฅเบฑเบ Deployment objects, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบฑเปเบเบเบญเบเบเบฒเบเบชเบฐเบซเบเบฒเบก labels
เบญเบญเบเบเบฒเบเบเบฒเบเบชเบฐเบซเบเบฒเบก metadata
. config เบเบฐโเปเบเบฑเบโเบเบฑเปเบโเบเบตเปโ:
cat <<EOF
{
"onKubernetesEvent": [
{ "kind": "deployment",
"event":["update"],
"jqFilter": ".metadata.labels"
}
]}
EOF
เบเบฒเบเบชเบฐเปเบเบเบญเบญเบ jqFilter เบเบตเปเบเปเบฝเบ JSON เบเบฒเบงเบเบญเบ Deployment เปเบซเปเปเบเบฑเบ JSON เบชเบฑเปเบเบเบตเปเบกเบตเบเปเบฒเบเบเบทเป:
shell-operator เบเบฐเปเบฅเปเบ hook เปเบกเบทเปเบญ JSON เบชเบฑเปเบเบเบตเปเบเปเบฝเบเปเบเบ, เปเบฅเบฐเบเบฒเบเบเปเบฝเบเปเบเบเบเบธเบเบชเบปเบกเบเบฑเบเบญเบทเปเบเปเบเบฐเบเบทเบเบฅเบฐเปเบฅเบตเบ.
เบเปเบฅเบดเบเบปเบเบเบฒเบเปเบเบตเบเบเบปเบง Hook
เบเบฒเบเบเบฑเปเบเบเปเบฒ hook เบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบฅเบฐเบเบธเบเบปเบงเปเบฅเบทเบญเบเบซเบผเบฒเบเบขเปเบฒเบเบชเปเบฒเบฅเบฑเบเปเบซเบเบเบฒเบ - เบเบปเบงเบขเปเบฒเบ, 2 เบเบฒเบเปเบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบเปเบซเบเบเบฒเบเบเบฒเบ Kubernetes เปเบฅเบฐ 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"
]}
A digression เบเบฐเบซเบเบฒเบเบเปเบญเบ: เปเบกเปเบ, shell-operator เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ เปเบฅเปเบเบชเบฐเบเบฃเบดเบเปเบเบ crontab. เบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบเบตเปเบกเปเบเบตเบกเบชเบฒเบกเบฒเบเบเบปเบเปเบเปเปเบ
เปเบเบทเปเบญเบเปเบฒเปเบเบเบงเปเบฒเปเบเบฑเบเบซเบเบฑเบ hook เปเบเปเบเบทเบเปเบเบตเบเบเบปเบง, shell-operator เบชเปเบฒเบเปเบเบฅเปเบเบปเปเบงเบเบฒเบงเปเบฅเบฐเบเปเบฒเบเปเบชเบฑเปเบเบเบฒเบเปเบเบซเบฒเบกเบฑเบเบขเบนเปเปเบเบเบปเบงเปเบเบเบญเบ hook. BINDING_CONTEXT_TYPE
. เปเบเบฅเปเบเบฐเบเบญเบเบกเบตเบเปเบฒเบญเบฐเบเบดเบเบฒเบ JSON เบเบญเบเปเบซเบเบเบปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฅเปเบ hook. เบเบปเบงเบขเปเบฒเบ, เบเบธเบเป 10 เบเบฒเบเบต hook เบเบฐเปเบฅเปเบเบเปเบงเบเปเบเบทเปเบญเบซเบฒเบเปเปเปเบเบเบตเป:
[{ "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 เปเบเปเบเบทเบเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเปเบฅเปเบงเปเบ hook เบเบตเป replicates เบเบงเบฒเบกเบฅเบฑเบ:
jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH
เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบเบเบฒเบเบชเบฐเบซเบเบฒเบกเบญเบทเปเบเปเปเบเบฅเบฑเบเบชเบฐเบเบฐเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบ.
เบเบฐเปเบเบฑเบเปเบเบงเปเบเบเปเปเปเบ?
เปเบ repository เปเบเบเบเบฒเบ, เปเบ
เบกเบตเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบฑเบเบเปเบฒ metrics เปเบเบเปเบเป Prometheus - metrics เบเบตเปเบกเบตเบขเบนเปเปเบกเปเบเปเบเปเบญเบฐเบเบดเบเบฒเบเบขเบนเปเปเบเบเบฒเบ
เบเบฑเปเบเบเบตเปเปเบเบปเปเบฒเบญเบฒเบเบเบฐเบเบฒเบเปเบเบปเบฒเปเบเป, shell-operator เบเบทเบเบเบฝเบเปเบงเปเปเบ Go เปเบฅเบฐเปเบเบเบขเบฒเบเบเบฒเบเปเบเปเปเบเบญเบฐเบเบธเบเบฒเบ Open Source (Apache 2.0). เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเบเบญเบเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบงเบเปเบซเบผเบทเบญเบเปเบฒเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเปเบเป
เบเบฒเบเบเบปเบเบเปเบฒเบกเปเบฒเบเบเบญเบเบเบงเบฒเบกเบฅเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบฐเปเบเปเบเปเบซเปเบเปเบฒเบเบฎเบนเปเบงเปเบฒ shell-operator เปเบกเปเบ เบเบฐเบซเบเบฒเบเบเปเบญเบ เบชเปเบงเบเบซเบเบถเปเบเบเบญเบเบฅเบฐเบเบปเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบตเปเบชเบฒเบกเบฒเบเบฎเบฑเบเบชเบฒ add-ons เบเบดเบเบเบฑเปเบเบขเบนเปเปเบเบเบธเปเบก Kubernetes เปเบเปเบเบฑเบเบชเบฐเปเบซเบกเปเบฅเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเปเบฒเบเป. เบญเปเบฒเบเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเบฅเบฐเบเบปเบเบเบตเป
เบเบงเบเปเบฎเบปเบฒเบกเบตเปเบเบเบเบฒเบเบเบตเปเบเบฐเปเบเบตเบเบชเปเบงเบเบเบตเปเปเบซเบผเบทเบญเบเบญเบเบฅเบฐเบเบปเบเบเบตเป: addon-operator เปเบฅเบฐเบเบฒเบเปเบเบฑเบเบเปเบฒเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบญเบ hooks เปเบฅเบฐเปเบกเบเบนเบ. เปเบเบเบงเบดเบเบตเบเบฒเบเบเบฒเบ, addon-operator เปเบกเปเบเปเบฅเปเบง
เบเบดเบเบเบฒเบกเปเบเบดเปเบ!
PS
เบญเปเบฒเบเบเบฑเบเบขเบนเปเปเบ blog เบเบญเบเบเบงเบเปเบฎเบปเบฒ:
- ยซ
เบเบนเปเบเบฐเบเบญเบเบเบฒเบเบชเปเบฒเบฅเบฑเบ Kubernetes: เบงเบดเบเบตเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบญเบเบฅเบฑเบ " - ยซ
เบเบฒเบเบเบฝเบเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเบชเปเบฒเบฅเบฑเบ Kubernetes เปเบ Golang " - ยซ
เปเบเบฐเบเบณเบเบฅเบฑเบเบญเบดเบเปเปเปเบชเบณเบฅเบฑเบ Grafana - Statusmap panel " - ยซ
เปเบเบฐเบเปเบฒ loghouse - เบฅเบฐเบเบปเบเปเบซเบผเปเบเปเบเบตเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบฑเบเบเบถเบเปเบ Kubernetes " - ยซ
เบเบงเบเปเบฎเบปเบฒเบเบณเบชเบฐเปเปเบต dapp เบขเปเบฒเบเปเบเบฑเบเบเบฒเบเบเบฒเบ - เบเบฐเปเบซเบเบเบเบญเบ DevOps เบชเบณเบฅเบฑเบเบเบฒเบเบเบณเบฅเบธเบเบฎเบฑเบเบชเบฒ CI/CD ".
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com