๐ฐEnvironment Variables
Konuya bir รถrnekle baลlayalฤฑm. Misal, biz bir web uygulamasฤฑ geliลtiriyoruz. Ve bu web uygulamasฤฑ, bir veritabanฤฑ uygulamasฤฑna baฤlanarak verileri burada saklฤฑyor. Bu uygulamanฤฑn, baฤlandฤฑฤฤฑ veri tabanฤฑnฤฑn, sunucu adresi, kullanฤฑcฤฑ adฤฑ ve ลifre bilgilerini de bu uygulamanฤฑn iรงerisine gรถmdรผk diyelim. Daha sonra, bu uygulamayฤฑ container imajฤฑ haline getirdik ve artฤฑk istediฤimiz container platformunda bu uygulamayฤฑ รงalฤฑลtฤฑrmaya hazฤฑrฤฑz.
Bu senaryo da 2 sฤฑkฤฑntฤฑmฤฑz bulunmaktadฤฑr.
1 - Biz veritabanฤฑ baฤlantฤฑ bilgilerini, container imajฤฑ iรงerisine hardcoded olarak yazdฤฑk. Yani bir ลekilde, container imajฤฑ istemediฤimiz insanlarฤฑn eline geรงerse, bu imajฤฑn iรงerisinde bulunan bu bilgiler expose olur. Bu durumu asla istemeyiz.
2 - Bu(web) imajdan, container oluลturmak istediฤimiz zaman, bu container her defasฤฑnda, aynฤฑ veritabanฤฑna, aynฤฑ kullanฤฑcฤฑ adฤฑ ve ลifre ile baฤlanmaya รงalฤฑลacak. Veritabanฤฑ adresimiz, test ortamlarฤฑnda ayrฤฑ, prod ortamlarฤฑnda ayrฤฑ olabilir. Biz bu kullanฤฑcฤฑ adฤฑ ve ลifre bilgilerini zaman iรงerisinde gรผncellemiล olabiliriz. Bu senaryo da ne yapacaฤฤฑz? Her ortam iรงin, her seferinde, yeni bilgilerle imaj oluลturacaฤฤฑz. yada her seferinde, container oluลturulduktan sonra, container 'a baฤlanฤฑp, bu bilgileri gรผncelleyeceฤiz. 2. seรงeneฤi seรงtiฤimizde bu sefer de, ลรถyle bir sorunumuz olacak. Kubernetes bir sorun anฤฑnda, containerฤฑ silip, yeniden oluลturabilir. Scale ediyoruz, geri alฤฑyoruz vb. Her seferinde oluลturulan, tรผm containerlara baฤlanฤฑp, bunu manuel mi dรผzelteceฤiz?
Gรถrdรผฤรผnรผz gibi, bu tarz ortama gรถre deฤiลebilen, ve hassas bilgileri container imajฤฑ iรงerisine gรถmmek, oldukรงa fazla sorun รงฤฑkartฤฑr. Fakat bununda bir รงรถzรผmรผ var.
Bu tarz, รงalฤฑลtฤฑrdฤฑฤฤฑmฤฑz ortama gรถre deฤiลebilecek bilgileri container imajฤฑna hardcoded olarak eklemeyiz. Bunun yerine, uygulamalarฤฑmฤฑzda bu bilgileri, รงalฤฑลtฤฑrฤฑldฤฑklarฤฑ sistemden okuyacaklarฤฑ ลekilde, bir deฤiลken olarak tanฤฑmlarฤฑz. Yani Environment variables 'dan okunmasฤฑ iรงin tanฤฑm yaparฤฑz.
Yukarฤฑdaki รถrnekte uygulamamฤฑzฤฑn baฤlanacaฤฤฑ, veritabanฤฑnฤฑn adres ve kullanฤฑcฤฑ bilgilerini direkt uygulamaya gรถmmek yerine veritabanฤฑ adresini $database . Kullanฤฑcฤฑ adฤฑ bilgisini $username . Parola bilgisini de, $password isimli deฤiลkenlerin deฤerlerine bakacak ve oradan bu deฤerleri okuyacak ลekilde ayarlamasฤฑnฤฑ sรถyleriz.
Bu sayede, bu hassas bilgileri, bu imajlara gรถmmemiล oluruz. Ne zaman bu imajdan, container oluลturmak istersek, o an hangi deฤerlerin atanmasฤฑ gerekiyorsa, bu deฤerlerin Container da Environment variable olarak tanฤฑmlarฤฑz. Bรถylecek Environment variables nedir ve Container ile ne alakasฤฑ var sorularฤฑnฤฑn cevaplarฤฑnฤฑn รผstรผnden geรงmiล olduk.
ลimdi bunlarฤฑ pod tanฤฑmฤฑna nasฤฑl ekleyeceฤimize bakalฤฑm.
Pod tanฤฑmlarฤฑ iรงerisinde, Environment variable'lar, container tanฤฑmฤฑ altฤฑnda, env parametresi ile tanฤฑmlanฤฑyor. env parametresi altฤฑnda list ลeklinde, tรผm Environment variable 'larฤฑmฤฑzฤฑ tanฤฑmlฤฑyoruz.
รncelikle tanฤฑmlamak istediฤimiz Environment variable 'ฤฑn ismini giriyor ve ardฤฑndan da, value opsiyonu ile buna atamak istediฤimiz deฤeri giriyoruz.
Yukarฤฑdaki รถrnek pod tanฤฑmฤฑnda, "USER" isimli Environment variable tanฤฑmlayฤฑp, ve buna da, "Onur" deฤerini atadฤฑm.
Bir altฤฑndaki Environment variable 'da, "database" isimli Environment variable tanฤฑmlayฤฑp, buna da "testdb.example.com" deฤerini atadฤฑm.
Bu container oluลturulduฤunda, bu 2 Environment variable bu containerda tanฤฑmlanacak, Aynen az รถnceki รถrnekte belirttiฤim gibi bir web uygulamasฤฑ oluลturdum. Web uygulamasฤฑ iรงerisinde, Selamlama yapacaฤฤฑ kiลinin kim olacaฤฤฑnฤฑ, hardcoded olarak eklemek yerine, รงalฤฑลtฤฑฤฤฑ ortamdaki "USER" isimli Environment variable deฤeri ne ise, ondan bu deฤeri alฤฑp, selamlayacak.
envpod isimli pod iรงerisinde bulunan Environment variable'larฤฑ listelemek,
Bu bir web uygulamasฤฑ podu, normal bu pod'a dฤฑล dรผnyadan eriลmek iรงin, ya loadbalancer yada nodeport ลeklinde bir servis tanฤฑmlamamฤฑz gerekir. Fakat kubernetes bize, ลu imkanฤฑda sunuyor. Biz kubectl kullanarak, herhangi bir pod 'a, deployment'a, service. vb. Kendi bilgisayarฤฑmฤฑzdan tรผnel aรงarak ilgili objenin portuna trafiฤi yรถnlendirebiliyoruz. Testlerde hฤฑzlฤฑ ลekilde, objelerimize baฤlanmak iรงin, kullanabildiฤimiz bu รถzelliฤe "port forward" diyoruz.
Syntax:
รrnek:
Kubectl 'i รงalฤฑลtฤฑrdฤฑฤฤฑmฤฑz cihazฤฑn, 8080 portuna gelen tรผm istekleri, envpod isimli podun 80 portuna gรถnder/yรถnlendir.
Container tanฤฑmฤฑ altฤฑnda girdiฤimiz, Environment variable'larฤฑ, Bu container iรงerisinde,
farklฤฑ yerlerde dilediฤimiz ลekilde kullanabiliriz.
Last updated