部署错误总结
1、hosts
情景:
检查POD状态时
Error from server: Get https://centos-minion-2:10250/containerLogs/default/nginx-z34rn/nginx: dial tcp: lookup centos-minion-2 on 8.8.8.8:53: no such host
原因:
检查hosts,发现没有配置master机器的hosts 增加 minion-2的记录
2、找不到POD
一般在部署k8s环境的时候会设置多个namespace,比如一般应用默认使用default,k8s组件使用kube-system等等。所以如果你找不到了,但是它还运行着,说明你没找对地方。
Namespace(命名空间)是kubernetes系统中的另一个重要的概念,通过将系统内部的对象“分配”到不同的Namespace中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。
kubectl get pods -n kube-system -o wide
#or
kubectl get all
3、POD之间无法访问
Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务;简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址,并使Docker容器可以互连。
所以出现无法访问的情况时,一定是flannel 有问题。
检查状态:
systemctl status flannel
4、Ingress-nginx 访问慢
遇到过一次情况,内网机器部署Ingress-nginx后访问网站需要10多秒的时间。检查日志后发现是后端的backend有一台机器无法访问,因此造成多次重试。
POD
时间不一致
情景:
默认很多镜像的时区都不是东八区,所以和现在时间会差8小时。date -R
检查时区。
解决:
1、TZ
对于一般的docker镜像来说,添加个TZ变量就可以啦
spec:
containers:
- name: dev-wechat-tomcat
image: docker.io/tomcat
env:
- name: TZ
value: Asia/Shanghai
但不是对于所有镜像都有效的,我测试过一般的都可以,但是ingress-nginx-control镜像死活无效,至今没有什么好版本。最后只能用elk来调整一下。
对于时区来说,还有其他集中方式:
2、挂载
spec:
containers:
- name: my-testpod
image: 1604podimage:latest
imagePullPolicy: IfNotPresent
volumeMounts:
- name: tz-config
mountPath: /etc/localtime
volumes:
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
3、复制
docker cp /etc/localtime:【容器ID或者NAME】/etc/localtime
个人比较倾向第一种方式,简单省事。不过也可以修改dockerfile一劳永逸。
4、部署gitlab
新部署的gitlab 项目地址显示为主机名。
解决:
vim /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
## GitLab settings
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: n15.my.com
port: 80
https: false
持续更新中。。
更多参考:
Kubernetes + Dashboard + Heapster (一) 安装配置
Kubernetes + Dashboard + Heapster (二) 监控部署
Kubernetes + Dashboard + Heapster (三) ingress负载均衡
Kubernetes + Dashboard + Heapster (四) 慢慢填坑