ืขืœ ื”ืคื•ืคื•ืœืจื™ื•ืช ื”ื’ื•ื‘ืจืช ืฉืœ Kubernetes

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

ื‘ืกื•ืฃ ื”ืงื™ืฅ ืื ื—ื ื• ืจื•ืฆื™ื ืœื”ื–ื›ื™ืจ ืœื›ื ืฉืื ื—ื ื• ืžืžืฉื™ื›ื™ื ืœืขื‘ื•ื“ ืขืœ ื”ื ื•ืฉื ืงื•ื‘ืจื ื˜ ื•ื”ื—ืœื™ื˜ื” ืœืคืจืกื ืžืืžืจ ืž-Stackoverflow ื”ืžื“ื’ื™ื ืืช ืžืฆื‘ ื”ืขื ื™ื™ื ื™ื ื‘ืคืจื•ื™ืงื˜ ื–ื” ื‘ืชื—ื™ืœืช ื™ื•ื ื™.

ืขืœ ื”ืคื•ืคื•ืœืจื™ื•ืช ื”ื’ื•ื‘ืจืช ืฉืœ Kubernetes

ืชื”ื ื” ืงืจื™ืื”!

ื‘ื–ืžืŸ ื›ืชื™ื‘ืช ืžืืžืจ ื–ื”, ื’ื™ืœ Kubernetes ื”ื•ื ื‘ืขืจืš. ื‘ืŸ ืฉืฉ, ื•ื‘ืžื”ืœืš ื”ืฉื ืชื™ื™ื ื”ืื—ืจื•ื ื•ืช ื”ืคื•ืคื•ืœืจื™ื•ืช ืฉืœื• ื’ื“ืœื” ื›ืœ ื›ืš ืขื“ ืฉื”ื™ื ืžื“ื•ืจื’ืช ื‘ืขืงื‘ื™ื•ืช ื‘ื™ืŸ ื”ื›ื™ ืื”ื•ื‘ ืคืœื˜ืคื•ืจืžื•ืช. Kubernetes ืžื“ื•ืจื’ืช ื”ืฉื ื” ื‘ืžืงื•ื ื”ืฉืœื™ืฉื™. ืœืกื™ื›ื•ื: Kubernetes ื”ื™ื ืคืœื˜ืคื•ืจืžื” ืฉื ื•ืขื“ื” ืœื”ืคืขื™ืœ ื•ืœืชื–ืžืจ ืขื•ืžืกื™ ืขื‘ื•ื“ื” ืžื›ื•ืœืœื™ื.

ืงื•ื ื˜ื™ื™ื ืจื™ื ื”ื—ืœื• ื›ืขื™ืฆื•ื‘ ืžื™ื•ื—ื“ ืœื‘ื™ื“ื•ื“ ืชื”ืœื™ื›ื™ื ื‘ืœื™ื ื•ืงืก; ืžื›ื•ืœื•ืช ื ื›ืœืœื•ืช ืžืื– 2007 ืงื‘ื•ืฆื•ืช, ื•ืžืื– 2002 โ€“ ืžืจื—ื‘ื™ ืฉืžื•ืช. ืžื›ื•ืœื•ืช ืชื•ื›ื ื ื• ืืคื™ืœื• ื˜ื•ื‘ ื™ื•ืชืจ ืขื“ ืฉื ืช 2008, ื›ืฉื”ื™ื ื”ืคื›ื” ืœื–ืžื™ื ื” LXC, ื•ื’ื•ื’ืœ ืคื™ืชื—ื” ืžื ื’ื ื•ืŸ ืคื ื™ืžื™ ืืจื’ื•ื ื™ ืžืฉืœื” ืฉื ืงืจื ื‘ื•ืจื’, ืฉื‘ื• "ื›ืœ ื”ืขื‘ื•ื“ื” ื ืขืฉื™ืช ื‘ืžื›ื•ืœื•ืช". ืžื›ืืŸ ืื ื—ื ื• ืžื”ืจ ืงื“ื™ืžื” ืœืฉื ืช 2013, ืื– ื”ืชืจื—ืฉื” ื”ื”ืฉืงื” ื”ืจืืฉื•ื ื” ืฉืœ Docker, ื•ื”ืžื›ื•ืœื•ืช ื”ืคื›ื• ืกื•ืฃ ืกื•ืฃ ืœืคืชืจื•ืŸ ื”ืžื•ื ื™ ืคื•ืคื•ืœืจื™. ื‘ืื•ืชื” ืชืงื•ืคื”, ื”ื›ืœื™ ื”ืขื™ืงืจื™ ืœืชื–ืžื•ืจ ืžื›ื•ืœื” ื”ื™ื” ืžืกื•ืก, ืœืžืจื•ืช ืฉื”ื•ื ืœื ื”ื™ื” ืคื•ืคื•ืœืจื™ ื‘ืžื™ื•ื—ื“. Kubernetes ื™ืฆื ืœืจืืฉื•ื ื” ื‘ืฉื ืช 2015, ื•ืœืื—ืจ ืžื›ืŸ ื”ื›ืœื™ ื”ื–ื” ื”ืคืš ืœืกื˜ื ื“ืจื˜ ื“ื” ืคืงื˜ื• ื‘ืชื—ื•ื ืชื–ืžื•ืจ ื”ืžื›ื•ืœื”.

