Kubernetes рдордзреНрдпреЗ рдХреЕрдирд░реА рддреИрдирд╛рддреА рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА Gitlab CI рдЖрдгрд┐ рдореЕрдиреНрдпреБрдЕрд▓ GitOps рд╡рд╛рдкрд░реВ.
рдпрд╛ рдорд╛рд▓рд┐рдХреЗрддреАрд▓ рд▓реЗрдЦ:
- (рд╣рд╛ рд▓реЗрдЦ)
ArgoCI рд╡рд╛рдкрд░реВрди рдХреЕрдирд░реА рдЙрдкрдпреЛрдЬрди - Istio рд╡рд╛рдкрд░реВрди рдХреЕрдирд░реА рдЙрдкрдпреЛрдЬрди
- рдЬреЗрдирдХрд┐рдиреНрд╕-рдПрдХреНрд╕ рдЗрд╕реНрдЯрд┐рдУ рдлреНрд▓реЕрдЧрд░ рд╡рд╛рдкрд░реВрди рдХреЕрдирд░реА рдЙрдкрдпреЛрдЬрди
рдЖрдореНрд╣реА GitOps рджреНрд╡рд╛рд░реЗ рдХреЕрдирд░реА рдЙрдкрдпреЛрдЬрди рд╕реНрд╡рд╣рд╕реНрддреЗ рдХрд░реВ рдЖрдгрд┐ рдореБрдЦреНрдп Kubernetes рд╕рдВрд╕рд╛рдзрдиреЗ рддрдпрд╛рд░/рд╕реБрдзрд╛рд░рд┐рдд рдХрд░реВ. рд╣рд╛ рд▓реЗрдЦ рдкреНрд░рд╛рдореБрдЦреНрдпрд╛рдиреЗ рдкрд░рд┐рдЪрдпрд╛рд╕рд╛рдареА рдЖрд╣реЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреЕрдирд░реАрдордзреНрдпреЗ рдЙрдкрдпреЛрдЬрди рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ, рдХрд╛рд░рдг рдСрдЯреЛрдореЗрд╢рдирдЪреНрдпрд╛ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдкрджреНрдзрддреА рдЖрд╣реЗрдд, рдЬреНрдпрд╛рдВрдЪрд╛ рдЖрдкрдг рдкреБрдвреАрд▓ рд▓реЗрдЦрд╛рдВрдордзреНрдпреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ.
рдХреЕрдирд░реА рдЙрдкрдпреЛрдЬрди
рдХреЕрдирд░реА рдзреЛрд░рдгрд╛рд╕рд╣, рдЕрджреНрдпрддрдиреЗ рдкреНрд░рдердо рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХреЗрд╡рд│ рдЙрдкрд╕рдВрдЪрд╛рд╕рд╛рдареА рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЬрд╛рддрд╛рдд. рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ, рд▓реЙрдЧ рдбреЗрдЯрд╛, рдореЕрдиреНрдпреБрдЕрд▓ рдЪрд╛рдЪрдгреА рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдлреАрдбрдмреЕрдХ рдЪреЕрдиреЗрд▓рджреНрд╡рд╛рд░реЗ, рд░рд┐рд▓реАрдЭ рд╕рд░реНрд╡ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рд░рд┐рд▓реАрдЭ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рдЪрд╛рдЪрдгреА рдХреЗрд▓реА рдЬрд╛рддреЗ.
Kubernetes рддреИрдирд╛рддреА (рд░реЛрд▓рд┐рдВрдЧ рдЕрдкрдбреЗрдЯ)
рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯрд╕рд╛рдареА рдбреАрдлреЙрд▓реНрдЯ рдзреЛрд░рдг рд░реЛрд▓рд┐рдВрдЧ-рдЕрдкрдбреЗрдЯ рдЖрд╣реЗ, рдЬреЗрдереЗ рдкреНрд░рддрд┐рдорд╛рдВрдЪреНрдпрд╛ рдирд╡реАрди рдЖрд╡реГрддреНрддреНрдпрд╛рдВрд╕рд╣ рдХрд╛рд╣реА рдкреЙрдбреНрд╕ рд▓рд╛рдБрдЪ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рдЬрд░ рддреЗ рд╕рдорд╕реНрдпрд╛рдВрд╢рд┐рд╡рд╛рдп рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЕрд╕рддреАрд▓ рддрд░, рдкреНрд░рддрд┐рдорд╛рдВрдЪреНрдпрд╛ рдЬреБрдиреНрдпрд╛ рдЖрд╡реГрддреНрддреНрдпрд╛рдВрд╕рд╣ рдкреЙрдбреНрд╕ рд╕рдВрдкреБрд╖реНрдЯрд╛рдд рдЖрдгрд▓реЗ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдирд╡реАрди рд╢реЗрдВрдЧрд╛ рд╕рдорд╛рдВрддрд░ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд.
GitOps
рдЖрдореНрд╣реА рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд GitOps рд╡рд╛рдкрд░рддреЛ рдХрд╛рд░рдг рдЖрдореНрд╣реА:
- рд╕рддреНрдпрд╛рдЪрд╛ рдПрдХ рд╕реНрд░реЛрдд рдореНрд╣рдгреВрди Git рд╡рд╛рдкрд░рдгреЗ
- рдЖрдореНрд╣реА рдмрд┐рд▓реНрдб рдЖрдгрд┐ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯрд╕рд╛рдареА рдЧрд┐рдЯ рдСрдкрд░реЗрд╢рдиреНрд╕ рд╡рд╛рдкрд░рддреЛ (рдЧрд┐рдЯ рдЯреЕрдЧ/рдорд░реНрдЬ рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд рдХреЛрдгрддреНрдпрд╛рд╣реА рдХрдорд╛рдВрдбрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА)
рдЙрджрд╛рд╣рд░рдг:
рдЪрд▓рд╛ рдПрдХ рдЪрд╛рдВрдЧрд▓рд╛ рд╕рд░рд╛рд╡ рдХрд░реВ - рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдбрд╕рд╛рдареА рдПрдХ рднрд╛рдВрдбрд╛рд░ рдЖрдгрд┐ рдПрдХ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрд╕рд╛рдареА.
рдЕрд░реНрдЬ рднрд╛рдВрдбрд╛рд░
рд╣рд╛ рдПрдХ рдЕрддрд┐рд╢рдп рд╕реЛрдкрд╛ рдкрд╛рдпрдерди + рдлреНрд▓рд╛рд╕реНрдХ API рдЖрд╣реЗ рдЬреЛ JSON рдореНрд╣рдгреВрди рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрддреЛ. рдЖрдореНрд╣реА GitlabCI рджреНрд╡рд╛рд░реЗ рдкреЕрдХреЗрдЬ рддрдпрд╛рд░ рдХрд░реВ рдЖрдгрд┐ рдирд┐рдХрд╛рд▓ Gitlab рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдХрдбреЗ рдкрд╛рдард╡реВ. рд░реЗрдЬрд┐рд╕реНрдЯреНрд░реАрдордзреНрдпреЗ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рджреЛрди рднрд┐рдиреНрди рд░рд┐рд▓реАрдЭ рдЖрд╡реГрддреНрддреНрдпрд╛ рдЖрд╣реЗрдд:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
рддреНрдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рдлрд░рдХ рдореНрд╣рдгрдЬреЗ рдкрд░рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ JSON рдлрд╛рдЗрд▓рдордзреАрд▓ рдмрджрд▓. рдЖрдореНрд╣реА рдХреЛрдгрддреНрдпрд╛ рдЖрд╡реГрддреНрддреАрд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдд рдЖрд╣реЛрдд рддреЗ рд╢рдХреНрдп рддрд┐рддрдХреНрдпрд╛ рд╕рд╣рдЬрддреЗрдиреЗ рджреГрд╢реНрдпрдорд╛рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рд╣рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рдкрд░рддреЛ.
рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреЗ рднрд╛рдВрдбрд╛рд░
рдпрд╛ рд╕рд▓рдЧрдо рдирд╛рд╡рд╛рдиреЗ рдЖрдореНрд╣реА рдЧрд┐рдЯрд▓реЕрдмрд╕реАрдЖрдп рдорд╛рд░реНрдЧреЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдкрд░реНрдпрдВрдд рддреИрдирд╛рдд рдХрд░реВ, .gitlab-ci.yml
рдЕрд╕реЗ рджрд┐рд╕рддреЗ:
image: traherom/kustomize-docker
before_script:
- printenv
- kubectl version
stages:
- deploy
deploy test:
stage: deploy
before_script:
- echo $KUBECONFIG
script:
- kubectl get all
- kubectl apply -f i/k8s
only:
- master
рддреЗ рд╕реНрд╡рддрдГ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдХреНрд▓рд╕реНрдЯрд░рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓, рддреБрдореНрд╣реА Gcloud рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛:
gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80
рдЖрдкрдг рдХрд╛рдЯрд╛ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ KUBECONFIG
GitlabCI рдордзреНрдпреЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢рд╛рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЕрд╕реЗрд▓ kubectl
рддреБрдордЪреНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░рд▓рд╛.
рдХреНрд▓рд╕реНрдЯрд░ (GCloud) рд╕рд╛рдареА рдХреНрд░реЗрдбреЗрдиреНрд╢рд┐рдпрд▓ рдХрд╕реЗ рдорд┐рд│рд╡рд╛рдпрдЪреЗ рдпрд╛рдмрджреНрджрд▓ рддреБрдореНрд╣реА рд╡рд╛рдЪреВ рд╢рдХрддрд╛
рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдпрд╛рдорд▓
рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реАрдордзреНрдпреЗ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╕реЗрд╡рд╛ рдЖрд╣реЗ:
apiVersion: v1
kind: Service
metadata:
labels:
id: app
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
рдЖрдгрд┐ рдордзреНрдпреЗ рддреИрдирд╛рдд deploy.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 10
selector:
matchLabels:
id: app
type: main
template:
metadata:
labels:
id: app
type: main
spec:
containers:
- image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
name: app
resources:
limits:
cpu: 100m
memory: 100Mi
рдЖрдгрд┐ рдордзреНрдпреЗ рдЖрдгрдЦреА рдПрдХ рддреИрдирд╛рддреА deploy-canary.yaml
:
kind: Deployment
metadata:
name: app-canary
spec:
replicas: 0
selector:
matchLabels:
id: app
type: canary
template:
metadata:
labels:
id: app
type: canary
spec:
containers:
- image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
name: app
resources:
limits:
cpu: 100m
memory: 100Mi
рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рдЕреЕрдк-рдбрд┐рдкреНрд▓реЙрдпрдордзреНрдпреЗ рдЕрджреНрдпрд╛рдк рдХреЛрдгрддреАрд╣реА рдкреНрд░рддрд┐рдХреГрддреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓реА рдирд╛рд╣реА.
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддреИрдирд╛рддреА рдХрд░рдд рдЖрд╣реЗ
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЙрдкрдпреЛрдЬрди рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦреЗрд╡рд░ GitlabCI рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЕрдиреНрдпреБрдЕрд▓реА рд╕реБрд░реВ рдХрд░реВ рд╢рдХрддрд╛. рддреНрдпрд╛рдирдВрддрд░ kubectl
рдЦрд╛рд▓реАрд▓ рдЖрдЙрдЯрдкреБрдЯ рдкрд╛рд╣рд┐рдЬреЗ:
рдЖрдореНрд╣реА рддреЗ рдкрд╛рд╣реВ app
10 рдкреНрд░рддрд┐рдХреГрддреА рдЖрдгрд┐ 0 рд╕рд╣ рдЕреЕрдк-рдХреЕрдирд░реА рддреИрдирд╛рдд. рдПрдХ рд▓реЛрдбрдмреЕрд▓рдиреНрд╕рд░ рджреЗрдЦреАрд▓ рдЖрд╣реЗ рдЬреНрдпрд╛рддреВрди рдЖрдореНрд╣реА рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рд╢рдХрддреЛ curl
рдмрд╛рд╣реНрдп IP рджреНрд╡рд╛рд░реЗ:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
рдЖрдореНрд╣реА рдкрд╛рд╣рддреЛ рдХреА рдЖрдордЪрд╛ рдЪрд╛рдЪрдгреА рдЕрд░реНрдЬ рдлрдХреНрдд "v1" рдкрд░рдд рдХрд░рддреЛ.
рдХреЕрдирд░реА рддреИрдирд╛рддреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ
рдкрд╛рдпрд░реА 1: рдХрд╛рд╣реА рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдирд╡реАрди рдЖрд╡реГрддреНрддреА рд░рд┐рд▓реАрдЬ рдХрд░рд╛
рдЖрдореНрд╣реА deploy-canary.yaml рдлрд╛рдЗрд▓ рдЖрдгрд┐ рдирд╡реАрди рдЖрд╡реГрддреНрддреА рдЗрдореЗрдЬрдордзреНрдпреЗ рдкреНрд░рддрд┐рдХреГрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ 1 рд╡рд░ рд╕реЗрдЯ рдХреЗрд▓реА рдЖрд╣реЗ:
kind: Deployment
metadata:
name: app-canary
spec:
replicas: 1
selector:
matchLabels:
id: app
type: canary
template:
metadata:
labels:
id: app
type: canary
spec:
containers:
- image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
name: app
resources:
limits:
cpu: 100m
memory: 100Mi
рдлрд╛рдИрд▓рдордзреНрдпреЗ deploy.yaml
рдЖрдореНрд╣реА рдкреНрд░рддрд┐рдХреГрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ 9 рд╡рд░ рдмрджрд▓рд▓реА:
kind: Deployment
metadata:
name: app
spec:
replicas: 9
selector:
matchLabels:
id: app
...
рдЖрдореНрд╣реА рд╣реЗ рдмрджрд▓ рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдордзреНрдпреЗ рдврдХрд▓рддреЛ рдЬрд┐рдереВрди рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕реБрд░реВ рд╣реЛрдИрд▓ (GitlabCI рдорд╛рд░реНрдЧреЗ) рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдо рдореНрд╣рдгреВрди рдкрд╣рд╛:
рдЖрдордЪреА рд╕реЗрд╡рд╛ рджреЛрдиреНрд╣реА рдЙрдкрдпреЛрдЬрдирд╛рдВрдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░реЗрд▓, рдХрд╛рд░рдг рджреЛрдиреНрд╣реАрдХрдбреЗ рдЕреЕрдк рдирд┐рд╡рдбрдХ рдЖрд╣реЗ. Kubernetes рдЪреНрдпрд╛ рдбреАрдлреЙрд▓реНрдЯ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрд░рдгрд╛рдореБрд│реЗ, рдЖрдореНрд╣рд╛рд▓рд╛ ~10% рд╡рд┐рдирдВрддреНрдпрд╛рдВрдирд╛ рднрд┐рдиреНрди рдкреНрд░рддрд┐рд╕рд╛рдж рджрд┐рд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗрдд:
рдЖрдордЪреНрдпрд╛ рдЕрд░реНрдЬрд╛рдЪреА рд╕рджреНрдп рд╕реНрдерд┐рддреА (GitOps, Git рдордзреВрди рд╕рддреНрдпрд╛рдЪрд╛ рдПрдХрдЪ рд╕реНрд░реЛрдд рдореНрд╣рдгреВрди рдШреЗрддрд▓реЗрд▓реА) рд╕рдХреНрд░рд┐рдп рдкреНрд░рддрд┐рдХреГрддреА рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рджреЛрди рдЙрдкрдпреЛрдЬрдирд╛рдВрдЪреА рдЙрдкрд╕реНрдерд┐рддреА рдЖрд╣реЗ, рдкреНрд░рддреНрдпреЗрдХ рдЖрд╡реГрддреНрддреАрд╕рд╛рдареА рдПрдХ.
~ 10% рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдирд╡реАрди рдЖрд╡реГрддреНрддреАрд╢реА рдкрд░рд┐рдЪрд┐рдд рд╣реЛрддрд╛рдд рдЖрдгрд┐ рдЕрдирд╛рд╡рдзрд╛рдирд╛рдиреЗ рддреНрдпрд╛рдЪреА рдЪрд╛рдЪрдгреА рдШреЗрддрд╛рдд. рд╕рдорд╕реНрдпрд╛ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рд▓реЙрдЧ рдЖрдгрд┐ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдбреЗрдЯрд╛рдордзреАрд▓ рддреНрд░реБрдЯреА рддрдкрд╛рд╕рдгреНрдпрд╛рдЪреА рд╣реАрдЪ рд╡реЗрд│ рдЖрд╣реЗ.
рдкрд╛рдпрд░реА 2: рд╕рд░реНрд╡ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдирд╡реАрди рдЖрд╡реГрддреНрддреА рд░рд┐рд▓реАрдЬ рдХрд░рд╛
рдЖрдореНрд╣реА рдард░рд╡рд▓реЗ рдХреА рд╕рд░реНрд╡ рдХрд╛рд╣реА рдареАрдХ рдЭрд╛рд▓реЗ рдЖрдгрд┐ рдЖрддрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдирд╡реАрди рдЖрд╡реГрддреНрддреА рдЖрдгрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдлрдХреНрдд рдЕрдкрдбреЗрдЯ рдХрд░рддреЛ deploy.yaml
рдкреНрд░рддрд┐рдореЗрдЪреА рдирд╡реАрди рдЖрд╡реГрддреНрддреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдкреНрд░рддрд┐рдХреГрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ 10 рдЪреНрдпрд╛ рд╕рдорд╛рди рдЖрд╣реЗ. рдордзреНрдпреЗ deploy-canary.yaml
рдЖрдореНрд╣реА рдкреНрд░рддрд┐рдХреГрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдкрд░рдд 0 рд╡рд░ рд╕реЗрдЯ рдХреЗрд▓реА. рдЙрдкрдпреЛрдЬрди рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдкрд░рд┐рдгрд╛рдо рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдЕрд╕реЗрд▓:
рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА
рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА, рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдореЕрдиреНрдпреБрдЕрд▓реА рдЪрд╛рд▓рд╡рдгреЗ рд╣реЗ k8s рд╡рд╛рдкрд░реВрди рдХрд┐рддреА рд╕рд╣рдЬрдкрдгреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рд╣реЗ рд╕рдордЬрдгреНрдпрд╛рд╕ рдорджрдд рдХрд░рддреЗ. Kubernetes рддреБрдореНрд╣рд╛рд▓рд╛ API рджреНрд╡рд╛рд░реЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рдЕрдкрдбреЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрдд тАЛтАЛрдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдпрд╛ рдкрд╛рдпрд▒реНрдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрджреНрд╡рд╛рд░реЗ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрддрд╛рдд.
рджреБрд╕рд░реА рдЧреЛрд╖реНрдЯ рдЬреА рд▓рд╛рдЧреВ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рддреА рдореНрд╣рдгрдЬреЗ рдЯреЗрд╕реНрдЯрд░ рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ (рд▓реЛрдбрдмреЕрд▓рдиреНрд╕рд░ рдХрд┐рдВрд╡рд╛ рдЗрдВрдЧреНрд░реЗрд╕рджреНрд╡рд╛рд░реЗ) рдЬреНрдпрд╛рджреНрд╡рд╛рд░реЗ рдХреЗрд╡рд│ рдирд╡реАрди рдЖрд╡реГрддреНрддреАрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рд╣реЗ рдореЕрдиреНрдпреБрдЕрд▓ рдмреНрд░рд╛рдЙрдЭрд┐рдВрдЧрд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.
рднрд╡рд┐рд╖реНрдпрд╛рддреАрд▓ рд▓реЗрдЦрд╛рдВрдордзреНрдпреЗ, рдЖрдореНрд╣реА рдЗрддрд░ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдЙрдкрд╛рдп рддрдкрд╛рд╕реВ рдЬреЗ рдЖрдореНрд╣реА рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмрд╣реБрддреЗрдХ рдЧреЛрд╖реНрдЯреАрдВрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рддрд╛рдд.
рдЖрдордЪреНрдпрд╛ рдмреНрд▓реЙрдЧрд╡рд░реАрд▓ рдЗрддрд░ рд▓реЗрдЦ рджреЗрдЦреАрд▓ рд╡рд╛рдЪрд╛:
рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕рдордзреВрди рдЕрдзрд┐рдХреГрддрддреЗрд╢рд┐рд╡рд╛рдп рдХреНрд▓рд┐рдХрд╣рд╛рдКрд╕рдордзреНрдпреЗ рдЕрдзрд┐рдХреГрддрддреЗрд╕рд╣ рд╕реНрдерд▓рд╛рдВрддрд░ рдХреЗрд▓реНрдпрд╛рдиреЗ рдХрд╛рдп рдЭрд╛рд▓реЗ? Nginx рд╕рд╛рдареА рдбрд╛рдпрдиреЕрдорд┐рдХ рдореЙрдбреНрдпреВрд▓ рддрдпрд╛рд░ рдХрд░рдгреЗ nxs-build-tools рдЕрдкрдбреЗрдЯ рдХрд░рд╛ - deb рдЖрдгрд┐ rpm рдкреЕрдХреЗрдЬреЗрд╕ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рд╕рд╣рд╛рдпреНрдпрдХ Hashicorp Consul рдЪреНрдпрд╛ Kubernetes Authorization рдЪрд╛ рдкрд░рд┐рдЪрдп Csync2 рдпреБрдЯрд┐рд▓рд┐рдЯреА рд╡рд╛рдкрд░рддрд╛рдирд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рд╕рд╛рдореЛрд░реЗ рдЬрд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ рд░реЗрдбрдорд╛рдЗрдирд╕рд╛рдареА рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ. рд╕реНрд╡рддрдГрд╕рд╛рдареА рдЖрдгрд┐ рдЗрддрд░рд╛рдВрд╕рд╛рдареА рдЬреАрд╡рди рдХрд╕реЗ рд╕реЛрдкреЗ рдХрд░рд╛рд╡реЗ
рд╕реНрддреНрд░реЛрдд: www.habr.com