图片

还记得下面这张图嘛?这是我们cicd中第一篇文章中我们一起画的,现在已经处理完harbor了,那么接下来我们是不是就该使用k8s来构建,然后健康检查了呢?

图片

图片

k8s-deploy

这里我们也使用脚本来进行配置,那么首先我们是不是一样的工作,先修改流水线上的配置呢?流水线修改如下:

node {
    env.BUILD_DIR = "/root/script/namespace"
    env.MODEL = "springboot"
    stage('Git') { // for display purposes
        git "https://gitee.com/xuexi100/yanshi.git"
    }
    stage('Maven') {
        sh "cd ${MODEL}; mvn clean; mvn package"
    }
    stage('build-image') {
        sh "sh /root/script/build-springboot.sh"
    }
    stage('k8s-deploy'){
        sh "sh /root/script/k8s-deploy.sh"
    }
}

老样子,梳理脚本思路,首先我们需要一个k8s的yaml文件,对吧,而且我们还需要一个镜像的名字,但是我们镜像的名字是“build-springpoot”中生成的,我们该如何获取呢?先不管,首先知道我们需要这两个东西,然后再解决。

1、k8s的yaml文件
  在这里我们直接复制过来,然后把里面的相关值,配置成变量,就可以多次使用了。
2、image的name
  这里的话,我们需要修改上个脚本,将镜像名字放到一个文件中,这样子我们是不是就可以获取到了。

那么先修改“build-springpoot.sh”脚本吧。

# 在脚本文件的最后添加如下信息
# 获取镜像名字
echo ${Image_Name} > /root/script/IMAGE_NAME

然后搞定yaml模板,把之前文章中的这个yaml拿过来稍微改动一下,如下。

[root@node1 ~]# cd /root/script/
[root@node1 script]# mkdir template
[root@node1 script]# cd template/
[root@node1 template]# 
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{NAME}}
spec:
  selector:
    matchLabels:
      app: {{NAME}}
  replicas: 1
  template:
    metadata:
      labels:
        app: {{NAME}}
    spec:
      containers:
      - name: {{NAME}}
        image: {{IMAGE}}
        ports:
        - containerPort: 8080
---
#service
apiVersion: v1
kind: Service
metadata:
  name: {{NAME}}
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: {{NAME}}
  type: ClusterIP

---
#ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{NAME}}
spec:
  rules:
  - host: {{HOST}}
    http:
      paths:
      - path: /
        backend:
          serviceName: {{NAME}}
          servicePort: 80
[root@node1 template]#

可以看到我们在构建模板中设置了三个变量,其中有一个host,我们貌似没有地方可以获取,而且他是可以自定义的,那么我们就还需要修改下流水线配置如下,再新建个环境变量:

node {
    env.BUILD_DIR = "/root/script/namespace"
    env.MODEL = "springboot"
    env.HOST = "springboot.yunweijia.com"
    stage('Git') { // for display purposes
        git "https://gitee.com/xuexi100/yanshi.git"
    }
    stage('Maven') {
        sh "cd ${MODEL}; mvn clean; mvn package"
    }
    stage('build-image') {
        sh "sh /root/script/build-springboot.sh"
    }
    stage('k8s-deploy'){
        sh "sh /root/script/k8s-deploy.sh"
    }
}

然后我们开始写脚本内容:

[root@node1 template]# cd ..
[root@node1 script]# pwd
/root/script
[root@node1 script]# 
[root@node1 script]# vim k8s-deploy.sh
#!/bin/bash
name=${JOB_NAME}
image=$(cat /root/script/IMAGE_NAME)
host=${HOST}

# 输出变量
echo "deploying~~~"
echo "k8s_NAME: ${name}"
echo "k8s_IMAGE: ${image}"
echo "k8s_HOST: ${host}"

# 复制yaml文件过来
rm -f springboot.yaml
cp /root/script/template/springboot.yaml .

# 替换变量
sed -i "s,{{NAME}},${name},g" springboot.yaml
sed -i "s,{{IMAGE}},${image},g" springboot.yaml
sed -i "s,{{HOST}},${host},g" springboot.yaml

# 使配置生效
kubectl apply -f springboot.yaml

# 查看yaml文件
cat springboot.yaml
[root@node1 script]# chmod +x k8s-deploy.sh

整理完毕后我们去jenkins上“Build Now”一下子,看看结果:

图片

可以看到是没问题的,然后我们再去查看下这个pod是否存在:

[root@node1 script]# kubectl get pod
NAME                                 READY   STATUS    RESTARTS   AGE
deploy-springboot-5cf68f977b-rrcc2   1/1     Running   0          4m10s
nginx-ds-q2pjt                       1/1     Running   16         10d
nginx-ds-zc5qt                       1/1     Running   21         16d
[root@node1 script]#

说明是没有问题的。

health check

接下来我们就应该配置健康检查了是吧,这里我们就不新建脚本了,就集合在上一个"k8s-deploy.sh"这个脚本中吧,集成结果如下:
剩余内容请转至VX公众号 “运维家” ,回复 “137” 查看。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