分享一个自己以前从0开始搭建linux到k8s+jenkins环境遇到过的问题解决方案
安装k8s可参考例子 带flannel http://www.cnblogs.com/xiaochangwei/p/kubernetes-03.html
1、安装好虚拟机后,配置网络虚拟机可以ping通外网,但是宿主机无法ping通虚拟机
点击编辑->虚拟网络编辑器,选择VMnet8.选择桥接模式,不共享主机ip 这样别的局域网机器可以连接上,nat模式其他机器连不上虚拟机
NAT模式(与虚拟机共享主机的IP地址),然后把将主机虚拟适配器连接到此网络打钩
具体操作见https://jingyan.baidu.com/article/5553fa82a2 d48665a2393432.html
2、怎样开通docker端口供外部推送镜像
在/usr/lib/systemd/system/docker.service ,进入编辑模式后,将ExecStart这一行后面加上
-H tcp://0.0.0.0:2375 -H unix: ///var/run/docker.sock**
3、netstat命令找不到
yum install net-tools
4、Kubernetes创建pod一直处于ContainerCreating排查和解决
yum install *rhsm*安装完成后
执行一下
docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
如果依然报错,可参考下面的方案:
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
然后在执行上面docker pull命令
5、接下来k8s配置安装k8s全文指南配置
6、etcd错误[Error: client: etcd cluster is unavailable or misconfigured; error #0: dial tcp 127.0.0.1:4001: getsockopt: connection refused](https://www.cnblogs.com/lkun/p/9486156.html)
vim /etc/etcd/etcd.conf 在 ETCD_LISTEN_CLIENT_URLS="http://192.168.7.78:2379,http://127.0.0.1:2379"里面添加一下127.0.0.1:2379
7、设置k8s开机启动时候找不到文件,
各种文件存在于 /usr/lib/systemd/system/
8、使用yum install kubernetes安装的k8s找不到master
在/etc/kubernetes/config文件里面有默认配置需要修改apiserver地址
确认端口是否开放2379 8080
9、centos7中安装java
yum -y install java-1.8.0-openjdk*
10、cengos7中安装git
https://www.cnblogs.com/liter7/p/6581344.html (这个是git仓库,选择是否需要安装)
https://blog.csdn.net/javaee_sunny/article/details/80450153(安装新版git)
yum –y install git**(yum install git 安装的Git版本过低,应该用jenkins安装插件或自行 安装更高版本)**
11、centos7中安装maven
http://www.cnblogs.com/qiyuan880794/p/9407342.html
12、在 master中安装jenkins
https://blog.csdn.net/linjingke32/article/details/77799878
13、刚安装好的jenkins 创建好用户后主页空白页
重新启动jenkins服务后解决
14、安装好mysql以后外网无法连接数据库
mysql>
mysql>use mysql;
mysql>select ‘host’ from user where user=‘root’;
update user set host = ‘%’ where user =‘root’;
#修改host值(以通配符%的内容增加主机/IP地址,当然也可以直接增加某个特定IP地址,如果执行update语句时出现ERROR 1062 (23000): Duplicate entry ‘%-root’ for key ‘PRIMARY’ 错误,需要select host from user where user = ‘root’;
查看一下host是否已经有了%这个值,如果有了直接执行下面的flush privileges;即可)
15、安装harbor
https://blog.csdn.net/aixiaoyang168/article/details/73549898
16、在jenkins配置git There's no such executable git in PATH: /sbin, /usr/sbin, /bin, /usr/bin.
https://blog.csdn.net/wangfei0904306/article/details/56011877
在出错的地方填入: “whereis git"的地址 + “/bin/git” (如上面"whereis git"的地 址为”/usr/local/git",则应该填入 “/usr/local/git/bin/git”) 并保存
17、git安装完了但是git --version 找不到
因为我git安装到了/usr/local/git/bin 所以要设置一下环境变量
18、jenkins使用readMavenPom
添加插件Pipeline Utility Steps,在readMavenPom出错时,要在scriptApproval允许Approvals
19、 No such DSL method 'withMaven' found among step
缺少插件pipeline-Maven-integration
20、jenkins pipeline运行 提示mvn命令找不到
应该是配置centos7中的路径错误 ,暂时使用自动安装maven解决
21、流水线命令 def app = docker.build"192.168.146.133/hello:${env.BUILD_NUMBER} " app.push()错误 dial unix /var/run/docker.sock: connect: permission denied
将jenkins用户加入docker组
重启Jenkins服务
sudo gpasswd -a jenkins docke sudo service jenkins restart
sudo groupadd docker //如果不存在,创建docker用户组
貌似需要重启服务器
22、 dial tcp 192.168.146.133:443: getsockopt: connection refused
内网搭建自己的docker 仓库时遇到这个问题,原因是docker 默认不支持http的registry ,
vim /etc/docker/daemon.json 添加 { “insecure-registries”:[“hub.zuobiao.com”] }
重启 docker
systemctl restart docker.service
23、Jenkins的Credentials(证书)管理 特别重要。。harbor账户认证也在这里配置
https://blog.csdn.net/zzy1078689276/article/details/77494012
24、pipeline删除镜像失败 。提示坏的替换
因为使用了${env.BUILD_NUMBER} 写在了单引号中, 需要写在双引号中
sh “docker rmi 192.168.146.133/hello/hello:${env.BUILD_NUMBER}”
25、docker打包后的镜像运行后Error: Could not find or load main class jar
dockerfile文件写错。测试后如下可用
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD target/hello-0.0.1-SNAPSHOT.jar /app.jar
CMD [“bash”,"-c",“touch /app.jar”]
ENTRYPOINT [“java”,"-Djava.security.egd=file:/dev/./urandom","-jar",“app.jar”]
26、运行完删除旧镜像报错
可以使用try catch语句写入删除
27、使用pipeline修改rc文件 无法打开临时文件 /home/fengfan/kubernetes/sedwsAlt9: 权限不够
暂时把文件放在了项目中 ,待解决?、
28、pod日志Error from server: Get https://192.168.146.132:10250/containerLogs/default/hello-q84f9/hello?follow=true: dial tcp 192.168.146.132:10250: getsockopt: no route to host
给node节点开启10250端口
29、 Error syncing pod, skipping: failed to "StartContainer" for "hello" with ErrImagePull: "image pull failed for 192.168.146.133/hello/hello:64, this may be because there are no credentials on this request. details: (Get https://192.168.146.133/v1/_ping: dial tcp 192.168.146.133:443: getsockopt: connection refused)"
原因是node节点没有给docker设置harbor仓库地址
解决方法见https://www.jianshu.com/p/1409967439d6
30、kuberneter滚动升级 不能用rc要用Dployment 否则会出现名称重复报错
Kubernetes集群中Service的滚动更新
https://tonybai.com/2017/02/09/rolling-update-for-services-in-kubernetes-cluster/
31、node2节点运行端口没启用
在/etc/kubernetes/kubelet文件中放开 KUBELET_PORT="–port=10250"?????
node1安装了flannel node2没有安装配置的问题
然后/etc/kubernetes/config通用配置别忘记改
32、使用nginx做负载均衡和反向代理
修改nginx.conf文件
upstream hello{
server 192.168.146.132:30002 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.146.135:30002 weight=1 max_fails=2 fail_timeout=30s;
}
location / {
proxy_pass http://hello;
}
33、添加keepalived 实现高可用
http://blog.51cto.com/superpcm/2095395
34、使用keepalived时节点不会生成vip
virtual_ipaddress {
192.168.146.139
}要写一个使用ip段中间的ip
35、如果keepalived运行正常但是本机的nginx运行错误导致不会切换到子节点
写一个脚本2秒运行一次检测nginx是否正常 ,如果不正常则停止keepalived
#!/bin/bash
while true
do
if [ $(netstat -tlnp|grep nginx|wc -l) -ne 1 ]
then
systemctl stop keepalived
fi
sleep 2
done
36、局域网无法访问本虚拟机服务
在虚拟机上设置端口代理转发
至此完成简单的k8s整合jenkins docker的ci/cd完整例子
项目在git hello
37、Kubernetes暴露端口给本机调用端口不通问题
通过k8s暴漏端口,外部访问就是端口不通,后发现ip规则问题
这是新版本docker导致的问题,默认情况下这个是DROP
执行以下命令就可以了
iptables -P FORWARD ACCEPT