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 Continuous Deploy",并安装, 安装后重启。
下面我们正式开始我们的测试,我们需要准备一个gitlab项目,用于kubernetes CD读取并部署。Gitlab项目中可以存储:
我们正常的应用环境使用应该是在源代码的gitlab项目中,并且使用Dockerfile进行镜像打包再部署到应用环境中。本文对此做简化处理,只运行CD部署的部分
因为要从gitlab上拿到信息,我们需要在Jenkins中添加凭据。同时我们还要添加kubeconfig凭据,用于同kuberntes通信(原理和kubectl一样,用户需要获取正确的kubeconfig文件)
添加gitlab项目的凭据如图:
添加kubeconfig的凭据如图:
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
下面我们创建流水线。
连接到相应的gitlab的项目中读取Jenkinsfile
保存之后我们就可以触发流水线看看效果。
流水线运行成功!
我们使用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访问
访问成功!
本文介绍了使用kubernetes CD插件,在Jenkins中部署应用到kuberetes平台的方法。Jenkins在kubernetes大行其道的背景下仍然可以发挥光和热。之后我也会陆续介绍以下在kubernetes下部署的Jenkins的使用方法,介绍如何使用kubernetes插件进行容器云下的流水线配置。欢迎持续关注。
devopscube,Devops魔方为个人公众号,主要用于一些有关Devops,容器,kubernetes,自动化运维,以及敏捷开发相关的分享。同时也会不定期的分享一些个人心得,比如推荐一些个人使用的办公小软件,对一些事件的评论等。欢迎大家关注交流。