ื›ื“ื™ ืœื ืกื•ืช ืœื”ื‘ื™ืŸ ืžื“ื•ืข Kubernetes ื›ืœ ื›ืš ืคื•ืคื•ืœืจื™, ื‘ื•ืื• ื ื ืกื” ืœืขื ื•ืช ืขืœ ื›ืžื” ืฉืืœื•ืช. ืžืชื™ ื”ื™ื™ืชื” ื”ืคืขื ื”ืื—ืจื•ื ื” ืฉืžืคืชื—ื™ื ื”ืฆืœื™ื—ื• ืœื”ืกื›ื™ื ื›ื™ืฆื“ ืœืคืจื•ืก ื™ื™ืฉื•ืžื™ื ืœื™ื™ืฆื•ืจ? ื›ืžื” ืžืคืชื—ื™ื ืืชื” ืžื›ื™ืจ ืฉืžืฉืชืžืฉื™ื ื‘ื›ืœื™ื ื›ืคื™ ืฉื”ื ืžืกื•ืคืงื™ื ืžื”ืงื•ืคืกื”? ื›ืžื” ืžื ื”ืœื™ ืขื ืŸ ื™ืฉ ื”ื™ื•ื ืฉืœื ืžื‘ื™ื ื™ื ืื™ืš ืืคืœื™ืงืฆื™ื•ืช ืขื•ื‘ื“ื•ืช? ื ื‘ื—ืŸ ืืช ื”ืชืฉื•ื‘ื•ืช ืœืฉืืœื•ืช ืืœื• ื‘ืžืืžืจ ื–ื”.

ืชืฉืชื™ืช ื›ืžื• YAML

