ื•ื•ืขื’ืŸ ื“ื™ ื’ืจืึธื•ื™ื ื’ ืคึผืึธืคึผื•ืœืึทืจื™ื˜ืขื˜ ืคื•ืŸ Kubernetes

ื”ื™ื™ ื”ืื‘ืจ!

ืื™ืŸ ื“ื™ ืกื•ืฃ ืคื•ืŸ ื–ื•ืžืขืจ, ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื“ืขืจืžืึธื ืขืŸ ืื™ืจ ืึทื– ืžื™ืจ ืคืึธืจื–ืขืฆืŸ ืฆื• ืึทืจื‘ืขื˜ืŸ ืื•ื™ืฃ ื“ืขืจ ื˜ืขืžืข Kubernetes ืื•ืŸ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืึทืจื•ื™ืกื’ืขื‘ืŸ ืึทืŸ ืึทืจื˜ื™ืงืœ ืคึฟื•ืŸ Stackoverflow ื•ื•ืึธืก ื“ืขืžืึทื ืกื˜ืจื™ื™ืฅ ื“ื™ ืฉื˜ืึทื˜ ืคื•ืŸ ืขื ื™ื ื™ื ืื™ืŸ ื“ืขื ืคึผืจื•ื™ืขืงื˜ ืื™ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ื™ื•ื ื™.

ื•ื•ืขื’ืŸ ื“ื™ ื’ืจืึธื•ื™ื ื’ ืคึผืึธืคึผื•ืœืึทืจื™ื˜ืขื˜ ืคื•ืŸ Kubernetes

ื”ื ืื” ืœื™ื™ืขื ืขืŸ!

ืื™ืŸ ื“ืขืจ ืฆื™ื™ื˜ ืคื•ืŸ ืฉืจื™ื™ื‘ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ื“ื™ ืขืœื˜ืขืจ ืคื•ืŸ Kubernetes ืื™ื– ื‘ืขืขืจืขืš. ื–ืขืงืก ื™ืืจ ืึทืœื˜, ืื•ืŸ ืื™ืŸ ื“ื™ ืœืขืฆื˜ืข ืฆื•ื•ื™ื™ ื™ืึธืจ, ื–ื™ื™ึทืŸ ืคึผืึธืคึผื•ืœืึทืจื™ื˜ืขื˜ ืื™ื– ื’ืขื•ื•ืืงืกืŸ ืึทื–ื•ื™ ืคื™ืœ ืึทื– ืขืก ืื™ื– ืงืึทื ืกื™ืกื˜ืึทื ื˜ืœื™ ืจืึทื ื’ืงื˜ ืฆื•ื•ื™ืฉืŸ ืžืขืจืกื˜ ื‘ืึทืœื™ื‘ื˜ ืคึผืœืึทื˜ืคืึธืจืžืก. Kubernetes ืจื™ื™ืขืŸ ื“ืจื™ื˜ ื“ืขื ื™ืึธืจ. ืฆื• ืจืขืงืึทืคึผ: Kubernetes ืื™ื– ืึท ืคึผืœืึทื˜ืคืึธืจืžืข ื“ื™ื–ื™ื™ื ื“ ืคึฟืึทืจ ืคืœื™ืกื ื“ื™ืง ืื•ืŸ ืึธืจืงืขืกื˜ืจื™ื™ื˜ื™ื ื’ ืงืึทื ื˜ื™ื™ื ืขืจื– ื•ื•ืขืจืงืœืึธื•ื“ื–.

