рд╣реЗ рд╣рдмрд░!
рдЧрд░реНрдорд┐рдпреЛрдВ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ
рдкрдврд╝рдиреЗ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ!
рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рдЙрдореНрд░ рд▓рдЧрднрдЧ рд╣реИред
рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рд╣реБрдИ; рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ 2007 рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЗрддрдирд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдХреНрдпреЛрдВ рд╣реИ, рдЖрдЗрдП рдХреБрдЫ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдХрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╕рд╣рдордд рд╣реЛ рдкрд╛рдП рдереЗ рдХрд┐ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП? рдЖрдк рдРрд╕реЗ рдХрд┐рддрдиреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдП рдЧрдП рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рдЖрдЬ рдРрд╕реЗ рдХрд┐рддрдиреЗ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рд╢рд╛рд╕рдХ рд╣реИрдВ рдЬреЛ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрддреЗ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ? рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрди рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдЦреЗрдВрдЧреЗред
YAML рдХреЗ рд░реВрдк рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪрд╛
рдХрдардкреБрддрд▓реА рдФрд░ рд╢реЗрдл рд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рддрдХ рдЪрд▓реА рдЧрдИ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ "рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ" рд╕реЗ "рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ" рдХреА рдУрд░ рдмрдврд╝рдирд╛ рдерд╛ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╡рд╛рдИрдПрдПрдордПрд▓ рдХреА рддрд░рд╣ред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рд╕рднреА рд╕рдВрд╕рд╛рдзрди, рдЬрд┐рд╕рдореЗрдВ рдкреЙрдбреНрд╕, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рддреИрдирд╛рдд рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕, рд╡реЙрд▓реНрдпреВрдо рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдХреЛ YAML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
apiVersion: v1
kind: Pod
metadata:
name: site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
рдпрд╣ рджреГрд╢реНрдп DevOps рдпрд╛ SRE рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрднрд╛рд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рд▓рд╛рднреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- GitOps рдпрд╛ Git рдСрдкрд░реЗрд╢рдВрд╕ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдгред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рд╕рднреА Kubernetes YAML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХрдм рдХрд┐рдпрд╛ рдЧрдпрд╛, рдХрд┐рд╕рдиреЗ рдХрд┐рдпрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рд╛ред рдЗрд╕рд╕реЗ рдкреВрд░реЗ рд╕рдВрдЧрдарди рдореЗрдВ рдкрд░рд┐рдЪрд╛рд▓рди рдХреА рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдмрдврд╝рддреА рд╣реИ рдФрд░ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рджреВрд░ рдХрд░рдХреЗ рдкрд░рд┐рдЪрд╛рд▓рди рджрдХреНрд╖рддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд╣рд╛рдБ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдХреА рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдХреЗрд╡рд▓ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЛ рдорд░реНрдЬ рдХрд░рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
- рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреАред рдЬрдм рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ YAML рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреНрд▓рд╕реНрдЯрд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рдПрдХ рдпрд╛ рджреЛ рдирдВрдмрд░ рдмрджрд▓рдирд╛ рдмреЗрд╣рдж рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕рдХреЗ рдкреИрдорд╛рдиреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрддрд╛ рд╣реИред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреЙрдбреНрд╕ рдХреЗ рдХреНрд╖реИрддрд┐рдЬ рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд╕рд╛рдиреА рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗ рдирд┐рдореНрди рдФрд░ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкреЙрдбреНрд╕ рдХреА рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХрд┐рддрдиреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдиреЗ рдХреЛрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдлрд╝рд┐рдХ рдореЗрдВ рдЕрдЪрд╛рдирдХ рд╡реГрджреНрдзрд┐ рдХреЗ рдХрд╛рд░рдг рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдХреНрд╕рд░реЗрдкреНрд▓рд┐рдХрд╛рдЬрд╝ рдХреЛ 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 рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░рдореБрдЦ рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрднрд╛рд░ рдЧреИрд░-рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЬреИрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ
рд╕рдВрдШрд░реНрд╖ , ╨▓╨░╨╗╨╕╨┤╨░╤В╨╛╤А YAML/JSON, ╨┐╨╗╤О╤БрдУрдкрди рдкреЙрд▓рд┐рд╕реА рдПрдЬреЗрдВрдЯ , рд╕рдВрджрд░реНрдн рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреАрддрд┐ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рд╕реБрд░рдХреНрд╖рд╛ рд╕рдВрджрд░реНрдн рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрднрд╛рд░ рдХрдВрдЯреЗрдирд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХреАрдп рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╕рд░рд▓ рдиреАрддрд┐ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВрд░реЗрдЧреЛ , рдЗрд╕ рдХрджрд░:
package main
deny[msg] {
input.kind = "Deployment"
not input.spec.template.spec.securityContext.runAsNonRoot = true
msg = "Containers must not run as root"
}
- рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рд╡рд┐рдХрд▓реНрдкред рдЖрдЬ рдХреА рдЙрдЪреНрдЪ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдореЗрдВ рд╕рдмрд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реБрдЭрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛рдУрдВ рдкрд░ рд╡рд░реНрдХрд▓реЛрдб рдЪрд▓рд╛рдирд╛ рд╣реИред рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдмрд╛рджрд▓-рдкреНрд░рджрд╛рддрд╛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХрд┐рд╕реА рднреА рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдЙрд╕ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд╣ рдЪрд▓рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ AWS рдкрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИLoadBalancer
рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛рдЕрдореЗрдЬрд╝реЕрди рдЗрд▓рд╛рд╕реНрдЯрд┐рдХ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреЙрдбреНрд╕ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рд╡рд┐рд╕реНрддрд╛рд░
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдмрд╣реБрдд рд╡рд┐рд╕реНрддрд╛рд░ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреИрд╕реЗ рдкреЙрдб, рдкрд░рд┐рдирд┐рдпреЛрдЬрди, 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
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрдерди рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИред
рд╕рдореБрджрд╛рдп рдореЗрдВ рдРрд╕реЗ рдХрдИ рдЙрдкрдХрд░рдг рд╣реИрдВ рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ -
$ 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
рдлрд┐рд░ рдЖрдк рдЗрд╕ рддрд░рд╣ рдЖрд╡рд╢реНрдпрдХ рдПрдкреАрдЖрдИ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
$ 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 рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рдкреНрд░рд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рд╡рд╣рд╛рдБ рд╡рд┐рднрд┐рдиреНрди рд╕рдореБрджрд╛рдп рднреА рд╣реИрдВ
рдХреНрд▓рд╛рдЙрдб рдиреЗрдЯрд┐рд╡ рдлрд╝рд╛рдЙрдВрдбреЗрд╢рди CloudNativeCon/KubeCon рдХреА рднреА рдореЗрдЬрдмрд╛рдиреА рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рджреБрдирд┐рдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдУрдкрди рд╕реЛрд░реНрд╕ рд╕рдореНрдореЗрд▓рди рд╣реИред рдЖрдо рддреМрд░ рдкрд░ рд╕рд╛рд▓ рдореЗрдВ рддреАрди рдмрд╛рд░ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЙрди рд╣рдЬрд╛рд░реЛрдВ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд▓рд╛рддрд╛ рд╣реИ рдЬреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдФрд░ рдЗрд╕рдХреЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╣рд░ рддреАрди рдорд╣реАрдиреЗ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд▓рд╛рдЙрдб рдиреЗрдЯрд┐рд╡ рдлрд╛рдЙрдВрдбреЗрд╢рди рдХреЗ рдкрд╛рд╕ рд╣реИ
рдЕрдВрдд рдореЗрдВ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреВрд░реЗ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рдЪреЗрдд рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЙрддрдирд╛ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ рд▓реЛрдЧ рдПрдХ рд╕рд╛рде рд░рд╣рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдирдП рд▓реЛрдЧреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВред
рдж рдлреНрдпреВрдЪрд░
рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЬрд┐рди рдореБрдЦреНрдп рдЪреБрдиреМрддрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдХреЛрдб рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рди рдХрд┐ рдЙрд╕ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдкрд░ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЪрд▓рддрд╛ рд╣реИред рдпрд╣ рдЗрди рд░реБрдЭрд╛рдиреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдХреЗрд╡рд▓ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреА рд╕рддрд╣ рдХреЛ рдЦрдВрдЧрд╛рд▓рд╛ рд╣реИ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рд╣рд┐рдорд╢реИрд▓ рдХрд╛ рд╕рд┐рд░рд╛ рд╣реИред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдХрдИ рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди, рдХреНрд╖рдорддрд╛рдПрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИрдВред
рд╕реНрд░реЛрдд: www.habr.com