Ö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ı.
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!
AWS Hesabı Oluştur düğmesine tıklayın.
//console.aws.amazon.com/console/home adresine gidin. Oturum Aç düğmesini tıklayın.
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.
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 “anahtar çifti” oluşturmadıysanız:
“Örneği başlat” düğmesine tıklayarak EC2 Sanal Sunucu örneğini başlatın.
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.
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.
sudo wget -O /etc/yum.repos.d/jenkins.repo //pkg.jenkins.io/redhat-stable/jenkins.repo
Artık Jenkins indirildi.
Jenkins anahtarını içe aktarmak için “sudo rpm..” komutunu kopyalayıp çalıştırmamız gerekiyor.
sudo rpm --import //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
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
sudo yum install jenkins -y
sudo systemctl start jenkins
sudo systemctl status jenkins
//<your-ec2-ip>:8080
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
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.
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ış 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:
sudo yum install git -y
git --version
Git artık EC2 Sanal Sunucu örneğinde sorunsuz çalışıyor.
“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.
Daha sonra ana sayfada “Jenkins'i Yönet” butonuna ve ardından “Global araç konfigürasyonu” butonuna tıklamanız gerekiyor.
Daha sonra "Uygula" ve "Kaydet" düğmelerini tıklayın**.**
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.
cd /var/lib/jenkins/workspace/{your pipeline name}
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.
Apache Maven'i indirmek için “/opt” dizinine gidin.
cd /opt
sudo wget //dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz
sudo tar -xvzf apache-maven-*.tar.gz
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.
sudo find / -name java
VIM nasıl kullanılır?
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
Bunu başarmak için şu adımları izleyin:
Daha sonra “En üst sayfaya dön” butonuna tıklayın.
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.
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.
cd /var/lib/jenkins/workspace/{your pipeline name}/target
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.
sudo chown ansible-admin:ansible-admin /opt/docker
sudo mkdir /opt/docker
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
id ansible-admin
sudo systemctl start docker
sudo systemctl status docker
“ [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" ]
sudo touch Dockerfile
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.
docker login
Bununla Docker'da oturum açma işlemini tamamladınız ve artık teste devam etmeye hazırsınız.
docker build -t hello:latest .
docker tag hello:latest zufarexplainedit/hello:latest
docker push zufarexplainedit/hello:latest
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.
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.
sudo vi /etc/hostname
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
sudo service sshd reload
sudo su - ansible-admin
ssh-keygen
Artık Ansible'ı “AnsibleServer” EC2 sanal sunucu örneğinize yükleyebilirsiniz.
Hadi yapalım.
sudo amazon-linux-extras install ansible2
ansible --version
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.
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.
Daha sonra “Uygula” ve “Kaydet” butonlarına tıklayın.
Burada “SSH üzerinden yayınla” Jenkins eklentisini yapılandırmayı tamamladınız.
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
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.
sudo ifconfig
sudo vi /etc/ansible/hosts
sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}
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.
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.
cd /opt/docker
sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml
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.
Ş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.
sudo vi /etc/hostname
Bu ana bilgisayar adını “kubernetes-server” ile değiştirin ve ardından yeniden başlatın.
sudo init 6
AWS sürümünü kontrol etmek için bu komutu kullanın.
aws --version
aws-cli/1.18 sürümünü görebiliyorsanız en son sürümü indirmelisiniz.
curl komutunu kopyalayıp yapıştırın.
curl "//awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
İndirme işleminin başlamasını bekleyin.
unzip awscliv2.zip
sudo ./aws/install
aws --version
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.
curl -O //s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl
chmod +x kubectl
sudo mv kubectl /usr/local/bin
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.
curl --silent --location "//github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl version
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.
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.
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.
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>
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.
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.
touch hello-app-deployment.yaml
vi hello-app-deployment.yaml
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
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.
touch hello-app-service.yaml
vi hello-app-service.yaml
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.
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.
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.
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
sudo service sshd reload
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
sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}
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.
sudo ifconfig
sudo vi /etc/ansible/hosts
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.
sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml
Zufar Sunagatov, modern yazılım sistemleri tasarlama konusunda tutkulu, deneyimli, kıdemli bir yazılım mühendisidir.