Kubernetes, Docker ve Containerd Olası Sorunları ve Çözümleri
Docker, Containerd ve Kubernetes kurulumları ve kullanımları sırasında bazen sorunlarla karşılaşılabilinir. Bu durumlardan sık karşılaşılanlar için bu sayfadaki örnekleri inceleyebilirsiniz.
Problem | 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 olmakta. |
Çözüm | yum remove podman* -y yum remove buildah* -y |
Problem | kubeadm error: "kubelet isn’t running or healthy and connection refused" |
---|---|
Sebep/Neden | Linux işletim sistemlerinde genelde aktif halde gelen "swap" ve "selinux" kapatılmalıdır. |
Çözüm | sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab sudo reboot kubeadm reset kubeadm init --ignore-preflight-errors all |
Problem | deleting namespace stuck at "Terminating" state |
---|---|
Sebep/Neden | deleting namespace stuck at "Terminating" state |
Çözüm | kubectl get namespace "<NAMESPACE>" -o json | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" | kubectl replace --raw /api/v1/namespaces/<NAMESPACE>/finalize -f - |
Problem | 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 | $ sudo vi /etc/docker/daemon.json
|
Sebep/Neden | Eğer ilgili kurum https kullanıyorsa ilgili kurumdan ssl sertifikasını ("crt") sunuculara eklemesi gerekmektedir. |
Çözüm | cp ssl.crt /usr/local/share/ca-certificates/
sudo update-ca-trust extract |
Problem | Nexus proxy kullanılıyorsa |
---|---|
Sebep/Neden | Eğer ilgili kurum Nexus proxy kullanıyorsa docker'lı sunucular bu adrese yönlendirilir. |
Çözüm | $ sudo vi /etc/docker/daemon.json { "data-root":"/docker-data", "insecure-registries":["nexusdocker.kurumunadresi.com.tr"], "registry-mirrors":["https://nexusdocker.kurumunadresi.com.tr"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } |
Problem | Kubernetes DNS Problemi (connection timed out; no servers could be reached) |
---|---|
Sebep/Neden | Node stays on Ready,SchedulingDisabled |
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) nameserver 10.96.0.10 (yanlış) nameserver 10.96.0.10 |
Çözüm | Bir müşteride /etc/resolv.conf dosyası içine kurumun domain adresi eklenerek çözüldü. search kurum.gov.tr |
Problem | Kubernetes Clusterlarının bulunduğu Ubuntu sunucularda, DNS ayarlarında yapılan değişikliklerin |
---|---|
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: sudo rm /etc/resolv.conf sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf sudo systemctl restart systemd-resolved ls -l /etc/resolv.conf cat /etc/resolv.conf Sadece master sunucuda: kubectl -n kube-system rollout restart deployment coredns |
Problem | docker: Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kurumSertifikasıAdı-CA"). |
---|---|
Sebep/Neden | Firewall ssl inspection yaparak kendi sertifikasını ekliyor. |
Çözüm | docker.io'u firewall üzerinde "ssl inspection exception"'a eklenecek. |
Problem | 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: https://github.com/kubernetes/kubernetes/issues/54918) $ sudo mkdir -p /etc/cni/net.d $ sudo vi /etc/cni/net.d/10-flannel.conflist #aşağıdaki eklenir. { "name": "cbr0","plugins": [ { "type": "flannel","delegate": { "hairpinMode": true, "isDefaultGateway": true }},{"type": "portmap","capabilities": {"portMappings": true}}]}---------- {"name": "cbr0","cniVersion": "0.3.1","plugins": [{"type": "flannel","delegate": {"isDefaultGateway": true}},{"type": "portmap","capabilities": {"portMappings": true}}]}------------ sudo chmod -Rf 777 /etc/cni /etc/cni/* sudo chown -Rf apinizer:apinizer /etc/cni /etc/cni/* sudo systemctl daemon-reload sudo systemctl restart kubelet #Hala imaj çekemeyen pod var mı kontrolü: kubectl get pods -n kube-system describe pod podAdi -n kube-system |
Problem | 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 |
Çözüm | #Bu işlemler tüm master sunucularda yapılmalıdır |
Problem | "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.
|
Çözüm | sudo swapoff -a sudo vi /etc/fstab (swap satırı kapatılacak ya da silinecek) mkdir -p $HOME/.kube sudo reboot (isteğe bağlı) |
Problem | 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şturulabilinir. |
Çözüm | #Mevcut config'ler ve sertifikalar yedek alınarak işlemler yapılır cd /etc/kubernetes/pki/ sudo mv {apiserver.crt,apiserver-etcd-client.key,apiserver-kubelet-client.crt,front-proxy-ca.crt,front-proxy-client.crt,front-proxy-client.key,front-proxy-ca.key,apiserver-kubelet-client.key,apiserver.key,apiserver-etcd-client.crt} /tmp/backup/ sudo kubeadm init phase certs all --apiserver-advertise-address <MasterIP> sudo mv {admin.conf,controller-manager.conf,kubelet.conf,scheduler.conf} /tmp/backup2 sudo kubeadm init phase kubeconfig all |
Problem | 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 sorun |
Çözüm | Çözümü -skip-verify parametresi ile sağlıyoruz. Örnek olarak "k8s.io" namespace içine dahil eden komut: ctr --namespace k8s.io images pull xxx.harbor.com/apinizercloud/managerxxxx -skip-verify |
Problem | 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.
YML
Uyarı: Kontrol:
CODE
|
Problem | 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
CODE
2. Node Monitor Grace Period
CODE
3. Pod Eviction Timeout
CODE
|