【Kubernetes系列】第7篇 CI/CD之组件部署
前言
应对敏捷开发的需求,对CI(持续集成))/CD(持续交付)的提出了更高的标准,今天来讨论下,如何基于开源组件(gitlab/jenkins/harbor/kubernetes)使用CI/CD,赋能团队的开发、运维。
核心组件
组件名称 | 版本 | 备注 |
---|---|---|
kubernetes | v1.15.3 | 10.0.0.182:6443 |
jenkins | 2.176.2 | 集群内部署/ namespace: devops |
gitlab | 11.8 | 主机部署 |
harbor | v1.7.4 | docker-compose部署 |
基本流程
- 在GitLab创建对应的项目。
- 开发者将代码提交到GitLab。
- Jenkins创建对应的任务(Job),集成该项目的Git地址和Kubernetes集群。
- 如有配置钩子,推送(Push)代码会自动触发Jenkins构建,如没有配置钩子,需要手动构建。
- Jenkins控制Kubernetes(使用的是Kubernetes插件)创建Jenkins Slave。
-
Jenkins Slave根据流水线(Pipeline)定义的步骤执行构建。
- 检出代码、打包、编译。
- 通过Dockerfile生成镜像。
- 将镜像提送(Push)到私有Harbor。
- Jenkins再次控制Kubernetes进行最新的镜像部署。
__注__:
- 上面所述为一般步骤,中间还可能会涉及自动化测试等步骤,可自行根据业务场景添加。
- 上面流水线步骤一般由应用代码库的根目录下Jenkinsfile决定,Jenkins会自动读取该文件;另外如果需要对具体的应用流水线实施强管控,可以独立管理jenkinsfile模板,然后根据jenkins API接口即时生成流水线。
- 默认使用的Dockerfile放置在代码仓库的根目录下。
组件部署
1.Kubernetes【Kubernetes系列】第3篇 Kubernetes集群安装部署
- gitlab 无忌过招:手把手教你搭建自己的GitLab库
- harbor 安装配置指南
- jenkins
_注_: 本文主要说明下jenkins的部署及配置,其他组件如果你部署有问题,欢迎留言。
Jenkins 部署及配置
_说明_:
- 以下的yaml文件均在 k8s master节点的 /home/jenkins_deploy目录下,
-
部署示例的depployment.yaml 的注解
-
nodeName ipaddress
, ipaddress 请确认其为一个有效的ip. - 示例中jenkins的目录
/var/jenkins_home
是直接挂载到host_path, 如果你有条件,建议替换为共享存储。 - 因使用的jenkins-master 的基础镜像来自公网,需要k8s maste 节点也要可以访问外网,或者你可以将
jenkins/jenkins:lts-alpine
推送至自己的内网镜像仓库。
-
-
部署示例的ingress.yaml 的注解
- 需要你也需要办公网(集群外)访问,请将
jenkins.dev.hanker.net
, 改为有效的域名地址,或是你也可以通过NodePort
的形式声明 service,就可以直接通过ip:port
的形式访问jenkins了。
- 需要你也需要办公网(集群外)访问,请将
1. 准备部署yaml
- deployment.yaml
apiVersion: v1 kind: Namespace metadata: name: devops # Deployment apiVersion: extensions/v1beta1 kind: Deployment metadata: name: jenkins namespace: devops spec: replicas: 1 revisionHistoryLimit: 3 template: metadata: labels: app: jenkins spec: nodeName: 1.1.1.1 serviceAccountName: jenkins-admin containers: - image: jenkins/jenkins:lts-alpine imagePullPolicy: IfNotPresent name: jenkins volumeMounts: - name: jenkins-volume mountPath: /var/jenkins_home - name: jenkins-localtime mountPath: /etc/localtime env: - name: JAVA_OPTS value: '-Xms256m -Xmx1024m -Duser.timezone=Asia/Shanghai' - name: TRY_UPGRADE_IF_NO_MARKER value: 'true' ports: - name: http containerPort: 8080 - name: agent containerPort: 50000 resources: requests: cpu: 1000m memory: 1Gi limits: cpu: 1200m memory: 2Gi volumes: - name: jenkins-localtime hostPath: path: /etc/localtime - name: jenkins-volume hostPath: path: /home/jenkins/jenkins_home
- 配置service, services.yaml
--- apiVersion: v1 kind: Service metadata: name: jenkins-service namespace: devops spec: ports: - name: http protocol: TCP port: 8080 targetPort: 8080 - port: 50000 targetPort: 50000 name: agent selector: app: jenkins
- 授权jenkins对k8s的访问 rbac.yaml
apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-app: jenkins name: jenkins-admin namespace: devops --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: name: jenkins-rbac namespace: devops rules: - apiGroups: ["","extensions","app"] resources: ["pods","pods/exec","deployments","replicasets"] verbs: ["get","list","watch","create","update","patch","delete"] --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: jenkins-admin namespace: devops labels: k8s-app: jenkins subjects: - kind: ServiceAccount name: jenkins-admin namespace: devops roleRef: kind: ClusterRole name: jenkins-rbac apiGroup: rbac.authorization.k8s.io
- 为了便于办公网(集群外)访问,ingress.yaml
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: jenkins-ingress namespace: devops spec: rules: - host: jenkins.dev.hanker.net http: paths: - backend: serviceName: jenkins-service servicePort: 8080 path: /
2. 应用yaml,部署jenkins
$ pwd $ /home/jenkins_deploy $ kubectl apply -f *.yaml
3. 确认jenkins 服务状态
[root@node0 jenkins_deploy]# kubectl -n devops get deployment jenkins NAME READY UP-TO-DATE AVAILABLE AGE jenkins 1/1 1 1 51d [root@node0 jenkins_deploy]#
4. 访问jenkins 安装插件、设置
注: 步骤1 声明的域名 jenkins.dev.hanker.net
已经解析至ingress,故可直接访问; 如果你也想通过自定义域名访问jenkins,麻请解析至正确的ingress服务节点,即可。
- 确认你也已经安装了kubernetes/ kubernetes cli 插件
_操作指引_: 【Manage Jenkins】 -> 【Manage Plugins】
你应该可以通过类似的指令获取jenkins-master的密码
$ kubectl -n devops exec jenkins-pod-name cat /var/jenkins_home/secrets/initialAdminPassword
- 配置Kubernetes 插件
_操作指引_: 【Manage Jenkins】->【Configure System】
图中标注:
- 请修改为你所在环境对应的k8s master
- 声明jenkins-agent 的命令空间,也可以根据需要调整;
- jenkins-master的访问地址,本示例使用的是 service-name的形式访问。
- 测试与k8s分享群的连接情况。如果你获取到『
Connection test successful』,恭喜你可以继续。 - 配置Kubernetes Pod Template
图中标注:
- 设置基础的jenkins-agent镜像;
-
指定工作目录;
- 如果你需要下载、导出或是缓存构建的话,指定一个为共享存储的目录就很有意义了。
-
设置目录挂载
- 如步骤2如说,你可以将宿主机的目录或是网络存储挂载至jenkins-agent.
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
用阿里API评测T5实例的基线性能
阿里API犹如天上的星星,数量繁多,又闪闪发光.每颗星都因其独特的光芒而耀眼,让在黑暗的夜里行走的路人,看到希望的星光;在最近举行的T5 baseline性能评测的活动中,有幸参与其中,通过赠送的代金券免费购买和使用一周的T5基线实例,并通过一些相关又好玩的API接口运行测试ECS服务器的一些基本功能;详细情况如下:本次的验证软件链接:http://xysuger.xunyun17.xyz/BaselineReviewT51C2G/BaselineReviewT51C2G.rar 第一大步,购买ECS服务器: 首先通过官方ecs购买主页,选择基线性能20%的t5-lc1m2.small类型的ecs,购买时长1周;然后选择64位的ubuntu操作系统:接着选择默认的交换机配置:最后在summary界面确认无误后,点击确认,使用代金券付费; 第二大步,通过API接口测试服务器:首先通过DescribeInstances命令,察看购买的服务器,这里可以看到服务器的状态为运行,其他配置和我们购买的一致;接着停止运行服务器,通过StopInstance命令,运行后,返回对应的requestid:...
- 下一篇
阿里云轻量应用服务器基础建站系统部署Web环境与应用
如果我们开始就接触阿里云主机产品的话,可能认识其中的ECS服务器和虚拟主机,目前又出来轻量应用服务器,这里我们不去分析其产品背后的配置以及架构,单单从产品本身应用上看轻量应用服务器比较偏向于建站用户的。比如在安装系统的时候可以选择无环境的系统镜像,也可以选择安装LAMP、WordPress、宝塔面板等环境自带系统。 其实在ECS服务器中也是可以安装的,直接在云市场中选择安装。老左不清楚阿里云出这款产品的目的是什么。其次,在轻量应用服务器面板中功能上比ECS服务器稍微简单一些。包括常规的系统安装、安全组、快照、磁盘管理。在这篇文章中,老左看看其自带的应用镜像如何操作和管理的。有需要的朋友可以提前领取优惠劵 第一、安装应用镜像 这里老左选择安装应用镜像,如果是安装系统镜像与我们熟悉的ECS没有什么区别。这里应用镜像包括直接安装WP、LAMP、Node.js、ECSHOP等常规CMS的直接安装。但是这里我还是安装宝塔面板。(看来宝塔最近几年发展还可以,都和云主机商捆绑 合作了) 这里看到我手上这测试机在重置安装。如果我们有重要数据需要提前备份,因为重新安装系统后已有数据是没有了的。 第二、设...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7安装Docker,走上虚拟化容器引擎之路