ืงืึทื ื˜ื™ื™ื ืขืจื– ืื ื’ืขื”ื•ื™ื‘ืŸ ื•ื•ื™ ืึท ืกืคึผืขืฆื™ืขืœ ืคึผืœืึทืŸ ืคึฟืึทืจ ื™ื™ืกืึทืœื™ื™ื˜ื™ื ื’ ืคึผืจืึทืกืขืกืึทื– ืื™ืŸ ืœื™ื ื•ืงืก; ืงืึทื ื˜ื™ื™ื ืขืจื– ื”ืึธื‘ืŸ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ื–ื™ื ื˜ 2007 ืงื’ืจืึธื•ืคึผืก, ืื•ืŸ ื–ื™ื ื˜ 2002 - ื ืึธืžืขืŸ ืกืคึผื™ื™ืกืึทื–. ืงืึทื ื˜ื™ื™ื ืขืจื– ื–ืขื ืขืŸ ื“ื™ื–ื™ื™ื ื“ ืืคื™ืœื• ื‘ืขืกืขืจ ืื™ืŸ 2008, ื•ื•ืขืŸ ืขืก ืื™ื– ื’ืขื•ื•ืืจืŸ ื‘ื ื™ืžืฆื ืœืงืกืง, ืื•ืŸ Google ื“ืขื•ื•ืขืœืึธืคึผืขื“ ื–ื™ื™ึทืŸ ืื™ื™ื’ืŸ ื™ื ืขืจืœืขืš ืคึฟื™ืจืžืข ืžืขืงืึทื ื™ื–ืึทื ื’ืขืจื•ืคืŸ ื‘ืึธืจื’, ื•ื•ื• "ืึทืœืข ืึทืจื‘ืขื˜ ืื™ื– ื’ืขื˜ืืŸ ืื™ืŸ ืงืึทื ื˜ื™ื™ื ืขืจื–." ืคึฟื•ืŸ ื“ืึธ ืžื™ืจ ื’ืขืฉื•ื•ื™ื ื“ ืคืึธืจื•ื™ืก ืฆื• 2013, ื•ื•ืขืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืžืขืœื“ื•ื ื’ ืคื•ืŸ ื“ืึธืงืงืขืจ ืื™ื– ืคืืจื’ืขืงื•ืžืขืŸ, ืื•ืŸ ืงืึทื ื˜ื™ื™ื ืขืจื– ืœืขืกืึธืฃ ื’ืขื•ื•ืืจืŸ ืึท ืคืึธืœืงืก ืžืึทืกืข ืœื™ื™ื–ื•ื ื’. ื“ืขืžืืœื˜ ืื™ื– ื’ืขื•ื•ืขืŸ ื“ืขืจ ื”ื•ื™ืคื˜ ื’ืขืฆื™ื™ื’ ืคืืจ ืงืื ื˜ืขืืจ ืืจืงืขืกื˜ืจืืฆื™ืข Mesos, ื›ืื˜ืฉ ืขืจ ืื™ื– ื ื™ืฉื˜ ื’ืขื•ื•ืขืŸ ื•ื•ื™ืœื“ ืคืืคื•ืœืขืจ. Kubernetes ืื™ื– ื’ืขื•ื•ืขืŸ ืขืจืฉื˜ืขืจ ื‘ืืคืจื™ื™ื˜ ืื™ืŸ 2015, ื ืึธืš ื•ื•ืึธืก ื“ืขื ื’ืขืฆื™ื™ึทื’ ืื™ื– ื’ืขื•ื•ืืจืŸ ื“ื™ ื“ืข ืคืึทืงื˜ืึธ ื ืึธืจืžืึทืœ ืื™ืŸ ื“ื™ ืคืขืœื“ ืคื•ืŸ ืงืึทื ื˜ื™ื™ื ืขืจ ืึธืจืงืขืกื˜ืจืึทื˜ื™ืึธืŸ.

ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื•ื•ืึธืก Kubernetes ืื™ื– ืึทื–ื•ื™ ืคืึธืœืงืก, ืœืึธืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืขื ื˜ืคึฟืขืจืŸ ืึท ื‘ื™ืกืœ ืคืจืื’ืขืก. ื•ื•ืขืŸ ืื™ื– ื’ืขื•ื•ืขืŸ ื“ื™ ืœืขืฆื˜ืข ืžืึธืœ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื–ืขื ืขืŸ ื‘ื™ื›ื•ืœืช ืฆื• ืฉื˜ื™ืžืขืŸ ื•ื•ื™ ืฆื• ืฆืขื•ื•ื™ืงืœืขืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืฆื• ืคึผืจืึธื“ื•ืงืฆื™ืข? ื•ื•ื™ ืคื™ืœืข ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื˜ืึธืŸ ืื™ืจ ื•ื•ื™ืกืŸ ื•ื•ืึธืก ื ื•ืฆืŸ ื“ื™ ืžื›ืฉื™ืจื™ื ื•ื•ื™ ื–ื™ื™ ื–ืขื ืขืŸ ืฆื•ื’ืขืฉื˜ืขืœื˜ ืื•ื™ืก ืคื•ืŸ ื“ื™ ืงืขืกื˜ืœ? ื•ื•ื™ ืคื™ืœืข ื•ื•ืึธืœืงืŸ ืึทื“ืžื™ื ื™ืกื˜ืจืึทื˜ืึธืจืก ื–ืขื ืขืŸ ื“ืึธืจื˜ ื”ื™ื™ึทื ื˜ ื•ื•ืึธืก ื˜ืึธืŸ ื ื™ื˜ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื•ื•ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืึทืจื‘ืขื˜? ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ืื™ืŸ ื“ื™ ืขื ื˜ืคึฟืขืจืก ืฆื• ื“ื™ ืคึฟืจืื’ืŸ ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ.

ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื•ื•ื™ ื™ืžืœ

ืื™ืŸ ื“ืขืจ ื•ื•ืขืœื˜ ื•ื•ืึธืก ืื™ื– ื’ืขื’ืื ื’ืขืŸ ืคื•ืŸ ืœื™ืึทืœืงืข ืื•ืŸ ืฉืขืฃ ืฆื• ืงื•ื‘ืขืจื ืขื˜ืขืก, ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื‘ื™ื’ืึทืกื˜ ืขื ื“ืขืจื•ื ื’ืขืŸ ืื™ื– ื’ืขื•ื•ืขืŸ ื“ื™ ืžืึทืš ืคื•ืŸ "ืื™ื ืคึฟืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื•ื•ื™ ืงืึธื“" ืฆื• "ืื™ื ืคึฟืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื•ื•ื™ ื“ืึทื˜ืŸ" - ืกืคึผืึทืกื™ืคื™ืงืœื™, ื•ื•ื™ ื™ืžืœ. ืึทืœืข ืจืขืกื•ืจืกืŸ ืื™ืŸ Kubernetes, ื•ื•ืึธืก ืึทืจื™ื™ึทื ื ืขืžืขืŸ ืคึผืึธื“ืก, ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทื ื–, ื“ื™ืคึผืœื•ื™ื“ ื™ื ืกื˜ืึทื ืกื™ื–, ื•ื•ืึทืœื™ื•ืžื–, ืืื–"ื• ื•, ืงืขื ืขืŸ ื–ื™ื™ืŸ ืœื™ื™ื›ื˜ ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ ืึท YAML ื˜ืขืงืข. ืœืžืฉืœ:

apiVersion: v1
kind: Pod
metadata:
  name: site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80

ื“ืขืจ ืžื™ื™ื ื•ื ื’ ืžืื›ื˜ ืขืก ื’ืจื™ื ื’ืขืจ ืคึฟืึทืจ DevOps ืึธื“ืขืจ SRE ืคึผืจืึธืคืขืกืกื™ืึธื ืึทืœืก ืฆื• ื’ืึธืจ ืื•ื™ืกื“ืจื™ืงืŸ ื–ื™ื™ืขืจ ื•ื•ืขืจืงืœืึธื•ื“ื– ืึธืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืงืึธื“ ืื™ืŸ ืฉืคึผืจืึทื›ืŸ ื•ื•ื™ Python ืึธื“ืขืจ Javascript.

