рдЕрд╣реЛ рд╣рд╛рдмреНрд░!
рдЙрдиреНрд╣рд╛рд│реНрдпрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА, рдЖрдореНрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдард╡рдг рдХрд░реВрди рджреЗрдК рдЗрдЪреНрдЫрд┐рддреЛ рдХреА рдЖрдореНрд╣реА рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рдХрд╛рдо рдХрд░рдгреЗ рд╕реБрд░реВ рдареЗрд╡рддреЛ
рд╡рд╛рдЪрди рдЖрдирдВрдж рдШреНрдпрд╛!
рд╣рд╛ рд▓реЗрдЦ рд▓рд┐рд╣рд┐рддрд╛рдирд╛, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреЗ рд╡рдп рдЕрдВрджрд╛рдЬреЗ рдЖрд╣реЗ.
рд▓рд┐рдирдХреНрд╕рдордзреАрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрд▓рдЧ рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдХрдВрдЯреЗрдирд░рдЪреА рд╕реБрд░реБрд╡рд╛рдд рд╡рд┐рд╢реЗрд╖ рд░рдЪрдирд╛ рдореНрд╣рдгреВрди рдЭрд╛рд▓реА; 2007 рдкрд╛рд╕реВрди рдХрдВрдЯреЗрдирд░ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд
рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЗрддрдХреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдХрд╛ рдЖрд╣реЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЪрд▓рд╛ рдХрд╛рд╣реА рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдЙрддреНрддрд░реЗ рджреЗрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛. рдЙрддреНрдкрд╛рджрдирд╛рд╕рд╛рдареА рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рдХрд╕реЗ рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛рдпрдЪреЗ рдпрд╛рд╡рд░ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рд╡реЗрд│реА рд╡рд┐рдХрд╛рд╕рдХ рдХрдзреА рд╕рд╣рдордд рдЭрд╛рд▓реЗ рд╣реЛрддреЗ? рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд┐рддреА рдбреЗрд╡реНрд╣рд▓рдкрд░ рдорд╛рд╣рд┐рдд рдЖрд╣реЗрдд рдЬреЗ рд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░рддрд╛рдд рдХрд╛рд░рдг рддреЗ рдмреЙрдХреНрд╕рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рджрд┐рд▓реЗ рдЬрд╛рддрд╛рдд? рдЖрдЬ рдХрд┐рддреА рдХреНрд▓рд╛рдЙрдб рдкреНрд░рд╢рд╛рд╕рдХ рдЖрд╣реЗрдд рдЬреНрдпрд╛рдВрдирд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рд╣реЗ рд╕рдордЬрдд рдирд╛рд╣реА? рдпрд╛ рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдЙрддреНрддрд░реЗ рдЖрдкрдг рдпрд╛ рд▓реЗрдЦрд╛рдд рдкрд╛рд╣реВ.
YAML рдореНрд╣рдгреВрди рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛
рдХрдардкреБрддрд│реА рдЖрдгрд┐ рд╢реЗрдлрдкрд╛рд╕реВрди рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕рдкрд░реНрдпрдВрдд рдЧреЗрд▓реЗрд▓реНрдпрд╛ рдЬрдЧрд╛рдд, рд╕рд░реНрд╡рд╛рдд рдореЛрдард╛ рдмрджрд▓ рдореНрд╣рдгрдЬреЗ тАЬрдХреЛрдб рдореНрд╣рдгреВрди рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛тАЭ рд╡рд░реВрди тАЬрдбреЗрдЯрд╛ рдореНрд╣рдгреВрди рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛тАЭ - рд╡рд┐рд╢реЗрд╖рдд: YAML рдкреНрд░рдорд╛рдгреЗ. рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдордзреАрд▓ рд╕рд░реНрд╡ рд╕рдВрд╕рд╛рдзрдиреЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреЙрдбреНрд╕, рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди, рдЙрдкрдпреЛрдЬрд┐рдд рдЙрджрд╛рд╣рд░рдгреЗ, рд╡реНрд╣реЙрд▓реНрдпреВрдо рдЗрддреНрдпрд╛рджреАрдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ, 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 рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдЬрдордзреНрдпреЗ рдареЗрд╡рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ, рдЬреНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣реА рдмрджрд▓ рдХреЗрд╡реНрд╣рд╛ рдЭрд╛рд▓рд╛, рдХреЛрдгреА рдХреЗрд▓рд╛ рдЖрдгрд┐ рдиреЗрдордХрд╛ рдХрд╛рдп рдмрджрд▓ рдЭрд╛рд▓рд╛ рдпрд╛рдЪрд╛ рдорд╛рдЧреЛрд╡рд╛ рдШреЗрдК рд╢рдХрддрд╛. рдпрд╛рдореБрд│реЗ рд╕рдВрдкреВрд░реНрдг рд╕рдВрд╕реНрдереЗрддреАрд▓ рдСрдкрд░реЗрд╢рдиреНрд╕рдЪреА рдкрд╛рд░рджрд░реНрд╢рдХрддрд╛ рд╡рд╛рдврддреЗ рдЖрдгрд┐ рд╕рдВрджрд┐рдЧреНрдзрддрд╛ рджреВрд░ рдХрд░реВрди рдСрдкрд░реЗрд╢рдирд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реБрдзрд╛рд░рддреЗ, рд╡рд┐рд╢реЗрд╖рдд: рдЬрд┐рдереЗ рдХрд░реНрдордЪрд╛рд▒реНрдпрд╛рдВрдиреА рддреНрдпрд╛рдВрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕рд╛рдзрдиреЗ рд╢реЛрдзрд▓реА рдкрд╛рд╣рд┐рдЬреЗрдд. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдлрдХреНрдд рдкреБрд▓ рд╡рд┐рдирдВрддреА рд╡рд┐рд▓реАрди рдХрд░реВрди рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдордзреНрдпреЗ рдЖрдкреЛрдЖрдк рдмрджрд▓ рдХрд░рдгреЗ рд╕реЛрдкреЗ рд╣реЛрддреЗ.
- рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА. рдЬреЗрд╡реНрд╣рд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреА YAML рдореНрд╣рдгреВрди рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗрд▓реА рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ рдХреНрд▓рд╕реНрдЯрд░ рдСрдкрд░реЗрдЯрд░рд╕рд╛рдареА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд░рд┐рд╕реЛрд░реНрд╕рдордзреНрдпреЗ рдПрдХ рдХрд┐рдВрд╡рд╛ рджреЛрди рд╕рдВрдЦреНрдпрд╛ рдмрджрд▓рдгреЗ рдЕрддреНрдпрдВрдд рд╕реЛрдкреЗ рд╣реЛрддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рддреЗ рдХрд╕реЗ рд╕реНрдХреЗрд▓ рд╣реЛрддреЗ рддреЗ рдмрджрд▓рддреЗ. рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдкреЙрдбреНрд╕рдЪреНрдпрд╛ рдХреНрд╖реИрддрд┐рдЬ рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧрд╕рд╛рдареА рдПрдХ рдпрдВрддреНрд░рдгрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ, рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрдореА рдЖрдгрд┐ рдЙрдЪреНрдЪ рд╕реНрддрд░рд╛рд╡рд░реАрд▓ рд░рд╣рджрд╛рд░реА рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреИрдирд╛рддреА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдХрд┐рдорд╛рди рдЖрдгрд┐ рдХрдорд╛рд▓ рдХрд┐рддреА рдкреЙрдбреНрд╕ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд рд╣реЗ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬрд░ рддреБрдореНрд╣реА рдПрдЦрд╛рджреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЙрдкрдпреЛрдЬрд┐рдд рдХреЗрд▓реЗ рдЕрд╕реЗрд▓ рдЬреНрдпрд╛рд╕рд╛рдареА рд░рд╣рджрд╛рд░реАрдордзреНрдпреЗ рдЕрдЪрд╛рдирдХ рд╡рд╛рдв рдЭрд╛рд▓реНрдпрд╛рдореБрд│реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖рдорддреЗрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓, рддрд░ 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
- рд╕реБрд░рдХреНрд╖рд╛ рдЖрдгрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди. Kubernetes рдордзреНрдпреЗ рдЧреЛрд╖реНрдЯреА рдХрд╢рд╛ рддреИрдирд╛рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдпрд╛рдЪреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА YAML рдЙрддреНрддрдо рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреБрдордЪрд╛ рд╡рд░реНрдХрд▓реЛрдб рдиреЙрди-рдкреНрд░рд╢рд╛рд╕рдХ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдореНрд╣рдгреВрди рдЪрд╛рд▓рдд рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рд╣реА рдореБрдЦреНрдп рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдВрддрд╛ рдЖрд╣реЗ. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрд╢рд╛ рд╕рд╛рдзрдирд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реВ рд╢рдХрддреЗ
рд╕реНрдкрд░реНрдзрд╛ , 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 рдХреЛрдгрддреНрдпрд╛рд╣реА рдХреНрд▓рд╕реНрдЯрд░рд▓рд╛ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддреНрдпрд╛рд╕рд╣ рд╕рдорд╛рдХрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ рдЬреНрдпрд╛рд╡рд░ рддреЗ рдЪрд╛рд▓рддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬрд░ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ AWS рд╡рд░ Kubernetes рдордзреНрдпреЗ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд╛рд▓рд╡рддреЛ рдЖрдгрд┐ рддреЛ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдЦрд╛рджреНрдпрд╛ рд╕реЗрд╡реЗрджреНрд╡рд╛рд░реЗ рдЙрдШрдб рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ рдЖрдкреЛрдЖрдк рд╕реЗрд╡рд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдорджрдд рдХрд░рддреЛ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
рдирдВрддрд░ рдЖрдореНрд╣реА рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рдХреНрд░реЙрдирдЯреЕрдм рд╕рдВрд╕рд╛рдзрди рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ:
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
рд╣реЗ YAML рдлрд╛рдЗрд▓реНрд╕ рдЖрдгрд┐ рдЧреЛрд▓рдВрдЧ рдХреЛрдбрд╕рд╣ рддреБрдордЪреНрдпрд╛ рдСрдкрд░реЗрдЯрд░рд╕рд╛рдареА рд╕рд░реНрд╡ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рддрдпрд╛рд░ рдХрд░рддреЗ:
.
|____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
рд╡рд┐рдХрд╕рдХрд╛рд▓рд╛ рдЖрдгрдЦреА рдирд┐рдпрдВрддреНрд░рдг рд╣рд╡реЗ рдЕрд╕рд▓реНрдпрд╛рд╕, 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
рдирд╛рд╡рд┐рдиреНрдп
рдЧреЗрд▓реНрдпрд╛ рдХрд╛рд╣реА рд╡рд░реНрд╖рд╛рдВрдордзреНрдпреЗ, рджрд░ рдХрд╛рд╣реА рдорд╣рд┐рдиреНрдпрд╛рдВрдиреА рдкреНрд░рдореБрдЦ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд░рд┐рд▓реАрдЭ рдпреЗрдд рдЖрд╣реЗрдд - рдореНрд╣рдгрдЬреЗрдЪ рд╡рд░реНрд╖рд╛рд▓рд╛ рддреАрди рддреЗ рдЪрд╛рд░ рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЭ. рддреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рдордзреНрдпреЗ рд╕рд╛рджрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдХрдореА рд╣реЛрдд рдирд╛рд╣реА. рд╢рд┐рд╡рд╛рдп, рдпрд╛ рдХрдареАрдг рдХрд╛рд│рд╛рддрд╣реА рдЧрддреА рдХрдореА рд╣реЛрдгреНрдпрд╛рдЪреА рдЪрд┐рдиреНрд╣реЗ рдирд╛рд╣реАрдд - рдЖрддрд╛ рдХрд╛рдп рдкрд░рд┐рд╕реНрдерд┐рддреА рдЖрд╣реЗ рддреЗ рдкрд╣рд╛
рдирд╡реАрди рдХреНрд╖рдорддрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд┐рд╡рд┐рдз рд╡рд░реНрдХрд▓реЛрдбрдордзреНрдпреЗ рдЕрдзрд┐рдХ рд▓рд╡рдЪрд┐рдХрдкрдгреЗ рдХреНрд▓рд╕реНрдЯрд░ рдСрдкрд░реЗрд╢рдиреНрд╕ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдкреНрд░реЛрдЧреНрд░реЕрдорд░ рдереЗрдЯ рдЙрддреНрдкрд╛рджрдирд╛рд╡рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреИрдирд╛рдд рдХрд░рддрд╛рдирд╛ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдгрд╛рдЪрд╛ рдЖрдирдВрдж рдШреЗрддрд╛рдд.
рд╕рдореБрджрд╛рдп
рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреНрдпрд╛ рд▓реЛрдХрдкреНрд░рд┐рдпрддреЗрдЪрд╛ рдЖрдгрдЦреА рдПрдХ рдкреНрд░рдореБрдЦ рдкреИрд▓реВ рдореНрд╣рдгрдЬреЗ рддреНрдпрд╛рдЪреНрдпрд╛ рд╕рдореБрджрд╛рдпрд╛рдЪреА рддрд╛рдХрдж. 2015 рдордзреНрдпреЗ, рдЖрд╡реГрддреНрддреА 1.0 рд╡рд░ рдкреЛрд╣реЛрдЪрд▓реНрдпрд╛рд╡рд░, Kubernetes рдиреЗ рдкреНрд░рд╛рдпреЛрдЬрд┐рдд рдХреЗрд▓реЗ
рд╡рд┐рд╡рд┐рдз рд╕рдореБрджрд╛рдп рджреЗрдЦреАрд▓ рдЖрд╣реЗрдд
рдХреНрд▓рд╛рдЙрдб рдиреЗрдЯрд┐рд╡реНрд╣ рдлрд╛рдЙрдВрдбреЗрд╢рди CloudNativeCon/KubeCon рдЪреЗ рдЖрдпреЛрдЬрди рджреЗрдЦреАрд▓ рдХрд░рддреЗ, рдЬреЗ рд▓реЗрдЦрдирд╛рдЪреНрдпрд╛ рд╡реЗрд│реА рдЬрдЧрд╛рддреАрд▓ рд╕рд░реНрд╡рд╛рдд рдореЛрдареА рдореБрдХреНрдд рд╕реНрд░реЛрдд рдкрд░рд┐рд╖рдж рдЖрд╣реЗ. рд╕рд╛рдорд╛рдиреНрдпрдд: рд╡рд░реНрд╖рд╛рддреВрди рддреАрди рд╡реЗрд│рд╛ рдЖрдпреЛрдЬрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рддреЗ рд╣рдЬрд╛рд░реЛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХрд╛рдВрдирд╛ рдПрдХрддреНрд░ рдЖрдгрддреЗ рдЬреНрдпрд╛рдВрдирд╛ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЖрдгрд┐ рддреНрдпрд╛рдЪреА рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рд╕реБрдзрд╛рд░рд╛рдпрдЪреА рдЖрд╣реЗ, рддрд╕реЗрдЪ рджрд░ рддреАрди рдорд╣рд┐рдиреНрдпрд╛рдВрдиреА рджрд┐рд╕рдгрд╛рд░реА рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рд╢рд┐рдХрд╛рдпрдЪреА рдЖрд╣реЗрдд.
рд╢рд┐рд╡рд╛рдп, рдХреНрд▓рд╛рдЙрдб рдиреЗрдЯрд┐рд╡реНрд╣ рдлрд╛рдЙрдВрдбреЗрд╢рдирдХрдбреЗ рдЖрд╣реЗ
рд╢реЗрд╡рдЯреА, рдорд╛рдЭрд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЖрд╣реЗ рдХреА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд╣реЗ рд╕рдВрдкреВрд░реНрдг рд╕рдореБрджрд╛рдпрд╛рдЪреНрдпрд╛ рдЬрд╛рдгреАрд╡рдкреВрд░реНрд╡рдХ рдкреНрд░рдпрддреНрдирд╛рдВрд╢рд┐рд╡рд╛рдп рддрд┐рддрдХреЗ рдпрд╢рд╕реНрд╡реА рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА, рдЬрд┐рдереЗ рд▓реЛрдХ рдПрдХрддреНрд░ рд░рд╛рд╣рддрд╛рдд рдкрд░рдВрддреБ рддреНрдпрд╛рдЪ рд╡реЗрд│реА рдирд╡реАрди рд▓реЛрдХрд╛рдВрдЪреЗ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛рдд.
рднрд╡рд┐рд╖реНрдп
рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдирд╛ рднрд╡рд┐рд╖реНрдпрд╛рдд рдЬреНрдпрд╛ рдореБрдЦреНрдп рдЖрд╡реНрд╣рд╛рдирд╛рдВрдирд╛ рд╕рд╛рдореЛрд░реЗ рдЬрд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓ рддреЗ рдореНрд╣рдгрдЬреЗ рдХреЛрдбрдЪреНрдпрд╛ рддрдкрд╢реАрд▓рд╛рдВрд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛, рдЖрдгрд┐ рддреЛ рдЬреНрдпрд╛ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдордзреНрдпреЗ рдЪрд╛рд▓рддреЛ рддреНрдпрд╛рд╡рд░ рдирд╛рд╣реА. рд╣реЗ рдпрд╛ рдЯреНрд░реЗрдВрдбрдЪреА рдкреВрд░реНрддрддрд╛ рдХрд░рддреЗ
рдпрд╛ рд▓реЗрдЦрд╛рдд, рдЖрдореНрд╣реА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреНрдпрд╛ рд╕рджреНрдп рд╕реНрдерд┐рддреАрдЪрд╛ рдлрдХреНрдд рдкреГрд╖реНрдарднрд╛рдЧ рд╕реНрдХреНрд░реЕрдЪ рдХреЗрд▓рд╛ рдЖрд╣реЗтАФрдЦрд░реЗрддрд░, рддреЗ рдлрдХреНрдд рд╣рд┐рдордЦрдВрдбрд╛рдЪреЗ рдЯреЛрдХ рдЖрд╣реЗ. Kubernetes рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдХрдбреЗ рдЗрддрд░ рдЕрдиреЗрдХ рд╕рдВрд╕рд╛рдзрдиреЗ, рдХреНрд╖рдорддрд╛ рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЖрд╣реЗрдд.
рд╕реНрддреНрд░реЛрдд: www.habr.com