{"id":194,"date":"2023-01-19T18:48:00","date_gmt":"2023-01-19T18:48:00","guid":{"rendered":"http:\/\/blog.firatyasar.com\/?p=194"},"modified":"2023-03-19T18:51:28","modified_gmt":"2023-03-19T18:51:28","slug":"azure-kubernetes-service-storage-best-practises","status":"publish","type":"post","link":"https:\/\/blog.firatyasar.com\/?p=194","title":{"rendered":"Azure Kubernetes Service Storage Best Practises"},"content":{"rendered":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/www.msp360.com\/resources\/wp-content\/uploads\/2017\/10\/1-07.png\" alt=\"Microsoft Azure: Storage Types Overview\"\/><\/figure>\n\n\n\n<p id=\"eb75\">Kubernetes mimarisinde uygulamalar verilerin pod\u2019lar\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fcne ba\u011fl\u0131 olmaks\u0131z\u0131n tutulmas\u0131na ihtiya\u00e7 duyabilirler. S\u00f6z konusu veriyi bar\u0131nd\u0131rma oldu\u011funda burada g\u00f6z \u00f6n\u00fcnde bulundurulmas\u0131 gereken en \u00f6nemli durum verinin kal\u0131c\u0131 olup olmad\u0131\u011f\u0131d\u0131r.<\/p>\n\n\n\n<p id=\"6373\">Normal \u015fartlarda pod\u2019un ya\u015fam d\u00f6ng\u00fcs\u00fc sonland\u0131\u011f\u0131nda \u00fczerinde tuttu\u011fu data da silinir. Datan\u0131n kal\u0131c\u0131 olmas\u0131 i\u00e7in verilerin pod\u2019lara attach edilmi\u015f olan volume\u2019lerde tutulmalar\u0131 gerekir.<\/p>\n\n\n\n<p id=\"31c3\">Tabi baz\u0131 verilerin tutulmalar\u0131n\u0131n \u00f6nemi yoktur, bu sebeple pod\u2019lar ya\u015fam d\u00f6ng\u00fclerini tamamlad\u0131ktan sonra verilerin silinmesi \u00f6nemsenmez. Bu veriler genellikle h\u0131zl\u0131 olmas\u0131 a\u00e7\u0131s\u0131ndan node\u2019lar \u00fczerindeki ge\u00e7ici disk\u2019lere yaz\u0131l\u0131p,oradan okunurlar. Ancak bazen verilinin kal\u0131c\u0131 olmas\u0131 hatta bu verilere birden fazla pod \u00fczerinden eri\u015filmesi \u00f6nemli olabilir.<\/p>\n\n\n\n<p id=\"461b\">Bu gereksinimler g\u00f6z \u00f6n\u00fcnde bulunduruldu\u011funda volume mant\u0131\u011f\u0131n\u0131n Kubernetes cluster \u00fczerindeki pod\u2019lara attach edilmeleri gereklili\u011fi ortaya \u00e7\u0131kar.<\/p>\n\n\n\n<p id=\"8cf5\">Azure Kubernetes Service (AKS) \u00fczerinde volume\u2019leri bar\u0131nd\u0131rabilece\u011fin bir ka\u00e7 farkl\u0131 storage tipi bulunur.<\/p>\n\n\n\n<p id=\"9375\"><strong>Peki Volume tam olarak nedir ve Azure \u00fczerinde hangi bile\u015fenleri volume\u2019ler i\u00e7in kullanmal\u0131y\u0131z?<\/strong><\/p>\n\n\n\n<p id=\"5609\">Volume, pod\u2019lar i\u00e7in verinin depolanmas\u0131n\u0131, belli durumlarda bu veriye eri\u015filmesini ve pod\u2019un ya\u015fam d\u00f6ng\u00fcs\u00fcne ba\u011fl\u0131 kalmaks\u0131z\u0131n verinin kal\u0131c\u0131 olmas\u0131n\u0131 sa\u011flayan birimdir.<\/p>\n\n\n\n<p id=\"63d5\">Azure mimarisinde Kubernetes cluster i\u00e7in&nbsp;<strong>Azure Disk<\/strong>&nbsp;ve&nbsp;<strong>Azure Files<\/strong>&nbsp;volume olarak kullan\u0131lan resource\u2019lard\u0131r.<\/p>\n\n\n\n<ul><li><strong>Azure Disk:<\/strong>&nbsp;Data volume olarak bu resource tipi kullan\u0131ld\u0131\u011f\u0131nda, volume sadece bir pod taraf\u0131ndan eri\u015filebilir durumda olur. Birden \u00e7ok pod e\u015f zamanl\u0131 olarak bu data volume\u2019\u00fcne eri\u015fecekse bu resource tipi uygun de\u011fildir. Bu resource tipi kullan\u0131larak Kubernetes \u00fczerinde&nbsp;<strong>DataDisk<\/strong>(Managed Disk) resource tipi olu\u015fturulur. Diskler&nbsp;<strong>premium<\/strong>&nbsp;yada&nbsp;<strong>standard<\/strong>&nbsp;olarak konfig\u00fcre edilebilir. Bu alt yap\u0131da kullan\u0131lacak olan diskin&nbsp;<strong>SSD<\/strong>&nbsp;yada&nbsp;<strong>HDD<\/strong>&nbsp;olup olmamas\u0131n\u0131 belirler.<\/li><li><strong>Azure Files:<\/strong>&nbsp;Azure storage account \u00fczerinde bulunan ve SMB 3.0 ile eri\u015filebilen storage tipidir. Bu tipteki resource kullan\u0131larak olu\u015fturulan volume\u2019ler birden \u00e7ok pod ve node aras\u0131nda share edilebilir. Yine bu resource tipinde de performans ihtiya\u00e7lar\u0131na ba\u011fl\u0131 olarak standard veya premium storage kullan\u0131labilir. Buda yine alt yap\u0131da kullan\u0131lacak olan diskin SSD yada HDD olmas\u0131n\u0131 belirler. Azure files altyap\u0131s\u0131nda premium storage kullan\u0131lmak istenirse Kubernetes versiyonunun minimum&nbsp;<strong>1.13<\/strong>&nbsp;seviyesine getirilmesi gerekir.<\/li><\/ul>\n\n\n\n<p id=\"d026\">Kubernetes mimarisinde volume\u2019ler hostPath olarak node\u2019un \u00fczerinde bir lokasyondan, yada emptyDir olarak pod\u2019un dosyalar\u0131n\u0131n bulundu\u011fu lokasyondan (pod \u00f6ld\u00fc\u011f\u00fcnde bu k\u0131s\u0131mda bulunan dosyalarda silinecektir) da verilebilirler. hostPath kullan\u0131larak node \u00fczerinden volume atamas\u0131 yap\u0131ld\u0131\u011f\u0131nda, pod\u2019lar t\u00fcm node\u2019lar \u00fczerinde ayn\u0131 volume\u2019\u00fc arayacaklard\u0131r. Bu dizinler ayn\u0131 olmazsa uygulamada tutars\u0131zl\u0131k ya\u015fanmas\u0131 ola\u011fand\u0131r. Bu bahsetti\u011fimiz volume tipleri daha \u00e7ok logging ve cache mekanizmalar\u0131 i\u00e7in uygundur. Bu sebeple uygulamalar i\u00e7in network storage kullan\u0131lmas\u0131 daha do\u011frudur.<\/p>\n\n\n\n<p id=\"658d\">\u00c7ok geni\u015f organizasyonlarda bir \u00e7ok pod\u2019un bulundu\u011fu mimarilerde her bir pod i\u00e7in ayr\u0131 ayr\u0131 volume definition\u2019\u0131 yap\u0131lmas\u0131 gerekir. Bu i\u015flemi bir storage pool\u2019undan uygulama gereksinimine g\u00f6re otomatik olarak atamak i\u00e7in persistent volume ve persistent volume claim yap\u0131lar\u0131n\u0131 kullanmak gerekir.<\/p>\n\n\n\n<p id=\"3dfa\"><strong>Persistent Volume kavram\u0131n\u0131 biraz daha a\u00e7\u0131klayal\u0131m<\/strong>,<\/p>\n\n\n\n<p id=\"96b4\">Administrator\u2019lar taraf\u0131ndan kullan\u0131c\u0131lar\u0131n uygulamalar\u0131nu deploy ederken kullanmalar\u0131 i\u00e7in yap\u0131land\u0131r\u0131lan kal\u0131c\u0131 storage birimleridir. Kubernetes mimarisinde bu storage birimlerine Persistent Volume ismi verilir.<\/p>\n\n\n\n<p id=\"2304\">Bu resource Kubernetes API taraf\u0131ndan olu\u015fturulur. Azure platformu \u00fczerinde yukar\u0131da da bahsetti\u011fim gibi Azure Disk ve Azure Files resource\u2019lar\u0131 persistent volume olarak kullan\u0131labilirler. Bu birimler cluster d\u0131\u015f\u0131nda, storage olarak kullan\u0131labilecek Azure Resource\u2019lar\u0131d\u0131r. Burada hangi resource tipinin se\u00e7ilece\u011fini belirleyen en temel unsur, tutulan dataya birden \u00e7ok pod\u2019un e\u015f zamanl\u0131 eri\u015fip eri\u015fmeyece\u011fidir.<\/p>\n\n\n\n<p id=\"abf5\">Azure platformu \u00fczerine olu\u015fturulan persistent volume\u2019ler cluster\u2019\u0131 y\u00f6neten admin taraf\u0131ndan&nbsp;<strong>statik<\/strong>&nbsp;olarak yada Kubernetes API taraf\u0131ndan&nbsp;<strong>dinamik<\/strong>&nbsp;olarak olu\u015fturulabilir.<\/p>\n\n\n\n<p id=\"7d94\">E\u011fer pod belli bir storage t\u00fcr\u00fcne gerek duyacak \u015fekilde olu\u015fturulursa (Yani pod definition file\u2019\u0131 \u00fczerinde bir persistent volume tan\u0131mlamas\u0131 yap\u0131ld\u0131ysa) fakay b\u00f6yle bir volume hali haz\u0131rda bulunmuyorsa Kubernetes otomatik olarak belirtilen storage class\u2019\u0131na g\u00f6re Azure disk yada Azure Files olu\u015fturup ilgili pod\u2019a attach eder. Bu yap\u0131lan i\u015flem dynamic provisioning olarak isimlendirilir. Burada hangi tipte resource\u2019un attach edilece\u011fini StorageClass belirler.<\/p>\n\n\n\n<p id=\"c17e\"><strong>Storage Class ne i\u015fe yarar?<\/strong><\/p>\n\n\n\n<p id=\"fb31\">Persistent volume olarak kullan\u0131lacak storage\u2019lar\u0131n tier\u2019lar\u0131n\u0131 belirlemek i\u00e7in (premium yada standard) storage class\u2019lar kullan\u0131l\u0131r. Kubernetes mimarisi \u00fczerinde persistent volume olu\u015ftururken kullan\u0131lan bir attribute bulunur. Bu attribute\u2019un ismi&nbsp;<strong>reclaimPolicy<\/strong>\u2019dir. Bu policy pod\u2019un ya\u015fam d\u00f6ng\u00fcs\u00fcne ba\u011fl\u0131 olarak persistent volume\u2019un ne olaca\u011f\u0131na karar verir. Bu attribute \u00fczerinde yap\u0131lan konfig\u00fcrasyon ile kullan\u0131lan storage pod ile birlikte silinir yada ba\u015fka bir pod taraf\u0131ndan kullan\u0131lmas\u0131na izin verilir.<\/p>\n\n\n\n<p id=\"4129\">AKS mimnarisinde default olarak iki adet storage class bulunur. Bunlar\u0131 a\u015fa\u011f\u0131daki gibi g\u00f6r\u00fcnt\u00fcleyebilirsiniz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/miro.medium.com\/v2\/resize:fit:928\/1*lJbW0M-Fhcg-FFaP4n118A.jpeg\" alt=\"\"\/><\/figure>\n\n\n\n<p id=\"127b\">Bu storage class\u2019lar\u0131 birer c\u00fcmle ile a\u00e7\u0131klayacak olursak:<\/p>\n\n\n\n<ul><li><strong>Default:<\/strong>&nbsp;Kullan\u0131lacak managed disk olu\u015fturulurken Azure standard storage kullan\u0131l\u0131r. Kubernetes \u00fczerindeki persistent volume objesi silindi\u011finde reclaimPolicy taraf\u0131ndan Azure \u00fczerindeki disk otomatik olarak silinir.<\/li><li><strong>Managed-premium:<\/strong>&nbsp;Managed disk olu\u015fturulurken premium storage kullan\u0131l\u0131r. Burada da ayn\u0131 \u015fekilde persistent volume Kubernetes \u00fczerinde silindi\u011finde, olu\u015fturulan managed premium disk otomatik olarak silinir.<\/li><\/ul>\n\n\n\n<p id=\"8d02\">E\u011fer persistent volume olu\u015fturulurken herhangi bir storage class belirtilmezse default storageclass otomatik olarak se\u00e7ilir.<\/p>\n\n\n\n<p>\u00d6zet olarak AKS mimarisindeki storage kullan\u0131m\u0131ndan bahsetmi\u015f olduk. <\/p>\n\n\n\n<p>F\u0131rat<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kubernetes mimarisinde uygulamalar verilerin pod\u2019lar\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fcne ba\u011fl\u0131 olmaks\u0131z\u0131n tutulmas\u0131na ihtiya\u00e7 duyabilirler. S\u00f6z konusu veriyi bar\u0131nd\u0131rma oldu\u011funda burada g\u00f6z \u00f6n\u00fcnde bulundurulmas\u0131 gereken en \u00f6nemli durum verinin kal\u0131c\u0131 olup olmad\u0131\u011f\u0131d\u0131r. Normal \u015fartlarda pod\u2019un ya\u015fam d\u00f6ng\u00fcs\u00fc sonland\u0131\u011f\u0131nda \u00fczerinde tuttu\u011fu data da silinir. Datan\u0131n kal\u0131c\u0131 olmas\u0131 i\u00e7in verilerin pod\u2019lara attach edilmi\u015f olan volume\u2019lerde tutulmalar\u0131 gerekir. Tabi baz\u0131 verilerin\u2026 <span class=\"read-more\"><a href=\"https:\/\/blog.firatyasar.com\/?p=194\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":74,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/194"}],"collection":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=194"}],"version-history":[{"count":1,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/194\/revisions"}],"predecessor-version":[{"id":195,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/194\/revisions\/195"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/media\/74"}],"wp:attachment":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}