首页 > 其他分享 >云原生实战-基于K8s+Docker+DevOps+Jenkins

云原生实战-基于K8s+Docker+DevOps+Jenkins

时间:2022-10-18 15:55:24浏览次数:73  
标签:ingress name kubernetes traefik bootshiro DevOps Jenkins Docker metadata

云原生实战-基于K8s+Docker+DevOps+Jenkins

之前自己的项目开发就搭了个cicd的环境,那时候是在本就小的可怜的服务器上搭了一套
jenkins + docker registry + docker
见之前的笔记 docker学习下面
总的差不多这样:
图片描述



之后对kubernetes的接触后,就在之前的基础上加入kubernetes,其实也就是在服务器拉取镜像docker run的时候改变为通知kubernetesapiServer对提前配置好的项目配置文件xx.yaml进行更新kubectl appply -f xx.yaml,它会对配置里的镜像拉取在多个pod里运行,当然还需要对应的service,如果需要暴露给外部还可以添个ingress



一个小服务器加本地一个闲置从机撑进去这么多东西很显然爆了,于是把jenkins , docker registry拆出来,用上了公共的ali云服务CodePipeline,容器镜像服务
这里记录一下。

docker搭建

ubuntu安装docker官方教程

kubernetes搭建

之前写的kubernetes学习下面有

使用ali云CodePipeline替代jenkins创建任务

  1.   配置->项目名称:最好为github上代码的demo项目名称,这里以bootshiro为例
  2.   配置->源码管理->Git:URL为github上的项目clone url,下面默认master分支
  3.   配置->构建触发器->填写代码分支:eg:master 点击生成触发器地址留下备用(github webhook配置会用到)

图片描述
图片描述

  1.   配置->构建项目类型可选maven项目 node python等(按自己需求改编译打包册测试脚本)
  2.   eg: maven项目 编译打包: mvn package -B -DskipTests 用例测试: mvn test

图片描述

  1.   配置->镜像构建和发布: 这里使用ali云的免费docker镜像仓库
  2.   镜像版本号最好用jenkins环境变量标记,registry地址证书等就是自己开通的ali云registry地址和账户,docker路径是相对于当前代码仓库的Dcokerfile文件路径,用这个Dockefile文件来生成镜像。
  3.   eg: bootshiro的Dockefile
  4.   #VERSION 1.1.0
  5.   #基础镜像为openjdk:12-alpine
  6.    
  7.   FROM openjdk:12-alpine
  8.    
  9.   #签名
  10.   MAINTAINER tomsun28 "[email protected]"
  11.    
  12.    
  13.   RUN rm -rf /opt/running/bootshiro*
  14.   ADD ./target/bootshiro.jar /opt/running/bootshiro.jar
  15.    
  16.   EXPOSE 8080
  17.   WORKDIR /opt/running/
  18.    
  19.   CMD ["java", "-jar", "bootshiro.jar","--spring.profiles.active=prod"]

图片描述

  1.   配置->部署Kubernetes(新): 这里配置对搭建好的k8s环境的apiServer连接,之后好使用apiServer对kubernetes操作
  2.   认证方式:选择认证证书
  3.   API服务器地址:为apiServer通讯地址
  4.   证书:使用docker授权模式,客户端Key(key.pem)和客户端证书(cert.pem)在/etc/kubernetes/admin.conf,服务端CA证书(ca.pem)在/etc/kubernetes/pki/ca.crt
  5.   部署配置文件:为k8s部署这个项目的配置文件位置,也是以当前项目代码仓库为相对路径,eg :bootshiro.yaml
  6.    
  7.   # ----------------------bootshiro--------------------- #
  8.    
  9.   # ------bootshiro deployment------ #
  10.   kind: Deployment
  11.   apiVersion: apps/v1beta2
  12.   metadata:
  13.   name: bootshiro-deployment
  14.   labels:
  15.   app: bootshiro
  16.   spec:
  17.   replicas: 1
  18.   selector:
  19.   matchLabels:
  20.   app: bootshiro
  21.   template:
  22.   metadata:
  23.   labels:
  24.   app: bootshiro
  25.   spec:
  26.   containers:
  27.   - name: nginx
  28.   image: registry.cn-hangzhou.aliyuncs.com/tomsun28/bootshiro:${BUILD_NUMBER}
  29.   ports:
  30.   - containerPort: 8080
  31.    
  32.   ---
  33.    
  34.   # -------nginx-service--------- #
  35.   apiVersion: v1
  36.   kind: Service
  37.   metadata:
  38.   name: bootshiro-service
  39.   spec:
  40.   # type: NodePort
  41.   ports:
  42.   - name: server
  43.   port: 8080
  44.   targetPort: 8080
  45.   selector:
  46.   app: bootshiro
  47.    
  48.   # !----------------------bootshiro--------------------- #
  49.    
  50.   这里配置部署文件创建了一个pod实例,创建了与其想对应的service在集群内部暴露服务。
  51.   如果部署的应用需要对集群外提供服务,这里还要创建对应的暴露服务的方式,如ingress, nodeport等

