ืืื ืืืจ!
ืืกืืฃ ืืงืืฅ ืื ืื ื ืจืืฆืื ืืืืืืจ ืืื ืฉืื ืื ื ืืืฉืืืื ืืขืืื ืขื ืื ืืฉื
ืชืื ื ืงืจืืื!
ืืืื ืืชืืืช ืืืืจ ืื, ืืื Kubernetes ืืื ืืขืจื.
ืงืื ืืืื ืจืื ืืืื ืืขืืฆืื ืืืืื ืืืืืื ืชืืืืืื ืืืื ืืงืก; ืืืืืืช ื ืืืืืช ืืื 2007
ืืื ืื ืกืืช ืืืืื ืืืืข 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 ืืื ืฉืืืคืชื ืืืื ืืืชืื ืืช ืืืฆืืจืืช ืฉืื.
ืืฉื ื ืืกืคืจ ืืืื ืืงืืืื ืืืงืืื ืขื ืืคืชืืื ืืืฆืืจ ืืืคืจืืืจืื ืืฉืืื. ืืื ืืื -
$ 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
.
ืขืื ืคืจืืืงื
$ 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 ืืื ืืืืืง ืฉื ืืงืืืื ืฉืื. ืืฉื ืช 2015, ืขื ืืืืขื ืืืจืกื 1.0, Kubernetes ืืื ืืืกืืช
ืืฉ ืื ืงืืืืืช ืฉืื ืืช
ืงืจื Cloud Native ืืืจืืช ืื ืืช CloudNativeCon/KubeCon, ืฉืืื, ืืืื ืืชืืืช ืฉืืจืืช ืืื, ืื ืก ืืงืื ืืคืชืื ืืืืื ืืขืืื. ืืื ืืชืงืืื ืืืจื ืืื ืฉืืืฉ ืคืขืืื ืืฉื ื, ืืืคืืืฉ ืืืคื ืื ืฉื ืืงืฆืืข ืฉืจืืฆืื ืืฉืคืจ ืืช Kubernetes ืืืช ืืืขืจืืช ืืืงืืืืืืช ืฉืื, ืืื ืื ืืืืื ืชืืื ืืช ืืืฉืืช ืืืืคืืขืืช ืื ืฉืืืฉื ืืืืฉืื.
ืืชืจ ืขื ืื, ื-Cloud Native Foundation ืืฉ
ืืืกืืฃ, ืื ื ืืืืื ืฉ-Kubernetes ืื ืืื ืืฆืืื ืืื ืฉืืื ืืื ืืืืืฆืื ืืืืืขืื ืฉื ืืงืืืื ืืืื, ืฉืื ืื ืฉืื ื ืฆืืืื ืืื ืื ืื ืืื ืืช ืืงืืืื ืืืจืื ืขืืืื ืืืฉืื ืืงืืืฆื.
ืืขืชืื
ืืื ืืืชืืจืื ืืืจืืืืื ืฉืืืชื ืืืืฆื ืืคืชืืื ืืืชืืืื ืืขืชืื ืืื ืืืืืืช ืืืชืืงื ืืคืจืื ืืงืื ืขืฆืื, ืืื ืืชืฉืชืืช ืื ืืื ืคืืขื. ืื ืขืื ื ืขื ืืืืืืช ืืืื
ืืืืืจ ืื, ืจืง ืฉืจืื ื ืืช ืคื ื ืืฉืื ืฉื ืืืืื ื ืื ืืืืืช ืฉื ืงืืืจื ืืก - ืืืขืฉื, ืื ืจืง ืงืฆื ืืงืจืืื. ืืจืฉืืช ืืฉืชืืฉื Kubernetes ืขืืืืื ืืฉืืืื, ืืืืืืช ืืชืฆืืจืืช ืจืืื ืืืจืื.
ืืงืืจ: www.habr.com