ื‘ืขื•ืœื ืฉืขื‘ืจ ืž-Puppet and Chef ืœ-Kubernetes, ืื—ื“ ื”ืฉื™ื ื•ื™ื™ื ื”ื’ื“ื•ืœื™ื ื‘ื™ื•ืชืจ ื”ื™ื” ื”ืžืขื‘ืจ ืž"ืชืฉืชื™ืช ื›ืงื•ื“" ืœ"ืชืฉืชื™ืช ื›ื ืชื•ื ื™ื" - ืกืคืฆื™ืคื™ืช, ื›ืžื• YAML. ื ื™ืชืŸ ืœืชืืจ ื‘ืงืœื•ืช ืืช ื›ืœ ื”ืžืฉืื‘ื™ื ื‘-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 Control Version Control. ื’ื™ืฉื” ื–ื• ืžืืคืฉืจืช ืœืš ืœืฉืžื•ืจ ืืช ื›ืœ ืงื‘ืฆื™ Kubernetes YAML ื‘ืžืื’ืจื™ git, ื›ืš ืฉืชื•ื›ืœ ืœืขืงื•ื‘ ื‘ื“ื™ื•ืง ืžืชื™ ื‘ื•ืฆืข ืฉื™ื ื•ื™, ืžื™ ื‘ื™ืฆืข ืื•ืชื• ื•ืžื” ื‘ื“ื™ื•ืง ื”ืฉืชื ื”. ื–ื” ืžื’ื‘ื™ืจ ืืช ื”ืฉืงื™ืคื•ืช ืฉืœ ื”ืคืขื•ืœื•ืช ื‘ื›ืœ ื”ืืจื’ื•ืŸ ื•ืžืฉืคืจ ืืช ื”ื™ืขื™ืœื•ืช ื”ืชืคืขื•ืœื™ืช ืขืœ ื™ื“ื™ ื‘ื™ื˜ื•ืœ ืื™ ื‘ื”ื™ืจื•ืช, ื‘ืžื™ื•ื—ื“ ื‘ืžืงื•ื ืฉื‘ื• ื”ืขื•ื‘ื“ื™ื ืฆืจื™ื›ื™ื ืœื—ืคืฉ ืืช ื”ืžืฉืื‘ื™ื ืฉื”ื ืฆืจื™ื›ื™ื. ื™ื—ื“ ืขื ื–ืืช, ืงืœ ื™ื•ืชืจ ืœื‘ืฆืข ืฉื™ื ื•ื™ื™ื ืื•ื˜ื•ืžื˜ื™ืช ื‘ืžืฉืื‘ื™ 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, ืคืœื•ืก ืคืชื— ืืช ืกื•ื›ืŸ ื”ืžื“ื™ื ื™ื•ืช, ืžืืžืช ืžื“ื™ื ื™ื•ืช ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืฉื”ื”ืงืฉืจ ืื‘ื˜ื—ื” ื”ืงืฉืจ ืขื•ืžืกื™ ื”ืขื‘ื•ื“ื” ืฉืœืš ืื™ื ื ืžืืคืฉืจื™ื ืœืžื›ื•ืœื” ืœืคืขื•ืœ ืขื ื”ืจืฉืื•ืช ืžื ื”ืœ. ืื ื–ื” ื ื“ืจืฉ, ืžืฉืชืžืฉื™ื ื™ื›ื•ืœื™ื ืœื”ื—ื™ืœ ืžื“ื™ื ื™ื•ืช ืคืฉื•ื˜ื” ืจื’ื•, ื›ื›ื”:

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ืืฉืจ ื™ืกืคืง ืื•ื˜ื•ืžื˜ื™ืช ืืช ืžืื–ืŸ ื”ืขื•ืžืก ืžืื–ืŸ ืขื•ืžืกื™ื ืืœืกื˜ื™ ืฉืœ ืืžื–ื•ืŸื›ื“ื™ ืœื”ืคื ื•ืช ืชืขื‘ื•ืจื” ืœืชืจืžื™ืœื™ื ืฉืœ ื™ื™ืฉื•ืžื™ื.

ื™ื›ื•ืœืช ื”ืจื—ื‘ื”

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 ื”ื™ื ืฉื”ืžืคืชื— ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืืช ื”ื”ืฆื”ืจื•ืช ืฉืœื•. ืžืคืขื™ืœ ื”ื•ื ืชื”ืœื™ืš ืžื™ื•ื—ื“ ื‘ืืฉื›ื•ืœ Kubernetes ืฉืขื•ื‘ื“ ืขืœ ืคื™ "ืžืขื’ืœ ื‘ืงืจื”" ื‘ืขื–ืจืช ืžืคืขื™ืœ, ื”ืžืฉืชืžืฉ ื™ื›ื•ืœ ืœื”ืคื•ืš ืืช ื”ื ื™ื”ื•ืœ ืฉืœ CRDs (ื”ื’ื“ืจื•ืช ืžืฉืื‘ื™ื ืžื•ืชืืžื•ืช ืื™ืฉื™ืช) ืœืื•ื˜ื•ืžื˜ื™ื•ืช ืขืœ ื™ื“ื™ ื”ื—ืœืคืช ืžื™ื“ืข ืขื ื”-API ืฉืœ Kubernetes.

