Önceki makalemde mikro hizmetlerin büyüleyici dünyasına daldım - Mikro Hizmet Mimarisi Desenleri Bölüm 1: Ayrıştırma Desenleri . Bu, mikro hizmetler ve kalıpları hakkındaki kapsamlı makale serimin başlangıcıydı.
Mantıklı adım bu serinin 2. Bölümüyle devam etmek olsa da, araştırmak ve size anlatmak istediğim bir sonraki şeyin, bu mikro hizmetleri son kullanıcıya sorunsuz bir şekilde sunmanın hayati süreci olduğuna karar verdim.
CI/CD, uygulama geliştirmenin farklı aşamalarına otomasyon eklenerek elde edilen, uygulamaları müşterilere sunmaya yönelik bir tekniktir. CI/CD'yi (Sürekli Entegrasyon ve Sürekli Dağıtım) kavramanın geliştiricilere, arka uç proje eserlerinin proje havuzunun sınırlarının ötesinde nasıl var olduğuna dair daha iyi bir anlayış kazandırabileceğine inanıyorum. Bu anlayış aynı zamanda geliştiricinin bakış açısında da temel bir değişim yaratabilir. Çalışmalarını yalnızca kod satırları olarak görmek yerine, projelerinin daha geniş bağlamını değerli bir ürün olarak benimsemeye başlayabilirler.
Bu makalede, pratik uygulama yoluyla CI/CD sürecinin gizemini açığa çıkarmayı amaçlıyoruz. Size, manuel olarak bir CI/CD işlem hattı oluşturacağınız, modül modüle ayırarak adım adım bir eğitim sunacağız. Bunu yapmak için AWS, Docker, Kubernetes, Ansible, Git, Apache Maven ve Jenkins gibi çağdaş DevOps araçlarının gücünden yararlanacağız. Öyleyse bu yolculuğa başlayalım!
Bu modül, bir AWS EC2 Sanal Sunucu örneğinin oluşturulmasına ayrılmıştır. Bu makalenin bir parçası olarak Jenkins, Ansible ve Kubernetes için üç EC2 bulut sunucusu kuracaksınız. Şimdilik sonraki modüllere devam edebilir ve bu modülü "[module 2]: Jenkins", "[module 6]: Ansible" ve "[module 7]: Kubernetes" bölümlerinde tekrar ziyaret edebilirsiniz.
https://aws.amazon.com adresine gidin.
AWS Hesabı Oluştur düğmesine tıklayın.
Hesap oluşturma web sayfasındaki talimatları izleyin.
https://console.aws.amazon.com/console/home adresine gidin. Oturum Aç düğmesini tıklayın.
Bu web sayfasına gerekli tüm kimlik bilgilerini girin.
Arama kutusunda EC2'yi bulun.
EC2 Hizmeti seçeneğine tıklayarak EC2 Sanal Sunucusunu seçin.
Örneği Başlat düğmesini tıklayın.
“Ad ve etiketler” bölümüne gidin.
"Ad" bölümüne yeni bir AWS EC2 Sanal Sunucu örneği için bir ad girin.
Ayrıca “Ek etiket ekle” seçeneğine tıklayarak sanal sunucunuz için ek etiketler ekleyebilirsiniz.
"Uygulama ve İşletim Sistemi Görüntüleri (Amazon Machine Image)" bölümüne gidin.
Sanal sunucuyla ÜCRETSİZ oynamak için:
“Örnek türü” bölümüne gidin.
Sanal sunucuyla ÜCRETSİZ oynamak için:
Bulut Sunucusu türü bölümünde Ücretsiz kullanıma uygun etiketine sahip bir tür seçin.
Benim için t2.micro (Aile: t2 1cCPU 1 GiB Bellek Mevcut nesil:true) .
"Depolamayı yapılandır" bölümüne gidin.
Sanal sunucuyla ÜCRETSİZ oynamak için:
Varsayılan ayarları değiştirmeyin. Ücretsiz kullanıma uygun müşteriler , 30 GB EBS Genel Amaçlı (SSD) veya Manyetik depolama alanına sahip olabilir.
“Ağ ayarları” bölümüne gidin.
Sanal sunucunuzun güvenliğini ayarlamanız gerekmektedir. Bunu yapmak için,
Varsayılan olarak sanal sunucunuza ( Tür - SSH, Protokol - TCP, Bağlantı Noktası - 22 ) üzerinden erişilebilir. Ek bağlantı türlerine ihtiyacınız varsa ek gelen güvenlik grubu kuralları ekleyerek bunları ekleyin.
“Anahtar çifti (Giriş)” bölümüne gidin.
Henüz oluşturmadıysanız yeni bir anahtar çifti oluşturun.
Henüz “anahtar çifti” oluşturmadıysanız:
“Örneği başlat” düğmesine tıklayarak EC2 Sanal Sunucu örneğini başlatın.
EC2 Sanal Sunucu bulut sunucusu oluşturma işlemi tamamlandıktan sonra aşağıdakileri göreceksiniz.
Daha sonra “Tüm örnekleri görüntüle” butonunu tıklayarak “Instances” bölümüne gitmelisiniz.
Artık AWS EC2 Sanal Sunucu örneğinizin çalıştığını görebilirsiniz.
Şimdi EC2 Virtual Server örneğinde JenkinsServer’ı yapılandıralım.
Jenkins'i çalıştırmak için sanal bir sunucuya ihtiyacınız var.
Bu adımı tamamlamak ve JenkinsServer adında bir EC2 sanal sunucu örneği oluşturmak için bu eğitimin [Modül 1]: AWS EC2 Sanal Sunucu bölümündeki talimatları izleyin.
Güvenlik grubu kurulumu eklemeyi unutmayın. Jenkins ve SSH'nin sırasıyla 8080 ve 22 numaralı bağlantı noktalarında çalışmasına olanak tanır.
EC2 Sanal Sunucu örneğinizi ayırt etmek için “JenkinsServer” adını kullanın.
Yeni bir "JenkinsServer" AWS EC2 bulut sunucusu için "CI_CD_Pipeline" güvenlik grubu ve "CI_CD_Pipeline_Key_Pair" oluşturun. Bunları makalenin ilerleyen kısımlarında yeniden kullanabilirsiniz.
AWS Konsolu ana sayfasına → EC2 Yönetim Konsolu Kontrol Paneli → Bulut Sunucuları'na gidin.
Daha sonra JenkinsServer'ı seçmeli ve ardından “Bağlan” butonuna tıklamalısınız.
Daha sonra bu web sayfasını göreceksiniz. Tekrar “Bağlan” butonuna tıklamalısınız.
Artık EC2 sanal sunucu örneği çevrimiçi terminalini görebilirsiniz.
Artık Jenkins'i EC2 sanal sunucu örneğinize indirmeniz gerekiyor.
Şu talimatları izleyin:
Jenkins indirme web sayfasına gidin.
Kararlı (LTS) ve Normal sürümler (Haftalık) seçeneklerini görebilirsiniz. Red Hat/Fedora/Alma/Rocky/CentOS LTS seçeneğini seçin.
Bu web sayfasını göreceksiniz.
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
Artık Jenkins indirildi.
Jenkins kurulumunu tamamlamak için Jenkins anahtarını içe aktarmamız gerekiyor.
Jenkins anahtarını içe aktarmak için “sudo rpm..” komutunu kopyalayıp çalıştırmamız gerekiyor.
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
Bu şekilde "rpm" paket yöneticisi, yüklediğiniz Jenkins paketlerinin tam olarak Jenkins projesi tarafından yayınlanan paketler olduğunu ve bunların tahrif edilmediğini veya bozulmadığını doğrulayabilir.
Jenkins'i çalıştırmak için EC2 sanal sunucu örneğimize Java yüklememiz gerekiyor.
Java'yı yüklemek için bu komutu kullanın.
sudo amazon-linux-extras install java-openjdk11 -y
Bu komutu kullanarak Java'nın doğru şekilde yüklenip yüklenmediğini doğrulayın:
java -version
Bunun gibi bir şey göreceksiniz.
Jenkins'i çalıştırmak için EC2 sanal sunucu örneğimize fontconfig yüklemeniz gerekir.
Bu komutu kullanın.
sudo yum install fontconfig java-11-openjdk -y
Fontconfig, sistem genelinde yazı tipi yapılandırması, özelleştirme ve uygulama erişimi sağlamak için tasarlanmış bir kitaplıktır. Jenkins'in yazı tiplerini oluşturan özellikleri olması nedeniyle bu gereklidir.
Önceki adımlarda, EC2 sanal sunucu örneğinizi belirli bir Jenkins deposunu kullanacak şekilde yapılandırdınız ve ardından bu depoyla ilişkili GPG anahtarını içe aktardınız. Şimdi Jenkins paketini bulmak için eklediğiniz Jenkins de dahil olmak üzere bildiği tüm depoları arayacak komutu çalıştırmanız gerekiyor. Jenkins paketini Jenkins deposunda bulduğunda indirip yükleyecektir.
Bu komutu çalıştıralım.
sudo yum install jenkins -y
Bu komutu kullanarak Jenkins'i başlatabilirsiniz.
sudo systemctl start jenkins
Jenkins'in çalıştığını kontrol etmek için bu komutu kullanın.
sudo systemctl status jenkins
Çıktıyı aşağıdaki ekran görüntüsünde olduğu gibi göreceksiniz:
Jenkins artık çalışır durumda olmalı.
Jenkins uygulamasına erişmek için herhangi bir web tarayıcısını açın ve EC2 bulut sunucunuzun genel IP adresini veya alan adını ve ardından 8080 numaralı bağlantı noktasını girin.
http://<your-ec2-ip>:8080
Jenkins'e ilk kez eriştiğinizde otomatik olarak oluşturulan bir şifreyle kilitlenecektir.
Bu şifreyi aşağıdaki komutu kullanarak görüntülemeniz gerekmektedir.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Bu şifreyi kopyalayın, tarayıcınıza dönün, Yönetici şifresi alanına yapıştırın ve "Devam Et"e tıklayın.
Daha sonra bu web sayfasını görebileceksiniz.
Artık Jenkins Sunucunuzu kullanabilirsiniz.
Artık Jenkins iyi çalıştığına göre Jenkins işlem hattını oluşturmaya başlayabilirsiniz. Jenkins işlem hattını oluşturmak için yeni bir "Serbest Stil projesi" oluşturmanız gerekir. Yeni bir "Serbest Stil projesi" oluşturmak için Jenkins kontrol paneline gitmeniz ve "Yeni Öğe" düğmesini tıklamanız gerekir.
Github "Serbest Stil Projesi" adını girin ("boru hattı" adı bundan sonra kullanılacaktır) ve ardından "Tamam" düğmesine tıklayın.
Daha sonra boru hattının Açıklamasını sağlayın.
Daha sonra “Uygula” ve “Kaydet” butonuna tıklayın. Bundan sonra bu, bu eğitimde inşa edilecek boru hattının temelini oluşturduğunuz anlamına gelir.
Artık Jenkins AWS EC2 Sanal Sunucu örneğinde çalıştığından Git'i işlem hattıyla yapılandırabilirsiniz.
Git, yazılım ekiplerinin kodda yapılan her değişikliği özel bir veritabanı türünde takip etmesine yardımcı olmak için tasarlanmış ücretsiz ve açık kaynaklı bir dağıtılmış sürüm kontrol sistemidir (VCS). Bir hata yapılırsa geliştiriciler, tüm ekip üyelerinin aksamasını en aza indirirken hatanın düzeltilmesine yardımcı olmak için zamanı geri çevirebilir ve kodun önceki sürümlerini karşılaştırabilir. VCS özellikle aşağıdakiler için faydalıdır:
En popüler sürüm kontrol sistemi olan Git, projenizin Github deposundan en son kodu Jenkins'inizin kurulu olduğu EC2 sanal sunucu örneğinize çekmemize olanak tanır.
Git'i yüklemek için bu komutu kullanın.
sudo yum install git -y
Şimdi bu komutu kullanarak Git'in çalıştığını doğrulayın.
git --version
Git artık EC2 Sanal Sunucu örneğinde sorunsuz çalışıyor.
Git, EC2 Sanal Sunucu örneğinde sorunsuz çalıştığı için artık Jenkins'i Git ile entegre edebiliriz.
Bu entegrasyonu başlatmak için Jenkins Github eklentisini kuralım.
Jenkins kontrol paneli bölümüne gidin.
“Jenkins'i Yönet” düğmesine tıklayın ve ardından “Eklentileri Yönet” düğmesine tıklayın.
“Kullanılabilir eklentiler” düğmesine tıklayın.
Github eklentisi Arama kutusunu bulun.
Github eklentisini seçin.
Github eklentisini seçin. Ve ardından “Yeniden başlatmadan yükle” düğmesine tıklayın.
Github eklentisinin indirilmesinin bitmesini bekleyin.
Evet! Jenkins Github eklentisi kuruldu.
Artık GitHub Jenkins eklentisi yüklendiğinde, bu eklentiyi sonunda Jenkins'i Git ile entegre edecek şekilde yapılandırabilirsiniz. Bunun için “En üst sayfaya dön” butonuna tıklayarak ana sayfaya dönmeniz gerekmektedir.
Daha sonra ana sayfada “Jenkins'i Yönet” butonuna ve ardından “Global araç konfigürasyonu” butonuna tıklamanız gerekiyor.
Daha sonra Global Tool Configuration web sayfasında Git bölümüne gitmelisiniz.
Git bölümünde, bilgisayardaki Git'in adını ve yolunu sağlayarak Git'i yapılandırmanız gerekir.
Daha sonra "Uygula" ve "Kaydet" düğmelerini tıklayın**.**
Burada Jenkins Github eklentisini yapılandırmayı tamamladınız.
Artık Jenkins Github eklentisi yüklenip yapılandırıldığından, artık bu eklentiyi işlem hattınızda kullanabilirsiniz. Bu, modül 2'de oluşturduğunuz işlem hattınızın proje kodunuzu belirtilen GitHub deposundan çekmesine olanak tanır.
Bu eklentiyi işlem hattınıza entegre etmek için Kaynak Kodu Yönetimi bölümüne gitmeniz ve işlem hattınızda Git'i seçmeniz gerekir. Daha sonra proje havuzu URL'nizi sağlamanız gerekir. Proje deponuz Github'da herkese açıksa kimlik bilgileri sağlamanıza gerek yoktur. Proje deposu Github'da özelse kimlik bilgileri sağlamanız gerekir.
Projemi bir sonraki Depo URL'si ile kullanabilirsiniz: https://github.com/Sunagatov/Hello.git .
Bunu kopyalayıp “ Depo URL'si” girişine yapıştırmanız yeterlidir. Ardından Git'in işlem hattıyla entegrasyonunu tamamlamak için "Uygula" ve "Kaydet" düğmelerini tıklayın.
Artık Github'dan bir proje çekmek için güncellenmiş işlem hattınızı kullanabilirsiniz. Bunu yapmak için **“Şimdi Oluştur”** düğmesine tıklamanız gerekir. Sonuç olarak, yapım geçmişinde başarılı bir yapı göreceksiniz.
Yapı geçmişinden ilk yapıyı açın.
Artık ilk yapının başarılı iş sonucunu görebilirsiniz. AWS EC2 terminalinizi açarsanız. Boru hattının iyi çalışıp çalışmadığını kontrol edebilirsiniz.
Sadece bu komutu kullanın.
cd /var/lib/jenkins/workspace/{your pipeline name}
Bu şekilde Github'daki projenizin AWS EC2 sanal sunucu örneğinize çekildiğini görebilirsiniz.
Apache Maven, yazılım geliştirmede yaygın olarak kullanılan bir yapı otomasyonu ve proje yönetimi aracıdır. Proje bağımlılıklarını yöneterek ve tutarlı bir yapı yaşam döngüsü sağlayarak kodu derleme, test etme ve paketleme sürecini kolaylaştırır. Maven, proje yapısını, bağımlılıkları ve görevleri tanımlamak için XML tabanlı yapılandırma dosyalarını (POM dosyaları) kullanarak geliştiricilerin karmaşık yazılım projelerini verimli bir şekilde yönetmesine ve dağıtmasına olanak tanır.
Artık Git'i işlem hattına entegre ettiğinize göre, projenizi oluşturmanıza, test etmenize ve paketlemenize olanak tanıyan Apache Maven'i dahil ederek işlem hattını daha da geliştirebilirsiniz. Bunu yapmak için Apache Maven'i Jenkins ve Git'in kurulu olduğu AWS EC2 Sanal Sunucu örneğinize yüklemeniz gerekir.
Apache Maven'i indirmek için “/opt” dizinine gidin.
cd /opt
Ve sonra bu komutu kullanın.
sudo wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz
Bu komut en son resmi Apache Maven'i indirecektir (en son sürümü resmi Apache Maven web sitesinde kontrol edin). En son resmi Apache Maven sürümünü bulmak için https://maven.Apache.org/download.cgi bağlantısını kullanın.
Apache Maven'i indirilen arşivden çıkarmak için bu komutu kullanın:
sudo tar -xvzf apache-maven-*.tar.gz
Bu komutu kullanarak kök klasöre taşıyın.
cd ~
Bu komutu kullanarak .bash_profile dosyasını düzenleyin.
vi .bash_profile
JAVA_HOME ve M2_HOME değişkenlerini ekleyin.
JAVA_HOME için JDK11 yolunu, M2_HOME değişkeni için maven dizininin yolunu atayın.
JDK yolunu bulmak için bu komutu kullanın.
sudo find / -name java
VIM nasıl kullanılır?
Değişiklikleri kaydedin.
Daha sonra sistem değişkenlerini yenilemek için bu komutu yürütün.
source .bash_profile
$PATH'i doğrulamak için bu komutu kullanın.
echo $PATH
Apache Maven'i doğrulamak için bu komutu kullanın.
mvn -v
Her şeyi doğru yaptıysanız Apache Maven sürümünü görüntüleyebileceksiniz.
Apache Maven bir EC2 örneğinde kullanılabildiğinden, işlem hattıyla entegre etmek için Apache Maven eklentisini yükleyebilirsiniz.
Bunu başarmak için şu adımları izleyin:
İndirme işleminin bitmesini bekleyin.
Daha sonra “En üst sayfaya dön” butonuna tıklayın.
Apache Maven Jenkins eklentisinin başarılı kurulumuyla artık bu eklentiyi modül 2 ve 3'te oluşturduğunuz ve güncellediğiniz işlem hattında kullanabilirsiniz.
Bunu yapmak için şu adımları izleyin:
Daha sonra “Maven” bölümüne gidin. “Maven Ekle” butonuna tıklayın. "Otomatik olarak yükle" seçeneğinin işaretini kaldırın.
Ardından adı ve MAVEN_HOME yolunu ekleyin.
“Uygula” ve “Kaydet” butonlarına tıklayın.
Burada Apache Maven Jenkins eklentisini yapılandırmayı tamamladınız.
Artık Apache Maven GitHub eklentisi yüklenip yapılandırıldığından, artık Apache Maven'i işlem hattınızda kullanabilirsiniz. Bu, "[modül 2]: Jenkins Sunucusu"nda oluşturduğunuz boru hattınızın bir jar yapıtı oluşturmak için proje kodunuzu oluşturmasına olanak tanır.
Apache Maven'i işlem hattına entegre etmek için şu adımları izlemeniz gerekir:
Son olarak Apache Maven'in işlem hattı ile entegrasyonunu tamamlamak için "Uygula" ve "Kaydet" butonlarına tıklamalısınız.
Artık Github projenizi oluşturmak için güncellenmiş işlem hattınızı kullanabilirsiniz. Bunu yapmak için **“Şimdi Oluştur”** düğmesine tıklamanız gerekir. Sonuç olarak, yapım geçmişinde başarılı bir iş sonucu göreceksiniz.
AWS EC2 terminalinizi açarsanız. Boru hattının iyi çalışıp çalışmadığını kontrol edebilirsiniz.
Sadece bu komutu kullanın.
cd /var/lib/jenkins/workspace/{your pipeline name}/target
Bu şekilde, projenizin GitHub'dan başarıyla oluşturulduğunu gösteren JAR yapıtını görebilirsiniz.
Şimdi Docker ve Ansible kuracağınız "Ansible Server" isminde yeni bir EC2 örneği oluşturalım.
Bu adımı tamamlamak için bu eğitimin " AWS EC2 Sanal Sunucu örneğini başlatma" bölümündeki talimatları kullanın. Güvenlik grubu kurulumu eklemeyi unutmayın. Docker ve SSH'nin sırasıyla 8080 ve 22 numaralı bağlantı noktalarında çalışmasına olanak tanır.
“Bağlan” düğmesine tıklayın.
Artık EC2 Sanal Sunucu örneği çevrimiçi terminalini görebilirsiniz.
sudo chown ansible-admin:ansible-admin /opt/docker
Artık Ansible EC2 bulut sunucunuza docker yüklemeniz gerekiyor. Bunu yapmak için yeni bir docker klasörü oluşturmanız gerekir.
sudo mkdir /opt/docker
Daha sonra bir sonraki komutu çalıştırarak docker’ı kurun.
sudo yum install docker -y
Docker admin ayrıcalıklarını vermek için mevcut kullanıcı olan “ansible-admin”i “AnsibleServer” EC2 sanal sunucusu üzerindeki Docker grubuna eklemeniz gerekmektedir.
sudo usermod -a -G docker ansible-admin
Bu değişikliklerin etkili olması için oturumu kapatıp tekrar giriş yapmanız gerekecektir.
Daha sonra bir sonraki komutu çalıştırabilirsiniz
id ansible-admin
yeni liman işçisi kullanıcısının var olduğunu görmek için.
Artık Docker, Ansible EC2 örneğine yüklendiğinden, bir sonraki komutu çalıştırarak onu başlatabilirsiniz.
sudo systemctl start docker
Docker başlatıldığında bir sonraki komutu çalıştırabilirsiniz.
sudo systemctl status docker
docker'ın aktif olduğunu ve şu anda çalıştığını görmek için.
İşlem hattının son sürümünde süreç, GitHub projenizden yeni bir Docker görüntüsü oluşturmayı ve bunu Docker Hub'a aktarmayı içerecektir. Bunu başarmak için GitHub projenizin bir Dockerfile içermesi gerekir.
“ [Modül 3]: Git ve Github” modülünde sunulan “Merhaba” projesini kullandıysanız bu proje deposunda zaten Dockerfile bulunduğundan yeni bir Dockerfile oluşturmanıza gerek yoktur.
FROM eclipse-temurin:17-jre-jammy ENV HOME=/opt/app WORKDIR $HOME ADD hello-0.0.1-SNAPSHOT.jar $HOME ENTRYPOINT ["java", "-jar", "/opt/app/hello-0.0.1-SNAPSHOT.jar" ]
Kendi proje deponuzu kullandıysanız ve içinde Docker dosyası yoksa yeni bir Docker dosyası oluşturmanız gerekecektir.
Yeni bir Dockerfile oluşturmak için yeni dosyayı oluşturacak aşağıdaki komutu yürütün.
sudo touch Dockerfile
Daha sonra bu dosyayı kapsayıcıya alınmış bir uygulama ortamının nasıl oluşturulacağını açıklayan bir dizi komutla doldurabilirsiniz. Bu komutlar, dosyaları görüntüye kopyalamak, yazılımı yüklemek, ortam değişkenlerini ayarlamak ve kapsayıcıyı yapılandırmak gibi eylemleri içerir.
Dockerfile’ı bu komutlarla doldurmak için aşağıdaki komutu yürütün.
vim Dockerfile
Dockerfile kullanıma hazır.
Artık Dockerfile'ınız kullanıma hazır olduğuna göre, projenizin JAR yapısını **"JenkinsServer"**EC2 örneğinden kopyalayıp "AnsibleServer" EC2 örneğine yapıştırarak ilerleyin. Bu aktarımın boru hattı yoluyla daha da otomatikleştirileceğini unutmamak önemlidir.
Bu adımı tamamlayarak Docker dosyanızı kurduğunuz Docker ortamıyla birlikte test etmeye hazır olacaksınız.
Teste başlamadan önce Dockerhub'da kimliğinizi doğruladığınızdan emin olun. Aşağıdaki komutu yürütün.
docker login
Bu komut, kullanıcı adınız ve şifreniz de dahil olmak üzere Dockerhub oturum açma bilgilerinizi girmenizi isteyecektir.
Bununla Docker'da oturum açma işlemini tamamladınız ve artık teste devam etmeye hazırsınız.
Dockerhub'a başarıyla giriş yaptığınızda artık hazırladığınız Docker dosyasını test etmeye hazırsınız.
Docker görüntüsü oluşturmak için bu komutu yürütün.
docker build -t hello:latest .
Ardından görüntünün Dockerhub'a yüklenmesini kolaylaştıracak bir etiket oluşturmak için sonraki komutu yürütün:
docker tag hello:latest zufarexplainedit/hello:latest
Son olarak, bu komutun yürütülmesiyle Docker görüntüsünü Dockerhub'a göndermeye devam edin.
docker push zufarexplainedit/hello:latest
Bu adımları izleyerek Dockerhub hesabınıza giderek yeni bir görsel görüp göremediğinizi doğrulayın.
Artık görüntünün etkili bir şekilde eklendiğini gözlemlemelisiniz. Bu sonuç, Docker ortamının başarıyla kurulduğunu ve Docker dosyanızın doğru olduğunu onaylar.
Şimdi EC2 Sanal Sunucu örneği üzerinde Ansible Sunucusunu yapılandıralım.
Ansible'ı çalıştırmak için sanal bir sunucuya ihtiyacınız var.
Bu adımı tamamlamak ve Ansible için bir EC2 sanal sunucu örneği oluşturmak için bu eğitimin [Modül 1]: AWS EC2 Sanal Sunucu bölümündeki talimatları izleyin.
Güvenlik grubu kurulumu eklemeyi unutmayın. Ansible ve SSH'nin sırasıyla 8080 ve 22 numaralı bağlantı noktalarında çalışmasına olanak tanır.
EC2 Sanal Sunucu örneğinizi ayırt etmek için “AnsibleServer” adını kullanın.
Yeni bir "AnsibleServer" EC2 örneği için "CI_CD_Pipeline" güvenlik grubunu ve "CI_CD_Pipeline_Key_Pair"i yeniden kullanabilirsiniz.
AWS Konsolu ana sayfasına → EC2 Yönetim Konsolu Kontrol Paneli → Bulut Sunucuları → AnsibleServer'a gidin.
Daha sonra “Bağlan” butonuna tıklayın.
Daha sonra bu web sayfasını göreceksiniz. Tekrar “Bağlan” butonuna tıklamalısınız.
Artık EC2 sanal sunucu örneği çevrimiçi terminalini görebilirsiniz.
Şimdi EC2 sanal sunucu örneği üzerinde Ansible Server'ı yapılandıralım.
AnsibleServer'ı EC2 sanal sunucu örneği üzerinde yapılandırmak istediğinizde yapmanız gereken ilk şey, ana bilgisayar adını değiştirmektir.
Hadi yapalım. Ana bilgisayar adı dosyasını açmak için bu komutu yürütün:
sudo vi /etc/hostname
Bunun gibi bir şey görmelisiniz:
Bu ana bilgisayar adını "ansible-server" ile değiştirin. Ardından yeniden başlatın.
sudo init 6
Şimdi AWS EC2 Sanal Sunucu örneğine yeni bir ansible-admin kullanıcısı ekleyelim.
Bunu yapmak için şu komutu kullanın:
sudo useradd ansible-admin
Daha sonra ansible-admin kullanıcısının şifresini ayarlayın.
sudo passwd ansible-admin
Ayrıca sudoers dosyasını düzenleyerek kullanıcı ayrıcalıklarını yapılandırmanız gerekir.
sudo visudo
Bu sudoers dosyasına “ansible-admin ALL=(ALL) ALL” ekleyin.
Ayrıca, PasswordAuthentication'ı etkinleştirmek için /etc/ssh/sshd_config dosyasını düzenlemeniz gerekir.
sudo vi /etc/ssh/sshd_config
Daha sonra bu değişiklikleri onaylamak için hizmeti yeniden yüklemeniz gerekir.
sudo service sshd reload
Bu komutu yürütmenin bir sonucu olarak şunu göreceksiniz:
Artık diğer tüm komutlara sudo eklemekten kaçınmak için bu komutu kullanabilirsiniz.
sudo su - ansible-admin
Bu makalenin ilerleyen kısımlarında K8s EC2 sanal sunucu örnekleri gibi uzak sunucuları yönetmeyi planlıyorsunuz. Bu yüzden SSH anahtarlarını ayarlamanız gerekiyor.
ssh-keygen
Bu komutu yürütmenin bir sonucu olarak şunu göreceksiniz:
Artık SSH anahtarları oluşturuldu ve kullanıma hazır.
Artık Ansible'ı “AnsibleServer” EC2 sanal sunucu örneğinize yükleyebilirsiniz.
Hadi yapalım.
Ansible'ı yüklemek için bu komutu yürütün.
sudo amazon-linux-extras install ansible2
Ansible'ı doğrulamak için şu komutu kullanın:
ansible --version
Bu komutu yürütmenin bir sonucu olarak şunu göreceksiniz:
Ansible , "AnsibleServer" EC2 sanal sunucu örneğinize kurulduğundan, Jenkins'i Ansible ile entegre edecek şekilde yapılandırabilirsiniz. Jenkins'i Ansible'ın yüklü olduğu EC2 Sanal Sunucu örneğiyle ve Kubernetes'in yüklü olduğu diğer EC2 Sanal Sunucu örnekleriyle entegre etmek için “SSH üzerinden Yayınla” eklentisini yüklemeniz gerekir.
“Gösterge Paneli” → “ Jenkins'i Yönet” → “Sistemi Yapılandır” → “Kullanılabilir eklentiler” seçeneğine gidin.
Daha sonra arama kutusuna “SSH üzerinden yayınla” yazın.
“Yeniden başlatmadan yükle” düğmesine tıklayın. İndirme işleminin bitmesini bekleyin.
Artık Jenkins EC2 Sanal Sunucu örneğine “SSH üzerinden yayınla” eklentisi yüklendi.
Apache Maven Jenkins eklentisinin başarılı kurulumuyla artık bu eklentiyi modül 2 ve 3'te oluşturduğunuz ve güncellediğiniz işlem hattında kullanabilirsiniz.
Bunu yapmak için şu adımları izleyin:
“Kontrol Paneli” → “Jenkins'i Yönet” → “Sistemi Yapılandır” → “SSH Üzerinden Yayınla” seçeneğine gidin.
Ana bilgisayar adı, kullanıcı adı ve özel anahtar (veya varsa şifre) dahil olmak üzere gerekli tüm verileri ekran görüntüsünde olduğu gibi girin.
Daha sonra “Uygula” ve “Kaydet” butonlarına tıklayın.
Burada “SSH üzerinden yayınla” Jenkins eklentisini yapılandırmayı tamamladınız.
Daha sonra eklentinin düzgün çalıştığını doğrulamak için “Yapılandırmayı Test Et” seçeneğine tıklayın.
Sol tarafta test eklentisi yapılandırma durumunun “Başarılı” olduğunu görebilirsiniz. Bu, eklenti yapılandırmasının doğru olduğu anlamına gelir.
JAR projesinin depolanacağı AnsibleServer EC2 örneğinde yeni bir klasör oluşturmanız gerekir. Bu jar daha sonra Docker imajı oluşturmak için kullanılacaktır.
Hadi başlayalım.
AnsibleServer EC2 örneğinde “/opt” klasörüne gidin.
cd /opt
Orada yeni bir “docker” klasörü oluşturun.
sudo mkdir docker
Bu “docker” klasörüne ayrıcalıklar verin.
sudo chown ansible-admin:ansible-admin docker
Şimdi bu komutu çalıştırarak “docker” klasörünün ayrıcalıklarını kontrol edin.
ll
“Docker” klasörüne “ansible-admin” kullanıcısı ile erişilebildiğini görebilirsiniz.
Artık "SSH üzerinden yayınla" Github eklentisi kurulup yapılandırıldığında, artık onu "[modül 2]: Jenkins Sunucusu"nda oluşturduğunuz ardışık düzene entegre ederek bir proje jar eserini "JenkinsServer"dan " JenkinsServer" a aktarabilirsiniz. “AnsibleSunucusu” .
Peki, "SSH üzerinden yayınla" Github eklentisini ardışık düzene entegre etmek için şu adımları izlemeniz gerekir:
Son olarak “SSH üzerinden yayınla” eklentisinin boru hattı ile entegrasyonunu tamamlamak için “Uygula” ve “Kaydet” butonlarına basmalısınız.
Artık bir proje jar yapıtını " JenkinsServer" dan "AnsibleServer" a aktarmak için güncellenmiş işlem hattınızı kullanabilirsiniz. Bunu yapmak için “Şimdi Oluştur” düğmesine tıklamanız gerekir. Sonuç olarak yapım geçmişinde başarılı bir iş sonucu göreceksiniz.
“AnsibleServer” AWS EC2 terminalinizi açarsanız. Boru hattının iyi çalışıp çalışmadığını kontrol edebilirsiniz.
Sadece bu komutu kullanın.
cd /opt/docker
Bu şekilde, projenizin GitHub'dan başarıyla oluşturulduğunu gösteren JAR yapıtını görebilirsiniz.
Bir Ansible playbook'u çalıştırdığınızda, üzerinde çalışması gereken ana bilgisayarları belirtirsiniz. Bunu iki şekilde yapabilirsiniz:
hosts
parametresini bir IP adresleri veya ana bilgisayar adları listesine ayarlayabilirsiniz./etc/ansible/hosts
.
/etc/ansible/hosts
dosyasını düzenleyerek, bir oyun kitabını her çalıştırdığınızda IP adreslerini yazmak zorunda kalmadan ana bilgisayar gruplarını kolayca yönetebilirsiniz.
Aşağıdaki komutu çalıştırarak AnsibleServer EC2 örnek hostunu bulalım.
sudo ifconfig
AnsibleServer EC2 örnek hostunu bulduktan sonra aşağıdaki komutu çalıştırarak onu Ansible hosts dosyasına ekleyebilirsiniz.
sudo vi /etc/ansible/hosts
Referans olarak “[ansible]” ifadesini de ekleyebilirsiniz.
Bir sunucu kümesini yönetiyorsanız ve hepsine bir oyun kitabı uygulamak istiyorsanız, oynatma kitabında her sunucunun IP adresini belirtmek yerine, tüm sunucuları envanter dosyasındaki bir gruba ekleyebilir ve ardından başucu kitabındaki grup.
Ansible, uzak sunuculardaki görevleri otomatikleştirmek için tasarlanmıştır. Parolasız SSH kimlik doğrulaması, Ansible'ın bu sunuculara manuel parola girişine gerek kalmadan bağlanmasını sağlar.
Ansible-admin kullanıcısının SSH anahtarını kullanarak bilgisayarınızdan başka bir bilgisayara (172.31.34.41 IP adresindeki gibi) güvenli bir bağlantı oluşturmak için bu komutu yürütün.
sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}
Benim durumumda şöyle görünüyor.
sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected]
Artık “Eklenen anahtar(lar)ın sayısı: 1”i görebilirsiniz. Bu, parolasız SSH kimlik doğrulama kurulumunun başarıyla tamamlandığı anlamına gelir.
Artık Ansible hazır olduğuna ve kullanıma hazır olduğuna göre, satış hattınız için yeni bir Ansible taktik kitabı oluşturabilirsiniz. Bu başucu kitabı, Ansible'ın yeni bir Docker görüntüsü oluşturup Dockerhub'a göndermesine olanak tanıyacak.
Bunu nasıl yapabileceğiniz aşağıda açıklanmıştır:
touch hello-app.yml
hello-app.yml
dosyasını düzenleyin. Bu komutla düzenlemek için açın. vi hello-app.yml
--- - hosts: ansible user: root tasks: - name: create docker image command: docker build -t hello:latest . args: chdir: /opt/docker - name: create tag to push image onto dockerhub command: docker tag hello:latest zufarexplainedit/hello:latest - name: push docker image onto dockerhub command: docker push zufarexplainedit/hello:latest
Docker görevleri için Ansible playbook kullanıma hazır.
Ansible, Ansible playbook, AnsibleServer ve JenkinsServer'ın tamamı doğru şekilde yapılandırıldığında, Ansible playbook'u test etme zamanı geldi.
Ansible oyun kitabınızın konumuna gidin.
cd /opt/docker
Daha sonra aşağıdaki komutu yürütün.
sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml
Tamamlandığında, Ansible oyun kitabınızın başarılı yürütme sonucunu göreceksiniz.
Ayrıca, bir dakikanızı ayırıp Dockerhub hesabınızı ziyaret edin ve artık yeni bir görüntünün görünür olup olmadığını doğrulayın.
Yeni eklenen resmi görmelisiniz. Bu sonuç, Ansible başucu kitabınızın doğru olduğunu doğrular.
Artık "SSH üzerinden yayınla" Github eklentisi, Ansible ve Docker yüklenip yapılandırıldığından, artık hepsini bir proje jar eserini aktarmak için "[modül 2]: Jenkins Sunucusu"nda oluşturduğunuz ardışık düzene entegre edebilirsiniz. " JenkinsServer" dan "AnsibleServer" a gidin ve ardından projenizden yeni bir Docker görüntüsü oluşturun ve ardından bu Docker görüntüsünü Dockerhub'a aktarın.
Bunu başarmak için şu adımları uygulamanız gerekir:
Son olarak, Ansible Docker görevlerinin işlem hattıyla entegrasyonunu tamamlamak için "Uygula" ve "Kaydet" düğmelerine tıklayın.
Artık bir proje jar eserini " JenkinsServer" dan "AnsibleServer" a sorunsuz bir şekilde aktarmak için yükseltilmiş işlem hattınızı test edebilir, ardından projenizden yeni bir Docker görüntüsü oluşturabilir ve ardından bu Docker görüntüsünü Dockerhub'a aktarabilirsiniz. Bunu yapmak için “Şimdi Oluştur” düğmesine tıklamanız gerekir. Sonuç olarak yapım geçmişinde başarılı bir iş sonucu göreceksiniz.
Ayrıca, bir dakikanızı ayırıp Dockerhub hesabınızı ziyaret edin ve artık yeni bir görüntünün görünür olup olmadığını doğrulayın.
Yeni eklenen resmi görmelisiniz. Bu sonuç, Docker görevlerini içeren Ansible oyun kitabınızın ardışık düzene başarıyla entegre edildiğini doğrular.
Şimdi EC2 bulut sunucusunda K8'leri yapılandıralım. Yeni bir EC2 bulut sunucusu oluşturacak ve Kubernetes kümesiyle daha fazla etkileşim kurmak için kubectl komut satırı aracını kuracaksınız.
Bu adımı tamamlamak için bu eğitimin " AWS EC2 Sanal Sunucu örneğini başlatma" bölümündeki talimatları kullanın.
Güvenlik grubu kurulumu eklemeyi unutmayın. Tüm araçların ve SSH'nin sırasıyla 8080 ve 22 numaralı bağlantı noktalarında çalışmasına olanak tanır.
EC2 Sanal Sunucu örneğinizi ayırt etmek için “K8sServer” adını kullanın.
Yeni bir "K8sServer" EC2 örneği için "CI_CD_Pipeline" güvenlik grubunu ve "CI_CD_Pipeline_Key_Pair"i yeniden kullanabilirsiniz.
“Bağlan” düğmesine tıklayın.
Artık EC2 Sanal Sunucu örneği çevrimiçi terminalini görebilirsiniz.
EC2 sanal sunucu örneği üzerinde KuberenetesServer'ı yapılandırmak istediğinizde yapmanız gereken ilk şey host adını değiştirmektir.
Hadi yapalım. Ana bilgisayar adı dosyasını açmak için bu komutu yürütün:
sudo vi /etc/hostname
Bunun gibi bir şey görmelisiniz.
Bu ana bilgisayar adını “kubernetes-server” ile değiştirin ve ardından yeniden başlatın.
sudo init 6
Ana makine adınız değiştirildi.
AWS sürümünü kontrol etmek için bu komutu kullanın.
aws --version
Bu şekilde mevcut aws-cli sürümünüzü görebilirsiniz.
aws-cli/1.18 sürümünü görebiliyorsanız en son sürümü indirmelisiniz.
Artık EC2 bulut sunucunuzda eski bir aws-cli sürümünün bulunduğunu öğrendiğiniz için onu güncellemeniz gerekiyor. Bunun için AWS → Belgeler → AWS Komut Satırı Arayüzü → Sürüm 2 için Kullanım Kılavuzu'na gidin.
curl komutunu kopyalayıp yapıştırın.
Öncelikle awscli sürüm 2'yi indirmek için bu komutu çalıştırın.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
İndirme işleminin başlamasını bekleyin.
Bunun gibi bir şey görmelisiniz.
İkinci olarak, awscli sürüm 2 arşivini açmak için bu komutu uygulamanız gerekir.
unzip awscliv2.zip
Üçüncüsü, awscli sürüm 2'yi yüklemek için bu komutu çalıştırmalısınız.
sudo ./aws/install
Ardından Kubernetes EC2 Sanal Sunucu örneği çevrimiçi terminalini yeniden yükleyin.
Daha sonra AWS sürümünü kontrol etmek için bu komutu kullanın.
aws --version
Aws cli'nin aws-cli/2'ye sahip olduğunu görebilirsiniz.
Kubectl, temel altyapıya bakılmaksızın herhangi bir Kubernetes kümesiyle etkileşim kurmaya yönelik temel bir komut satırı aracıdır. Bir Kubernetes kümesi içinde kaynakları yönetmenize, uygulamaları dağıtmanıza, ağı yapılandırmanıza, günlüklere erişmenize ve diğer çeşitli görevleri gerçekleştirmenize olanak tanır.
Artık bir Kubernetes kümesiyle daha fazla etkileşim kurmak için kubectl komut satırı aracını yüklemeniz gerekiyor. Bunun için AWS → Belgeler → Amazon EKS → Kullanıcı Kılavuzu → kubectl'i yükleme veya güncelleme → Linux seçeneğine gitmeniz gerekir.
Veya https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html bağlantısını tıklamanız yeterlidir.
Öncelikle kubectl'i indirmek için bu komutu yürütün.
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl
İndirme işlemini bekleyin.
Bunun gibi bir şey göreceksiniz.
Kubectl'e izin verin.
chmod +x kubectl
Kubectl'i /usr/local/bin klasörüne taşıyın.
sudo mv kubectl /usr/local/bin
Kubectl sürümünü kontrol edin.
kubectl version --output=yaml
Eksctl , Amazon EKS hizmetine özel olarak tasarlanmış başka bir komut satırı aracıdır. Eksctl, AWS EKS kümeleri oluşturmak, düğüm gruplarını yönetmek ve AWS altyapı kurulumunun ve yönetiminin çoğunu soyutlayarak IAM rolleri ve diğer AWS hizmetleriyle entegrasyon gibi EKS'ye özgü görevleri gerçekleştirmek için kullanılabilir.
Kubectl'i indirmek için komutu yürütün.
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
eksctl'yi /usr/local/bin klasörüne taşıyın.
sudo mv /tmp/eksctl /usr/local/bin
eksctl sürümünü kontrol edin.
eksctl version
Sürümü görmelisiniz
Bir IAM rolü oluşturmanız ve bunu “KubernetesServer” EC2 örneğinize eklemeniz gerekir.
Bunu yapmak için arama kutusunda EC2'yi bulmanız gerekir.
https://us-east-1.console.aws.amazon.com/ec2 / bağlantısına tıklayarak EC2 Sanal Sunucusunu seçin.
IAM Kontrol Paneli → Roller'e gidin.
IAM rolleri web sayfasında "Rol oluştur" düğmesini tıklayın.
Ardından “AWS hizmeti”, “EC2”yi seçin. Ve “İleri” butonuna tıklayın.
Daha sonra arama kutusunda “AmazonEC2FullAccess” , “AmazonEC2FullAccess” , “IAMFullAccess” , “AWSCloudFormationFullAccess” i bulun ve ardından “İzin ekle” butonuna tıklayın.
Ve ardından “İleri” düğmesine tıklayın.
Daha sonra “Rol adı” girişine “Eksctl_Role” yazın.
Ve “Rol oluştur” butonuna tıklayın.
Rol en sonunda oluşturulur.
AWS EC2 bulut sunucusu web sayfasına gidin. “KuberbetesServer”ı seçin. Ardından “Eylemler” → “Güvenlik” → “IAM Rolünü Değiştir”i tıklayın.
“Eksctl_Role” u seçin ve ardından “IAM rolünü güncelle” düğmesini tıklayın.
Artık IAM Rolünüz “EKS_Server” ve eksctl aracınıza bağlandı.
Amazon EKS (Elastic Kubernetes Service) kümesi, AWS üzerinde yönetilen bir Kubernetes ortamıdır ve kurulum, ölçeklendirme ve bakım gibi karmaşık altyapı görevlerini otomatikleştirir. Container mimarisine alınmış uygulamaları dağıtmak, yönetmek ve ölçeklendirmek, operasyonları kolaylaştırmak ve geliştiricilerin temel altyapıyı yönetmek yerine kodlamaya odaklanmalarını sağlamak için verimli, güvenli ve AWS için optimize edilmiş bir platform sağladığından önemlidir.
Artık EKS kümenizi kurmanın zamanı geldi.
Bunu başarmak için şu adımları izleyin:
eksctl create cluster --name cluster-name \ --region region-name \ --node-type instance-type \ --nodes-min 2 \ --nodes-max 2 \ --zones <AZ-1>,<AZ-2>
Örneğin benim durumumda şöyle görünüyor.
eksctl create cluster --name zufarexplainedit \ --region eu-north-1 \ --node-type t3.micro
Değiştirilen komutu yürütün ve küme oluşturma işleminin tamamlanmasını sabırla bekleyin. AWS CloudFormation web sayfasında EKS kümesi durumunun "oluşturuluyor" olarak belirtildiğini fark edeceksiniz.
Küme oluşturma prosedürü genellikle yaklaşık 20 dakika sürer. Tamamlandığında, terminal işlemin sonucunu gösterecektir.
Ayrıca AWS CloudFormation web sayfasında başarılı EKS kümesi oluşturma durumunu doğrulayabilirsiniz.
Kubernetes Dağıtımı YAML dosyası, Kubernetes kümesindeki belirli bir uygulamanın veya hizmetin nasıl yönetileceğini ve bakımının nasıl yapılacağını tanımlayan, YAML biçiminde yazılmış bir yapılandırma komut dosyasıdır. Uygulamayı çalıştıran konteynerlerin dağıtımını, ölçeklenmesini, güncellenmesini ve izlenmesini düzenlemek için talimatlar içerir. Bu dosya, kapsayıcı görüntüsü, istenen kopya sayısı, kaynak sınırları, ortam değişkenleri, ağ ayarları ve daha fazlası gibi ayrıntıları içerir. Dağıtım YAML dosyası, bir Kubernetes kümesine uygulandığında uygulamanın istenen durumunu sağlar; istenen kullanılabilirlik ve güvenilirlik düzeyini korumak için kapsayıcıların oluşturulmasını, ölçeklendirilmesini ve kurtarılmasını otomatik olarak yönetir.
Artık Kubernetes kümesi, eksctl, kubectl yüklenip yapılandırıldığından, bir Kubernetes Deployment yaml dosyası oluşturabilirsiniz.
Aşağıdaki komutu çalıştırarak bunu yapabilirsiniz.
touch hello-app-deployment.yaml
Daha sonra aşağıdaki komutu çalıştırarak bu dosyayı düzenleyin.
vi hello-app-deployment.yaml
Bu içeriği hello-app-deployment.yaml dosyasına ekleyin.
apiVersion: apps/v1 kind: Deployment metadata: name: zufarexplainedit-hello-app labels: app: hello-app spec: replicas: 2 selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: zufarexplainedit/hello imagePullPolicy: Always ports: - containerPort: 8080 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1
Artık hello-app-deployment.yaml oluşturuldu ve kullanıma hazır.
Kubernetes Hizmeti YAML dosyası, bir grup bölme için ağ soyutlamasını tanımlayan ve bunlara bir Kubernetes kümesi içinde tutarlı bir şekilde erişilmesine olanak tanıyan, YAML biçiminde yazılmış bir yapılandırma komut dosyasıdır. Bu dosya, hizmetin diğer hizmetler veya harici istemciler tarafından nasıl keşfedilmesi, erişilmesi ve yük dengelemesinin nasıl yapılması gerektiğini özetlemektedir. Hizmet türü (ClusterIP, NodePort, LoadBalancer), bağlantı noktası numaraları, bölmeleri tanımlamak için seçiciler ve daha fazlası gibi özellikleri içerir. Hizmet YAML dosyası, bir Kubernetes kümesine uygulandığında trafiği uygun bölmelere yönlendiren bir sanal IP ve bağlantı noktası oluşturur, temeldeki bölme değişikliklerini soyutlar ve iletişim için kararlı bir uç nokta sağlayarak kesintisiz bağlantı ve dinamik ölçeklendirme sağlar.
Kubernetes kümesi, eksctl, kubectl kurulup yapılandırıldığından Kubernetes Service yaml dosyası oluşturabilirsiniz.
Bunu yapmak için aşağıdaki komutu çalıştırarak bir Kubernetes Service yaml dosyası oluşturmanız gerekir.
touch hello-app-service.yaml
Daha sonra aşağıdaki komutu çalıştırarak bu dosyayı düzenleyin.
vi hello-app-service.yaml
Bu içeriği hello-app-deployment.yaml dosyasına ekleyin.
apiVersion: v1 kind: Service metadata: name: zufarexplainedit-hello-app-service labels: app: hello-app spec: selector: app: hello-app ports: - port: 8080 targetPort: 8080 type: LoadBalancer
Artık hello-app-service.yaml oluşturuldu ve kullanıma hazır.
Kubernetes EKS kümeniz başarıyla yüklenip yapılandırıldığında ve Kubernetes hizmetiniz ile dağıtım dosyalarınız hazır olduğunda, kubectl komutlarını kullanarak işleri test etmenin zamanı geldi.
Dağıtımı Uygulayın.
Dağıtım yapılandırmasını uygulamak için aşağıdaki komutu kullanın.
kubectl apply -f hello-app-deployment.yaml
Bu, belirtilen sayıda replika ve sürekli güncelleme stratejisiyle bir dağıtım oluşturarak uygulamanızın kullanılabilirliğini ve yönetilebilirliğini sağlar.
2. Hizmeti Uygulayın.
Daha sonra hizmet yapılandırmasını uygulayın.
kubectl apply -f hello-app-service.yaml
Bu, uygulamanızı internete açık hale getiren LoadBalancer tipi bir hizmet kuracaktır.
LoadBalancer'ın sağlanmasının ve harici bir IP adresi almasının kısa bir süre alabileceğini unutmayın.
LoadBalancer Durumunu kontrol edin.
Kullanarak hizmetinizin durumunu izleyin.
kubectl get service zufarexplainedit-hello-app-service
Harici bir IP atandığında uygulamanıza erişmeye neredeyse hazırsınız demektir.
Uygulamanıza Erişin.
Bir web tarayıcısı kullanarak, atanan harici IP adresini ve ardından :8080'i girin. Kısa bir süre sonra sayfa yüklenecek ve "MerhabaDünya" mesajı görüntülenecektir. İlk yüklemenin birkaç saniye sürebileceğini unutmayın.
Kubernetes ortamınızdaki kaynakları düzenlemeniz gerektiğinde dağıtımları, bölmeleri ve hizmetleri etkili bir şekilde kaldırmak için aşağıdaki kubectl komutlarını kullanabilirsiniz.
1. Tüm Dağıtımları Sil .
Tüm dağıtımları silmek için aşağıdaki komutu kullanabilirsiniz.
kubectl delete deployments --all
Bu eylem, kümenizde hiçbir etkin dağıtım örneğinin kalmamasını sağlar.
2. Tüm Bölmeleri Sil .
Bir dağıtım tarafından yönetilsin ya da yönetilmesin tüm pod'ları silmeniz gerekiyorsa aşağıdaki komutu kullanabilirsiniz.
kubectl delete pods --all
Bölmelerin temizlenmesi, küme durumunuzu sıfırlamanıza veya yeni dağıtımlara hazırlanmanıza yardımcı olabilir.
3. Tüm Hizmetleri Sil .
Uygulamalarınızı ağa maruz bırakan servisleri temizlemek için aşağıdaki komutu kullanabilirsiniz.
kubectl delete services --all
Hizmetlerin kaldırılması kesinti gerektirebilir; bu nedenle devam etmeden önce olası sonuçları göz önünde bulundurun.
Çalışan düğümler, ağ bileşenleri ve diğer kaynaklar dahil olmak üzere eksctl
ile oluşturulan belirtilen Amazon EKS kümesiyle ilişkili tüm kaynakları kaldırmak için aşağıdaki komutu kullanabilirsiniz.
eksctl delete cluster --name {your cluster name} --region {your region name}
Bu benim için.
eksctl delete cluster --name zufarexplainedit --region eu-north-1
Bu eylem geri alınamayacağı ve veri kaybına neden olacağı için kümeyi durdurma konusunda emin olduğunuzdan emin olun.
Şimdi “KubernetesServer” AWS EC2 Virtual Server örneğine yeni bir ansible-admin kullanıcısı ekleyelim.
Bunu yapmak için bu komutu kullanın.
sudo useradd ansible-admin
Daha sonra ansible-admin kullanıcısının şifresini ayarlayın.
sudo passwd ansible-admin
Ayrıca sudoers dosyasını düzenleyerek kullanıcı ayrıcalıklarını yapılandırmanız gerekir.
sudo visudo
Bu sudoers dosyasına “ansible-admin ALL=(ALL) ALL” ekleyin.
Ayrıca, PasswordAuthentication'ı etkinleştirmek için /etc/ssh/sshd_config dosyasını düzenlemeniz gerekir.
sudo vi /etc/ssh/sshd_config
Daha sonra bu değişiklikleri yapmak için hizmeti yeniden yüklemeniz gerekir.
sudo service sshd reload
Bu komutu yürütmenin bir sonucu olarak şunu göreceksiniz:
Artık diğer tüm komutlara sudo eklemekten kaçınmak için bu komutu kullanabilirsiniz.
sudo su - ansible-admin
Bu makalenin ilerleyen kısımlarında K8s EC2 sanal sunucu örneği gibi uzak sunucuları yönetmeyi planlıyorsunuz. Bu yüzden SSH anahtarlarını ayarlamanız gerekiyor.
ssh-keygen
Bu komutu yürütmenin bir sonucu olarak şunu göreceksiniz:
Artık SSH anahtarları oluşturuldu ve kullanıma hazır.
Ansible, uzak sunuculardaki görevleri otomatikleştirmek için tasarlanmıştır. Parolasız SSH kimlik doğrulaması, Ansible'ın bu sunuculara manuel parola girişine gerek kalmadan bağlanmasını sağlar.
Ansible-admin kullanıcısının SSH anahtarını kullanarak bilgisayarınızdan başka bir bilgisayara (172.31.34.41 IP adresindeki gibi) güvenli bir bağlantı oluşturmak için bu komutu yürütün.
sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}
Benim durumumda şöyle görünüyor.
sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected]
Artık “Eklenen anahtar(lar)ın sayısı: 1”i görebilirsiniz. Bu, parolasız SSH kimlik doğrulama kurulumunun başarıyla tamamlandığı anlamına gelir.
Bir Ansible playbook'u çalıştırdığınızda, üzerinde çalışması gereken ana bilgisayarları belirtirsiniz. Bu adımda KubernetesServer EC2 örnek ana bilgisayarını belirtmeniz gerekir. Bunu yapmak için “ [Module 6]: Ansible”da geçtiğiniz adımların aynısını tekrarlamanız gerekir.
Aşağıdaki komutu çalıştırarak KubernetesServer EC2 sample hostunu bulalım.
sudo ifconfig
KubernetesServer EC2 örnek ana bilgisayarını bulduktan sonra aşağıdaki komutu çalıştırarak onu Ansible hosts dosyasına ekleyebilirsiniz.
sudo vi /etc/ansible/hosts
Referans olarak “[kubernetes]” ifadesini de ekleyebilirsiniz
Artık Kubernetes'in kurulumu tamam olduğuna ve kullanıma hazır olduğuna göre, işlem hattınız için Kubernetes görevlerini içeren yeni bir Ansible oyun kitabı oluşturabilirsiniz. Bu başucu kitabı, Ansible'ın uygulamanızı Kubernetes kümesinde kubectl komutlarıyla çalıştırmasına olanak tanır.
Bunu nasıl yapabileceğiniz aşağıda açıklanmıştır:
touch kubernetes-hello-app.yml
hello-app.yml
dosyasını düzenleyin. Bu komutla düzenlemek için açın. vi kubernetes-hello-app.yml
--- - hosts: kubernetes tasks: - name: deploy regapp on kubernetes command: kubectl apply -f hello-app-deployment.yaml - name: create service for regapp command: kubectl apply -f hello-app-service.yaml - name: update deployment with new pods if image updated in docker hub command: kubectl rollout restart deployment.apps/zufarexplainedit-hello-app
Kubernetes görevleri için Ansible playbook kullanıma hazır.
Kubernetes, Ansible ve Kubernetes görevlerine yönelik Ansible oyun kitabı artık ayarlandığına ve kullanıma hazır olduğuna göre, bunu Jenkins ile entegre edebilirsiniz.
JenkinsServer → Jenkins kontrol paneli → Yeni Öğe'ye gidin.
“CD-Job” adında yeni Jenkins Freestyle projesi oluşturun.
“Tamam” butonuna tıklayın.
“Derleme Sonrası Eylemler” bölümüne gidin.
“Derleme sonrası eylem ekle” düğmesini tıklayın.
“Derleme yapıtlarını SSH üzerinden gönder” seçeneğini seçin.
SSH Sunucusu olarak “AnsibleServer”ı seçin.
Bu komutu “exec command” girişine ekleyin.
sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml
“Uygula” ve “Kaydet” butonlarına tıklayın.
Jenkins kontrol paneli → “CI_CD_Pipeline” → Yapılandır → “Derleme Sonrası Eylemler” bölümüne gidin.
“Derleme sonrası eylem ekle” düğmesini tıklayın.
“Başka projeler oluştur” seçeneğini seçin.
“Diğer projeler oluştur” bölümüne gidin.
“Yalnızca derleme kararlıysa tetikle” seçeneğini seçin.
“Yapılacak Proje” girişine “CD-İşi” ekleyin.
“Uygula” ve “Kaydet” butonlarına tıklayın.
Artık boru hattının tamamen bittiğini ve kullanıma hazır olduğunu düşünebilirsiniz.
Şimdi son boru hattı versiyonunu teste tabi tutmanın zamanı geldi.
Jenkins → Jenkins kontrol paneli → "CI_CD_Pipeline" seçeneğine gidin.
"Şimdi Oluştur" düğmesini tıklayın.
Sonuçları görmek için derleme konsolu günlüklerini inceleyin.
Derleme konsolu günlüklerinde "CD İşi"nin tetiklendiğini ve son durumun BAŞARI olarak işaretlendiğini fark edeceksiniz.
4
Ayrıca yeni Docker görüntüsünün eklendiğini onaylamak için Dockerhub'a gidebilirsiniz.
Son olarak uygulamanıza bir web tarayıcısı kullanarak erişebilirsiniz. Atanan harici IP adresini ve ardından ":8080" girin. Kısa bir süre sonra sayfa yüklenecek ve "MerhabaDünya" mesajı görüntülenecektir.
Bu modern CI/CD hattını kurma konusunda iyi iş çıkardınız!
Harika bir iş başardınız ve gerçek bir kahramansınız!
Tüm çabanız için teşekkürler!
Zufar Sunagatov, modern yazılım sistemleri tasarlama konusunda tutkulu, deneyimli, kıdemli bir yazılım mühendisidir.