流水线发布到k8s集群
搭建了k8s 集群,修改下流水线,发布项目到k8s 集群看看,由于我们安装k8s 都是 root用户来进行,运行程序是 普通账户,那么先给普通账户添加执行k8s的权限
我的普通用户先前已经建立好,就是运行docker的 appruner 用户
复制ADMIN.CONF文件到普通用户
mkdir -p /home/appruner/.kube cp -i /etc/kubernetes/admin.conf /home/appruner/.kube/config //最后注意这里不要加斜杠,我们是要把文件admin.conf 修改成config 文件,config不是目录,要不运行的时候提示config是目录 chown appruner:appruner /home/appruner/.kube/config
配置环境变量
export KUBECONFIG=/etc/kubernetes/admin.conf echo "source <(kubectl completion bash)" >> ~/.bashrc
编写Deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: myweb-deploy spec: replicas: 3 selector: matchLabels: app: myweb template: metadata: labels: app: myweb spec: containers: - name: myweb image: {:ImagePath} ports: - containerPort: 7000
{:ImagePath} 是用sell 脚本替换的标记
编写Service.yaml
apiVersion: v1 kind: Service metadata: name: myweb-service labels: app: myweb-service spec: type: NodePort selector: app: myweb ports: - port: 80 #service 的端口 targetPort: 7000 # 容器端口 nodePort: 32000 # node节点对外的端口(30000-32670)
切换最后docker 的代码到k8s
stage('Deploy To K8S_Server') { echo 'excuting remote command over ssh' sh """ #!/bin/bash if [ -e "$K8S_DIR" ]; then cd $K8S_DIR fi pwd ls -l scp deployment.yaml appruner@192.168.199.241:/home/appruner scp service.yaml appruner@192.168.199.241:/home/appruner ssh -tt appruner@192.168.199.241 << eeooff pwd ls -l kubectl delete -f ./deployment.yaml -f ./service.yaml sleep 1s kubectl apply -f ./deployment.yaml -f ./service.yaml sleep 2s exit eeooff """ echo 'remote command has been excuted sucessfull!' }
由于我只配置一台 jenkins slave的机器做编译打包环境,有时候添加job以后 jenkins 会把job运行的节点切换到Master上,而这个Master是没有安装 .netcore 以及配置.nuget 还有ssh到其它机器的免密操作,所以流水线肯定跑不起来
pipeline job 如果需要指定节点编译,添加node("slave节点名"){...},普通自由风可以在general 配置面板里面有个 Restrict where this project can be run
K8s 集群master节点怎么没有拉取 Image?
发布流水线成功了,但是惯性去 master节点查看pod 信息,发现三个pod也是running 状态,在docker images 查看没有镜像,是个什么情况,通过url 访问,嗨,一切正常,原来镜像拉取是在调度节点上拉取的。
另外注意,K8s 底层的容器运行我这里是依赖于docker的,所以docker image 拉取私有仓库操作要提前配置好。
配置私有仓库地址
vim /etc/docker/daemon.json
输入如下参数,注意修改为自己的ip地址:
"insecure-registries": ["192.168.199.230:8081"]
systemctl restart docker