ื™ืฉื ื ืžืกืคืจ ื›ืœื™ื ื‘ืงื”ื™ืœื” ื”ืžืงืœื™ื ืขืœ ืžืคืชื—ื™ื ืœื™ืฆื•ืจ ืื•ืคืจื˜ื•ืจื™ื ืžืฉืœื”ื. ื‘ื™ื ื™ื”ื - ืžืกื’ืจืช ืžืคืขื™ืœ ื• - SDK ืฉืœ ืžืคืขื™ืœ. SDK ื–ื” ืžืกืคืง ื‘ืกื™ืก ืฉืžืžื ื• ืžืคืชื— ื™ื›ื•ืœ ืœื”ืชื—ื™ืœ ื‘ืžื”ื™ืจื•ืช ืœื™ืฆื•ืจ ืžืคืขื™ืœ. ื ื ื™ื— ืฉืืชื” ื™ื›ื•ืœ ืœื”ืชื—ื™ืœ ืžืฉื•ืจืช ื”ืคืงื•ื“ื” ืžืฉื”ื• ื›ื–ื”:

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

ื–ื” ื™ื•ืฆืจ ืืช ื›ืœ ืงื•ื“ ื”-boilerplate ืขื‘ื•ืจ ื”ืžืคืขื™ืœ ืฉืœืš, ื›ื•ืœืœ ืงื‘ืฆื™ 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

ืœืื—ืจ ืžื›ืŸ ืชื•ื›ืœ ืœื”ื•ืกื™ืฃ ืืช ืžืžืฉืงื™ ื”-API ื•ื”ื‘ืงืจ ื”ื ื“ืจืฉื™ื, ื›ืš:

$ 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

ืื ื”ืžืคืชื— ืจื•ืฆื” ืืคื™ืœื• ื™ื•ืชืจ ืฉืœื™ื˜ื”, ื ื™ืชืŸ ืœืฉื ื•ืช ืืช ืงื•ื“ ื”-boilerplate ื‘ืงื‘ืฆื™ 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 ื–ื›ื” ื‘ื—ืกื•ืช ืงืจืŸ ืžื—ืฉื•ื‘ ืžืงื•ืžื™ืช ืœืขื ืŸ.

ื™ืฉ ื’ื ืงื”ื™ืœื•ืช ืฉื•ื ื•ืช SIG (ืงื‘ื•ืฆื•ืช ืขื ื™ื™ืŸ ืžื™ื•ื—ื“ื•ืช) ื”ืชืžืงื“ื• ื‘ืขื‘ื•ื“ื” ืขืœ ืชื—ื•ืžื™ื ืฉื•ื ื™ื ืฉืœ Kubernetes ื›ื›ืœ ืฉื”ืคืจื•ื™ืงื˜ ืžืชืคืชื—. ืงื‘ื•ืฆื•ืช ืืœื” ืžื•ืกื™ืคื•ืช ื›ืœ ื”ื–ืžืŸ ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช, ืžื” ืฉื”ื•ืคืš ืืช ื”ืขื‘ื•ื“ื” ืขื Kubernetes ืœื ื•ื—ื” ื•ื ื•ื—ื” ื™ื•ืชืจ.

ืงืจืŸ Cloud Native ืžืืจื—ืช ื’ื ืืช CloudNativeCon/KubeCon, ืฉื”ื•ื, ื‘ื–ืžืŸ ื›ืชื™ื‘ืช ืฉื•ืจื•ืช ืืœื•, ื›ื ืก ื”ืงื•ื“ ื”ืคืชื•ื— ื”ื’ื“ื•ืœ ื‘ืขื•ืœื. ื”ื•ื ืžืชืงื™ื™ื ื‘ื“ืจืš ื›ืœืœ ืฉืœื•ืฉ ืคืขืžื™ื ื‘ืฉื ื”, ื•ืžืคื’ื™ืฉ ืืœืคื™ ืื ืฉื™ ืžืงืฆื•ืข ืฉืจื•ืฆื™ื ืœืฉืคืจ ืืช Kubernetes ื•ืืช ื”ืžืขืจื›ืช ื”ืืงื•ืœื•ื’ื™ืช ืฉืœื”, ื›ืžื• ื’ื ืœืœืžื•ื“ ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช ื”ืžื•ืคื™ืขื•ืช ื›ืœ ืฉืœื•ืฉื” ื—ื•ื“ืฉื™ื.

