• gitlab + jenkins + docker + k8s


    总体流程:

    • 在开发机开发代码后提交到gitlab
    • 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry
    • 之后将在k8s-master上执行rc、service的创建,进而创建Pod,从私服拉取镜像,根据该镜像启动容器

    第四十三章 微服务CICD(5)- gitlab + jenkins + docker中,实现了前两步。本节实现第三步

    一、打通jenkins与k8s-master两台机器之间的ssh无密码访问

    参考:第四十二章 微服务CICD(4)- jenkins + gitlab + webhooks + publish-over-ssh(2)

    添加ssh server:

    说明:由于不需要拷贝jenkins机器上的文件到10.211.55.6,所以Remote Directory不填。

    二、jenkins服务配置

    选择机器,执行命令。

    三、k8s-master(10.211.55.6)

    1、在/data/目录下创建rc和svc文件

    1.1、myservice1-docker-rc.yaml

    复制代码
     1 apiVersion: v1
     2 kind: ReplicationController
     3 metadata:
     4   name: myservice1-docker
     5 spec:
     6   replicas: 2
     7   selector:
     8     app: myservice1-docker
     9   template:
    10     metadata:
    11       labels:
    12         app: myservice1-docker
    13     spec:
    14       containers:
    15       - name: myservice1-docker
    16         image: 10.211.55.4:5000/com.xxx/myservice1-docker:1.0-SNAPSHOT
    17         imagePullPolicy: Always
    18         ports:
    19         - containerPort: 8080
    复制代码

    说明:imagePullPolicy:

    • Always:总是拉取镜像,如果tag是lastest的话,该配置是默认值
    • IfNotPresent:如果镜像不存在,则拉取镜像,如果tag不是lastest的话,该配置是默认值
    • Never

    1.2、myservice1-docker-svc.yaml

    复制代码
     1 apiVersion: v1
     2 kind: Service
     3 metadata:
     4   name: myservice1-docker
     5 spec:
     6   type: NodePort
     7   ports:
     8     - port: 8080
     9       nodePort: 30001
    10   selector:
    11     app: myservice1-docker
    复制代码

    2、在/data/script/目录下创建service_start.sh脚本

    复制代码
     1 #!/bin/bash
     2 export service_name=$1
     3 sleep_second=3
     4 
     5 echo 'kubectl delete rc ${service_name}'
     6 kubectl delete rc ${service_name}
     7 
     8 echo 'kubectl delete service ${service_name}'
     9 kubectl delete service ${service_name}
    10 
    11 echo 'kubectl delete pods -l app=${service_name}'
    12 kubectl delete pods -l app=${service_name}
    13 
    14 sleep ${sleep_second}
    15 
    16 echo 'create rc'
    17 kubectl create -f /data/${service_name}-rc.yaml
    18 
    19 echo 'create service'
    20 kubectl create -f /data/${service_name}-svc.yaml
    复制代码

    说明:

    • 首先删除相应service的rc,service,以及拥有app=${service_name}标签的所有pods
      • 第一次执行该脚本的时候,由于rc、service、pod不存在,删除的话,会打出error日志,无所谓(没任何影响)。
    • 之后,睡3s
    • 最后,创建rc(此时会创建pod,并从registry拉取镜像,最后根据该镜像启动容器),创建service(提供对外访问接口)

    三、测试

    1、本地:

    • git add --all
    • git commit -m"test k8s cicd"
    • git push origin HEAD:dev

    2、查看jenkins的console

    3、浏览器访问http://10.211.55.8:30001/docker/hello

  • 相关阅读:
    IP,子网,子网掩码,网关,DNS到底都是啥(二)
    (能被11整除的数的特征)The shortest problem --hdu
    (匹配 匈牙利)棋盘游戏 -- Hdu --1281
    (匹配)Courses -- hdu --1083
    (匹配 最小路径覆盖)Air Raid --hdu --1151
    (匹配)The Accomodation of Students --HDU --2444
    (匹配)Fire Net --hdu --1045
    (二分匹配 模板)过山车 -- hdu --2063
    (连通图 ) Redundant Paths --POJ --3177
    (二分匹配 模板 KM)奔小康赚大钱--hdu--2255
  • 原文地址:https://www.cnblogs.com/wudonghang/p/7017060.html
Copyright © 2020-2023  润新知