ááľáłááť. áľááá:
áĽáá˛áá á˝áá á¨áá áŤáááŤá ááľáĽ á ááááŽá˝á (á Kubernetes áĽá Istio ááááŤáá˝) áĽáá°áá áá áĽááľáłááľááłááá˘
á¨áľáŤáá á áľá°áłá°á
á Istioᣠááá á¨áĽ á áłá˛áľ áŁá áŞáŤáľ áá° áááľá°á áłáááááĄ-
- á°áááá á¨áĽáŤá ááááá: canary rollouts, A/B áá¨áŤ;
- áááľ áááŁá á: ááá áĽá ááĽááľ áŤáá, á áá˝ áá á¨á°áá°á¨á°;
- á¨ááá°á á áá áááá: á¨áá ááĽááŤáá˝, áá¨áŤáá˝, á¨áá¨áł áááťáá˝;
- á¨áĽááśá˝ ááá˘áŤáááá¨áśá˝áŁ á¨áĽáŤááá˝ ááá¨áĽáŁ ááá°.
á˝áá á áááĽáá áľ áá, áĽááá
áŁá
áŞáŤáľ á¨á°áá¨á áá áá°áá áŞáŤ áĽáá° ááłá á áá áá ááłáŤá, áĽá á ááááą áá á áłá˛áľ á˝áá°-ááłáŚá˝ áá°áááá. á¨ááááŞáŤá áĽáá˛á
ááááą á˝áá°-ááłáĽ áááá DestinationRules
(áááľá áľá áľáŤáá á°ááŁá/áĽáŤááá˝ á°ááŚá˝ - á áááľ. áá°ááá), á áĽáą á ááŤááᾠᨠA / B áá¨áŤá áĽááááá.
A/B áá¨áŤáĄ á¨ááľá¨áť á áá˝ á á°ááŁá
á¨A/B áá¨áŤ áĽá á áá á¨áááá áááľ á¨áá°áá áŞáŤ áľáŞáśá˝ á˛áአáá (áĽááá áá á áĽááł á¨á°ááŤáŠ áá¸á) áĽá á¨áľáá á¨á°á áááá á°ááᎠáĽáá°ááŤáťá˝á 100% áĽááá á á áá°áááᢠáľááá , áááąáá áľáŞáśá˝ á á ááľ áá áĽááľáááŤáá áĽá áááŞáŤáá˝á áĽáá°á áľáŁáá.
áA/B áá¨áŤ ááłáŤ á¨ááŤáľááááá á¨ááľ áááľ ááá ááá°á áľáŞáľ ááá°ááŤáľ á¨áá¨á°ááá áľááá áŤááąáĄ-
$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green created
á "á á¨ááá´á áľáŞáľ" á¨áá°ááŤáľ á áá¸áŁáŤá á áááľ áŚáłáá˝ áááŤáŤááĄ
- ááľá á¨á°áá°á¨á°á á á°áᨠáá፠-
istio-green
, - ááľáľ áá፠á áá¸áá˘
version: green
.
ááááŤáąá áááąá áá°ááŤáśá˝ áááŤá á áá¸áᢠapp: sa-frontend
ᣠá áááŁá á áááááą á¨á°ááá áĽáŤááá˝ sa-external-services
áá áááááľ sa-frontend
, áá° ááá á ááŁááá˝ ááááŤá áĽá áááą áá°áŤáŤá
á¨á°á á¨á áááá˝ á áá°áááá˘
áĽááá áááá˝ á á°ááŤáŠ á¨áá°áá áŞáŤá áľáŞáśá˝ ááľáĽ á á°ááŤá¨ ááááľ á¨á°á°á¨á á áááá¸á á áá°áááᢠáĽáľá˛ áĽáááľá¸ááĄ-
$ curl --silent http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
/static/css/main.c7071b22.css
/static/js/main.059f8e9c.js
$ curl --silent http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
/static/css/main.f87cd8c9.css
/static/js/main.f7659dbb.js
áá áááľ áá index.html
á ááľ á¨áľáłá˛á áááá˝á áľáŞáľ áá á¨á
á ááľ ááá á°áŞá á¨á°áᨠáľáŞáľ ááłáá ááľáá˝ ááá áá˝ááᣠááá˝ á áá ááááŤáśá˝ áĽáá°áá
áŤá áááá˝ á¨ááᢠáľááá
, áááá¨áťá áĽáá˛á°áŤ, áá°áĽ ááľá¨á á ááĽá: "index.html á¨á°ááá°á á¨áá°áá áŞáŤá á°ááłáłá áľáŞáľ á°á¨áłá áĽáŤááá˝á áá
á¨áĽ á áá áľá˘Âť.
áá˝ áá á á°áá°á¨á° á°á¨áłáłá áááľ áááŁá á ááŁá˝á áá áĽááłáŤááᢠ(á°áááá á¨áá˝ áááľ áááŁá á)⌠á áá á¨ááľ á¨á°ááłáłáŠ á°áá á á¨áááᥠáĽáŤááá˝ áá° á°ááłáłáŠ á¨áá ááłá áááŤáá áľááľá á¨á°áá°á ááĽá¨áľ áĽá á áá á¨áááá áľ - áááłá á¨á¤á˝á˛á˛á áŤáľáᢠDestinationRulesá á áá áá á¨á°á°áá á¨á˘
á¨ááľá¨áť á°ááŚá˝
á áá áááŁá á áááááľ áĽáŤáá áá°ááááá á áááááľ áá¨áááŁá¨DestinationRulesá á áá áá ááá á áááááľ á á°ááá áľáŤáá áá á°ááťáááľ áŤáá¸áá ááá˛áá˝ áááá áĽáá˝ááááĄ
á¨áľáŤáá á áľá°áłá°á á¨á˘áľá˛áŽ ááĽáśá˝ áá
á ááá¨á°: á¨á˘áľá˛áŽ ááĽáśá˝ á ááľááá áľáŤáá áá á¨ááŤáłáľáŠáľ á°á˝áĽá áĽáá áá ááááᤠááá áŁá ááአááá§áᢠá áľááá áááááᣠáĽáŤááá á áá á áááľ áááł áĽáá°ááá á¨áááľáá á CRD ááľáĽ á¨á°ááá¨á á Ingress Gateway ááľáĽ á Envoy ááá˘
á ááłá¨áť ááá˝áŁ ááĽááľ áŤáá áá˝ ááá áá áĽá á°ááłáłá á¨á áááááľ ááłá áá°ááłáłá á°á áá ááá˝ áĽáá°áá°áĽ ááá¨ááἠá¨áááľ áááŁá áá áááá áĽáá˝áááᢠá¨áá¨á°áá áá
á áá
áá áŤáłáŤá (
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: sa-frontend
spec:
host: sa-frontend
trafficPolicy:
loadBalancer:
consistentHash:
httpHeaderName: version # 1
1 - áá˝ á¨áááá¨á á á¤á˝á˛á˛á á áááľáľ áááľ áá á áááľá¨áľ ááᢠversion
.
á ááááŠá á áá¨á°áá áľááá áá°ááĽáŠá˘
$ kubectl apply -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io/sa-frontend created
á áá á¨áłá˝ áŤááá áľááá áŤááą áĽá áááąá á˛áááš áľáááááášá áááá˝ ááááľáá áŤá¨ááᥠversion
:
$ curl --silent -H "version: yogo" http://$EXTERNAL_IP/ | tr '"' 'n' | grep main
á ááá¨á°á áááą ááľáĽ á¨á°ááŤáŠ áĽá´áśá˝á ááá¨áá áĽá áá¤áąá á ááĽáł á á áłáš ááľáĽ áááá¨á áá áá áá˝ááá˘
á á á ááá, DestinationRules á áááľ áááŁá á ááľá á°á¨á᪠áŁá
áŞáŤáľ á ááľ - ááááŽášá á ááľáĽ áŤá¨áááĄ
VirtualServiceá á¨á áá á¨áá°áľá á ááľ á¨áá¨á°ááľá áľáááá˝á á ááá¸á á¨áá°áá áŞáŤáá âá á¨ááá´ áĽáŞáľâ áĽá á¨áľáŤáá á á áŁáŤáá á°ááłá á°áἠáĽááľáááľá˘
$ kubectl delete -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions âsa-frontend-greenâ deleted
$ kubectl delete -f resource-manifests/istio/ab-testing/destinationrule-sa-frontend.yaml
destinationrule.networking.istio.io âsa-frontendâ deleted
ááá¸áŁá¨á ᥠá á°ááŁá áá áŤá áááŁá á áááááśá˝
áááá ("ááť") ááá ááá¸áŁá¨á ("ááá¸áŁá¨á ") á¨áá¨á¨áť á°á áááá˝á áłáá፠á¨áááľ áááĽá áááá°á˝ á áááááá áľ áá áĽá á áá ááááᥠáá áá áááľá¨á ("ááľá°ááľ") áĽáŤááá˝á áá° ááá°á á°á¨á á áľááá áááŚá˝ áá°áá°á¨áá áľ áĽá áá¤áąá áĽáááá¨áłááᢠá ááá áááľáááĽáŁ áŁáá°á¨áŁá á áŁá ááłá á¨áááá ááłá á˛ááἠáĽá ááá áááááá á¨ááá˝áá á áĽáá°áá áŤá ááá á¨ááťáť áłáľ ááá á¨ááłáĽ áĽáŤá á˛áŤááἠááá˘
áá
áá áááł á á°ááŁá áááá°á˝áŁ ááá°á á¨SA-áááá á¨áłááŤáá˝ áá áĽááá áá˘buggy
) á¨áá¨á°ááá áľááá á áááľáĄ-
$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created
áĽá á áá áááá áááłáá˝ ááá¨ááἠáľááá áĽáááľ app=sa-logic
áĽáá˛áá á°ááá
áľáŞáśá˝ áŤáá¸á áááŤáá˝ á áá¸ááĄ-
$ kubectl get pods -l app=sa-logic --show-labels
NAME READY LABELS
sa-logic-568498cb4d-2sjwj 2/2 app=sa-logic,version=v1
sa-logic-568498cb4d-p4f8c 2/2 app=sa-logic,version=v1
sa-logic-buggy-76dff55847-2fl66 2/2 app=sa-logic,version=v2
sa-logic-buggy-76dff55847-kx8zz 2/2 app=sa-logic,version=v2
á áááááľ sa-logic
áá°á¨á፠áŤáá¸áá ááľáá˝ áŤááŁá አapp=sa-logic
áľááá
ááá áĽáŤááá˝ á ááá áááłáá˝ ááľáĽ áá°áŤáŤááĄ-
ááá áá áĽáŤááá˝ áá° v1 á ááŁááá˝ áĽáá˛á°ááá áĽá áá° v2 á ááŁááá˝ áĽáá˛áłáŠ áĽáááááááĄ
áá
áá á¨áááłáŤá á á¨áášáá á°ááŞáľ á¨DestinationRule áá á ááŁáá á˛áá á
ááš á¨á¨áášáá á áááááąá áááľ áľáĽáľáŚá˝ áĽá ááááśá˝á áá° á ááľ á¨á°áá°á ááá á¨áááášá áľ ááá˘
á ááłá¨áť á°ááŚá˝ ááľáĽ áááľ áááá˝á áááá˝
áááľ áľáĽáľáŚá˝ (áááľ áľáĽáľáŚá˝) á áá¨á°áá áá
á ááááťá (
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: sa-logic
spec:
host: sa-logic # 1
subsets:
- name: v1 # 2
labels:
version: v1 # 3
- name: v2
labels:
version: v2
- á áľá°ááá
(
host
) áá á á á¨áááá¨á°á ááááą áá° á áááááą á áááľáŁá¸á ááłáŽá˝ áá áĽáť áááá ááááťása-logic
; - áľáá˝ (
name
) ááĄáľ áľáĽáľáŚá˝ áá° áááłá á ááŁááá˝ á˛áááአáĽá á áá áááá; - áá፠(
label
) á¨áááľ áľáĽáľáĽ á áŤá áááá ááłááá˝ áááłá°á áŤááŁá¸áá á¨ááá-áĽá´áľ áĽááśá˝ ááááťáá˘
á ááááŠá á áá¨á°áá áľááá áá°ááĽáŠá˘
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-destinationrule.yaml
destinationrule.networking.istio.io/sa-logic created
á áá ááĄáľ áľáĽáľáŚá˝ áľáá°ááášáŁ á ááá á á¨áášáá á°ááŞáąá á sa-logic áĽáŤááá˝ á°ááŚá˝á áĽáá˛á°áá á áááá áĽáá˝ááááĄ-
- áá° áááľ áľáĽáľáĽ á°ááááŻáá˘
v1
, - áá° áááľ áľáĽáľáĽ á°áá¸áŁááá
v2
.
á¨áá¨á°áá á áá¸áŁáŤá ááŚá˝áá áĽáá˛áŤáłáŠ ááá
áľáááłá (
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sa-logic
spec:
hosts:
- sa-logic
http:
- route:
- destination:
host: sa-logic
subset: v1
mirror:
host: sa-logic
subset: v2
áĽáá ááá ááĽáŤáŞáŤ á áŤáľááááᣠáľááá á á°ááŁá áĽáá¨ááĄ-
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-shadowing-vs.yaml
virtualservice.networking.istio.io/sa-logic created
á áá¨á°áá áľááá á áá°áá á¸áá áĽáá¨áááĄ-
$ while true; do curl -v http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done
áá¤áśášá á ááŤáá ááľáĽ áĽááᣠáĽááľá áá¨áľ á áá˝áá áľ áľáŞáľ á¨áľá
á°áľ áá (buggy
) á ~ 60% áĽáŤááá˝ á ááłáŤá ᣠáá á¨áĽááá
ááľááśá˝ ááľáĽ á ááłá¸áá á áá á°á ááá áá á áá°áŤ á áááááľ ááá˝ áľáááŤáá á áááąáá˘
á¨áł-ááá á áááááľ á¨á°ááŤáŠ áľáŞáśá˝ ááážá˝ áľáŹáľ
á¨áášáá á°ááŞáľ á á áááááłá˝á áááĽáá°áá˝ áá áĽáá´áľ áĽáá°áá°áá á áááááŞáŤ áá á¨á°ááá¨áľáá áľ áá
ááᢠsa-web-app
á¨áá áĽáŤá áŤáááŁá sa-logic
, á áá ááŞá á¤ááŽá á áŠá áŤááá ᣠáĽáąá - á á¨áášáá á°ááŞáľ - áĽáŤááá áá° v1 áááľ áľáĽáľáĽ áááľá¨áľ áĽá áĽáŤááá áá° v2 á¨á áááááą áááľ ááá áááááŁá¨á
á¨á°ááᨠááᢠsa-logic
.
á ááááᥠá¨áášáá á áááááśá˝ ááá áĽáá°áá ááá°áĽ á áľááľáá áá áá áŤá˝áᢠá áááĽáá ááá, áĽááąá á áĽáááľ áłáá áá¸á á áááľ áá áá á áľá°áŤá¨áľ áĽáá°áááá.
á¨áŤá᪠áááśá˝
Canary Deployment á¨áá°áá áŞáŤáá á á˛áľ áľáŞáľ ááĽááśá˝ ááĽá á°á áááá˝ á¨áááŁáľ áá°áľ ááᢠá á°áááá ááľáĽ ááá á˝ááŽá˝ á ááááŤá¸áá ááá¨ááἠáĽá á áá áááá, áĽá á¨á፠á áá áĽáť, á á (á¨á°ááá) áĽáŤáąá ááľááá áĽááá á á ááá, áŤá°áŤáŠáľ.Đžáľáá áłáłáá˘
á¨áŤá᪠áááśá˝á áááłá¨áľáŁ á áááľ áľáĽáľáĽ áĽáááĽááá buggy
Ń sa-logic
.
á áĽáá
á áááŽá˝ áá á ááŁáá áĽá áá˛áŤáá 20% á°á áááá˝á áá° áľáŞáą áĽááááá¸á (áá
á¨áĽáá á¨áŤá᪠áááľ ááááá) áĽá ááŞá 80% áá° áá°á á á áááááľá˘ áá
áá áááľá¨á á¨áá¨á°ááá áááŁá á áááááľ á°ááĽá (
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sa-logic
spec:
hosts:
- sa-logic
http:
- route:
- destination:
host: sa-logic
subset: v1
weight: 80 # 1
- destination:
host: sa-logic
subset: v2
weight: 20 # 1
1 ááĽá°áľ ááweight
) áá° á°ááŁáŠ á¨ááááĄáľá á¨áĽáŤááá˝ ááśá ááá á¨á°ááŁáŠá áááľ ááá ááááťáá˘
á ááłááá á¨á¨áášáá á áááááľ áá
á áŤááá sa-logic
á áá¨á°áá áľááááĄ-
$ kubectl apply -f resource-manifests/istio/canary/sa-logic-subsets-canary-vs.yaml
virtualservice.networking.istio.io/sa-logic configured
... áĽá á ááłááľ áĽáŤááá˝ áá° ááľááśá˝ áĽáá°ááአáá˛áŤáá áĽááŤáááĄ-
$ while true; do
curl -i http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}'
--silent -w "Time: %{time_total}s t Status: %{http_code}n"
-o /dev/null; sleep .1; done
Time: 0.153075s Status: 200
Time: 0.137581s Status: 200
Time: 0.139345s Status: 200
Time: 30.291806s Status: 500
á¨áášáá á°ááŞáľ á¨áŤá᪠áááá á ááá°á áłáᥠá áá á ááŁá á¨á˝ááŽá˝ áĽáá á°á˝áĽá á¨á°á áááá áá°á¨áľ áá° 20% áá á áľááááᢠáľáá ! á ááᣠá ááááá áááł áľá áŽáłá˝á áĽááá á á ááááá áľ áá (á áá á áááá áá áá ...) ááá¸áŁá¨á áĽá á¨áŤá᪠áááśá˝á áá áá áĽáá˝áááá˘
á¨áĽá¨ááľ áááŤáľ áĽá áá¨áŤáá˝
ááá áá áľá
á°áśá˝ áááá á áŽáą ááľáĽ á ááááᢠá áááአááľáĽ á¨
áááłáŤáŁ á°ááłáłáŠá á¨á˝áá áĽáŞáľ áá ááá˝áá áĽáááĽááá sa-logic
(buggy
), áĽá á¨á ááłá¨ áá¨áĄ á áľá°áááááľ á áááá° ááľááśá˝ á°ááľáá.
á¨áĽá buggy á áááááłá˝á á áŁá á¨á á ááá˝ á¨ááľá áľ áĽáľá 1/3ᣠá ááľáĽ á áááá áľá á°áľ 1/3 á¨ááŤá áᣠáĽá 1/3 áášá á á°áłáŤ áááł á¨ááľá áľ áĽáľá ááá¨áá˘
á¨áĽááá á ááłáŽá˝ á°á áĽá áááááľ áĽá á¨á°á ááááťá˝áá á áááľ áááťáťáᣠáĽá áĽáá˝ááááĄ-
- á ááááṠᨠ8 á°á¨ááľ á áá ááá˝ á¨á°á á¨áá ááĽá፠áá¨áአáŁ
- áĽáŤáá áŤáá°áłáŤ áĽáá°áá ááááŠá˘
ááľáá áŤáŁ á¨áá¨á°ááá á¨ááĽá¨áľ ááş áĽáá áááá (
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sa-logic
spec:
hosts:
- sa-logic
http:
- route:
- destination:
host: sa-logic
subset: v1
weight: 50
- destination:
host: sa-logic
subset: v2
weight: 50
timeout: 8s # 1
retries:
attempts: 3 # 2
perTryTimeout: 3s # 3
- á¨áĽáŤáá áá ááĽá፠áá° 8 á°á¨ááľ á°áááĽáŻá;
- áĽáŤááá˝ 3 áá áĽáá°áá ááá¨áŤá;
- áĽá á¨ááá˝ áá ᨠ3 á°á¨ááľ á áá á¨áá áĽáŤááłááą áá¨áŤ áĽááłáá°áłáŤ ááá áŤáá˘
áá áááťá¸áľ áá ááááŤáąá á°á ááá ᨠ8 á°á¨ááľ á áá áá á á á¨áá áľá áĽá áŤáá°áłáŤ ááá˝ áááááľ áśáľáľ á áłá˛áľ áá¨áŤáá˝á áĽáá°áááá, áá á á¨á°áłáŤ ááá˝ á¨ááááľ áĽáľá áá¨ááŤá.
á¨ááááá áá á á áá¨á°áá áľááá á°ááĽááĄ
$ kubectl apply -f resource-manifests/istio/retries/sa-logic-retries-timeouts-vs.yaml
virtualservice.networking.istio.io/sa-logic configured
áĽá á¨á°áłáŤáá¸á ááážá˝ ááĽá áááá á ááŤáá áá áłáá˝ áá áŤá¨áááĄáĄ
á¨áá ááĽááŤáá˝á áĽá áá¨áŤáá˝á áŤá¨á ââá áá á¨áľáŹáľ áľáłá˛áľá˛ááľ ááťáťáŤáá˝
áá° ááŁáŠ ááá á¨ááá áá á ááľ (á áá áἠá áľááá - ááľááá áá° ááŁáŠ á¨á˝áá ááá, ááááŤáąá á áá
á°ááŁáŤá áá¨áŤáá˝ ááľáĽ ááá á°á¨á᪠á áááá - á áááľ. á°ááá.)ᣠá°áá sa-logic-buggy
áĽá VirtualService á¨áá¨á°ááľá áľáááá˝á á ááľáŹáľáĄ-
$ kubectl delete deployment sa-logic-buggy
deployment.extensions âsa-logic-buggyâ deleted
$ kubectl delete virtualservice sa-logic
virtualservice.networking.istio.io âsa-logicâ deleted
á¨áá¨áł á°áŁáŞ áĽá á¨á áá áŤáľ á áŚá˝
áľá áááľ á áľááá á áŚá˝ áĽá¨á°ááááá áŤááá á áááᎠá°ááŞáľ á ááá´áá¸á ááľáĽ áĽáŤáľá áá°áá á¨á áľ ááááľ áĽáá˛á˝á ááᢠ(áŤáľá ááááľ) á áááááśá˝
ááŁáŞ ("ááŁáŞ") áá° á áááááľ ááłá á¨áááĄáľá áĽáŤááá˝ á¤áá á áá°áá á°áĽá áá°áá á¨á áľ áááááľ áĽá á¨á°áá á áĽáŤááá˝ áá° á áááááą á¤áá áááłáá˝ á˛áááአ(á¨áľáŹáľ áá áá áá¨ááŤá) áá°áá á¨á áľ áááááľ áá á
ááᢠ(áľááá ááľáłááťáĄ- á¨áľááá°-áĽááľ á¨á áá áááá ááá፠ááá áá˝ááᣠáááłááŁ
á
áá ("ááááá") á á áááááśá˝ ááľáĽ áŤá ááľááśá˝á á¨á á
ááá áľáááľ á˝áááľ áááŤáᢠáááłá á áááááľ B á°á áá˝áˇáᣠáĽá áá á áááááľ (á¨á áááááľ á°áá á B) áá áááááľ B áĽáŤá áŤáááŁáᣠáá
á áá áááłáá áĽáá˛á áá áĽá ááá˝ áĽáŤááá˝á áĽááłáŤááἠ(á¨á áááááľ á áŁá áŁáááá áĽááł) á) (áľááá ááľáłááťáĄ- á¨áľááá°-áĽááľ á¨á áá áááá ááá፠ááá áá˝ááᣠáááłááŁ
á¨áĽááá
á á
áŚá˝ á á°ááŁá á ááááŽá˝á áĽá°áááá ááááŤáąá áĽááą áááááľ ááá áá¸áá˘
PS á¨á°ááá
á áĽááá˝á áá áŤááĽáĄáĄ-
- "á¨á˘áľá˛áŽ áá áá° áááᎠá áááááśá˝ á°áááľ"áĄ-
ááá 1 (á¨áá áá áŁá áŞáŤáľ ááá˘áŤ) ,ááá 3 (áá¨áá፠áĽá áááľ) ; - ÂŤ
áŽááąááľ - ááŠá áááľáľ ááá ááĽá°áľ áŤáá á¨á áááááľ áá¨áĽ "; - ÂŤ
á¨á áááááľ áá¨áĽ áááľá áá áĽá ááá á áľáááá [á¨áááᎠá áááááśá˝ áá áá°áá áá°áá áŞáŤ]? Âť.
ááá: hab.com