Jenkins使用kubernetes CD插件在kubernetes中部署应用

devopscube,Devops魔方为个人公众号,主要用于一些有关Devops,容器,kubernetes,自动化运维,以及敏捷开发相关的分享。同时也会不定期的分享一些个人心得,比如推荐一些个人使用的办公小软件,对一些事件的评论等。欢迎大家关注交流。
在这里插入图片描述

前言

Jenkins作为持续集成持续部署中的核心应用,一直被广泛使用。而kubernetes也已经成为事实上的容器运行环境。所以作为部署侧的功能,Jenkins也有将应用能够对接到kubernetes平台进行部署的需求。

对接kubernetes,通常我们使用的方法是通过kubectl命令进行部署。在jenkins中我们也可以封装好kubectl命令,进行资源的部署。今天我们讲的是另外一种部署kuberntes资源的方法 - 使用kubernetes CD插件进行资源的部署。

配置

首先要安装jenkins,具体的操作请参见我的历史文章:

  • 使用Docker搭建Jenkins进行持续集成持续部署

    https://blog.csdn.net/weixin_36938307/article/details/105493728

  • 使用helm在kubernetes环境中安装Jenkins

    https://blog.csdn.net/weixin_36938307/article/details/105732830

安装好了Jenkins之后,我们需要安装kuberntes CD的插件。

Jenkins使用kubernetes CD插件在kubernetes中部署应用_第1张图片

我们登录Jenkins --> 系统管理 --> 插件管理 --> 可选插件,

搜索"Kubernetes Continuous Deploy",并安装, 安装后重启。

Jenkins使用kubernetes CD插件在kubernetes中部署应用_第2张图片

测试

下面我们正式开始我们的测试,我们需要准备一个gitlab项目,用于kubernetes CD读取并部署。Gitlab项目中可以存储:

  1. 部署的kubernetes资源,例如deployment和service的定义
  2. 用于jenkins流水线的Jenkinsfile文件

我们正常的应用环境使用应该是在源代码的gitlab项目中,并且使用Dockerfile进行镜像打包再部署到应用环境中。本文对此做简化处理,只运行CD部署的部分
Jenkins使用kubernetes CD插件在kubernetes中部署应用_第3张图片

因为要从gitlab上拿到信息,我们需要在Jenkins中添加凭据。同时我们还要添加kubeconfig凭据,用于同kuberntes通信(原理和kubectl一样,用户需要获取正确的kubeconfig文件)

添加gitlab项目的凭据如图:

Jenkins使用kubernetes CD插件在kubernetes中部署应用_第4张图片

添加kubeconfig的凭据如图:

Jenkins使用kubernetes CD插件在kubernetes中部署应用_第5张图片

创建完之后如图:
Jenkins使用kubernetes CD插件在kubernetes中部署应用_第6张图片

Jenkinsfile中配置了两个stage,并且连接到必要的凭据ID,Jenkinsfile内容如下:

pipeline {
   agent any

   stages {
   
      stage('Pull Source Code') {
          steps {
              git credentialsId: 'mygitlab', branch: 'master' , url: 'http://192.168.100.4/gitlab/lijinyang/kubernetescdtest.git'
          }
      }
      
      stage('deploy to kubesphere') {
          steps {
            kubernetesDeploy(enableConfigSubstitution: false, kubeconfigId: 'k8scloud', configs: 'app.yaml')
          }
      }
   }
}

app.yaml中包含了Deployment和Service资源,以下资源示例是要部署一个nginx到kubernets环境中,并通过service的Nodeport暴露服务便于我们访问进行测试。

kind: Deployment
apiVersion: apps/v1
metadata:
  name: kubernetscd
  namespace: default
  labels:
    app: kubernetscd
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kubernetscd
  template:
    metadata:
      labels:
        app: kubernetscd
    spec:
      containers:
        - name: kubernetscd
          image: 'nginx:latest'
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: kubernetscd
  name: kubernetscd
  namespace: default
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: kubernetscd
  type: NodePort

下面我们创建流水线。

Jenkins使用kubernetes CD插件在kubernetes中部署应用_第7张图片

连接到相应的gitlab的项目中读取Jenkinsfile

Jenkins使用kubernetes CD插件在kubernetes中部署应用_第8张图片

保存之后我们就可以触发流水线看看效果。

流水线运行成功!

Jenkins使用kubernetes CD插件在kubernetes中部署应用_第9张图片

我们使用kubectl查看是否已经部署了我们需要的资源:

[aiops@3 jenkins-data]$ kubectl get deployments,svc | grep kubernetescd
deployment.apps/kubernetescd       1/1     1            1           93s
service/kubernetescd    NodePort    10.43.219.152           80:32708/TCP     93s

可以看到nodeport是32708,我们使用nodeport访问

Jenkins使用kubernetes CD插件在kubernetes中部署应用_第10张图片

访问成功!

总结

本文介绍了使用kubernetes CD插件,在Jenkins中部署应用到kuberetes平台的方法。Jenkins在kubernetes大行其道的背景下仍然可以发挥光和热。之后我也会陆续介绍以下在kubernetes下部署的Jenkins的使用方法,介绍如何使用kubernetes插件进行容器云下的流水线配置。欢迎持续关注。

devopscube,Devops魔方为个人公众号,主要用于一些有关Devops,容器,kubernetes,自动化运维,以及敏捷开发相关的分享。同时也会不定期的分享一些个人心得,比如推荐一些个人使用的办公小软件,对一些事件的评论等。欢迎大家关注交流。
在这里插入图片描述

你可能感兴趣的:(Devops,kubernetes)