ืื ื“ืขืจืข ืึทื“ื•ื•ืึทื ื˜ื™ื“ื–ืฉื™ื– ืคื•ืŸ ืึธืจื’ืึทื ื™ื™ื–ื™ื ื’ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื•ื•ื™ ื“ืึทื˜ืŸ ืึทืจื™ื™ึทื ื ืขืžืขืŸ:

  • GitOps ืึธื“ืขืจ Git Operations ื•ื•ืขืจืกื™ืข ืงืึธื ื˜ืจืึธืœ. ื“ืขืจ ืฆื•ื’ืึทื ื’ ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื”ืึทืœื˜ืŸ ืึทืœืข Kubernetes YAML ื˜ืขืงืขืก ืื™ืŸ ื’ื™ื˜ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ื–, ืึทื–ื•ื™ ืื™ืจ ืงืขื ืขืŸ ืฉืคึผื•ืจ ืคึผื•ื ืงื˜ ื•ื•ืขืŸ ืึท ืขื ื“ืขืจื•ื ื’ ืื™ื– ื’ืขืžืื›ื˜, ื•ื•ืขืจ ื’ืขืžืื›ื˜ ืขืก ืื•ืŸ ื•ื•ืึธืก ืคึผื•ื ืงื˜ ื’ืขื‘ื™ื˜ืŸ. ื“ืึธืก ื™ื ืงืจื™ืกืึทื– ื“ื™ ื“ื•ืจื›ื–ืขื™ืงื™ื™ึทื˜ ืคื•ืŸ ืึทืคึผืขืจื™ื™ืฉืึทื ื– ืื™ื‘ืขืจ ื“ืขืจ ืึธืจื’ืึทื ื™ื–ืึทืฆื™ืข ืื•ืŸ ื™ืžืคึผืจื•ื•ื•ื– ืึทืคึผืขืจื™ื™ืฉืึทื ืึทืœ ืขืคืขืงื˜ื™ื•ื•ืงื™ื™ึทื˜ ื“ื•ืจืš ื™ืœื™ืžืึทื ื™ื™ื˜ื™ื ื’ ืึทืžื‘ื™ื’ื™ื•ืึทื˜ื™, ืกืคึผืขืฆื™ืขืœ ืื™ืŸ ื•ื•ื• ืขืžืคึผืœื•ื™ื™ื– ื–ืึธืœ ืงื•ืงืŸ ืคึฟืึทืจ ื“ื™ ืจืขืกื•ืจืกืŸ ื–ื™ื™ ื“ืึทืจืคึฟืŸ. ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜, ืขืก ื•ื•ืขืจื˜ ื’ืจื™ื ื’ืขืจ ืฆื• ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืžืึทื›ืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ ืฆื• Kubernetes ืจืขืกื•ืจืกืŸ ื“ื•ืจืš ืคืฉื•ื˜ ืฆื•ื ื•ื™ืคื’ื™ืกืŸ ืึท ืฆื™ืขืŸ ื‘ืขื˜ืŸ.
  • ืกืงืึทืœืึทื‘ื™ืœื™ื˜ื™. ื•ื•ืขืŸ ืจืขืกื•ืจืกืŸ ื–ืขื ืขืŸ ื“ื™ืคื™ื™ื ื“ ื•ื•ื™ YAML, ืขืก ื•ื•ืขืจื˜ ื’ืึธืจ ื’ืจื™ื ื’ ืคึฟืึทืจ ืงื ื•ื™ืœ ืึธืคึผืขืจื™ื™ื˜ืขืจื– ืฆื• ื˜ื•ื™ืฉืŸ ืื™ื™ืŸ ืึธื“ืขืจ ืฆื•ื•ื™ื™ ื ื•ืžืขืจืŸ ืื™ืŸ ืึท Kubernetes ืžื™ื˜ืœ, ืื•ืŸ ื“ืขืจืžื™ื˜ ื˜ืฉืึทื ื’ื™ื ื’ ื•ื•ื™ ืขืก ื•ื•ืึธื’. Kubernetes ื’ื™ื˜ ืึท ืžืขืงืึทื ื™ื–ืึทื ืคึฟืึทืจ ื”ืึธืจื™ื–ืึธื ื˜ืึทืœ ืึทื•ื˜ืึธืกืงืึทืœื™ื ื’ ืคื•ืŸ ืคึผืึธื“ืก, ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืฆื• ืงืึทื ื•ื•ื™ื ื™ืึทื ื˜ืœื™ ื‘ืึทืฉืœื™ืกืŸ ื•ื•ืึธืก ื“ื™ ืžื™ื ื™ืžื•ื ืื•ืŸ ืžืึทืงืกื™ืžื•ื ื ื•ืžืขืจ ืคื•ืŸ ืคึผืึธื“ืก ื–ืขื ืขืŸ ืคืืจืœืื ื’ื˜ ืื™ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืฆื• ืฉืขืคึผืŸ ื ื™ื“ืขืจื™ืง ืื•ืŸ ื”ื•ื™ืš ืคืึทืจืงืขืจ ืœืขื•ื•ืขืœืก. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื•ื™ื‘ ืื™ืจ ื”ืึธื‘ืŸ ื“ื™ืคึผืœื•ื™ื“ ืึท ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื•ื•ืึธืก ืจื™ืงื•ื•ื™ื™ืขืจื– ื ืึธืš ืงืึทืคึผืึทืฆื™ื˜ืขื˜ ืจืขื›ื˜ ืฆื• ืึท ืคึผืœื•ืฆืขืžื“ื™ืง ืคืึทืจื’ืจืขืกืขืจืŸ ืื™ืŸ ืคืึทืจืงืขืจ, maxReplicas ืงืขื ืขืŸ ื–ื™ื™ืŸ ื˜ืฉื™ื™ื ื“ื–ืฉื“ ืคื•ืŸ 10 ืฆื• 20:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp-deployment
  minReplicas: 1
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

  • ื–ื™ื›ืขืจื”ื™ื™ึทื˜ ืื•ืŸ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’. YAML ืื™ื– ื’ืจื•ื™ืก ืคึฟืึทืจ ื™ื•ื•ืึทืœื™ื•ื™ื™ื˜ื™ื ื’ ื•ื•ื™ ื˜ื™ื ื’ื– ื–ืขื ืขืŸ ื“ื™ืคึผืœื•ื™ื“ ืื™ืŸ Kubernetes. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืึท ื”ื•ื™ืคึผื˜ ื–ื™ื›ืขืจื”ื™ื™ื˜ ื“ื™ื™ึทื’ืข ืงืึทื ืกืขืจื ื– ืฆื™ ื“ื™ื™ืŸ ื•ื•ืขืจืงืœืึธื•ื“ื– ืœื•ื™ืคืŸ ื•ื•ื™ ืึท ื ื™ื˜-ืึทื“ืžื™ืŸ ื‘ืึทื ื™ืฆืขืจ. ืื™ืŸ ื“ืขื ืคืึทืœ, ืžื™ืจ ืงืขืŸ ื“ืึทืจืคึฟืŸ ืžื›ืฉื™ืจื™ื ืึทื–ืึท ื•ื•ื™ ืงืึธื ืคืขืกื˜, YAML / JSON ื•ื•ืึทืœื™ื“ืึทื˜ืึธืจ, ืคึผืœื•ืก ืขืคึฟืŸ ืคึผืึธืœื™ื˜ื™ืง ืึทื’ืขื ื˜, ืึท ืคึผืึธืœื™ื˜ื™ืง ื•ื•ืึทืœืึทื“ื™ื™ื˜ืขืจ ืฆื• ืขื ืฉื•ืจ ืึทื– ื“ื™ ืงืึธื ื˜ืขืงืกื˜ SecurityContext ื“ื™ื™ืŸ ื•ื•ืขืจืงืœืึธื•ื“ื– ืงืขืŸ ื ื™ืฉื˜ ืœืึธื–ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ืฆื• ืœื•ื™ืคืŸ ืžื™ื˜ ืึทื“ืžื™ื ื™ืกื˜ืจืึทื˜ืึธืจ ืคึผืจื™ื•ื•ื™ืœืึทื“ื–ืฉืึทื–. ืื•ื™ื‘ ื“ืึธืก ืื™ื– ืคืืจืœืื ื’ื˜, ื ื™ืฆืขืจืก ืงืขื ืขืŸ ืฆื•ืœื™ื™ื’ืŸ ืึท ืคึผืฉื•ื˜ ืคึผืึธืœื™ื˜ื™ืง ืื™ืš ื“ืื•ื•ืขืŸ, ืื–ื•ื™:

package main

deny[msg] {
  input.kind = "Deployment"
  not input.spec.template.spec.securityContext.runAsNonRoot = true
  msg = "Containers must not run as root"
}

  • ืึธืคึผืฆื™ืขืก ืคึฟืึทืจ ื™ื ืึทื’ืจื™ื™ืฉืึทืŸ ืžื™ื˜ ืึท ื•ื•ืึธืœืงืŸ ืฉืคึผื™ื™ึทื–ืขืจ. ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืžืขืจืกื˜ ื ืึธื•ื˜ืึทื‘ืึทืœ ื˜ืจืขื ื“ืก ืื™ืŸ ื”ื™ื™ึทื ื˜ ืก ื”ื•ื™ืš ื˜ืขื›ื ืึธืœืึธื’ื™ืข ืื™ื– ืฆื• ืœื•ื™ืคืŸ ื•ื•ืขืจืงืœืึธื•ื“ื– ืื•ื™ืฃ ืฆื™ื‘ื•ืจ ื•ื•ืึธืœืงืŸ ืคึผืจืึทื•ื•ื™ื™ื“ืขืจื–. ื ื™ืฆืŸ ื“ื™ ืงืึธืžืคึผืึธื ืขื ื˜ ื•ื•ืึธืœืงืŸ-ืคืึทืจื–ืึธืจื’ืŸ Kubernetes ืึทืœืึทื•ื– ืงื™ื™ืŸ ืงื ื•ื™ืœ ืฆื• ื•ื™ืกืฉื˜ื™ืžืขืŸ ืžื™ื˜ ื“ื™ ื•ื•ืึธืœืงืŸ ืฉืคึผื™ื™ึทื–ืขืจ ืื•ื™ืฃ ื•ื•ืึธืก ืขืก ืœื•ื™ืคื˜. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื•ื™ื‘ ืึท ื‘ืึทื ื™ืฆืขืจ ืœื•ื™ืคื˜ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ืŸ Kubernetes ืื•ื™ืฃ AWS ืื•ืŸ ื•ื•ื™ืœ ืฆื• ื•ื™ืกืฉื˜ืขืœืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื“ื•ืจืš ืึท ื“ื™ื ืกื˜, ื“ืขืจ ื•ื•ืึธืœืงืŸ ืฉืคึผื™ื™ึทื–ืขืจ ื”ืขืœืคึผืก ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืฉืึทืคึฟืŸ ื“ื™ ื“ื™ื ืกื˜ LoadBalancerื•ื•ืึธืก ื•ื•ืขื˜ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืฆื•ืฉื˜ืขืœืŸ ื“ื™ ืžืึทืกืข ื‘ืึทืœืึทื ืกืขืจ Amazon Elastic Load Balancerืฆื• ืจื™ื“ืขืจืขืงื˜ ืคืึทืจืงืขืจ ืฆื• ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคึผืึธื“ืก.

