从0搭建本地kubeSphere学习环境(3)

在kubeSphere中部署码云(Gitee)项目
项目地址:
https://gitee.com/nichunjun/spring-parent.git
本项目是一个父项目下面有两个module,假设两个module分别有两个不同功能(代码中实际上没有不同)
实现目标:
将这两个module部署在本地k8s中,并正常运行

流程说明

  1. 在k8s中安装nacos和mysql, 然后将nacos自带的数据库sql部署到mysql的nacos数据库;

  2. 在mysql中创建user-service数据库,并创建表user_info,字段为id,name,idcard;

  3. 在nacos配置两个配置项,如下图是api-service的,再增加一个user-service的,applicationname改为user-service,端口改为8081即可;
    在这里插入图片描述

  4. 将代码拷贝到自己的码云中并上传,然后自行修改需要的内容;

  5. 在子项目中分别增加Dockerfile和部署文件;

  6. kubesphere中安装harbor;

  7. 配置流水线,编写jenkinsfile;

  8. 查看效果;

  9. 手动部署镜像.

上面的前三步骤应该在上篇文章中说明完了,现在从第四步开始说明
以下内容都是都要在两个moduleapi-service和user-service中共同进行的

拷贝代码

将上面提到过的git路径,克隆到自己的码云中
然后克隆到本地进行修改
需要根据自己的需要修改两个module中的配置文件中nacos地址

在这里插入图片描述

编写部署文件

Dockerfile文件

首先在目录下编写Dockerfile文件,这个文件用途是将打包完的jar生成镜像时使用
在这里插入图片描述
意思是使用指定的jdk镜像,然后运行复制到指定位置的jar

devops文件

这个文件的用途是在部署到k8s集群中的一些配置,包括端口,探针等
在这里插入图片描述
devops-sample.yaml文件

apiVersion: apps/v1
kind: Deployment							# -> 这个类别意味着部署
metadata:
  labels:
    app: kubesphere
    component: $API_APP_NAME		# 这个是在kubesphere中配置的变量 -> api-service
    tier: backend
  annotations:
    deployment.kubernetes.io/revision: '1'
    kubesphere.io/creator: admin
  #工作负载的名称
  name: $API_APP_NAME
  #kubesphere中项目的名字,需要在kubesphere中你的企业空间中新建这个项目,且在
  #jenkin中最好也新建这个项目, jenkins地址: 你的虚拟机IP:30180
  namespace: $KS_SPACE				# 这个是在kubesphere中配置的变量 -> dev
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  selector:
    matchLabels:
      app: kubesphere
      component: $API_APP_NAME
      tier: backend
  template:
    metadata:
      labels:
        app: kubesphere
        component: $API_APP_NAME
        tier: backend
    spec:
      containers:
        - env:
            - name: CACHE_IGNORE
              value: js|html
            - name: CACHE_PUBLIC_EXPIRATION
              value: 3d
          image: $REGISTRY/$KS_SPACE/$API_APP_NAME:SNAPSHOT-$BUILD_NUMBER
          readinessProbe:	#就绪探针
            httpGet:
              path: /user/queryUser			# 记住,探针访问的地址必须有效,不能404
              port: 8080
            initialDelaySeconds: 100   # 容器启动后多久开始探测
            timeoutSeconds: 10         # 表示容器必须在2s内做出相应反馈给probe,否则视为探测失败
            periodSeconds: 60          # 探测周期,每30s探测一次
            successThreshold: 1        # 连续探测1次成功表示成功
            failureThreshold: 5        # 连续探测3次失败表示失败
          livenessProbe:	#存活探针
            httpGet:
              scheme: HTTP
              path: /user/queryUser
              port: 8080
            initialDelaySeconds: 200   # 容器启动后多久开始探测
            timeoutSeconds: 10         # 表示容器必须在2s内做出相应反馈给probe,否则视为探测失败
            periodSeconds: 120         # 探测周期,每30s探测一次
            successThreshold: 1        # 连续探测1次成功表示成功
            failureThreshold: 5        # 连续探测3次失败表示失败
          imagePullPolicy: Always
          name: $API_APP_NAME
          ports:
            	#jar包的端口,另一个user-service是8081
            - containerPort: 8080
              protocol: TCP
          resources:
            limits:
              cpu: 300m
              memory: 600Mi
            requests:
              cpu: 100m
              memory: 100Mi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      terminationGracePeriodSeconds: 30

devops-sample-svc.yaml文件

apiVersion: v1
kind: Service	# -> 这个类别意味着运行
metadata:
  labels:
    app: kubesphere
    component: $API_APP_NAME
  name: $API_APP_NAME
  namespace: $KS_SPACE
spec:
  ports:
    - name: http-8080
      protocol: TCP
      port: 8080	#端口,另一个是8081
      targetPort: 8080
      nodePort: 30080		#这个是部署完之后外部访问的30080
  selector:
    app: kubesphere
    component: $API_APP_NAME
    tier: backend
  sessionAffinity: None
  type: NodePort	#访问方式

安装Harbor

为什么要安装harbor?
harbor是一个镜像仓库,用于存储和分发镜像用的dockerhub,使用它可以随时的存储和下拉镜像,我们创建镜像存储到这里,然后再下拉到我们的工作负载中运行.
安装方式很简单,在应用商店中可以直接进行安装.官方文档

在这里插入图片描述
安装之后的账号密码在官方文档里有说明,自己看下就可以
查看harbor效果,这个是我已经推送过的镜像了,
在这里插入图片描述

配置流水线

先附图一下我本地kubesphere的内容
在这里插入图片描述
local空间中
在这里插入图片描述
点击Devops项目创建一个部署项目
在这里插入图片描述
创建kubeconfig凭证和自己的码云凭证,harbor凭证,如下图(需要注意kubeconfig类型)
在这里插入图片描述
创建流水线
在这里插入图片描述
只填写流水线名称,描述即可,如service,其他的都先不要选择,不然没有图形化编辑页面
在这里插入图片描述
复制下面的代码

pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  stages {
    stage('拉取代码') {
      agent none
      steps {
        git(url: 'https://gitee.com/nichunjun/spring-parent.git', credentialsId: 'gitee', branch: 'master', changelog: true, poll: false)
        sh 'ls -l'
      }
    }

    stage('项目编译') {
      agent none
      steps {
        container('maven') {
          sh 'mvn clean package -Dmaven.test.skip=true'
        }

        sh 'ls -al'
      }
    }

    stage('default-2') {
      parallel {
        stage('构建user镜像') {
          agent none
          steps {
            container('maven') {
              sh 'ls -l user-service'
              sh 'ls -l user-service/target'
              sh '''docker build -t $REGISTRY/$KS_SPACE/$USER_APP_NAME:SNAPSHOT-$BUILD_NUMBER -f $USER_APP_NAME/Dockerfile-online .
'''
              withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {
                sh '''echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin
'''
                sh 'docker push $REGISTRY/$KS_SPACE/$USER_APP_NAME:SNAPSHOT-$BUILD_NUMBER'
              }

            }

          }
        }

        stage('构建api镜像') {
          agent none
          steps {
            container('maven') {
              sh 'ls -l api-service'
              sh 'ls -l api-service/target'
              sh 'docker build -t $REGISTRY/$KS_SPACE/$API_APP_NAME:SNAPSHOT-$BUILD_NUMBER -f $API_APP_NAME/Dockerfile-online .'
              withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {
                sh '''echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin
'''
                sh 'docker push $REGISTRY/$KS_SPACE/$API_APP_NAME:SNAPSHOT-$BUILD_NUMBER'
              }

            }

          }
        }

      }
    }

    stage('default-3') {
      parallel {
        stage('保存user制品') {
          agent none
          steps {
            archiveArtifacts 'user-service/target/*.jar'
          }
        }

        stage('保存api制品') {
          agent none
          steps {
            archiveArtifacts 'api-service/target/*.jar'
          }
        }

      }
    }

    stage('default-4') {
      parallel {
        stage('部署dev') {
          agent none
          steps {
            container('maven') {
              withCredentials([kubeconfigContent(credentialsId : 'kubeconfig' ,variable : 'KUBECONFIG_CONFIG' ,)]) {
                sh 'mkdir -p ~/.kube/'
                sh 'echo "$KUBECONFIG_CONFIG" > ~/.kube/config'
                sh 'envsubst < $USER_APP_NAME/devops-sample.yaml | kubectl apply -f -'
                sh 'envsubst < $USER_APP_NAME/devops-sample-svc.yaml | kubectl apply -f -'
              }

            }

          }
        }

        stage('部署dev2') {
          agent none
          steps {
            container('maven') {
              withCredentials([kubeconfigContent(credentialsId : 'kubeconfig' ,variable : 'KUBECONFIG_CONFIG' ,)]) {
                sh 'mkdir -p ~/.kube/'
                sh 'echo "$KUBECONFIG_CONFIG" > ~/.kube/config'
                sh 'envsubst < $API_APP_NAME/devops-sample.yaml | kubectl apply -f -'
                sh 'envsubst < $API_APP_NAME/devops-sample-svc.yaml | kubectl apply -f -'
              }

            }

          }
        }

      }
    }

  }
  environment {
    DOCKER_CREDENTIAL_ID = 'dockerhub-id'
    GITHUB_CREDENTIAL_ID = 'github-id'
    GITEE_CREDENTIAL_ID = 'gitee'
    KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
    REGISTRY = '192.168.57.99:30002'
    DOCKERHUB_NAMESPACE = 'localproject'
    GITHUB_ACCOUNT = 'ncj'
    USER_APP_NAME = 'user-service'
    API_APP_NAME = 'api-service'
    KS_SPACE = 'dev'
  }
}

需要有如下的一些修改
分别是自己的码云地址和自己的码云凭据
在这里插入图片描述
自己的harbor凭据,下面还有一个
在这里插入图片描述
在这里插入图片描述
保存后查看图形化界面,这里同时并行构建和部署两个子module
在这里插入图片描述
然后运行,可以查看运行记录,哪一步有错看那步
在这里插入图片描述
在这里插入图片描述
成功了就可以看到有新建的两个工作负载正在启动
在这里插入图片描述

手动部署镜像

获取镜像

根据jenkins的镜像地址获取镜像
在这里插入图片描述
在我这里就是
192.168.57.99:30002/dev/user-service:SNAPSHOT-5
最后面这个5是你的运行次数,运行了几次,最新的就是几

创建工作负载

在这里插入图片描述
名字随便,下一步添加镜像地址
在这里插入图片描述
配置端口和探针
在这里插入图片描述
然后同步主机时区
然后一直下一步,保存
可以看到
在这里插入图片描述
配置外网端口映射
服务->创建->指定工作负载(和创建nacos映射方法相同,在上一篇文章中有提到)
在这里插入图片描述
查看nacos效果
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不锈钢大铁锤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值