# Sanallaştırma (Hypervisor ve Container & Docker)

## CLOUD SERVICES

## SERVERLESS

Uygulamanı yükle ve kullandığın CPU time ve memory kadar para öde prensibiyle ilerleyen mimari yapı.

Serverless != Microservices

Konu mimariyle alakalı değil. Deployment metodudur. Ama zamanla yapınızı microservice çevirmeniz gerekecektir.

![](/files/-M3IaZyPTPgUPTGr7JPC)

{% embed url="<https://www.youtube.com/watch?v=WKXMaszLjaI>" %}

## HYPERVISOR

Bu konularda bir çok kaynak Türkçe olarak da bulunmaktadır. Bu yazımız da bu yazılara atıfta bulunup biraz daha karşılaştırma, performans temelli bakış gerçekleştireceğim. Karmaşıkça anlatılan ana mimariyi basitçe ifade etmeye çalışacağım.

Type-1 ve Type-2 diye hypervisor çeşitleri vardır. Bunları bir çok yerde resmedildiğini de görebilirsiniz. En bilinen ve populer olanlardan bahsetmeye çalışacağım.&#x20;

![Type-1 ve Type-2 Hypervisor Mimarisi](/files/-M0YNs-Xiyu398-YD6sB)

Type-1' e örnek olarak (**Hyper-V, Vmware EXSi Bare Metal Hypervisor,  Xen/RT-Xen, JailHouse**) verilebilinirken Type-2' e örnek olarak (**Vmware Workstation, VMware Fusion (for MAC users), Oracle VirtualBox, Parallels (for MAC users)**) örnek gösterilebilir. &#x20;