ืขืงืกื˜ืขื ืกื™ื‘ื™ืœื™ื˜ื™

Kubernetes ืื™ื– ื–ื™ื™ืขืจ ืขืงืกื˜ืขื ืกื™ื‘ืœืข ืื•ืŸ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืœื™ื‘ืข ืขืก. ืขืก ืื™ื– ืึท ืกื›ื•ื ืคื•ืŸ ื‘ื ื™ืžืฆื ืจืขืกื•ืจืกืŸ ืึทื–ืึท ื•ื•ื™ ืคึผืึธื“ืก, ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ, StatefulSets, ืกื•ื“ื•ืช , ConfigMapsืืื–"ื• ื• ืืžืช, ื™ื•ื–ืขืจื– ืื•ืŸ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืงืขื ืขืŸ ืœื™ื™ื’ืŸ ืื ื“ืขืจืข ืจืขืกื•ืจืกืŸ ืื™ืŸ ื“ื™ ืคืึธืจืขื ืžื ื”ื’ ืžื™ื˜ืœ ื–ื•ืš.

ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื•ื™ื‘ ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื“ืขืคื™ื ื™ืจืŸ ืึท ืžื™ื˜ืœ CronTab, ื“ืขืžืึธืœื˜ ืื™ืจ ืงืขืŸ ื˜ืึธืŸ ืขืคึผืขืก ื•ื•ื™ ื“ืึธืก:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: crontabs.my.org
spec:
  group: my.org
  versions:
    - name: v1
      served: true
      storage: true
      Schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                cronSpec:
                  type: string
                  pattern: '^(d+|*)(/d+)?(s+(d+|*)(/d+)?){4}$'
                replicas:
                  type: integer
                  minimum: 1
                  maximum: 10
  scope: Namespaced
  names:
    plural: crontabs
    singular: crontab
    kind: CronTab
    shortNames:
    - ct

ืฉืคึผืขื˜ืขืจ ืžื™ืจ ืงืขื ืขืŸ ืžืึทื›ืŸ ืึท CronTab ืžื™ื˜ืœ ืขืคึผืขืก ื•ื•ื™ ื“ืึธืก:

apiVersion: "my.org/v1"
kind: CronTab
metadata:
  name: my-cron-object
spec:
  cronSpec: "* * * * */5"
  image: my-cron-image
  replicas: 5

ืืŸ ืื ื“ืขืจ ืึธืคึผืฆื™ืข ืคึฟืึทืจ ืขืงืกื˜ืขื ืกื™ื‘ื™ืœื™ื˜ื™ ืื™ืŸ Kubernetes ืื™ื– ืึทื– ื“ืขืจ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ืงืขื ืขืŸ ืฉืจื™ื™ึทื‘ืŸ ื–ื™ื™ืŸ ืื™ื™ื’ืขื ืข ืกื˜ื™ื™ื˜ืžืึทื ืฅ. ืึธืคึผืขืจืึทื˜ืึธืจ ืื™ื– ืึท ืกืคึผืขืฆื™ืขืœืข ืคึผืจืึธืฆืขืก ืื™ืŸ ื“ื™ ืงื•ื‘ืขืจื ืขื˜ืขืก ืงื ื•ื™ืœ ื•ื•ืึธืก ืึทืจื‘ืขื˜ ืœื•ื™ื˜ ื“ื™ "ืงืึธื ื˜ืจืึธืœ ืงืจื™ื™ึทื–" ืžื™ื˜ ื“ืขืจ ื”ื™ืœืฃ ืคื•ืŸ ืึทืŸ ืึธืคึผืขืจืึทื˜ืึธืจ, ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืงืขื ืขืŸ ืึธื˜ืึทืžื™ื™ื˜ ื“ื™ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ืคื•ืŸ CRDs (ืงืึทืกื˜ืึทืžื™ื™ื–ื“ ืžื™ื˜ืœ ื–ื•ืš) ื“ื•ืจืš ื™ืงืกื˜ืฉื™ื™ื ื“ื–ืฉื™ื ื’ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืžื™ื˜ ื“ื™ Kubernetes API.

ืขืก ื–ืขื ืขืŸ ืขื˜ืœืขื›ืข ืžื›ืฉื™ืจื™ื ืื™ืŸ ื“ื™ ืงื”ืœ ื•ื•ืึธืก ืžืึทื›ืŸ ืขืก ื’ืจื™ื ื’ ืคึฟืึทืจ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืฆื• ืฉืึทืคึฟืŸ ื–ื™ื™ืขืจ ืื™ื™ื’ืขื ืข ืึธืคึผืขืจื™ื™ื˜ืขืจื–. ืฆื•ื•ื™ืฉืŸ ื–ื™ื™ - ืึธืคึผืขืจืึทื˜ืึธืจ ืคืจืึทืžืขื•ื•ืึธืจืง ืื•ืŸ ืึธืคึผืขืจืึทื˜ืึธืจ ืกื“ืง. ื“ืขื SDK ื’ื™ื˜ ืึท ื™ืกื•ื“ ืคื•ืŸ ื•ื•ืึธืก ืึท ื“ืขื•ื•ืขืœืึธืคึผืขืจ ืงืขื ืขืŸ ื’ืขืฉื•ื•ื™ื ื“ ืึธื ื”ื™ื™ื‘ืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ ืึทืŸ ืึธืคึผืขืจืึทื˜ืึธืจ. ื–ืืœ ืก ื–ืึธื’ืŸ ืื™ืจ ืงืขื ืขืŸ ืึธื ื”ื™ื™ื‘ืŸ ืคึฟื•ืŸ ื“ื™ ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื” ืขืคึผืขืก ื•ื•ื™ ื“ืึธืก:

