Kubeadm kullanarak Ubuntu üzerinde Kubernetes Kümesi Kurulumu
Bu kılavuzda, Ubuntu Linux üzerinde çalışan 3 düğümlü bir Kubernetes Kümesi kurup yapılandırma adımlarını size göstereceğim. Kubernetes, konteynerleştirilmiş uygulamaların dağıtımını, yönetimini ve ölçeklendirilmesini otomatikleştirmek için kullanılan açık kaynaklı bir konteyner orkestrasyon sistemidir.
Bu makalede sürecin detaylarını paylaşıyoruz:
- Kubernetes düğümlerini hazırlama
- Depoları ayarlama
- Kapsayıcı çalışma zamanı motorunu yükleme
- Kubernetes bileşenlerini kurma
- Kümenizi başlatmak
- Kubernetes için ağ eklentisi kurulumu
- Yeni işçi düğümlerini kümeye eklemek
Hadi başlayalım!
Nihai Ubuntu Masaüstü Kılavuzu
Ubuntu'yu bir profesyonel gibi keşfedin - güzel masaüstü özelleştirmelerinden güçlü terminal otomasyonuna kadar. Geliştiriciler, sistem yöneticileri ve çalışma alanlarının tam kontrolünü isteyen ileri düzey kullanıcılar için mükemmel.
Adım 1: Sistemler Diyagramı
Bu kurulum aşağıdaki diyagrama dayanmaktadır:
Bir sonraki adımlara geçmeden önce sistem ana bilgisayar adlarını yapılandıralım:
Ana Düğümde:
Hostname'i aşağıdaki gibi ayarlayın:
sudo hostnamectl set-hostname k8s-master.example.comİşçi Düğüm 01 Üzerinde:
hostnamectl komut satırı aracını kullanarak ana bilgisayar adını ayarlayın.
sudo hostnamectl set-hostname k8s-node-01.example.comİşçi Düğüm 02 Üzerinde:
Ayrıca Kubernetes işçi düğümü 02 için hostname ayarlayın.
sudo hostnamectl set-hostname k8s-node-02.example.comHer bir sunucuda doğru ana bilgisayar adı yapılandırıldıktan sonra, her düğüme yapılandırılmış değerleri girin.
$ sudo vim /etc/hosts
192.168.2.2 k8s-master.example.com k8s-master
192.168.2.3 k8s-node-01.example.com k8s-node-01
192.168.2.4 k8s-node-02.example.com k8s-node-02Yeni yapılandırılan ana bilgisayar adını kullanmak için çıkış yapın ve tekrar giriş yapın.
exit||logoutAdım 2: Yönetici kullanıcı oluştur
Herhangi bir Kubernetes'e özel yapılandırma yapmadan önce, tüm bağımlılıkların karşılandığından emin olalım. Burada sistem güncellemesi yapacak ve Kubernetes kullanıcısı oluşturacağız.
Tüm düğümlerde sistem paketlerini en son sürüme güncelleyin:
sudo apt update && sudo apt upgrade -y
[ -e /var/run/reboot-required ] && sudo rebootKubernetes kümesini yönetmesi için kullanıcı ekle:
sudo useradd -s /bin/bash -m k8s-admin
sudo passwd k8s-admin
sudo usermod -aG sudo k8s-admin
echo "k8s-admin ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/k8s-adminEğer k8s-admin kullanıcısı olarak sudo komutlarını çalıştırırken sudo şifresini girmeyi tercih ediyorsanız, son satırı yok sayabilirsiniz. Şifre isteminin çıkmadığını test edebilirsiniz:
$ su - k8s-admin
k8s-admin@k8s-master:~$ sudo su -
root@k8s-master:~# exitHer şey yolunda görünüyor, Docker motorunu kurmaya devam edelim.
Adım 3: Containerd'i Yükleyin
Kubernetes, konteynerleri çalıştırmak için bir konteyner çalışma zamanı motoruna ihtiyaç duyar. Bu makalede konteyner motoru olarak Containerd kullanacağız.
Docker'ın yüklü olmadığından emin olun. Eğer yüklüyse kaldırın.
sudo apt remove docker docker-engine docker.ioBağımlılıkları yükleyin:
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-commonDocker depo GPG anahtarını içe aktar:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-archive-keyring.gpg
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"Docker motorunu kur.
sudo apt update && sudo apt install containerd.ioHizmet otomatik olarak başlatılır.
$ systemctl status containerd.service
● containerd.service - containerd container runtime
Loaded: loaded (/lib/systemd/system/containerd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2024-07-14 21:22:30 UTC; 34min ago
Docs: https://containerd.io
Process: 4265 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Main PID: 4270 (containerd)
Tasks: 8
CGroup: /system.slice/containerd.service
└─4270 /usr/bin/containerd
Ayrıca yüklü sürümü de kontrol edebilirsiniz:
containerd --versionAdım 4: Kubernetes Bileşenlerini Yükleyin
Bağımlı araçları yükleyin.
sudo apt install apt-transport-https ca-certificates curl gpg -yYüklemek istediğiniz Kubernetes sürümünü ayarlayın.
k8s_ver=1.30Kubernetes paket depoları için genel imzalama anahtarını indir
curl -fsSL https://pkgs.k8s.io/core:/stable:/v${k8s_ver}/deb/Release.key | \
sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/k8s.gpgResmi Kubernetes APT deposunu ekleyin.
echo "deb https://pkgs.k8s.io/core:/stable:/v${k8s_ver}/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.listapt paket indeksini güncelle:
sudo apt updateKubernetes Bileşenlerini Yükle
Kubernetes ana bileşenlerini yükleyin: kubectl, kubelet, kubernetes-cni ve kubeadm
sudo apt install kubectl kubelet kubeadm kubernetes-cniTüm paket ikili dosyalarının dosya sisteminde bulunduğunu doğrulayın.
$ which kubelet
/usr/bin/kubelet
$ which kubeadm
/usr/bin/kubeadmEğer takas açıksa, kapatın.
sudo swapoff -a
sudo sed -i.bak -r 's/(.+ swap .+)/#\1/' /etc/fstabGerekli modülleri yükleyin.
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOFÇalışma zamanında yüklemek için şunu çalıştırın:
sudo modprobe overlay
sudo modprobe br_netfilterAyrıca sysctl yapılandırmalarını da ayarlayın.
sudo tee /etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOFYapılandırmaları yükle.
sudo sysctl --systemcontainerd'i yapılandırın ve servisi yeniden başlatın
sudo mkdir -p /etc/containerd
sudo containerd config default|sudo tee /etc/containerd/config.toml
sudo systemctl restart containerdkubelet servisini etkinleştir
sudo systemctl enable kubeletAdım 5: k8s Kontrol Düzlemini Başlat
Bu bölümde çalıştırılacak tüm komutlar, master düğümde çalıştırılmak üzere tasarlanmıştır. Komutlardan hiçbirini Kubernetes worker düğümlerinde çalıştırmayın. Kubernetes Master bileşenleri, kümenin kontrol düzlemini sağlar – API Sunucusu, Zamanlayıcı, Kontrol Yöneticisi. Küme ile ilgili küresel kararlar verirler, örneğin zamanlama yapmak ve küme olaylarını tespit edip yanıtlamak gibi.
Kubernetes temel imajlarını çekerek containerd'nin çalıştığını doğrulayın.
$ sudo kubeadm config images pull
[config/images] Pulled registry.k8s.io/kube-apiserver:v1.30.2
[config/images] Pulled registry.k8s.io/kube-controller-manager:v1.30.2
[config/images] Pulled registry.k8s.io/kube-scheduler:v1.30.2
[config/images] Pulled registry.k8s.io/kube-proxy:v1.30.2
[config/images] Pulled registry.k8s.io/coredns/coredns:v1.11.1
[config/images] Pulled registry.k8s.io/pause:3.9
[config/images] Pulled registry.k8s.io/etcd:3.5.12-0Birden fazla CRI soketiniz varsa, lütfen birini seçmek için --cri-socket kullanın:
# Containerd
sudo kubeadm config images pull --cri-socket unix:///run/containerd/containerd.sock
# For CRI-O
sudo kubeadm config images pull --cri-socket unix:///var/run/crio/crio.sockBootstrap (tek kontrol düzlemi düğümü) – paylaşılan uç nokta yok
DNS uç noktası kullanmadan bir küme başlatmak için şu komutu çalıştırın:
sudo sysctl -p
sudo kubeadm init \
--pod-network-cidr=172.24.0.0/16 \
--cri-socket unix:///run/containerd/containerd.sockPaylaşılan uç nokta ile başlatma (kontrol düzlemi API'si için DNS adı)
Bu, birden fazla kontrol düzlemi düğümü için idealdir.
Küme uç nokta DNS adını ayarlayın veya /etc/hosts dosyasına kayıt ekleyin.
$ sudo vim /etc/hosts
172.29.20.5 k8s-cluster.computingforgeeks.comKüme oluştur:
sudo sysctl -p
sudo kubeadm init \
--pod-network-cidr=172.24.0.0/16 \
--upload-certs \
--control-plane-endpoint=k8s-cluster.computingforgeeks.comNerede :
- k8s-cluster.computingforgeeks.com, k8s kontrol düzlemi düğümleriniz için bir LB IP adresine işaret eder.
Her şey yolunda giderse, bir sonraki adımda ne yapmanız gerektiğini belirten bir başarı mesajı almalısınız:
---
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 192.168.2.2:6443 --token 9y4vc8.h7jdjle1xdovrd0z --discovery-token-ca-cert-hash sha256:cff9d1444a56b24b4a8839ff3330ab7177065c90753ef3e4e614566695db273cMaster sunucuda k8s-admin kullanıcısı için erişimi yapılandırın
k8s-admin kullanıcıya geçin ve küme bilgilerini içeren Kubernetes yapılandırma dosyasını kopyalayın.
sudo su - k8s-admin
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/configDağıtımı doğrulamak için küme bilgilerini kontrol edin.
$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.2.2:6443
CoreDNS is running at https://192.168.2.2:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.Adım 6: CNI Eklentisini Kur
Bu kılavuzda Calico kullanacağız. Başka herhangi bir desteklenen ağ eklentisini de seçebilirsiniz.
Operatör ve özel kaynak dosyalarını indirin. En son sürüm için sürümler sayfasına bakın.
En son sürümü edinin:
VERSION=$(curl --silent "https://api.github.com/repos/projectcalico/calico/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')Kurulum kaynaklarını indir.
curl -O https://raw.githubusercontent.com/projectcalico/calico/${VERSION}/manifests/tigera-operator.yaml
curl -O https://raw.githubusercontent.com/projectcalico/calico/${VERSION}/manifests/custom-resources.yaml Öncelikle, operatörü kümenize kurun.
k8s-admin@k8s-master:~$ kubectl create -f tigera-operator.yaml
namespace/tigera-operator created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgpfilters.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/caliconodestatuses.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipreservations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/apiservers.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/imagesets.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/installations.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/tigerastatuses.operator.tigera.io created
serviceaccount/tigera-operator created
clusterrole.rbac.authorization.k8s.io/tigera-operator created
clusterrolebinding.rbac.authorization.k8s.io/tigera-operator created
deployment.apps/tigera-operator createdHadi Calico IP Havuzunu da güncelleyelim.
sed -ie 's/192.168.0.0/172.24.0.0/g' custom-resources.yamlSonra manifest yapılandırmalarını uygulayın.
k8s-admin@k8s-master:~$ kubectl create -f custom-resources.yaml
installation.operator.tigera.io/default created
apiserver.operator.tigera.io/default createdCalico Pod'un çalışır durumda olmasını bekleyin.
k8s-admin@k8s-master:~$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
calico-apiserver calico-apiserver-5476c484c4-rmmts 1/1 Running 0 37s
calico-apiserver calico-apiserver-5476c484c4-z9phf 1/1 Running 0 37s
calico-system calico-kube-controllers-6945f87bd4-2xwx4 1/1 Running 0 80s
calico-system calico-node-tkwtv 1/1 Running 0 80s
calico-system calico-typha-65f575c9fc-xx8m8 1/1 Running 0 81s
calico-system csi-node-driver-kngdn 2/2 Running 0 80s
kube-system coredns-5dd5756b68-77x77 1/1 Running 0 11m
kube-system coredns-5dd5756b68-plpd6 1/1 Running 0 11m
kube-system etcd-k8s-master.example.com 1/1 Running 0 11m
kube-system kube-apiserver-k8s-master.example.com 1/1 Running 0 11m
kube-system kube-controller-manager-k8s-master.example.com 1/1 Running 0 11m
kube-system kube-proxy-bxq4x 1/1 Running 0 11m
kube-system kube-scheduler-k8s-master.example.com 1/1 Running 0 11m
tigera-operator tigera-operator-94d7f7696-xls25 1/1 Running 0 3m20sDüğüm artık Hazır olmalıdır.
k8s-admin@k8s-master:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master.example.com Ready control-plane 20m v1.30.2Adım 7: Worker Düğümlerini Kur
Kubernetes kümesi başlatıldığında ve master node çevrimiçi olduğunda, Worker Node yapılandırmasına başlanır. Bir node, Kubernetes'te bir işçi makinesidir; sanal makine (VM) veya fiziksel bir makine olabilir. Her node master tarafından yönetilir ve pod'ları çalıştırmak için gerekli hizmetlere sahiptir – docker, kubelet, kube-proxy
1) Containerd çalışma zamanı yüklü olduğundan emin olun (ele alındı)
Containerd'yi kurmak için bu makalede verilen adımları kullanın
2) Kubernetes deposunu ekleyin (kapsandı)
Kubernetes paketleri için depo sisteminize eklenmiş olduğundan emin olun.
3) Kubernetes bileşenlerini yükleyin (Adım 4)
Kubernetes deposunu ekledikten sonra, bileşenleri şu şekilde kurun:
sudo apt install kubelet kubeadm kubectl kubernetes-cni4) Düğümü Kümesine Katın:
Kubernetes kümesini başlattıktan sonra verilen join komutunu kullanın. Komutları şu şekilde yazdırabilirsiniz:
kubeadm token create --print-join-commandTamamlandığında, ana düğümde düğümlerin durumunu kontrol edin:
k8s-admin@k8s-master:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 35m v1.30.2
k8s-node-01 Ready <none> 2m v1.30.2
k8s-node-02 Ready <none> 1m v1.30.2Adım 8: Kubernetes Kurulumunu Doğrula
Bir test ad alanı oluşturun:
$ kubectl create namespace test
namespace/test createdTest uygulamasını dağıt
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080Mevcut dağıtımları görüntüle:
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 1 1mÇalışan podları gör
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1mKaynakları temizlemek için şunu çalıştırın:
kubectl delete deployment hello-nodeAdım 9: kubectl tamamlamasını yapılandırın
kubectl komutları için kabuk otomatik tamamlama özelliğini etkinleştirin. kubectl, yazmayı oldukça azaltabilecek otomatik tamamlama desteği içerir! Mevcut oturumunuzda kabuk otomatik tamamlamayı etkinleştirmek için şunu çalıştırın:
source <(kubectl completion bash)kubectl otomatik tamamlama özelliğini profilinize eklemek için, böylece gelecekteki shell'lerde otomatik olarak yüklenmesi için şu komutu çalıştırın:
echo "source <(kubectl completion bash)" >> ~/.bashrcEğer zsh kullanıyorsanız, ~/.zshrc dosyasını düzenleyin ve kubectl otomatik tamamlama özelliğini etkinleştirmek için aşağıdaki kodu ekleyin:
if [ $commands[kubectl] ]; then
source <(kubectl completion zsh)
fiVeya Oh-My-Zsh kullanıyorsanız, ~/.zshrc dosyasını düzenleyin ve plugins= satırını kubectl eklentisini içerecek şekilde güncelleyin.
source <(kubectl completion zsh)Ayrıca konteyner ölçümleri için Top komutu da ilgilidir
Kubernetes ustalık eğitim materyalleri:
- En İyi Kubernetes Çalışma Kitapları
Sonuç
Ubuntu LTS sunucular üzerinde başarılı bir şekilde 3 düğümlü bir Kubernetes kümesi kurduk. Bir sonraki rehberlerimiz Kubernetes Yüksek Erişilebilirlik (HA), Kubernetes İzleme, Harici depolama nasıl yapılandırılır ve daha birçok harika şeyleri kapsayacak. Takipte kalın!
