рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд░ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо k8s-рдореВрд▓ Argo рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ GitlabCI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
рдЗрд╕ рд╢реГрдВрдЦрд▓рд╛ рдХреЗ рд▓реЗрдЦ
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ #1 рдореЗрдВ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди: рдЧрд┐рдЯрд▓реИрдм рд╕реАрдЖрдИ - (рдпрд╣ рд▓реЗрдЦ)
- рдЗрд╕реНрддрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди
- рдЬреЗрдирдХрд┐рдВрд╕-рдПрдХреНрд╕ рдЗрд╕реНрддрд┐рдпреЛ рдлрд╝реНрд▓реИрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди
рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди
рд╣рдореЗрдВ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрдврд╝реЗрдВрдЧреЗ
рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕
рдЕрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдПрдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рджреЗрд╢реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдирд┐рдпрдВрддреНрд░рдХ рд╣реИред рдпрд╣ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдЖрд░рдбреА (рдХрд╕реНрдЯрдо рд░рд┐рд╕реЛрд░реНрд╕ рдбреЗрдлрд┐рдирд┐рд╢рди) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдПрдХ рдирдИ рдЗрдХрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: Rollout
, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдиреАрд▓реЗ-рд╣рд░реЗ рдФрд░ рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред
рдХрд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрди рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЖрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯ рдирд┐рдпрдВрддреНрд░рдХ
Rollout,
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмреНрд▓реВ-рдЧреНрд░реАрди рдФрд░ рдХреИрдирд░реА рдЬреИрд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рддреИрдирд╛рддреА рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рдВрд╕рд╛рдзрдиRollout
рд╕рдордХрдХреНрд╖ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИDeployment
, рдХреЗрд╡рд▓ рдЕрддрд┐рд░рд┐рдХреНрдд рддреИрдирд╛рддреА рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред
рд╕рдВрд╕рд╛рдзрдиDeployments
рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рджреЛ рд░рдгрдиреАрддрд┐рдпрд╛рдБ рд╣реИрдВ:RollingUpdate
╨╕Recreate
. рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпреЗ рд░рдгрдиреАрддрд┐рдпрд╛рдБ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рдмрд╣реБрдд рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╕рд░реНрд╡рд░ рдкрд░ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП, рдЕрддрд┐рд░рд┐рдХреНрдд рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдиреАрд▓рд╛-рд╣рд░рд╛ рдпрд╛ рдХреИрдирд░реА, рдЬреЛ рддреИрдирд╛рддреА рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЗрди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреА рддреИрдирд╛рддреА рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреА рдкрдбрд╝рддреА рдереАред рдЖрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдЗрди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рд╕рд░рд▓, рдШреЛрд╖рдгрд╛рддреНрдордХ, рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред
https://argoproj.github.io/argo-rollouts
рдЗрд╕рдореЗрдВ рдЕрд░реНрдЧреЛ рд╕реАрдЖрдИ рднреА рд╣реИ, рдЬреЛ рд░реЛрд▓рдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЙрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗред
рдЖрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб
kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml
рд╣рдорд╛рд░реЗ рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╢рд▓рдЬрдо рдореЗрдВ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ) рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА install.yaml рдХреЛ i/k8s/argo-rollouts/install.yaml рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ GitlabCI рдЗрд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рджреЗрдЧрд╛ред
рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб (kubectl рдкреНрд▓рдЧрдЗрди)
рдЙрджрд╛рд╣рд░рдг рдЖрд╡реЗрджрди
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред
рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рднрдВрдбрд╛рд░
рдХрд┐рдо рд╡реБрдПрд╕реНрдЯрдХреИрдВрдк/k8s-рддреИрдирд╛рддреА-рдЙрджрд╛рд╣рд░рдг-рдРрдк
рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ Python+Flask API рд╣реИ рдЬреЛ JSON рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИред рд╣рдо GitlabCI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ Gitlab рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкрд░ рднреЗрдЬреЗрдВрдЧреЗред рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ:
- wuestkamp/k8s-рддреИрдирд╛рддреА-рдЙрджрд╛рд╣рд░рдг-рдРрдк:v1
- wuestkamp/k8s-рддреИрдирд╛рддреА-рдЙрджрд╛рд╣рд░рдг-рдРрдк:v2
рдЙрдирдХреЗ рдмреАрдЪ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рд▓реМрдЯрд╛рдИ рдЧрдИ JSON рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрдерд╛рд╕рдВрднрд╡ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЕрд╡рд╕рдВрд░рдЪрдирд╛ рднрдВрдбрд╛рд░
рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣рдо рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд░ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП GitlabCI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, .gitlab-ci.yml рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
image: traherom/kustomize-dockerbefore_script:
- printenv
- kubectl versionstages:
- deploydeploy 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
рдЖрдкрдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП.
рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдпрдорд▓
рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рднрдВрдбрд╛рд░ рдХреЗ рдЕрдВрджрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реЗрд╡рд╛ рд╣реИ:
apiVersion: v1
kind: Service
metadata:
labels:
id: rollout-canary
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
рдФрд░ рд░реЛрд▓рдЖрдЙрдЯ.yaml:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: rollout-canary
spec:
replicas: 10
revisionHistoryLimit: 2
selector:
matchLabels:
id: rollout-canary
template:
metadata:
labels:
id: rollout-canary
spec:
containers:
- name: rollouts-demo
image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
imagePullPolicy: Always
strategy:
canary:
steps:
- setWeight: 10
# Rollouts can be manually resumed by running `kubectl argo rollouts promote ROLLOUT`
- pause: {}
- setWeight: 50
- pause: { duration: 120 } # two minutes
Rollout
рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд╕рдорд╛рди рд╣реА рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдПрдХ рдЕрджреНрдпрддрди рд░рдгрдиреАрддрд┐ (рдпрд╣рд╛рдВ рдХреИрдирд░реА рдХреА рддрд░рд╣) рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реЛрд▓рд┐рдВрдЧ-рдЕрдкрдбреЗрдЯ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧреАред
рд╣рдо рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП yaml рдореЗрдВ рджреЛ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
- рдХреИрдирд░реА рдХреЗ рд▓рд┐рдП 10% рдЯреНрд░реИрдлрд╝рд┐рдХ (рдореИрдиреБрдЕрд▓ рдУрдХреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ)
- рдХреИрдирд░реА рдХреЗ рд▓рд┐рдП 50% рдЯреНрд░реИрдлрд╝рд┐рдХ (2 рдорд┐рдирдЯ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдлрд┐рд░ 100% рддрдХ рдЬрд╛рд░реА рд░рдЦреЗрдВ)
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рд╕рдВрд╕рд╛рдзрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреЗ:
рдФрд░ рд╣рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╣реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИ:
рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛
рдЪрд░рдг 1: 10% рдЯреНрд░реИрдлрд╝рд┐рдХ
рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдмрд╕ рдЫрд╡рд┐ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЖрдорддреМрд░ рдкрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВ:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: rollout-canary
spec:
...
template:
metadata:
labels:
id: rollout-canary
spec:
containers:
- name: rollouts-demo
image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
...
рдФрд░ рд╣рдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП Gitlab CI рддреИрдирд╛рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрддреЗ рд╣реИрдВ:
рдЕрдм рдпрджрд┐ рд╣рдо рд╕реЗрд╡рд╛ рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╣реИрдВ:
рдорд╣рд╛рди! рд╣рдо рдЕрдкрдиреА рдХреИрдирд░реА рддреИрдирд╛рддреА рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реИрдВред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд▓рд╛рдХрд░ рдкреНрд░рдЧрддрд┐ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
kubectl argo rollouts get rollout rollout-canary
рдЪрд░рдг 2: 50% рдЯреНрд░реИрдлрд╝рд┐рдХ:
рдЕрдм рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ: 50% рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ред рд╣рдордиреЗ рдЗрд╕ рдЪрд░рдг рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ:
kubectl argo rollouts promote rollout-canary # continue to step 2
рдФрд░ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ 50% рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рд▓реМрдЯрд╛рдИрдВ:
рдФрд░ рд░реЛрд▓рдЖрдЙрдЯ рд╕рдореАрдХреНрд╖рд╛:
рдареАрдХред
рдЪрд░рдг 3: 100% рдЯреНрд░реИрдлрд╝рд┐рдХ:
рд╣рдордиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ 2 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж 50% рдЪрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 100% рдЪрд░рдг рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдЙрдЯрдкреБрдЯ:
рдФрд░ рд░реЛрд▓рдЖрдЙрдЯ рд╕рдореАрдХреНрд╖рд╛:
рдХреИрдирд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреВрд░реНрдг рд╣реЛ рдЧрдпрд╛ рд╣реИ.
рдЖрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдВ рдФрд░ рднреА рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдХреИрдирд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдФрд░ рддреБрд▓рдирд╛ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ:
рдЖрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдФрд░ рдЖрд░реНрдЧреЛ рд╕реАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реАрдбрд┐рдпреЛ
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╡реАрдбрд┐рдпреЛ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдФрд░ рдЖрд░реНрдЧреЛ рд╕реАрдЖрдИ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:
рд╕рдВрдкреВрд░реНрдг
рдореБрдЭреЗ рд╕реАрдЖрд░рдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рд╣реИ рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХрд╛рд░ рдХреА рддреИрдирд╛рддреА рдпрд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реЗрдЯ, рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдЯреНрд░реИрдлрд╝рд┐рдХ рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реБрдЪрд╛рд░реБ рд░реВрдк рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ. рдЖрдЧреЗ рдореИрдВ рдЕрд░реНрдЧреЛ рд╕реАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЕрд░реНрдЧреЛ рд╕реАрдЖрдИ рдФрд░ рдлреНрд▓рдХреНрд╕ рд╕реАрдЖрдИ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╡рд┐рд▓рдп рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдирдИ рд░рд┐рд▓реАрдЬрд╝ рдЖрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ:
рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЖрд░реНрдЧреЛ рд░реЛрд▓рдЖрдЙрдЯреНрд╕ рдпрд╛ рдЖрд░реНрдЧреЛ рд╕реАрдЖрдИ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдиреБрднрд╡ рд╣реИ?
рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рдЕрдиреНрдп рд▓реЗрдЦ рднреА рдкрдврд╝реЗрдВ:
Nginx рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд┐рдВрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдиреАрд▓рд╛-рд╣рд░рд╛ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕: рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдмрдВрдзрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрдпреЛрдВ рд╣реИ? рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рдХреЙрдиреНрд╕рд▓ рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдкрд░рд┐рдЪрдп рдЯреЗрдХреНрдЯрди рдкрд╛рдЗрдкрд▓рд╛рдЗрди - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕-рджреЗрд╢реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди Nginx рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг Redmine рдХреЗ рд▓рд┐рдП рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯред рдЕрдкрдиреЗ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ?
рд╕реНрд░реЛрдд: www.habr.com