$ operator-sdk new my-operator --repo github.com/myuser/my-operator

ื“ืึธืก ืงืจื™ื™ื™ืฅ ืึทืœืข ื“ื™ ืงืขืกืœ ืงืึธื“ ืคึฟืึทืจ ื“ื™ื™ืŸ ืึธืคึผืขืจืึทื˜ืึธืจ, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ YAML ื˜ืขืงืขืก ืื•ืŸ Golang ืงืึธื“:

.
|____cmd
| |____manager
| | |____main.go
|____go.mod
|____deploy
| |____role.yaml
| |____role_binding.yaml
| |____service_account.yaml
| |____operator.yaml
|____tools.go
|____go.sum
|____.gitignore
|____version
| |____version.go
|____build
| |____bin
| | |____user_setup
| | |____entrypoint
| |____Dockerfile
|____pkg
| |____apis
| | |____apis.go
| |____controller
| | |____controller.go

ื“ืขืจื ืึธืš ืื™ืจ ืงืขื ืขืŸ ืœื™ื™ื’ืŸ ื“ื™ ืคืืจืœืื ื’ื˜ ืึทืคึผื™ืก ืื•ืŸ ืงืึธื ื˜ืจืึธืœืœืขืจ, ื•ื•ื™ ื“ืึธืก:

$ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService

$ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppService

ื“ืขืจื ืึธืš, ืœืขืกืึธืฃ, ืึทืกืขืžื‘ืึทืœ ื“ื™ ืึธืคึผืขืจืึทื˜ืึธืจ ืื•ืŸ ืฉื™ืงืŸ ืขืก ืฆื• ื“ื™ ืจืขื’ื™ืกื˜ืจื™ ืคื•ืŸ ื“ื™ื™ืŸ ืงืึทื ื˜ื™ื™ื ืขืจ:

$ operator-sdk build your.container.registry/youruser/myapp-operator

ืื•ื™ื‘ ื“ืขืจ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ื•ื•ื™ืœ ืืคื™ืœื• ืžืขืจ ืงืึธื ื˜ืจืึธืœ, ื“ื™ ืงืขืกืœ ืงืึธื“ ืื™ืŸ Go ื˜ืขืงืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื˜ืฉื™ื™ื ื“ื–ืฉื“. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืฆื• ืžืึธื“ื™ืคื™ืฆื™ืจืŸ ื“ื™ ืกืคึผืขืกื™ืคื™ืงืก ืคื•ืŸ ื“ื™ ืงืึธื ื˜ืจืึธืœืœืขืจ, ืื™ืจ ืงืขื ืขืŸ ืžืึทื›ืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ ืฆื• ื“ืขืจ ื˜ืขืงืข controller.go.

ืืŸ ืื ื“ืขืจ ืคึผืจื•ื™ืขืงื˜ ื•ืžืขื˜ื•ื, ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืฉืึทืคึฟืŸ ืกื˜ื™ื™ื˜ืžืึทื ืฅ ืžื™ื˜ ื‘ืœื•ื™ื– ื“ืขืงืœืึทืจืึทื˜ื™ื•ื•ืข YAML ื˜ืขืงืขืก. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืึทืŸ ืึธืคึผืขืจืึทื˜ืึธืจ ืคึฟืึทืจ Apache Kafka ื•ื•ืึธืœื˜ ื–ื™ื™ืŸ ื“ื™ืคื™ื™ื ื“ ื‘ืขืขืจืขืš ืึทื–ื•ื™. ืžื™ื˜ ืขืก, ืื™ืจ ืงืขื ืขืŸ ื™ื ืกื˜ืึทืœื™ืจืŸ ืึท ืงืึทืคืงืึท ืงื ื•ื™ืœ ืื•ื™ืฃ ืฉืคึผื™ืฅ ืคื•ืŸ Kubernetes ืžื™ื˜ ื‘ืœื•ื™ื– ืึท ืคึผืึธืจ ืคื•ืŸ ืงืึทืžืึทื ื“ื–:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

ืื•ืŸ ื“ืขืžืึธืœื˜ ืงืึทื ืคื™ื’ื™ืขืจ ืขืก ืžื™ื˜ ืืŸ ืื ื“ืขืจ ื‘ืึทืคึฟืขืœ:

$ kubectl kudo install kafka --instance=my-kafka-name 
            -p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181 
            -p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m 
            -p BROKER_COUNT=5 -p BROKER_MEM=4096m 
            -p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3 
            -p NUM_NETWORK_THREADS=10 -p NUM_IO_THREADS=20

ื›ื™ื“ืขืฉ

