Bir Kubernetes Cluster'ından çıkarılan sunucunun bir başka Kubernetes Cluster'ına eklenmesi sırasında doğru overlay network IP'sini alamaması
Bir Kubernetes Cluster'ından çıkarılan sunucunun bir başka Kubernetes Cluster'ına eklenmesi sırasında doğru overlay network IP'sini alamaması
Sebep/Neden: Pod overlay network’ü için kullanılan Flannel dosya ve ayarları sunucuda kalmakta ve manuel silinmesi gerekmektedir.
Çözüm: Control-plane Kubernetes node’unda “kubectl delete node <NODE_NAME>” ile ilgili sunucu cluster’dan çıkarılır, sonra koparılmak istenen sunucuda “sudo kubeadm reset” komutu ile de kendi üzerindeki Cluster ayarları temizlenir. Sonrasında aşağıdaki işlemler yapılır:
CentOS 8.3.x sunucularına Docker kurulurken alınan hata
CentOS 8.3.x sunucularına Docker kurulurken alınan hata
Sebep/Neden: RHEL 8 ve CentOS 8’in piyasaya sürülmesiyle, docker paketi varsayılan paket depolarından kaldırıldı, docker podman ve buildah ile değiştirildi. RedHat, Docker için resmi destek sağlamamaya karar verdi. Bu sebepten dolayı bu paketler docker kurulumuna engel olmaktadır.
Çözüm:
Sebep/Neden: Linux işletim sistemlerinde genelde aktif halde gelen “swap” ve “selinux” kapatılmalıdır.
Çözüm:
Deleting namespace stuck at "Terminating" state
Deleting namespace stuck at "Terminating" state
Sebep/Neden: Namespace silme işlemi finalizer’lar nedeniyle takılı kalabilir.
Çözüm:
Docker pull sırasında "x509 certificate" sorunu
Docker pull sırasında "x509 certificate" sorunu
Sebep/Neden: Eğer ilgili kurum HTTPS kullanmıyorsa docker’ın daemon dosyasına aşağıdaki satır eklenir. Docker kullanan tüm node’lar için bu işlem tekrarlanır.
Çözüm (HTTPS kullanmayan kurumlar için):
Çözüm (HTTPS kullanan kurumlar için): Eğer ilgili kurum HTTPS kullanıyorsa ilgili kurumdan SSL sertifikasını (“crt”) sunuculara eklemesi gerekmektedir.
Nexus proxy kullanılıyorsa
Nexus proxy kullanılıyorsa
Sebep/Neden: Eğer ilgili kurum Nexus proxy kullanıyorsa docker’lı sunucular bu adrese yönlendirilir.
Çözüm:
Kubernetes DNS Problemi (connection timed out; no servers could be reached)
Kubernetes DNS Problemi (connection timed out; no servers could be reached)
Sebep/Neden: Node stays on Ready, SchedulingDisabled durumunda kalabilir.
Test:
Eğer aşağıdaki gibi sonuç alıyorsak her şey doğru:
Eğer aşağıdaki gibi sonuç alıyorsak yanlışlık var ve aşağıdaki adımların kontrol edilmesi gerekiyor:
Resolv.conf dosyasının içine bir göz atın:
(Doğru)
(Yanlış)
Çözüm: Bir müşteride /etc/resolv.conf dosyası içine kurumun domain adresi eklenerek çözüldü.
Kubernetes Clusterlarının bulunduğu Ubuntu sunucularda, DNS ayarlarında yapılan değişikliklerin `/etc/resolv.conf` dosyasına yansımaması sebebiyle HOST isimlerinin çözülemesi
Kubernetes Clusterlarının bulunduğu Ubuntu sunucularda, DNS ayarlarında yapılan değişikliklerin `/etc/resolv.conf` dosyasına yansımaması sebebiyle HOST isimlerinin çözülemesi
Sebep/Neden: Ubuntu işletim sistemli sunucularda DNS sunucusu ile ilgili yapılan değişiklikler her zaman resolv.conf’a yansımayabiliyor ya da atlanabiliyor, Kubernetes varsayılan olarak kendi iç DNS’inden sonra sunucudaki cat /etc/resolv.conf dosyasına baktığı için bu dosyanın doğru olduğundan emin olunulmalıdır.
Çözüm:
Tüm sunucularda:
Sadece master sunucuda:
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": x509: certificate signed by unknown authority
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": x509: certificate signed by unknown authority
Node NotReady'de kalıyor ve Unable to update cni config: no networks found in /etc/cni/net.d
Node NotReady'de kalıyor ve Unable to update cni config: no networks found in /etc/cni/net.d
Sebep/Neden: Master’da kube-flannel bir şekilde gerekli klasörü ve dosyaları oluşturamıyor.
Çözüm: (Alternatif çözümler de mevcut: GitHub Issue #54918)
Aşağıdaki içerik eklenir:
Client certificates generated by kubeadm expire after 1 year - "internal server error. Error Detail: operation: [list] for kind: [pod] with name: [null] in namespace: [prod] failed"
Client certificates generated by kubeadm expire after 1 year - "internal server error. Error Detail: operation: [list] for kind: [pod] with name: [null] in namespace: [prod] failed"
Sebep/Neden: Unable to connect to the server: x509: certificate has expired or is not yet valid.
Çözüm: Bu işlemler tüm master sunucularda yapılmalıdır.
"The connection to the server x.x.x.:6443 was refused - did you specify the right host or port?" hatası
"The connection to the server x.x.x.:6443 was refused - did you specify the right host or port?" hatası
Sebep/Neden: Yukarıdaki problem aşağıdaki sebeplerin herhangi birinden dolayı ortaya çıkabiliyor:
- Disk eklenmesi durumunda swap açılabildiği için tekrar kapatılması gerekiyor olabilir.
- Kullanıcı yetki sahibi olmayabilir.
- Master sunucuda olmadığımızdan olabilir.
Çözüm:
kubelet.service: Main process exited, code=exited, status=255
kubelet.service: Main process exited, code=exited, status=255
Sebep/Neden: Bu problemin çeşitli nedenleri olmakla birlikte hatada /etc/kubernetes/bootstrap-kubelet.conf gibi herhangi bir .conf dosyasının bulunamadığını söylüyorsa aşağıdaki işlemler uygulanarak tüm config’ler baştan oluşturulabilir.
Çözüm (Master Node): Mevcut config’ler ve sertifikalar yedek alınarak işlemler yapılır.
Çözüm (Worker Node): Worker Node’larda da /etc/kubernetes/bootstrap-kubelet.conf dosyası bulunamama hatası meydana gelirse, node’u cluster’dan çıkarıp tekrar eklemek sorunu çözecektir.
Master node üzerinde çalıştırılacak komutlar:
Worker node üzerinde çalıştırılacak komutlar:
ctr: failed to verify certificate: x509: certificate is not valid
ctr: failed to verify certificate: x509: certificate is not valid
Sebep/Neden: Yukarıdaki problem Private registry’den image çekerken güvenilir bir sertifikaya sahip olmadığınızda ortaya çıkan bir sorundur.
Çözüm: Çözümü -skip-verify parametresi ile sağlıyoruz. Örnek olarak “k8s.io” namespace içine dahil eden komut:
Podların dengeli bir şekilde dağıtılamaması
Podların dengeli bir şekilde dağıtılamaması
Sebep/Neden: Kubernetes, podları dengeli bir şekilde dağıtmaz çünkü varsayılan olarak podlar, belirli bir strateji veya sınırlama olmadan, mevcut kaynaklara göre en uygun görülen düğümlere yerleştirilir.
Çözüm: Pod Topology Spread Constraints kullanarak podların dengeli bir şekilde nasıl dağıtılacağını gösteren YAML dosyasını, ikinci spec bölümünden sonra ekleyiniz.
Kontrol: Aşağıdaki komut ile node üzerinde node-role.kubernetes.io/control-plane etiketinin olup olmadığını kontrol edebilirsiniz.
Kubernetes'te Non-Graceful Node Shutdown (K8s node'unun beklenmedik şekilde kapanması)
Kubernetes'te Non-Graceful Node Shutdown (K8s node'unun beklenmedik şekilde kapanması)
Sebep/Neden: Kubernetes’te bir düğüm beklenmedik şekilde kapandığında (Non-Graceful Shutdown), Kubernetes Master bu durumu algılayarak gerekli işlemleri yapar. Ancak bu algılama süreci, sistemin zaman aşımı parametrelerine bağlı olduğu için gecikebilir.
Çözüm: Bu süreyi ayarlamak için dikkate alınması gereken başlıca parametreler şunlardır:
1. Node Status Update Frequency
- Node Status Update Frequency parametresi bir düğümde çalışan Kubelet tarafından Kubernetes API sunucusuna düğümün durumunun ne sıklıkla güncelleneceğini belirler, varsayılan olarak 10s değerindedir.
- Kubelet’in düğüm durumu güncellemelerini daha sık yapması için bu değeri varsayılan değerden daha düşük girebiliriz, bu da Kubernetes’in kesintileri daha hızlı algılamasına olanak tanır.
2. Node Monitor Grace Period
- Node Monitor Grace Period parametresi, API sunucusunun bir düğümü “NotReady” durumuna geçirmeden önce bekleyeceği maksimum süreyi belirler, varsayılan olarak 40s değerindedir.
- API sunucusunun düğümü “NotReady” olarak işaretlemesi daha kısa sürede veya daha geç sürede gerçekleşmesi için bu default değer değiştirilebilir.
3. Pod Eviction Timeout
- Pod Eviction Timeout bir düğüm “NotReady” durumuna geçtikten sonra, düğümdeki pod’ların başka düğümlere yeniden yerleştirilmesi (eviction) için beklenilecek maksimum süreyi tanımlar, varsayılan olarak 5 dakika değerindedir.
- Düğüm üzerindeki pod’lar, daha hızlı bir şekilde diğer düğümlere taşınması için varsayılan değer değiştirilebilir.
Kubernetes'te Klonlanmış Worker Node'un Cluster'a Dahil Ederken Olası Çakışmaları Önlemek
Kubernetes'te Klonlanmış Worker Node'un Cluster'a Dahil Ederken Olası Çakışmaları Önlemek
Sebep/Neden: Kubernetes cluster’da hali hazırda çalışan bir worker node’un klonu cluster’a dahil edildiğinde, bazı yapılandırmalar ve kimlik bilgileri eski node ile çakışabilmektedir. Bu çakışmalar şunları içerir:
- Duplicate machine-id değerleri
- Eski Kubernetes yapılandırma kalıntıları
- CNI ve overlay network yapılandırma çakışmaları
Çözüm:
1. Kubeadm reset. Klonlanmış worker node’un mevcut cluster yapılandırmasını tamamen sıfırlanır:
2. Kubernetes’in Oluşturduğu Overlay Network Temizlenir. CNI ve diğer ağ bileşenleri temizlenir:
3. Klonlanan makinenin machine-id’si resetlenir. İşletim sistemine göre machine-id’yi yeniden oluşturulur:
4. Cluster’a Yeniden Katılma. Master node üzerinden join komutu alınır ve klonlanan node’da çalıştırılır:
Kubernetes'te Mevcut Cluster'daki Worker Node'un Hostname'i Değişecekse
Kubernetes'te Mevcut Cluster'daki Worker Node'un Hostname'i Değişecekse
Sebep/Neden: Kubernetes cluster’da hali hazırda çalışan bir worker node’un hostname’i değiştirildiğinde, bazı yapılandırmalar ve kimlik bilgileri eski hostname ile çakışabilmektedir. Bu yüzden bu işlemi yaparken cluster’dan hostname’i değiştirilecek worker node çıkartılıp hostname bilgisi değiştikten sonra eklenmelidir.
Çözüm:
1. Drain ve Delete Node. Cluster’daki master node’a bağlanılır:
2. Hostname’in Değişeceği Worker Node’a Bağlanılır. Hostname değiştirildikten sonra CNI ve diğer ağ bileşenleri temizlenir:
3. Cluster’a Yeniden Katılma. Master node üzerinden join komutu alınır ve klonlanan node’da çalıştırılır:
Read-Only Disk Nedeniyle Node Üzerinde Sorun
Read-Only Disk Nedeniyle Node Üzerinde Sorun
Sebep/Neden: Linux kernel, altta çalışan dosya sisteminde (ext4, xfs vb.) bir hata tespit ettiğinde veri bütünlüğünü korumak amacıyla ilgili disk bölümü otomatik olarak read-only moda alır. Kubernetes, bir node’da disk hatası veya başka kritik sistem sorunları tespit ettiğinde, otomatik olarak o node’u pod almaz hale getirmek için bir taint ekler: node.kubernetes.io/unschedulable:NoSchedule
Çözüm:
1. Sunucu reboot edilir
Node’un disk veya sistem hatası varsa reboot sonrası bazı sorunlar düzeltilebilir.
2. Node üzerindeki taint kaldırılır
3. Node hâlâ pod kabul etmiyorsa uncordon uygulanır
Uncordon komutu, node’u schedulable hale getirir ve unschedulable taint’inin arka planda kaldırılmasını garanti eder.
ImageStatus failed: Id or size of image "k8s.gcr.io/kube-scheduler:v1.18.20" is not set
ImageStatus failed: Id or size of image "k8s.gcr.io/kube-scheduler:v1.18.20" is not set
Sebep/Neden: Sunucu paket güncellemesiyle birlikte Docker sürümünü upgrade yapılınca karşılaşılan bir hatadır. Kubernetes 1.18, Docker sürümünü desteklemediği için kubelet ile Docker arasındaki iletişimde uyumsuzluk oluşmasından kaynaklanır.
Çözüm: Docker sürümü Kubernetes 1.18 ile uyumlu olan 18-19-20 versiyonlarıyla downgrade edilerek sorun çözülür.
Manager Pod'dan Worker Pod'a ClusterIP (Service) Üzerinden Aralıklı Timeout Hatası
Manager Pod'dan Worker Pod'a ClusterIP (Service) Üzerinden Aralıklı Timeout Hatası
Sebep/Neden: net.bridge.bridge-nf-call-iptables ayarının eksik olması. Kubernetes’in iptables modunda çalışan kube-proxy bileşeni, Service trafiğini yönlendirmek için Linux köprülerini kullanır. net.bridge.bridge-nf-call-iptables ayarının 0 olması, köprü trafiğinin iptables üzerinden yönlendirilmesine engel olur. Bu da Service ClusterIP’den pod IP’lerine yapılan yönlendirmelerde karışıklıklara yol açar. Kube-proxy bu durumda genellikle şu uyarıyı verir: “Missing br-netfilter module or unset sysctl br-nf-call-iptables…”
Çözüm: sysctl ayarını düzelterek Service yönlendirmesini etkinleştirmeniz gerekmektedir. Tüm Kubernetes Düğümleri Üzerinde Uygulanmalıdır.
1) Ayarı Yapılandırma Dosyasına Eklemek (veya Kontrol Etmek): Aşağıdaki ayarın 1 olarak yapıldığından emin olun. Yapılandırma dosyasını şu komutla açabilirsiniz:
Dosyaya aşağıdaki satırı ekleyin (ya da var ise 1 olarak düzenleyin):
2) Ayarları Anında Yüklemek: Dosyadaki değişiklikleri sisteme yüklemek için şu komutu çalıştırın:
3) Ayarları Doğrulamak: Yapılandırma doğrulaması yapmak için şu komutu kullanın:
Çıktı 1 olarak dönmelidir.
4) Kube-proxy’yi Yeniden Başlatmak: Kube-proxy’nin yeni ayarları alabilmesi için aşağıdaki komutla pod’u yeniden başlatın:
Bu adımlar uygulandığında, Manager Pod’dan Worker Pod’a ClusterIP üzerinden yapılan bağlantılarda oluşan timeout sorunları çözülecektir.