图片描述

 

    • -

到此cicd就差不多了,我们开发代码push到github仓库上,跟着DevOps流程走,最后项目就会自己运行到kubernetes集群里面了,pod挂了或者从机挂了,k8s会重新启保证设定数量的pod。

使用ingress对集群外暴露服务

这里使用的是traefik-ingress,在kubernetes中部署traefik有官方部署手册,基本按着走一遍就能部署上去了。

整合部署的traefik.yaml:

  1.   ---
  2.   kind: ClusterRole
  3.   apiVersion: rbac.authorization.k8s.io/v1beta1
  4.   metadata:
  5.   name: traefik-ingress-controller
  6.   rules:
  7.   - apiGroups:
  8.   - ""
  9.   resources:
  10.   - services
  11.   - endpoints
  12.   - secrets
  13.   verbs:
  14.   - get
  15.   - list
  16.   - watch
  17.   - apiGroups:
  18.   - extensions
  19.   resources:
  20.   - ingresses
  21.   verbs:
  22.   - get
  23.   - list
  24.   - watch
  25.   ---
  26.   kind: ClusterRoleBinding
  27.   apiVersion: rbac.authorization.k8s.io/v1beta1
  28.   metadata:
  29.   name: traefik-ingress-controller
  30.   roleRef:
  31.   apiGroup: rbac.authorization.k8s.io
  32.   kind: ClusterRole
  33.   name: traefik-ingress-controller
  34.   subjects:
  35.   - kind: ServiceAccount
  36.   name: traefik-ingress-controller
  37.   namespace: kube-system
  38.   ---
  39.   apiVersion: v1
  40.   kind: ServiceAccount
  41.   metadata:
  42.   name: traefik-ingress-controller
  43.   namespace: kube-system
  44.   ---
  45.   kind: DaemonSet
  46.   apiVersion: extensions/v1beta1
  47.   metadata:
  48.   name: traefik-ingress-controller
  49.   namespace: kube-system
  50.   labels:
  51.   k8s-app: traefik-ingress-lb
  52.   spec:
  53.   template:
  54.   metadata:
  55.   labels:
  56.   k8s-app: traefik-ingress-lb
  57.   name: traefik-ingress-lb
  58.   spec:
  59.   serviceAccountName: traefik-ingress-controller
  60.   terminationGracePeriodSeconds: 60
  61.   containers:
  62.   - image: traefik
  63.   name: traefik-ingress-lb
  64.   ports:
  65.   - name: http
  66.   containerPort: 80
  67.   hostPort: 80
  68.   - name: admin
  69.   containerPort: 8080
  70.   securityContext:
  71.   capabilities:
  72.   drop:
  73.   - ALL
  74.   add:
  75.   - NET_BIND_SERVICE
  76.   args:
  77.   - --api
  78.   - --kubernetes
  79.   - --logLevel=INFO
  80.   ---
  81.   apiVersion: v1
  82.   kind: Service
  83.   metadata:
  84.   name: traefik-web-ui
  85.   namespace: kube-system
  86.   spec:
  87.   selector:
  88.   k8s-app: traefik-ingress-lb
  89.   ports:
  90.   - name: web
  91.   port: 80
  92.   targetPort: 8080
  93.   ---
  94.   apiVersion: extensions/v1beta1
  95.   kind: Ingress
  96.   metadata:
  97.   name: traefik-web-ui
  98.   namespace: kube-system
  99.   annotations:
  100.   kubernetes.io/ingress.class: traefik
  101.   traefik.frontend.rule.type: PathPrefixStrip
  102.    
  103.   spec:
  104.   rules:
  105.   - host: tom.usthe.com
  106.   http:
  107.   paths:
  108.   - path: /ingress
  109.   backend:
  110.   serviceName: traefik-web-ui
  111.   servicePort: web