ืื™ืŸ ื“ื™ ืœืขืฆื˜ืข ื™ืึธืจืŸ, ื“ื™ ื”ื•ื™ืคึผื˜ Kubernetes ืจื™ืœื™ืกื™ื– ื–ืขื ืขืŸ ืืจื•ื™ืก ื™ืขื“ืขืจ ื‘ื™ืกืœ ื—ื“ืฉื™ื - ื“ืึธืก ืื™ื– ื“ืจื™ื™ ืฆื• ืคื™ืจ ื”ื•ื™ืคึผื˜ ืจื™ืœื™ืกื™ื– ืคึผืขืจ ื™ืึธืจ. ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ื ื™ื™ึท ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ื‘ืึทืงืขื ืขื  ืื™ืŸ ื™ืขื“ืขืจ ืคื•ืŸ ื–ื™ื™ ื˜ื•ื˜ ื ื™ืฉื˜ ืคืึทืจืžื™ื ืขืจืŸ. ื“ืขืจืฆื•, ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ ื•ื•ืื•ื ื“ืขืจ ืคื•ืŸ ืกืœืึธื•ื™ื ื’ ืึทืจืึธืคึผ ืืคื™ืœื• ืื™ืŸ ื“ื™ ืฉื•ื•ืขืจ ืฆื™ื™ื˜ - ืงื•ืง ืื™ืŸ ื•ื•ืึธืก ื“ื™ ืกื™ื˜ื•ืึทืฆื™ืข ืื™ื– ืื™ืฆื˜ Kubernetes ืคึผืจื•ื™ืขืงื˜ ื˜ืขื˜ื™ืงื™ื™ื˜ ืื•ื™ืฃ Github.

ื ื™ื• ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืœืึธื–ืŸ ืื™ืจ ืฆื• ืžืขืจ ืคืœืขืงืกืึทื‘ืึทืœ ืงื ื•ื™ืœ ืึทืคึผืขืจื™ื™ืฉืึทื ื– ืึทืจื™ื‘ืขืจ ืคืึทืจืฉื™ื“ืŸ ื•ื•ืขืจืงืœืึธื•ื“ื–. ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, ืคึผืจืึธื•ื’ืจืึทืžืขืจื– ื’ืขื ื™ืกืŸ ื’ืจืขืกืขืจ ืงืึธื ื˜ืจืึธืœ ื•ื•ืขืŸ ื“ื™ืคึผืœื•ื™ื™ื ื’ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ื’ืœื™ื™ึทืš ืฆื• ืคึผืจืึธื“ื•ืงืฆื™ืข.

ืงื™ื‘ืขืฅ

ืืŸ ืื ื“ืขืจ ื”ื•ื™ืคึผื˜ ืึทืกืคึผืขืงื˜ ืคื•ืŸ ื“ื™ ืคึผืึธืคึผื•ืœืึทืจื™ื˜ืขื˜ ืคื•ืŸ Kubernetes ืื™ื– ื“ื™ ืฉื˜ืึทืจืงื™ื™ื˜ ืคื•ืŸ ื–ื™ื™ืŸ ืงื”ืœ. ืื™ืŸ 2015, ื•ื•ืขืŸ ืจื™ื˜ืฉื™ื ื’ ื•ื•ืขืจืกื™ืข 1.0, Kubernetes ืื™ื– ื’ืขื•ื•ืขืŸ ื‘ืืฆืืœื˜ืข ื“ื•ืจืš ืงืœืึธื•ื“ ื ืึทื˜ื™ื•ื•ืข ืงืึทืžืคึผื™ื•ื˜ื™ื ื’ ื•ื•ื™ืงื™ืคึผืขื“ื™ืข.

ืขืก ื–ืขื ืขืŸ ืื•ื™ืš ืคืืจื”ืืŸ ืคืืจืฉื™ื“ืขื ืข ืงื”ื™ืœื•ืช ืกื™ื’ (ืกืคึผืขืฆื™ืขืœืข ืื™ื ื˜ืขืจืขืก ื’ืจื•ืคึผืขืก) ืคืึธื•ืงื™ืกื˜ ืื•ื™ืฃ ืืจื‘ืขื˜ืŸ ืื•ื™ืฃ ืคืึทืจืฉื™ื“ืขื ืข ื’ืขื‘ื™ื˜ืŸ ืคื•ืŸ Kubernetes ื•ื•ื™ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื™ื•ื•ืึทืœื•ื•ื–. ื“ื™ ื’ืจื•ืคึผืขืก ื–ืขื ืขืŸ ืงืขืกื™ื™ื“ืขืจ ืึทื“ื™ื ื’ ื ื™ื™ึท ืคึฟืขื™ึดืงื™ื™ื˜ืŸ, ืžืื›ืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ Kubernetes ืžืขืจ ื‘ืึทืงื•ื•ืขื ืื•ืŸ ื‘ืึทืงื•ื•ืขื.

ื“ื™ ืงืœืึธื•ื“ ื ืึทื˜ื™ื•ื•ืข ื•ื•ื™ืงื™ืคึผืขื“ื™ืข ืื•ื™ืš ื”ืึธืกืฅ CloudNativeCon / KubeCon, ื•ื•ืึธืก, ืื™ืŸ ื“ืขืจ ืฆื™ื™ื˜ ืคื•ืŸ ืฉืจื™ื™ื‘ืŸ, ืื™ื– ื“ื™ ื’ืจืขืกื˜ืข ืึธืคึฟืŸ ืžืงื•ืจ ื–ื™ืฆื•ื ื’ ืื™ืŸ ื“ืขืจ ื•ื•ืขืœื˜. ื˜ื™ืคึผื™ืงืึทืœืœื™ ื’ืขื”ืืœื˜ืŸ ื“ืจื™ื™ ืžืึธืœ ืึท ื™ืึธืจ, ืขืก ื‘ืจืขื ื’ื˜ ืฆื•ื–ืึทืžืขืŸ ื˜ื•ื™ื–ื ื˜ืขืจ ืคื•ืŸ ืคึผืจืึธืคืขืกืกื™ืึธื ืึทืœืก ื•ื•ืึธืก ื•ื•ื™ืœืŸ ืฆื• ืคึฟืึทืจื‘ืขืกืขืจืŸ Kubernetes ืื•ืŸ ื–ื™ื™ืŸ ื™ืงืึธื•ืกื™ืกื˜ืึทื, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ืœืขืจื ืขืŸ ื ื™ื™ึท ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ื•ื•ืึธืก ื“ืขืจืฉื™ื™ึทื ืขืŸ ื™ืขื“ืขืจ ื“ืจื™ื™ ื—ื“ืฉื™ื.

