α αα α!
αα
α
α»ααααα
αααααααΌααααα
ααΎαα
ααααααΉαα’αααααΆααΎαααααααααΎααΆαααΎαααααΆααα
ααΈαααΆαα’αΆα!
αα
ααααααααα’αααααααα α’αΆαα»αααα Kubernetes ααΊαααα αΆαααααα ααα
αα»αααΊαααααΆαα
αΆααααααΎαααΆααΆααα
ααΆαα·ααααααααΆααααααΎαααΆαααΆα
ααααα‘αααα
αααα»αααΈαα»α
α αα»αααΊαααααΆααα½ααααα
αΌαααΆααααΈααααΆα 2007
ααΎααααΈβααααΆααΆαβαααβααΈβααΌαα ααα»βααα Kubernetes ααΆαβαααααΆαααα·αααΆαβααααΆαα ααΌαβααααΆααΆαβααααΎαβαααα½αβαα½αβα ααα½αα ααΎαα αααααΆαααα’αααα’αα·ααααααα’αΆα αααααααααΎααααααΆαααααααΆααααααα·ααΈαα ααα·ααααα? ααΎα’αααααΉαααΆα’αααα’αα·ααααααααα»ααααΆαααΆαααααααααΎα§αααααααΌα ααααα½αααααααΌαααΆααααααα±ααα ααααΈαααα’αα? ααΎααΆαα’ααααααααααααααΎαααααα»ααααΆαααΆααααααααααααα ααααα·ααααααΈααααααααααααα·ααΈααααΎαααΆα? ααΎαααΉααα·αα·αααααΎαα ααααΎαα αααααααα½αααΆααααααα αααα»αα’ααααααααα
αα ααΆαααααααα YAML
αα αααα»ααα·ααααααααααΆαα ααααΈα’αΆααα αα·αααα α»ααα αα 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 ααΆααααααααααααααααααα·ααααα·ααΆαα αα·ααΈααΆααααααααα’αα»ααααΆαα±ααα’ααααααααΆαα»αα―αααΆα 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 validator, plusααΎαααααΆααααΆαααααααααΆα αααααΆα’αααααααααα»ααααΆαααααααααΆαααΎααααΈααΆααΆααΆααα·ααααα·αααα»ααααα·ααΆα ααααα»αααΆαααΆαααααα’ααααα·αα’αα»ααααΆαα±αααα»αααΊαααααααΎαααΆααααααΆααα·αααα·ααΆα’ααααααααααααααα ααααα·αααΎαααααΌαααΆαααα α’αααααααΎααααΆααα’αΆα α’αα»αααααααααΆαααααΆαααααα½αααααα»αα’αα·ααααΆα , ααΌα αααα
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 ααΎααααΈααααΌααα·αα ααΆα ααααα ααΆαααααααα·ααΈ pods α
ααααααΆααααααΈα
Kubernetes ααΊα’αΆα
αααααΈαααΆα α αΎαα’αααα’αα·ααααααα
αΌαα
α·αααααΆα ααΆααααα»αααααααΆααααααΆαααΌα
ααΆ pods, ααΆαααΆαααααααΆα, 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
αααααΆααααα’αααα’αΆα αααααα APIs αα·αα§ααααααααααΆαααααααΌαααΆαααΌα ααΆα
$ 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 ααααΆαααααΆαα
ααααΆαααααΆααααΈαααΈαααααα αααααΊααΆαα
ααααααΆααααα
ααα½α XNUMX αα
XNUMX αααα»ααα½αααααΆαα α
ααα½ααααα»αααΆαααααΈαααααΆαααααΆααα
αααα»ααα½αααΆααΈαα½αααα·αααα
α»αααα ααΆαααααα
ααα ααΆαα·αααΆααααααΆααΆαα½αααααΆαααααα‘αΎα ααΌααααΈαααα
αααα»αααααΆααααααΆαααΆαααααααααα ααΌααααα‘ααααΎαααΆααΎααααΆαααΆαααααααααΆα’αααΈ
αααααααΆαβααααΈβα’αα»ααααΆαβα±ααβα’αααβααααΎβααααα·ααααα·ααΆαβα αααααβααΆααααβααααααβααΆαβααααα»αβααΆαααΆαβα αααα»αα ααΎαααΈααα α’αααααααααααααα·ααΈααΈαααΆαααΉαααΆααααααααααααΆααααααααΆαααα αααααΆαααααααΆααααααα·ααΈαααααααΆαααα ααα·αααααα
αα αααα
αα·αααααΆαααααΆαααα½αααααααααααΆαααα·αααΆααααα Kubernetes ααΊααΆαααΉαααΆααααα αααααααααααα½αα αα
ααααΆα 2015 αα
αααααΆαααααααα 1.0 Kubernetes ααααΌαααΆαα§αααααααααα
ααααΆααα αααααααααααααααα
ααΌααα·αα· Cloud Native ααααααΎααΆααα αΆαααααα CloudNativeCon/KubeCon ααααα αααααααα ααΊααΆααααα·ααΈααααααααΎαα αα αααααααα»ααα αααα»ααα·αααααα ααΆααααααΆααααΎα‘αΎαααΈαααααα»ααα½αααααΆα ααΆαααααΌααααα»αα’αααααααΆαααΆααααΆααααΆαααααα αααααααα’ Kubernetes αα·αααααααααα’αααΌααααααΆ ααααΌα ααΆααααααααααΈαα»αααΆαααααΈααααααα α‘αΎααααααΆααααΈααααααα
ααΎαααΈααααα
ααα Cloud Native Foundation ααΆα
ααΆα α»αααααα αααα»αααΏααΆ Kubernetes ααΉααα·αααα½αααΆαααααααααΌα αααααΆααααΆαααΆααα·αααααααΉααααααααααααα·ααΆααααααα ααααααΆααααΌα αααααα»ααααα ααΆαα½αααααΆ ααα»αααααααα»αααααααα½αααααΆααααα’αααα αααΌαααααΈα αΌααα αααα»αααααααααα·αα
α’ααΆαα
αααα αΆαααααα
αααααα½ααααα’αααα’αα·ααααααααΉαααααΌααααααααΆααα
αααα’ααΆααααΊαααααααΆααααα»αααΆααααααααΎααααααΆααααα’α·αααααΌαααααααα½αα―α αα·ααααααΎα αααααΆαα
ααΆαααααααααααααΆααααΎαααΆααααααα ααΆαααααααΆααα·ααααΆααΆαααΆααααα
αα
αααα»αα’αααααααα ααΎαααααΆααααααΌαααΎααααααααααΆαααΆααα
αα
α»αααααααααα Kubernetes ααα»ααααα - ααΆααα·ααα
ααΆααααΆααααααΆαααααααααααΆααααΉαααααα»αααααα α’αααααααΎααααΆαα Kubernetes ααΆαααααΆα αααααααΆα αα·αααΆαααααααα
ααΆααααααααααααααααΆα
αααΎααααααΆαααααααΆααααααα½αααα
ααααα: www.habr.com