使用traefik来暴露service:

  1.   apiVersion: extensions/v1beta1
  2.   kind: Ingress
  3.   metadata:
  4.   name: chess
  5.   namespace: default
  6.   annotations:
  7.   kubernetes.io/ingress.class: traefik
  8.   traefik.frontend.rule.type: PathPrefixStrip
  9.   spec:
  10.   rules:
  11.   - host: tom.usthe.com
  12.   http:
  13.   paths:
  14.   - path: /usthe
  15.   backend:
  16.   serviceName: usthe-service
  17.   servicePort: http
  18.   - path: /nginx
  19.   backend:
  20.   serviceName: nginx
  21.   servicePort: http

图片描述



云原生实战-基于K8s+Docker+DevOps+Jenkins

标签:ingress,name,kubernetes,traefik,bootshiro,DevOps,Jenkins,Docker,metadata
From: https://www.cnblogs.com/java9995/p/16802838.html

相关文章

  • Docker 容器连接
    学习docker最好还是整个服务器,买太贵了,建议租一个,我用的是3A服务器!!!前面我们实现了通过网络端口来访问运行在docker容器内的服务。容器中可以运行一些网络应用,要让......
  • Docker 容器连接
    学习docker最好还是整个服务器,买太贵了,建议租一个,我用的是3A服务器!!!前面我们实现了通过网络端口来访问运行在docker容器内的服务。容器中可以运行一些网络应用,要让外部......
  • 【Bug解决】centos安装docker显示 No package docker-ce available
    问题:我在如下安装docker的命令到yum-yinstalldocker-ce报错Nopackagedocker-ceavailable#1.下载关于docker的依赖环境yum-yinstallyum-utilsdevice-mapper-per......
  • 使用docker制作自启
    Dockfile#!/bin/bashFROMamd64/ubuntu:18.04RUNln-snf/usr/share/zoneinfo/Asia/Shanghai/etc/localtime&&echoAsia/Shanghai>/etc/timezoneENVLANGC.UTF-......
  • Linux (Debain11) 安装 docker-desktop 时出现依赖问题
    安装Docker-Desktop出现依赖问题添加docker-ce-cli的安装源$echo\"deb[arch=$(dpkg--print-architecture)signed-by=/usr/share/keyrings/docker-archive-keyr......
  • docker 安装mysql主从模式
    1.创建主数据库容器dockerrun-p3306:3306--namemysql-master-v/zgbo/mysql_m/log:/var/log/mysql-v/zgbo/mysql_m/data:/var/lib/mysql-v/zgbo/mysql_m/conf:......
  • Nexus3 docker hosted私有仓库搭建指南
     1、登录至nexus3控制中心;选择 BlobStores创建一个dockerblod   2、创建docker(hosted)类型仓库  指定私有仓库名指定端口允许拉取方式指定docker......
  • centos7离线安装Jenkins-rpm方式
    Jenkins有多种安装方式,下面通过rpm进行安装前提:Java的jdk已安装一、下载Jenkins的rpm包下载地址:https://jenkins.io/zh/download/或者https://mirrors.tuna.tsinghua.edu......
  • docker使用
    一、基于Linux安装Docker1、下载关于Docker的依赖环境yum-yinstallyum-utilsdevice-mapper-persistent-datalvm212、设置镜像下载Docker的镜像源yum-config-manager-......
  • docker部署etcd集群单节点失败
    1、部署etcd3节点集群后其中一个节点报错2、查看etcd日志3、对比秘钥值是否正常4、看下memberlist5、备份etcd数据eesnapshotsave./snapshot2022-10-18.db6......