二進制部署k8s的一些坑


二進制部署k8s的一些坑

一、前言

  本文不打算對k8s做過多介紹,僅僅介紹部署過程中的一些踩坑點。

  關於k8s的一些掃盲文章可以參考下(微信打開):

     (1)https://mp.weixin.qq.com/s/F1YzaDGy8E1xK42zkyK9ug

     (2)師兄公眾號的一篇文章(權威指南我也借了,哈哈哈~):https://mp.weixin.qq.com/s/L6ZYfD0KLytQy8ANgD-AIQ

   步入正題,參考部署的二進制文章如下:   https://www.yuque.com/duduniao/k8s/tr3hch

(感謝小俊子分享~~之前找的部署文章害我搞了兩周還一堆報錯解決不了的,不得不重建虛擬機重新部署)

 

畫了個思維導圖:https://www.kdocs.cn/view/l/stCinacy3eKu?         (因為部署完還是有點懵逼 = =),

總共4台機器,服務器規划如下:

 

網絡規划如下:

 

二、部署過程中遇到的坑

1、dns問題

安裝完dns,主機hostname解析不了

     先說明下,文中部署dns服務配置區域文件,業務域:od.com 這個域名是用不了的,應該被注冊了,需要改成別的,我這里改成 odljy.com了。           

 

 

    按步驟2.2.2把所有主機的dns都指向到部署了dns服務的主機ip上的,在dns服務器(k8s-3)測試時不行: host k8s-4 10.4.7.130,報錯:Host k8s-4 not found。

 這個小俊子幫我解決的,感謝感謝~~

問題解決:

修改主機dns客戶機配置文件(感覺這步應該要放到測試dns前面做的)

[root@k8s-3 ~]# cat /etc/resolv.conf       ——》所有主機都要改下

# Generated by NetworkManager
search host.com
nameserver 10.4.7.130
nameserver 8.8.8.8

以防萬一,我在網絡配置文件也加了DNS的配置

 

 2、harbor問題

(1)瀏覽器訪問harbor報錯502

注意:windows機器要寫hosts

nginx日志報錯:

2020/11/24 08:44:45 [crit] 46682#0: *71 connect() to 127.0.0.1:180 failed (13: Permission denied) while connecting to upstream, client: 10.4.7.1, server: harbor.odljy.com, request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:180/favicon.ico", host: "harbor.odljy.com", referrer: "http://harbor.odljy.com/"
 
問題解決:關閉防火牆
臨時關閉:setenforce 0
永久關閉: /etc/selinux/config  中的
SELINUX=enforcing 改成  
SELINUX= disabled
 
(2)其他機器登錄不上harbor,無法上傳鏡像:
報錯現象:
[root@k8s-1 ~]# docker login -u admin harbor.odljy.com
Password:
Error response from daemon: Get http://harbor.odljy.com/v2/: Get http://harbor.od.com:180/service/token?account=admin&client_id=docker&offline_token=true&service=harbor-registry: net/http: request canceled (Client.Timeout exceeded while awaiting headers) (Client.Timeout exceeded while awaiting headers)

 

我一開始以為是這個私有倉庫域名沒有添加到docker的配置文件/etc/docker/daemon.json 導致的,發現怎么改都不行

問題解決:
  文中安裝harbor的install.sh 之前是改了配置文件:harbor.yml 的hostname的,當時我運行install.sh的時候hostname用的是:harbor.od.com,后來發現域名od.com已經被用了,所以install.sh 之后才改回到 harbor.odljy.com,然后重啟harbor就能識別這個新hostname,竟然不行。
  所以要解決的話,停掉harbor再裝(運行install.sh)吧,前提是已經改好harbor.yml 想要的hostname:
cd /opt/apps/harbor
/usr/bin/docker-compose stop
然后運行: ./install.sh
 
 
三、kubectl 問題
1、kubectl get node返回資源為空
[root@k8s-1 ~]# kubectl get node
——》 No resources found

問題解決:

這個是我腦殘,竟然漏了這步沒做 = =!       我這里只在k8s-1做了,當然做兩台更完美了

 

 

 

 

 這個是k8s-1   的nginx配置:vim /etc/nginx/nginx.conf

監聽7443端口,轉發到apiserver的兩台機器上

 

 

 

四、核心插件部署問題

【i】CNI網絡插件

1、驗證跨網絡訪問
問題: kubectl get pods ——》 返回為空

 

問題解決:要自己新建一個pod來,舉個栗子(群上大神幫搞的,感激感激)

k8s-2機器運行:

先拉一個nginx鏡像,傳到harbor上

(1)mkdir -p /data/yaml
(2)vim nginx.yaml

 

 

(3)kubectl apply -f nginx.yaml
然后就有pods了

 

 

2、 解決pod間IP透傳問題
pod里面日志看不到
tail -F /var/log/nginx/access.log ——》為空

問題解決:

宿主機: kubectl logs -f nginx-ds-j8hd7 這樣看可以看到日志

 

 看到pod內的nginx日志做了個軟鏈接,把nginx日志重定向到null了,只能外面的控制台看

 

【ii】CoreDNS插件

問題:內網解析可以,外網解析(百度域名)不了
內網解析可以:
dig -t A nginx-web.default.svc.cluster.local @192.168.0.2 +short # 內網解析OK
192.168.124.229
外網解析不了:
dig -t A www.baidu.com @192.168.0.2 +short ——》為空

 問題解決:

5.2.2. coredns的資源清單文件(k8s-4) 中的 configmap.yaml 要改下ip

vim /data/k8s-yaml/coredns/coredns_1.6.1/configmap.yaml

 

改成部署DNS機器的ip(k8s-3)

forward是 當前DNS沒解析就轉到指定的DNS解析

 

 

【iii】Ingress-Controller插件

 1、交付traefik到k8s

問題報錯現象:kubectl get pods -n kube-system -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
coredns-74998cf4c7-pw6zp 1/1 Running 0 17h 172.7.128.3 k8s-1 <none> <none>
traefik-ingress-5jcw8 1/1 Running 0 28m 172.7.128.5 k8s-1 <none> <none>
traefik-ingress-sr6s5 0/1 ContainerCreating 0 28m <none> k8s-2 <none> <none>

 

問題解決:

1、看pod日志(要指定命名空間):
kubectl describe pod xxxxx   -n kube-system
[root@k8s-1 conf.d]# kubectl describe traefik-ingress-5jcw8 -n kube-system

 報錯信息:

Warning FailedCreatePodSandBox 31m kubelet, k8s-2 Failed create pod sandbox: rpc error: code = Unknown desc = failed to start sandbox container for pod "traefik-ingress-sr6s5": Error response from daemon: driver failed programming external connectivity on endpoint k8s_POD_traefik-ingress-sr6s5_kube-system_b078b6ee-e925-4267-ab56-a681c4e18d69_4 (853306a4fea13ec51ad737bcb88e1e8840f24f245892318c0fed9fc93a854a0f): (iptables failed: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.7.129.3 --dport 80 -j ACCEPT: iptables: No chain/target/match by that name.

 

 

 2、 k8s-2 重啟docker

[root@k8s-2 ~]# systemctl restart docker

 

 ################

還有些問題沒解決,到時再說吧:

supervisorctl 關服務沒關好,導致啟動報錯,不得不 kill 進程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM