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 "env-name" -o json | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" | kubectl replace --raw /api/v1/namespaces/env-name/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 | 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 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/ kubeadm init phase certs all --apiserver-advertise-address <MasterIP> kubeadm init phase kubeconfig all |