ื™ืชืจ ืขืœ ื›ืŸ, ืœ-Cloud Native Foundation ื™ืฉ ื•ืขื“ืช ืคื™ืงื•ื— ื˜ื›ื ื™, ืืฉืจ, ื™ื—ื“ ืขื SIGs, ืกื•ืงืจ ื—ื“ืฉ ื•ืงื™ื™ืžื™ื ืคืจื•ื™ืงื˜ื™ื ืงืจื ื•ืช ื”ืžืชืžืงื“ื•ืช ื‘ืžืขืจื›ืช ื”ืืงื•ืœื•ื’ื™ืช ืฉืœ ื”ืขื ืŸ. ืจื•ื‘ ื”ืคืจื•ื™ืงื˜ื™ื ื”ืœืœื• ืขื•ื–ืจื™ื ืœืฉืคืจ ืืช ื”ื—ื•ื–ืงื•ืช ืฉืœ Kubernetes.

ืœื‘ืกื•ืฃ, ืื ื™ ืžืืžื™ืŸ ืฉ-Kubernetes ืœื ื”ื™ื” ืžืฆืœื™ื— ื›ืžื• ืฉื”ื•ื ืœืœื ื”ืžืืžืฆื™ื ื”ืžื•ื“ืขื™ื ืฉืœ ื”ืงื”ื™ืœื” ื›ื•ืœื”, ืฉื‘ื” ืื ืฉื™ื ื ืฆืžื“ื™ื ื™ื—ื“ ืืš ื‘ื• ื–ืžื ื™ืช ืžืงื‘ืœื™ื ื‘ื‘ืจื›ื” ืขื•ืœื™ื ื—ื“ืฉื™ื ืœืงื‘ื•ืฆื”.

ื”ืขืชื™ื“

ืื—ื“ ื”ืืชื’ืจื™ื ื”ืžืจื›ื–ื™ื™ื ืฉืื™ืชื ื™ืืœืฆื• ืžืคืชื—ื™ื ืœื”ืชืžื•ื“ื“ ื‘ืขืชื™ื“ ื”ื•ื ื”ื™ื›ื•ืœืช ืœื”ืชืžืงื“ ื‘ืคืจื˜ื™ ื”ืงื•ื“ ืขืฆืžื•, ื•ืœื ื‘ืชืฉืชื™ืช ื‘ื” ื”ื•ื ืคื•ืขืœ. ื–ื” ืขื•ื ื” ืขืœ ื”ืžื’ืžื•ืช ื”ืœืœื• ืคืจื“ื™ื’ืžื” ืื“ืจื™ื›ืœื™ืช ืœืœื ืฉืจืช, ืฉื”ื™ื ืื—ืช ื”ืžื•ื‘ื™ืœื•ืช ื›ื™ื•ื. ื›ื‘ืจ ืงื™ื™ืžื•ืช ืžืกื’ืจื•ืช ืžืชืงื“ืžื•ืช, ืœืžืฉืœ. ืกื›ื™ืŸ ะธ OpenFaas, ื”ืžืฉืชืžืฉื•ืช ื‘-Kubernetes ื›ื“ื™ ืœื”ืคืฉื˜ ืืช ื”ืชืฉืชื™ืช ืžื”ืžืคืชื—.

ื‘ืžืืžืจ ื–ื”, ืจืง ืฉืจื˜ื ื• ืืช ืคื ื™ ื”ืฉื˜ื— ืฉืœ ื”ืžื“ื™ื ื” ื”ื ื•ื›ื—ื™ืช ืฉืœ ืงื•ื‘ืจื ื˜ืก - ืœืžืขืฉื”, ื–ื” ืจืง ืงืฆื” ื”ืงืจื—ื•ืŸ. ืœืจืฉื•ืช ืžืฉืชืžืฉื™ Kubernetes ืขื•ืžื“ื™ื ืžืฉืื‘ื™ื, ื™ื›ื•ืœื•ืช ื•ืชืฆื•ืจื•ืช ืจื‘ื™ื ืื—ืจื™ื.

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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”