Tabii daha ayrıntılara girmeden ara bir başlıkta bu yazılımların dayandığı temel donanımsal teknolojiden bahsederek işlemci ve anakart üreticilerinin ve bu teknolojileri kullanarak sanallaştırılabilir çevre birim üreticilerinin de hakkını teslim etmek gerekir. İşlemci içerisinde **VT-x (**&#x41;MD firması AMD-SV&#x4D;**)** teknoloji ve anakart chipsetlerindeki **VT-d** teknolojileri (AMD firması AMD-V olarak adlandırır) bu işin bel kemiğini oluşturan teknolojilerdir. Bir de **SR-IOV** (single root input/output virtualization) teknolojisi bulunmaktadır.

Bahsedeceklerimiz arasındakilerden bir tanesi **VMware ESXi** bir diğeri de **Microsoft Hyper-V** mimarisi olacak. VMware tam olarak donanım üzerinde koşar. Kendine ait scheduler vardır. Ve üzerindeki Virtual Machine (VMs) lere donanımsal kaynakları kendi algoritmalarına göre paylaştırır. Arayüzlerinden kullanabileceği maksimum RAM miktarı, CPU miktarı, disk miktarı gibi ayarlamalar yapılır. Bunların hepsini yaparken de kendisini direkt olarak bir CPU üzerinde koşturur ve sınırlı bir miktarda da RAM tüketir. Bir donanıma önce VMware kurulur sonra üzerlerine VMs oluşturularak Guest OS ler kurulur.

**Hyper-V** ise mimari olarak çalışma olarak daha farklıdır. Hyper-V destekleyen bir Microsoft Windows işletim sistemi öncelikli olarak donanım üzerine kurulur ve Hyper-V özelliği aktifleştirilir. Bu aktifleştirme sonucu Hyper-V, kurulduğu ve Host işletim sistemi (Parent OS) olarak anılan OS altına yerleşir. Hyper-V CPU ve bellek birimlerini OS arasında paylaştırarak direkt erişim sağlarken Guest OS' ler memory temelli veri aktarımı sağlayan VMBUS aracılığıyla Parent OS de driverlarının ve yönetiminin bulunduğu diğer donanımlara erişim sağlarlar. Yani Guest OS (Child OS) hala host işletim sisteminin kaynaklarına bağımlı olarak çalışır. Parent deki bir dar boğaz diğer VMs lerin performansını etkileyecektir. Örneğin, arkaplan da çalışan processlerin ihtiyaçlarına göre guest OS ihtiyaçlarını erteledeği durumlar görülebilir. Hyper-V scheduler' ı 3 farklı algoritmada çalışabilmektedir. Bunlar classic, core ve root metotlarıdır. Classic fair bir şekilde kaynakların paylaşımını sağlarken, core scheduler Scheduling Multithreading (SMT) desteği de sunmaktadır. Yani CPU üzerinde koşan threadler instructionların akışlarına göre CPU zaman domeninde boşluksuz kalacak şekilde çalışması için daha verimli hale getirir. Root Scheduling de hyper-V tarafından schedling yapılması yerine Host OS tarafından yapılmasına izin veren metotdur.

**VMware ESXi** ise tüm Guest OS eşit mesafededir. Scheduler desteğinin yanı sıra kaynak paylaşımlarını kendi yönetir. Donanımların driver desteğini ve paylaşımlı erişimini kendi sağlar. Kendisinin kullanıcı düzeyinde yönetilmesi için de araçlar sunar.

Kendi gözlemlerim kapsamında Hyper-V çalışan uygulamayı vCPU lar arasında gezindirerek çalıştırırken, VMware ESXI da belirli bir işlemci üzerinde %100 çalışma şeklinde kolayca zorlanabilmektedir.&#x20;

Kısacası hangi hypervisor ile çalışılacağı scheduler performanslarının yanı sıra sunabildiği imkanlara da bakılarak karar verilmesi gerekir.

{% embed url="<http://www.serhatakinci.com/files/Microsoft-Hyper-V-vs-VMware-vSphere.pdf>" %}
Hyper-V vs VMware- Yıl 2014
{% endembed %}

{% embed url="<https://dcpteknoloji.com/microsoft-hyper-v-2019-ve-vmware-vsphere-6-7-karsilastirmasi/>" %}

{% embed url="<https://www.vembu.com/blog/hyper-v-vs-vmware/>" %}

{% embed url="<https://www.nakivo.com/blog/hyper-v-vmware-complete-comparison/>" %}

## CONTAINERS

### Docker

Bu konuda türkçe Gökhan Şengün güzel açıklayıcı bir videolar ve yazılar sunuyor.

{% embed url="<https://gokhansengun.com/docker-nedir-nasil-calisir-nerede-kullanilir/>" %}

{% embed url="<https://gokhansengun.com/docker-yeni-image-hazirlama/>" %}

{% embed url="<https://gokhansengun.com/docker-compose-nasil-kullanilir/>" %}

{% embed url="<https://gokhansengun.com/docker-ipuclari-soru-ve-cevaplar-bolum-1/>" %}

{% embed url="<https://gokhansengun.com/docker-ipuclari-soru-ve-cevaplar-bolum-2/>" %}

{% embed url="<https://gokhansengun.com/docker-ipuclari-soru-ve-cevaplar-bolum-3/>" %}

{% embed url="<https://gokhansengun.com/docker-ipuclari-soru-ve-cevaplar-bolum-4/>" %}

{% embed url="<https://www.toptal.com/docker/interview-questions>" %}

{% embed url="<https://www.youtube.com/watch?v=Wyr8_tsjKlE>" %}

{% embed url="<https://www.youtube.com/watch?v=bJSqh7fFOUI>" %}

{% embed url="<https://www.youtube.com/watch?v=ErBIAgwoqY8>" %}

{% embed url="<https://www.youtube.com/watch?v=aI61tgbUVkA>" %}

{% embed url="<https://www.youtube.com/watch?v=cNbCG6Nih3Q>" %}

İncelemenizi tavsiye edebileceğim diğer Türkçe kaynaklar

{% embed url="<https://medium.com/devopsturkiye/docker-container-ve-swarm-mode-f6975717647e>" %}

{% embed url="<https://alicanakkus.github.io/blog/docker/docker-swarm-mode>" %}

&#x20;Portainer kurulumunu anlatan güzel bir yazı

{% embed url="<https://oktayegi.wordpress.com/tag/load-balancer/>" %}

{% embed url="<https://azure.microsoft.com/tr-tr/topic/kubernetes-vs-docker/>" %}

{% embed url="<https://engineering.teknasyon.com/docker-nas%C4%B1l-g%C3%BCzel-nas%C4%B1l-g%C3%BCzel-docker-dockerfile-docker-compose-ve-docker-swarm-%C3%BCzerine-c3fdfa28583b>" %}

{% embed url="<https://kodcu.com/2017/03/docker-login-davranisina-dikkat/>" %}

&#x20;Ozan Teoman Dayanan da video paylaşım serisinde açıklayıcı bilgiler bulabilirsiniz.

{% embed url="<https://www.youtube.com/watch?v=bNpW4oQzHWc>" %}

{% embed url="<https://labs.play-with-docker.com/>" %}

{% embed url="<https://tahiroglu.com/post/145827965207/docker-medeniyeti>" %}

{% embed url="<https://upcloud.com/community/tutorials/load-balancing-docker-swarm-mode/>" %}

{% embed url="<https://medium.com/devopsturkiye/docker-%C3%BCzerinde-http-load-balancing-nginx-a5b62f13d7e>" %}

{% embed url="<https://sysadmins.co.za/docker-swarm-persistent-storage-with-nfs/>" %}

{% embed url="<http://collabnix.com/docker-1-12-swarm-mode-persistent-storage-using-nfs/>" %}

{% embed url="<https://sysadmins.co.za/setup-a-nfs-server-on-ubuntu/>" %}

{% embed url="<https://sysadmins.co.za/container-persistent-storage-for-docker-swarm-using-a-glusterfs-volume-plugin/>" %}

{% embed url="<https://blog.dahanne.net/2017/11/20/docker-swarm-and-nfs-volumes/#Mounting_a_NFS_share_in_a_Docker_Stack>" %}

{% embed url="<https://docs.docker.com/engine/extend/legacy_plugins/>" %}

### Docker Alternatifleri

{% embed url="<https://medium.com/devopsturkiye/docker%C4%B1n-yerini-podman-m%C4%B1-al%C4%B1yor-podman-nedir-podman-kurulumu-41b2b69a5ae7>" %}

{% embed url="<https://developers.redhat.com/blog/2019/02/21/podman-and-buildah-for-docker-users/>" %}

{% embed url="<https://merlijn.sebrechts.be/blog/2020-01-docker-podman-kata-cri-o/>" %}

### Docker Swarm ile Ölçeklenebilirlik (Scaling)

Docker-Swarm günümüz versiyonlarında auto scaling desteklememektedir. Yani ihtiyaca göre servislerimizin sayısını arttırıp azaltamamaktadır. Bunu kendi servislerimiz için bizim yapmamız ya da hazır yapan servisler araştırmamız gerekiyor. Kubernetes bu konuda hazır çözümle geldiği bilmekte fayda var. Aşağıdaki linklerde bu konulara değinilmiş. İncelemeniz faydalı olabilir.

{% embed url="<https://forums.docker.com/t/autoscaling-in-docker-swarm/44353/2>" %}

Sorulan soruya verilen cevapda **Cadvisor** ve **Node-exporter** containers karışımın kullandığını belirtiyor. Bu servisler ile sistemden metrik toplayıp performansları izleyerek nerede yeni replikalar oluşturması gerektiğine karar veriyor.

{% embed url="<https://itnext.io/docker-swarm-monitoring-4dfe88c72d56>" %}

{% embed url="<https://github.com/stefanprodan/dockprom>" %}

{% embed url="<https://github.com/stefanprodan/swarmprom>" %}

**Prometheus**, **Grafana**, **cAdvisor**, **NodeExporter** and **AlertManager** kullanarak geliştirilmiş bir örneğe işaret eden bir mimari sunuyor.&#x20;

`Prometheus (metrics database)`&#x20;

`Prometheus-Pushgateway (push acceptor for ephemeral and batch jobs)`&#x20;

`AlertManager (alerts management)`&#x20;

`Grafana (visualize metrics)`&#x20;

`NodeExporter (host metrics collector)`&#x20;

`cAdvisor (containers metrics collector)`&#x20;

`Caddy (reverse proxy and basic auth provider for prometheus and alertmanager)`

**cAdvisor** (Container Advisor) provides container users an understanding of the resource usage and performance characteristics of their running containers.

**Node-exporter** exposes additional metrics.

**Dockerd Exporter** exposes Docker swarm metrics

**Prometheus** server now to make the collector agent and service part complete.

Tabii Kubernetes' in yeni bir container ayağa kaldırma performansının ve kolay kurulumunun Swarm göre düşük olduğunu belirten yazılar da bulabilirsiniz. Tabii Kubernetes kolay kurulum ve performans sunmasa da sizin Operation kısmıyla çok ilgilenmemenizi sizin için ben düşünürüm yaklaşımıyla geliştirildiği düşünmek bir tercih sebebi olabilir. Tasarlayacağınız sistemin ihtiyaçlarıyla alakalı bir durum olsa gerek. Tabii servisiniz hazırda çalışmayı bekleyen replikaları da varsa yeni bir container ın ayağa kaldırılması vs gibi sürecin uzunluğu sizi çok etkilemese olsa gerek.

Şurada da karşılaştırıcı yazılar bulabilirsiniz

{% embed url="<https://stackify.com/docker-swarm-vs-kubernetes-a-helpful-guide-for-picking-one/>" %}

{% embed url="<https://dzone.com/articles/quotdocker-swarm-or-kubernetesquot-is-it-the-right>" %}

![](/files/-M2wGpgVaUqysu1p2LHP)

![](/files/-M2wKWpsHwI8uNyOk2ZK)

![](/files/-M2wHp323jWAshq83tiA)

![](/files/-M2wKkfSSpfttqN1WEwp)

Katılımcıları üzerinde yapılan araştırmaya göre hangi teknolojiler tercih ediliyor araştırmasının 2019 raporu

The use of **Docker** containers continues to grow, with adoption increasing to 57 percent from 49 percent in 2018.

**Kubernetes**, a container orchestration tool that leverages Docker, achieved faster growth, increasing from 27 percent to 48 percent adoption.

{% embed url="<https://resources.flexera.com/web/media/documents/rightscale-2019-state-of-the-cloud-report-from-flexera.pdf>" %}

## 2020


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kurumahmut.gitbook.io/genel/sanallastirma-1/sanallastirma.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
