流水线发布到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

 

posted @ 2021-08-22 18:21  LearningAlbum  阅读(214)  评论(0)    收藏  举报