二进制部署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 进程

 

posted @ 2020-11-29 12:46  windysai  阅读(1127)  评论(0编辑  收藏  举报