如何快速且简单的部署

通过helm可以快速且简单的部署多种应用,关于helm的安装和使用请参考

环境信息

本次实战的环境信息如下:

  1. kubernetes集群:三台CentOS7.7服务器
  2. kubernetes版本:1.15.3
  3. helm版本:2.16.1
  4. jenkins版本:

准备工作

除了提前准备好kubernetes环境,还需要做好以下准备工作:

  • 准备好helm,您可以参考《》
  • 准备好NFS服务,这样就算jenkins的pod被销毁重建,也不会丢失数据,NFS服务的搭建,您可以参考《》

    准备完成后可以开始实战了

本次实战的namespace

本次实战使用名为helm-jenkins的namespace,执行以下命令创建:

kubectl create namespace helm-jenkins

创建PV

为了后面的jenkins服务顺利启动,需要预先部署好pv:

  • 新建名为pv-helm-jenkins.yaml的文件,内容如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: helm-jenkins
namespace: helm-jenkins
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /usr/local/work/test/002
server: 192.168.133.142
  • 执行命令kubectl create -f pv-helm-jenkins.yaml,创建pv
  • 查看pv是否已经就绪:
[root@node1 helm-jenkins]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
helm-jenkins 10Gi RWO Recycle Available 5s
14h

helm安装jenkins

  • 确保helm2.16.1版本安装完毕,并且可以正常工作:
[root@node1 helm-jenkins]# helm version
Client: &version.Version{SemVer:"v2.16.1", GitCommit:"bbdfe5e7803a12bbdf97e94cd847859890cf4050", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.16.1", GitCommit:"bbdfe5e7803a12bbdf97e94cd847859890cf4050", GitTreeState:"clean"}
  • 确保以下的helm repo准备好(如果没有可以通过helm repo add添加):
[root@node1 helm-jenkins]# helm repo list
NAME URL
stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
  • 执行以下命令,即可创建jenkins的deployment、service等资源:
helm install --namespace helm-jenkins --name my-jenkins stable/jenkins
  • 执行完毕后,控制台输出以下内容:
NOTES:
1. Get your 'admin' user password by running:
printf $(kubectl get secret --namespace helm-jenkins my-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
2. Get the Jenkins URL to visit by running these commands in the same shell:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status of by running 'kubectl get svc --namespace helm-jenkins -w my-jenkins'
export SERVICE_IP=$(kubectl get svc --namespace helm-jenkins my-jenkins --template "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}")
echo http://$SERVICE_IP:8080/login 3. Login with the password from step 1 and the username: admin

上述内容的第一条给出了重要提示:获取admin账号密码的方法,执行命令即可:

printf $(kubectl get secret --namespace helm-jenkins my-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo

如下图红框所示,我这里得到了admin密码为Eq6WxHvJ2V:

  • 检查服务,发现helm-jenkins这个namespace下有两个服务:my-jenkins和my-jenkins-agent,前者就是jenkins网站,后者用来接收执行任务的jenkins实例的注册:
[root@node1 helm-jenkins]# kubectl get svc -n helm-jenkins
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-jenkins LoadBalancer 10.233.10.35 <pending> 8080:31763/TCP 31m
my-jenkins-agent ClusterIP 10.233.35.20 <none> 50000/TCP 31m
  • my-jenkins这个服务的类型是LoadBalancer,8080端口被映射到宿主机的31763,因此,使用kubernetes集群中一台宿主机的IP,再加上31763端口即可通过浏览器访问,如下图:
  • 至此,jenkins安装已完成,接下来要做必要的设置

设置kubernetes插件

为了让jenkins在以下模式工作,还需要设置kubernetes插件

  • 点击下图红框中的"Manage Jenkins",进入设置页面
  • 由于很多插件版本较久,页面上会有升级提示,这里暂时用不到,因此直接点击下图红框中的"Configure System"
  • 点击下图红框1中的"Test Connection”按钮,您会见到红框2中的错误信息:
  • 产生上述错误的原因,是由于jenkins容器没有权限访问kubernetes的api server导致的,为了解决此问题,要先搞清楚容器的身份,我们知道容器在kubernetes环境中都有自己的serviceaccount,执行命令kubectl get serviceaccount -n helm-jenkins查看当前namespace下的serviceaccount:
[root@node1 helm-jenkins]# kubectl get serviceaccount -n helm-jenkins
NAME SECRETS AGE
default 1 3h55m

可见jenkins容器的serviceaccount是default

  • 知道了容器的serviceaccount,上述问题就好解决了,我们用RBAC将访问api server所需权限绑定给default即可,这里为了省事儿就不将权限一一列出了,接下来直接给default最高权限(生产环境千万别这么做,必须按需分配);
  • 新建名为rbac-helm-jenkins-default.yaml的文件,内容如下:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: rbac-helm-jenkins-default
namespace: helm-jenkins
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: default
namespace: helm-jenkins
  • 执行命令kubectl create -f rbac-helm-jenkins-default.yaml使得RBAC生效
  • 再次回到之前的页面点击"Test Connection"按钮,如下图,提示"Connection successful":
  • 接下来设置Pod模板参数,如下图,namepsace要设置为helm-jenkins,另外要记下来Labels的值my-jenkins-jenkins-slave,后面会用到
  • 点击底部的"Save"按钮,使设置生效:
  • 设置完毕,接下来创建任务体验一下kubernetes上的jenkins功能

体验Freestyle project

  • 创建一个Freestyle project,如下图:
  • 如下图,表单中Label Expression的值是前面记下来的my-jenkins-jenkins-slave
  • 如下图,本次任务的具体内容很简单,执行一段shell,输出"Hello World!":
  • 点击底部的"Save"按钮保存
  • 点击下图红框中的"Build Now",即可开始构建
  • 此时去控制台执行命令kubectl get pods -n helm-jenkins查看pod,会发现有新的pod出现,如下所示,这是执行jenkins任务的pod:
[root@node1 helm-jenkins]# kubectl get pods -n helm-jenkins
NAME READY STATUS RESTARTS AGE
default-66vcq 0/1 ContainerCreating 0 1s
my-jenkins-74bcdfc566-jbw28 1/1 Running 0 5h5m
  • 返回jenkins页面,可见任务已经执行完毕:

https://github.com/zq2599/blog_demos

Helm部署和体验jenkins的更多相关文章

  1. helm部署的服务如何修改配置

    关于helm部署服务 在Kubernetes上进行容器化部署时,使用helm可以简化操作,以部署Jenkins为例,只需要以下命令即可完成部署: helm install --namespace he ...

  2. Jenkins流水线(pipeline)实战之:从部署到体验

    关于Jenkins流水线(pipeline) Jenkins 流水线 (pipeline) 是一套插件,让Jenkins可以实现持续交付管道的落地和实施. 关于blueocean Blue Ocean ...

  3. 从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布

    一.前言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件.Jenkins 支持各种运行方式,可通过系统包.Docker 或者通过一个独立的 Java ...

  4. ASP.NET Core 借助 Helm 部署应用至K8S

    前言 玩K8S也有一段时间了,借助云服务提供商的K8S控制台,已经可以很方便的快速部署应用至K8S.通过简单的点击,可以一次性帮忙创建K8S 对象:Deployment.Service.Ingress ...

  5. 用Helm部署Kubernetes应用,支持多环境部署与版本回滚

    1 前言 Helm是优秀的基于Kubernetes的包管理器.利用Helm,可以快速安装常用的Kubernetes应用,可以针对同一个应用快速部署多套环境,还可以实现运维人员与开发人员的职责分离.现在 ...

  6. Helm Template初体验,方便管理多环境

    我最新最全的文章都在南瓜慢说 www.pkslow.com,文章更新也只在官网,欢迎大家来喝茶~~ 1 简介 Helm作为一个优秀的包管理器,这部分我们之前已经做了介绍,文章如下: 用Helm部署Ku ...

  7. 第一篇 UEditor入门部署和体验

    UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码. UEditor富文本编辑器,轻量, ...

  8. .Net Core 自动化部署:使用jenkins部署到linux docker容器运行

    上次我们说到.Net Core 自动化部署:使用docker版jenkins部署dotnetcore应用,这次我们使用jenkins发布我们的.NET Core站点到docker容器中运行,为后面的的 ...

  9. helm部署Filebeat + ELK

    helm部署Filebeat + ELK 系统架构图: 1) 多个Filebeat在各个Node进行日志采集,然后上传至Logstash 2) 多个Logstash节点并行(负载均衡,不作为集群),对 ...

随机推荐

  1. 个人项目(C语言)

    GitHub地址:https://github.com/dachai9/personal-project.git 1. WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数 ...

  2. latex:备忘代码

    1.脚注代码: \footnote{欧几里德,约公元前330--340年.} 结果为: 2.改变某个字的字体形状,表示强调 \emph{勾股定理} 结果为(勾股数这三个字与其他字不一样): 3.正文中 ...

  3. php 解决表单重复提交实现方法介绍

    重复提交是我们开发中会常碰到的一个问题,除了我们使用js来防止表单的重复提交,同时还可以使用php来防止重复提交哦. 例1  代码如下 复制代码 <?php/* * php中如何防止表单的重复提 ...

  4. 分享一个关于Cookie做的实验结果

    实验本身是很枯燥的,我尽量把它讲的有趣些. 起因 去网上搜了下关于Cookie的介绍,看了好几篇都长得很一样,阉割一下内容不外乎说是"不同浏览器限制cookie数不同,大致在30-50这个范 ...

  5. ent orm笔记1---快速尝鲜

    前几天看到消息Facebook孵化的ORM ent转为正式项目,出去好奇,简单体验了一下,使用上自己感觉比GORM好用,于是打算把官方的文档进行整理,也算是学习一下如何使用. 安装 ent orm 需 ...

  6. [CSP-S2019]树的重心 题解

    CSP-S2 2019 D2T3 考场上扔了T2来打这题的部分分,然后没看到数据范围是等号,不知道怎么判完全二叉树然后40分滚粗…… ---- 思路分析 很容易想到$O(n^2)$每次暴力找重心,这个 ...

  7. windows环境安装vue-cli及webpack并创建vueJs项目

    1. 安装node.js 2. 如果安装的是旧版本的 npm,可以通过 npm 命令来进行版本升级,命令如下: npm install npm -g npm网站服务器位于国外,所以经常下载缓慢或出现异 ...

  8. 在Notepad++下运行ruby代码

    轻量级,轻量级,所以用notepad++来运行ruby的代码最合适不过了,虽说有更好用的轻量级工具,但是用notepad++习惯了,也懒得去再装其他工具了.好了,进入主题,先安装插件NppExec,打 ...

  9. 【Flutter 实战】菜单(Menu)功能

    老孟导读:今天介绍下Flutter中的菜单功能. PopupMenuButton 使用PopupMenuButton,点击时弹出菜单,用法如下: PopupMenuButton<String&g ...

  10. 学习go的一些笔记

    反射 reflect type CfgSt struct{ Match *int64 `ini:"match"` Desc string `ini:"desc" ...