á
áá°áá¬áá±á«áºááœáẠááááºážááá±ážá áá¯á¶á¥ááá¬
Kubernetes ááẠáá±á«áẠ300 á¡áá±ážáá»áááºááŸááá±á¬ áá±á«áºáá®áá¬ááœááºááááºáᬠáá®ážááŸá¯ááºááŒááºáž ááŒá áºáááºá áááºážááẠááá¹áá¬á·á¡ááŒá®ážáá¯á¶áž ááœááºááááºáá¬á áá áºá¡áá»áá¯á·ááœáẠá¡áá¯ááºáá¯ááºáá±á¬áºáááºáž á á»á±ážááŒá®ážáááºá
áá¶á·ááá¯ážááŸá¯á¡áá»áááºááŸáá·áº áááºáá²áá±á¬ áááºáá°ááŸá¯áá»ááºážááᯠááá¯á¡ááºááá·áº áá±ážáááºáá±á¬á¡áááºážáá»á¬ážá¡ááœáẠá¡áá°ážá
á»á±ážááŒá®ážáááºá áá«á áá»áœááºáá±á¬áºááá¯á· áá±ážáááºážá¡ááœáẠááœááºááœááºážáááºá áá®ááá¯áá²á· áá»áœááºáá±á¬áºááá¯á·áᬠá¡ááŒá¬ážááœá±ážáá»ááºá
áá¬ááœá±ááᯠááŸá¬ááŒáá·áºáá±á¬á· áá»á
áºááŒáá¯ááºááœá¬ážáááºá
áááºáá¬ááá¯áá»ááºáá«ááá²
áá»áœááºá¯ááºááá¯á·áá¡ááœá²á·ááẠá
áœááºážáá±á¬ááºáááºá
á±á¬áá·áºááŒáá·áºááŒááºážááŸáá·áº ááœá²ááŒááºážá
áááºááŒá¬ááŒááºážá¡ááœáẠáá¯á¶áááºáá±á¬ááºááŸá¯á¡áá»á¬ážá¡ááŒá¬ážááᯠáá¶á·ááá¯ážáá±ážáááº- Go ááœááºáá±ážáá¬ážáá¬ážáá±á¬ áááºááá
áºáá»á¬ážá¡ááœáẠAPI á¡áá¯á¶ážááŸááºáá»á¬ážá Prometheus áááºááá¯á·ááŸá¯áá»á¬ážá Logstash ááŸáá·áº Logstash áá²á·ááá¯á·áá±á¬ ááŸááºáááºážááœá²ááŒááºážá
áááºááŒá¬ááŸá¯áá»á¬ážá
ááœááºááááºáá¬áá®ážááŸá¯ááºááŒááºážá¡ááœáẠááá¯á¡ááºáá»ááºáá»á¬ážá á¬áááºážááŒáá·áº á áááºáá²á·áááº-
- á ááºáá»á¬ážá áœá¬ááœáẠáááºáá±á¬ááºááŸá¯á¡á á¯á¶ááᯠáá¯ááºáá±á¬ááºááŒááºážá
- áá¯ááºáá±á¬ááºáá±áá±á¬áááºáá±á¬ááºááŸá¯áá»á¬ážáááŒá¯á¶áá¯á¶áá¯á¶ážáááºáá»ááºá
- áááºáá±á¬ááºááŸá¯áá»á¬ážááŒá¬áž áá»áááºáááºááŸá¯áá»á¬ážá
- áááºáá±á¬ááºááŸá¯áá»ááœá¬ážáá«á á¡ááá¯á¡áá»á±á¬áẠááŒááºáááºá áááºáá«á
- á¡ááœá²á·áááºáá»á¬ážááŒáá·áº á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠáá»á¬áž ááŒá¯ááŒááºááááºážááááºážááŒááºážá
ááá¯á·á¡ááŒááºá á¡á±á¬ááºáá±á¬áºááŒáá«á¡áá¬áá»á¬ážááẠáá±á¬ááºážááœááºáá±á¬áºáááºáž áááá¯á¡ááºáá±á¬ á¡ááá¯áá á¹á ááºážáá»á¬ážá
- áááºážááá¯á·áá áœááºážáá±á¬ááºááá¯ááºááŸá¯á¡áá±á«áº á¡ááŒá±áá¶á á ááºáá»á¬ážááᯠáááºááŒááºáž (á¥ááá¬á áá±ážáá¶áá±á¬ I/O áááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááœáẠá¡ááŒááºáá áºáá»á¬ážáá«áá±á¬ á ááºáá»á¬ážááᯠáááºááŒááºáž)á
- áá»á±á¬áºááŒá±áá±ážááŸá°ážá áá®ážááŒá¬ážáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºááŸá¯ (á¥ááá¬á ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¬áá¡ááœááºáž)á
- ááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá»á¬ážááŸáá·áº áá»áŸáá¯á·ááŸááºáá»ááºáá»á¬ážááᯠáá»áŸáá±ááẠáá¯á¶áá±áá¬áá áºáá¯á
- áááºááá áºáá»á¬ážááŸáá·áº ááŸááºáááºážáá»á¬ážá¡ááœáẠá¡áá¯á¶ážááŸááºá
Kubernetes ááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠá¡áááºááŒá±á¬áá·áº áááá·áºáá»á±á¬áºááááºážá
Kubernetes ááŸáá·áº ááá°áá¬áá¯á¶á á¶á¡ááá¯ááºážá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á¡áá±á«áº ááŒá®ážááŒá®ážáá¬ážáá¬ážááŸá®ááá¯áá±ááá±á¬ áá¯áá¹áááá±áá¡ááœáŸá¬áá»á¬áž ááá¯ááá¯ááŸá¯ááºááœá±ážáá¬áá±áááºááᯠáááááŒá¯áááá«áááºá
á¥ááá¬á¡áá±ááŒáá·áºá Kubernetes ááŸáá
áºááá·áº áááºáááºáá¬ážáá±á¬ áááºáá±á¬ááºááŸá¯áá¯á¶á
á¶áá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá
ááá¯á·á¡ááŒáẠKubernetes áá±áá áá áºááẠáá»ááºááŒááºá áœá¬ ááŒá±á¬ááºážáá²áá±áááºá á¡áá±á¬ááºážáá¯á¶ážá¡áá±á·á¡áá»áá·áºáá»á¬ážááŸáá·áº áá±á¬ááºáá¯á¶ážáá±á«áºáááááá¬áá»á¬ážááŒáá·áº á¡ááºááááºááŸááá±ááẠá¡áá»áááºááŸáá·áº á áœááºážá¡ááºáá»á¬ážá áœá¬ ááá¯á¡ááºáá«áááºá Kubectlá minikubeá kubeadmá áá²á·á ááºá ááœááºá ááºá kopsá oc - á á¬áááºážááẠáááºááá¯ááºááŒá áºáá±áááºá áááºá á áá»ááºážááœáẠá€áááááá¬áá»á¬ážá¡á¬ážáá¯á¶ážááᯠáááá¯á¡ááºáá±á¬áºáááºáž áááºááá¯á¡ááºááá·áºá¡áá¬áá»á¬ážááᯠáááºááááá±á¬ááŒá±á¬áá·áº á¡áá¬á¡á¬ážáá¯á¶ážááᯠááááŸááá¬ážááẠááá¯á¡ááºáá«áááºá ááá¯á·á¡ááœááºááŒá±á¬áá·áº áááºáá°ááŸá¯áá»ááºážááẠááœááºá áœá¬áááºá á±á¬ááºáááºá
Kubernetes ááᯠáááºá¡áá»áááºááŸá¬ áá¯á¶ážááá²á
áá»áœááºá¯ááºááá¯á·ááá¯áá¹ááá®ááœááºá áá°áá»á¬ážá áœá¬ááẠKubernetes ááá¯á¡áá¯á¶ážááŒá¯ááŒááŒá®áž áááºážááá¯á¡áá±á¬áºáá±ážáá»á±á¬áºááœáŸááºááŒáááºá á€á¥ááá¬áá»á¬ážááᯠáá¶á·ááá¯ážááẠá¡áááºážá¡ááŒá áºáá»á¬ážááŸáááá·áº Google ááá¯á·ááá¯áẠAmazon á០á á®áá¶ááá·áºááœá²áá«áááºá
Kubernetes ááŸáá·áºá¡áá°áá¬áá«áááºá
- á¡áá±ážá
áááº
á¡ááœáá·áºá¡áá±ážá á®áá¶ááá·áºááœá²ááŸá¯ . á áááºááŒáá¯ááºááááºážáá»á¯ááºááŸá¯áá»á¬áž cluster ááœáẠlogic ááá¯ááá·áºáá«á áááºážááá¯á·ááẠKubernetes API ááᯠááŒá±á¬ááá¯ááá·áº ááá¯ážááá¯ážááŸááºážááŸááºáž áááá¯ááááºáá»á¬ážááŒá áºáááºáá¡á±á¬áºááá¯á áá±ážáá»á²á·ááŒááºážá ! Kubernetes ááẠáááºáá±á¬ááºááŸá¯ áááºááá áºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠááá¯á¡ááºáá»ááºá¡ááá¯áẠá¡ááá¯ááºážá¡áá¬ááŸáá·áº ááá¯ááºááá¯ááºáááºáá±á¬ááºá áœááºáááºááŸá¯ áááá¯á¡ááºáá² áá¯ááºáá±á¬ááºááá¯ááºáááºá
á€á¡ááºá¹áá«áááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠááẠá¡ááŸááºáááẠááá¯á¡ááºááá¬ážáᯠáá±ážá
áá¬ááŸááá«áááºá abstraction ááœá±ááá¯áá² á¡á¬ážááá¯ážááá¯á·áááá°ážá
áá»áœááºá¯ááºááá¯á·áá¡ááœá²á·ááẠá¡áá±ážá០áááºáá±á¬ááºááŸá¯á¡áá»á¬ážá á¯ááᯠáá¶á·ááá¯ážáá±ážááẠ(áááºáá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááŸáá·áº á¡áá®ážáááºáá»áááºáááºááŸá¯ááŒá±á¬áá·áº)á ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·áááá¯ááºááá¯áẠKubernetes á¡á á¯á¡áá±ážááᯠáááŒáŸáá·áºáááºááá¯áá«á áá»áœááºá¯ááºááá¯á·ááẠáááºáá±á¬ááºááŸá¯áá»á¬ážááá¯áᬠáá±ážááá¯áá«áááºá
áááºááá®ááá«áááºáá«á
Nomad ááẠááá¯á¡ááºááá·áºá¡áá¬áá»á¬ážá 20% ááᯠáá¶á·ááá¯ážáá±ážáá±á¬ ááŒáá¯ážááá¯ááºááŸá¯á 80% ááŒá áºáá«áááºá áááºážááẠááŒáá·áºáá»ááºááŸá¯áá»á¬ážááᯠá á®áá¶ááá·áºááœá²áááºááŒá áºáááºá Nomad ááẠááŒáá·áºáá»ááºááŸá¯áá»á¬ážááᯠááá¯á áá¯ááºáááºá á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááŸááá«á ááœááºááááºáá¬áá»á¬ážááᯠááŒááºáááºá áááºáááº... áá«áá«áá²á
Nomad á á¡áá¯á¶ážá
á¯á¶áá±á¬á¡áá»ááºááŸá¬ áááºážáá¯ááºáá±á¬ááºááá·áºá¡áá¬ááŒá
áºáááºá á¡áááºážáá¯á¶áž: á¡áá±ážá
áááºá¡ááœáá·áºá¡áá±ážáá»á¬áž á
á®áá¶ááá·áºááœá²ááŸá¯ ááá¯á·ááá¯áẠáááŸááá«á
Nomad ááẠá¡áá¯á¶ážááŒá¯áááœááºáá°ááŸá¯ááŸáá·áº á¡áá¯á¶ážáááºááŸá¯ááŒá¬ážááœáẠááŒá®ážááŒáá·áºá á¯á¶áá±á¬á¡áá±ážá¡áá°ááá¯ááœá±á·ááŒá®áááºáá«áááºá áá±ážáááºááŒá®áž ááœááºáááºáá±á¬ áááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááœáẠáá±á¬ááºážáá«áááºá áááºááá¯ááá¯ááááºážáá»á¯ááºááŸá¯ááá¯á¡ááºáá«áá áááºážááá¯á·ááᯠáááºááá¯ááºááá¯áẠááŒáŸáá·áºáááºááẠááá¯á·ááá¯áẠá¡ááŒá¬ážáááºážáááºážááᯠá¡áá¯á¶ážááŒá¯ááááºááŒá áºáááºá ááŒá±ááá¯á¶ážá áá¯á¶ áá¶á á¯á¶áá®ážááá¯ááºážá
Nomad áá¡áá±á¬ááºážáá¯á¶ážá¡áá»ááºááŸá¬áááºážáááºááœááºáá°áááºá á¡á á¬ážááá¯áž. áááºážááá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááá·áº á¡ááŒá¬ážáááºááá·áºá áá áºááœááºáááᯠááœááºáá°á áœá¬ áá±á«ááºážá ááºáá¬ážáá±á¬ááŒá±á¬áá·áº áá±á¬ááºážáá»áá°ááŸáá·áº áááºááœá±á·á¡á¬ážááŒáá·áº áá»áááºáááºááŸá¯áááŸááá«á áááºážááẠá¡á á¯á¡áá±ážááŸá á ááºááá¯ááºážááœáẠáá¯á¶ááŸáẠbinary áá áºáá¯áá²á·ááá¯á· á¡áá¯ááºáá¯ááºáááºá áá®áá±á¬ááºáá«áá²á
áá»á±á¬á·áá²áá²ááœá²áá±áá±á¬ á¡á áááºá¡ááá¯ááºážáá»á¬ážá ááŒá±ááá¯á¶ážáá±áá áá áº
Nomad á áááá·áºá¡ááºá¡á¬ážááẠáááºážááá±áá
áá
áºááŒá
áºáááºá áááºážááẠá¡ááŒá¬áž-áá¯á¶ážáááœá±ážáá»ááºááá¯ááºáá±á¬-áá¯ááºáá¯ááºáá»á¬ážááŒá
áºááá·áº áá±á¬ááºážá
áœá¬áá±á«ááºážá
ááºáá¬ážáááºá
template {
data = <<EOH
LOG_LEVEL="{{key "service/geo-api/log-verbosity"}}"
API_KEY="{{with secret "secret/geo-api-key"}}{{.Data.value}}{{end}}"
EOH
destination = "secrets/file.env"
env = true
}
áá®ááŸá¬ áá±á¬á·ááá¯áááºáááºá service/geo-api/log-verbosity
áá±á¬ááºá
á
áºáááºááá±ááŒá®ážáá±á¬á· á¡áá¯ááºáá¯ááºáááºážáá²á· áá»áœááºáá±á¬áºááá¯á·á á¡á²áá«ááᯠáááºáááºáž áá»áẠááŒá±á¬ááºážáá²ááá¯ááºáá²á· áá¯á¶á
á¶áá²á· áá±á¬áºáá¯ááºáááºá LOG_LEVEL
. áá±á¬á·ááá¯áááºáž áááºááŒáááºá secret/geo-api-key
Vault as á០API_KEY
. ááá¯ážááŸááºážáá±á¬áºáááºáž á¡á
áœááºážáááºáááºá
áááºážáááá¯ážááŸááºážááŸá¯ááŒá±á¬áá·áº Nomad ááẠAPI ááŸáá
áºááá·áº á¡ááŒá¬ážáááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº á¡ááœááºááá° ááá¯ážáá»á²á·á¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá á¥ááá¬á á¡áá¯ááºáá»á¬ážá¡ááœáẠáááºáá»á¬ážááᯠáá¶á·ááá¯ážáá¬ážáááºá áá»áœááºá¯ááºááá¯á·ááẠáááºáá±á¬ááºááŸá¯á¡á¬ážáá¯á¶ážááᯠáááºááá
áºáá»á¬ážááŒáá·áº áááºáá¬ážáááºá trv-metrics
. á€áááºážááŒáá·áº Prometheus ááẠáá±á¬ááºá
á
áºáááºááŸáá
áºááá·áº á€áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá¡ááœááºááá°ááŸá¬ááœá±ááá¯ááºááŒá®áž á¡áá¯á¶ážá¡ááŸááºááᯠá¡áá«á¡á¬ážáá»á±á¬áºá
áœá¬ á
á
áºáá±ážááá¯ááºáááºá /metrics
áá±áá¬á¡áá
áºá¡ááœááºá á¥ááá¬á¡á¬ážááŒáá·áºá ááŸááºáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á¡áá¬ážáá°áá¯ááºáá±á¬ááºááá¯ááºáááºá
áá»á²á·ááœááºááá¯ááºááŸá¯á á¡ááŒá¬ážáá±á¬ á¥ááá¬áá»á¬ážá áœá¬ ááŸááá«áááºá
- áá»áááºáá áºáá¯á¡áá¯á¶ážááŒá¯á Jenkins á¡áá¯ááºáá áºáá¯áá¯ááºáá±á¬ááºááŒá®áž áááºáá±á¬ááºááŸá¯ááœá²á·á ááºážáá¯á¶ááŒá±á¬ááºážáá²áá±á¬á¡áá«ááœáẠáá±á¬ááºá á áºáááºááẠNomad á¡áá¯ááºáááŒááºáááºáá±áá¬áá»áá¬ážááŸá¯ááᯠá á±á¬áá·áºááŒáá·áºáááºá
- Ceph ááẠNomad ááá¯á· ááŒáá·áºáá±áá¬ážáá±á¬ ááá¯ááºá áá áºáá áºáá¯ááᯠáá±á«ááºážááá·áºáááºá
Fabio load balancing á¡ááœááºá
áá«ááœá±á¡á¬ážáá¯á¶ážá ááœáá·áºááŒá¯áááºá
ááá¬ážáá»áŸááá±á¬ááááá±ážáá»ááº
áááºá áá áºá០ááŒá®ážááŒáá·áºá á¯á¶ááŸá¬ ááá¯ááºáá«áá°ážá áá¯ááºáá¯ááºáá±ážááœáẠáá±á¬ááºáá¯á¶ážáá±á«áº á¡ááºá¹áá«áááºáá»á¬ážááᯠáá»ááºáá»ááºážááááºáááºááẠáá»áœááºá¯áẠáá¡ááŒá¶ááŒá¯áá«á áá»áœááºááœááºážáá»ááºáá»á¬ážááŸáá·áº ááœá²ááŸá¬ážáá±áá±á¬ á¡ááºá¹áá«áááºáá»á¬áž ááŸááá±áááºááŸá¬ ááŸááºáá«áááºá ááá¯á·áá±á¬áº Kubernetes ááœááºáááºáž á¡áá¬ážáá°áááºááŒá áºáááºá
Kubernetes ááŸáá·áº ááŸáá¯ááºážááŸááºáá«á Nomad á¡ááá¯ááºážá¡ááá¯ááºážááẠááŒá®ážáá¬ážáááºááá¯ááºá Kubernetes ááœáẠáááááŒá¯áá»áẠ75 ááá·áºááŸáá·áº áá¶á·ááá¯ážáá±ážáá° 000 ááá·áºááŸáááŒá®áž Nomad ááœáẠáááááŒá¯áá»áẠ2000 ááá·áºááŸáá·áº áá¶á·ááá¯ážáá° 14 ááá·áºááŸááááºá Nomad ááẠKubernetes áá¡ááŒááºááŸá¯ááºážááᯠááá¯ááºáá®ááẠáááºáá²áááá·áºáááºá ááá¯á·áá±á¬áº áááá¯á¡ááºáá«á áááºážááẠááá¯ááá¯áá°ážááŒá¬ážáá±á¬á áá áºááŒá áºááŒá®ážá áá±ážáááºáá±á¬á¡ááá¯ááºá¡áááºážááẠKubernetes ááŸáá·áºááŸáá¯ááºážááŸááºáá«á áááºáááœá²áááºáá±á¬ááºážááá¯ááŸá¯ááᯠáááááŒá¯ááááŒá®áž áááºáá¶ááá¯ááºááŒá±ááá¯áá»á¬ážáááºáá¯ááá¯ááá¯áááºá
á¡áá»ááºážáá»á¯ááº
á¡á±á¬ááºááŒá±ááá¯ááºáž- á¡ááŒá¬ážáá°áá»á¬áž áá¯ááºáá±á¬ááºáá±áá±á¬ááŒá±á¬áá·áº Kubernetes ááᯠááá¯á¶ážáá«ááŸáá·áºá ááá·áºááá¯á¡ááºáá»ááºáá»á¬ážááᯠááá¯áá áá¯ááºá¡áá²ááŒááºááŒá®áž áááºááá·áºáááááá¬á ááá¯á¡áá»áá¯ážááŸáááŒá±á¬ááºáž á á áºáá±ážáá«á
á¡áááºá áááºááẠááŒá®ážáá¬ážáá±á¬á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶áá
áºáá¯ááœáẠáá
áºáá¬ážáááºážááŸááá±á¬áááºáá±á¬ááºááŸá¯áá»á¬ážá
áœá¬ááᯠá¡áá¯á¶ážáá»áááºá
á®á
ááºáá¬ážáá«á Kubernetes ááẠáá±á¬ááºážáá±á¬ááœá±ážáá»ááºááŸá¯áá
áºáá¯ááŒá
áºáááºá áááºáá±á¬ááºážááŸá¯ááºááœá±ážááŸá¯ááŸáá·áº áááºáááºááŸá¯áá¯ááºáá»á
ááááºáá»á¬ážááᯠáááááŒá¯áá«á á
á®áá¶ááá·áºááœá²ááŸá¯áá²á·ááá¯á·áá±á¬ Kubernetes áááºáááºážáá»ááºááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº áá¯ááºáá»á
ááááºá¡áá»áá¯á·ááᯠááŸá±á¬ááºááŸá¬ážááá¯ááºáááºá
ááááºážááááºážááẠááœááºáá°ááŒá®áž ááá¯ážáá»á²á·ááá¯ááºáá±á¬ áá¯á¶ááŒááºá áááºáá»ááá±á¬ áá¶á á¯á¶áá®ážááá¯ááºážááᯠáááºááŸá¬áá±áá«áá á¡áááºááŒá±á¬áá·áº Nomad ááᯠáá ááºážááŒáá·áºáá«ááŸáá·áºá á€á¡áá¬á áááºážááᯠáááºáá±á¬ááºá¡áá áá±á«áºáá±á¬ááºááœá¬ážááá²ááá¯áᬠáááºáž á¡á¶á·ááŒááœá¬ážááá¯ááºáá«áááºá
Kubernetes ááᯠáá¬ážáá
áºá
á®ážááŸáá·áº ááŸáá¯ááºážááŸááºáá«á Nomad ááẠScooter ááŒá
áºáááá·áºáááºá ááá«ááá¶ááŸá¬ áá
áºáá¯áᯠááá¯á¡ááºáááᯠáá
áºáá«ááá¶ááŸá¬ áá±á¬ááºáá
áºáᯠááá¯á¡ááºáááºá ááŸá
áºáá¯áá¯á¶ážááŸá¬ áááºááŸáááá¯ááºááœáá·áºááŸááááºá
source: www.habr.com