ื“ืขืจืฆื•, Cloud Native Foundation ื”ืื˜ ื˜ืขื›ื ื™ืฉืข ืื•ื™ืคื–ื™ื›ื˜ ืงืืžื™ื˜ืข, ื•ื•ืึธืก, ืฆื•ื–ืึทืžืขืŸ ืžื™ื˜ SIGs, ื‘ืืจื™ื›ื˜ืŸ ื ื™ื™ึท ืื•ืŸ ื™ื’ื–ื™ืกื˜ื™ื ื’ ืคึผืจืึทื“ื–ืฉืขืงืก ื’ืขืœื˜ ืคืึธื•ืงื™ืกื˜ ืื•ื™ืฃ ื“ื™ ื•ื•ืึธืœืงืŸ ื™ืงืึธื•ืกื™ืกื˜ืึทื. ืจื•ื‘ึฟ ืคื•ืŸ ื“ื™ ืคึผืจืึทื“ื–ืฉืขืงืก ื”ืขืœืคึฟืŸ ืคึฟืึทืจื‘ืขืกืขืจืŸ ื“ื™ ืกื˜ืจืขื ื’ืงื˜ืก ืคื•ืŸ Kubernetes.

ืขื ื“ืœื™ืš ื’ืœื™ื™ื‘ ืื™ืš ืื– ืงื•ื‘ืขืจื ืขื˜ืขืก ื•ื•ืืœื˜ ื ื™ืฉื˜ ื’ืขื•ื•ืขืŸ ืื–ื•ื™ ืžืฆืœื™ื— ื•ื•ื™ ืขืก ืื™ื– ืืŸ ื“ื™ ื‘ืื•ื•ืื•ืกื˜ื–ื™ื ื™ื’ืข ื‘ืืžื™ืื•ื ื’ืขืŸ ืคื•ืŸ ื“ืขืจ ื’ืื ืฆืขืจ ื’ืขืžื™ื™ื ื“ืข, ื•ื•ืื• ืžืขื ื˜ืฉืŸ ื”ืืœื˜ืŸ ื–ื™ืš ืฆื•ื–ืืžืขืŸ, ืื‘ืขืจ ื’ืœื™ื™ื›ืฆื™ื™ื˜ื™ืง ื‘ืึทื’ืจื™ืกืŸ ื ื™ื™ืข ืื ื’ืขืงื•ืžืขื ืข ืื™ืŸ ื“ื™ ืคืืจืคืืœืง.

ื“ื™ ืคื™ื•ื˜ืฉืขืจ

ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื”ื•ื™ืคึผื˜ ื˜ืฉืึทืœืึทื ื“ื–ืฉื™ื– ื•ื•ืึธืก ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื•ื•ืขืœืŸ ื”ืึธื‘ืŸ ืฆื• ื”ืึทื ื“ืœืขืŸ ืžื™ื˜ ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคึฟื˜ ืื™ื– ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืคืึธืงื•ืก ืื•ื™ืฃ ื“ื™ ื“ืขื˜ืึทื™ืœืก ืคื•ืŸ ื“ื™ ืงืึธื“ ื–ื™ืš, ืื•ืŸ ื ื™ืฉื˜ ืื•ื™ืฃ ื“ื™ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืื™ืŸ ื•ื•ืึธืก ืขืก ืœื•ื™ืคื˜. ืขืก ืžื™ืฅ ื“ื™ ื˜ืจืขื ื“ืก ืกืขืจื•ื•ืขืจืœืขืกืก ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจืึทืœ ืคึผืึทืจืึทื“ื™ื’ื, ื•ื•ืึธืก ืื™ื– ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืœื™ื“ื™ื ื’ ื”ื™ื™ึทื ื˜. ืึทื•ื•ืึทื ืกื™ืจื˜ืข ืคืจืึทืžืขื•ื•ืึธืจืงืก ืฉื•ื™ืŸ ืขืงืกื™ืกื˜ื™ืจืŸ, ืœืžืฉืœ. ืงื ื™ืคืขืจ ะธ OpenFaas, ื•ื•ืึธืก ื ื•ืฆืŸ Kubernetes ืฆื• ืึทื‘ืกื˜ืจืึทืงื˜ ื“ื™ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืคื•ืŸ ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจ.

ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ืžื™ืจ ื”ืึธื‘ืŸ ื‘ืœื•ื™ื– ืงืจืึทืฆืŸ ื“ื™ ื™ื™ื‘ืขืจืคืœืึทืš ืคื•ืŸ ื“ื™ ืงืจืึทื ื˜ ืฉื˜ืึทื˜ ืคื•ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก - ืื™ืŸ ืคืึทืงื˜, ื“ืึธืก ืื™ื– ื ืึธืจ ื“ืขืจ ืฉืคึผื™ืฅ ืคื•ืŸ ื“ื™ ื™ื™ืกื‘ืขืจื’. Kubernetes ื™ื•ื–ืขืจื– ื”ืึธื‘ืŸ ืคื™ืœืข ืื ื“ืขืจืข ืจืขืกื•ืจืกืŸ, ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทื ื– ืฆื• ื–ื™ื™ืขืจ ื‘ืึทื–ื™ื™ึทื˜ื™ืงื•ื ื’.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’