helm安装_Helm部署和体验jenkins

运行在Kubernetes上的Jenkins

下图来自rancher官方博客,在kubernetes环境下,jenkins任务被交给各个pod执行,这些pod在需要时被创建,任务结束后被销毁,这样既能合理利用资源,又能给每个任务提供一致的干净的初始化环境(也可以保留pod,如查问题的时候)

3193dc831994631d10807a9294dc97b2.png

如何在kubernetes快速部署jenkins

通过Helm可以快速且简单的部署多种应用,关于helm的安装和使用请参考《部署和体验Helm(2.16.1版本)》

环境信息

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

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

准备工作

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

  • 准备好helm,您可以参考《部署和体验Helm(2.16.1版本)》
  • 准备好NFS服务,这样就算jenkins的pod被销毁重建,也不会丢失数据,NFS服务的搭建您可以参考《Ubuntu16环境安装和使用NFS》
    准备完成后可以开始实战了

本次实战的namespace

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

kubectl create namespace helm-jenkins

创建PV

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

  • 新建名为pv-helm-jenkins.yaml的文件,内容如下,其中192.168.133.142是NFS服务器地址,/usr/local/work/test/002是分配给本次实战使用的NFS文件夹:
apiVersion: v1kind: PersistentVolumemetadata: name: helm-jenkins namespace: helm-jenkinsspec: 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 pvNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEhelm-jenkins 10Gi RWO Recycle Available 5s 14h

helm安装jenkins

  • 确保helm2.16.1版本安装完毕,并且可以正常工作:
[root@node1 helm-jenkins]# helm versionClient: &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 listNAME 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);echo2. 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/login3. 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:

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

设置kubernetes插件

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

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

可见jenkins容器的serviceaccount是default

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

体验Freestyle project

  • 创建一个Freestyle project,如下图:
139b55e8043f703359a064f9f23d8fe5.png
  • 如下图红框,表单中Label Expression的值是前面记下来的my-jenkins-jenkins-slave
a0b69df50f2ca6341b6654ceca430ef5.png
  • 本次任务的具体内容很简单,执行一段shell,输出"Hello World!",如下图所示:
560295ea754cfbeed3adda1d233d1bb6.png
  • 点击底部的"Save"按钮保存
  • 点击下图红框中的"Build Now",即可开始构建:
c5c29d51a8a572b02733106b71a48f67.png
  • 如果是第一次执行,会触发jenkins任务pod的docker镜像的下载,您需要耐心等候一会儿;
  • 此时去控制台执行命令kubectl get pods -n helm-jenkins查看pod,会发现有新的pod出现,如下所示,这是执行jenkins任务的pod:
[root@node1 helm-jenkins]# kubectl get pods -n helm-jenkinsNAME READY STATUS RESTARTS AGEdefault-66vcq 0/1 ContainerCreating 0 1smy-jenkins-74bcdfc566-jbw28 1/1 Running 0 5h5m
  • 返回jenkins页面,可见任务已经执行完毕:
3f42717233fcf49001c67e2255696d3a.png
  • 再去控制台查看pod,发现刚刚创建的pod已经消失了
  • 至此,kubernetes环境部署和体验jenkins的实战就完成了,希望本文带给您一些参考信息。

欢迎关注公众号:程序员欣宸

ce053c606ce3705afe2e7fe07bd3e1f8.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【无标题】【一周安全资讯1223】一图读懂《工业和信息化部办公厅关于组织开展网络安全保险服务试点工作的通知》;15亿条纽约房产记录泄露

要闻速览 1、一图读懂《工业和信息化部办公厅关于组织开展网络安全保险服务试点工作的通知》 2、国家数据局《“数据要素”三年行动计划 (2024—2026年)》公开征求意见 3、中国信息通信研究院发布《公共数据授权运营发展洞察 (2023年)》 4、15亿条纽约房产记录泄露&#xff0c…

自定义键盘码_无线+矮轴≤299?ikbc S200 2.4G 机械键盘测评

早在18年初,Cherry就发布了适用于笔记本及超薄键盘的全新轴体MX Low Profile,也就是为人所熟知的“矮轴”。之后Ducky、酷冷至尊、FILCO、ikbc等一众厂商也先后推出了搭载Cherry矮轴的超薄机械键盘,不过市场表现一直有些不温不火。在码呆看来…

simpledateformat格式_如何使用SimpleDateFormat?

SimpleDateFormat是一种比较常用的时间类,可以实现对时间按照一定的字符串格式进行处理。DateFormat类的作用把时间对象转化成指定格式的字符串。反之,把指定格式的字符串转化成时间对象。DateFormat是一个抽象类,一般使用它的的子类SimpleDa…

李沐老师的《动手学深度学习PyTorch》中的d2lzh_python包的安装

关于RNN章节 以及模型章节等会使用到d2l的python包 cmd下载地址:pip install d2l -i https://pypi.doubanio.com/simple/

人体轮廓_人体艺术:赏世界著名的女人体油画:身体轮廓

阅读本文前,请您先点击上面的“十点姐姐”,再点击“关注”,这样您就可以继续免费收到文章了。每天都有分享,完全是免费订阅,请放心关注。 …

c语言未声明的标识符什么意思_C语言中%d和%f是什么意思啊?

%d表示输入或输出十进制有符号数;%f表示输入或输出浮点数(float,四字节表示);在C语言中输出不同数据时需要用到不同的格式字符,%d是用来输出十进制整型数据的实际长度输出,%f是以小数形式输出单…

李沐老师《动手学深度学习》课程总结1

数据操作 1、 创建数组:形状、数据类型、数据值 2、 访问元素:[1, 2] 访问第二行第三列 [1, :] 访问第二行 [1:3, 1:] 子区域:第二行至第四行前一行到第二列之后所有 [::3, ::2] 子区域:每三行一跳 第零、三…行拿出; 第零、二…列…

gimp 抠图_gimp抠图教程:gimp快速实现抠图效果

摘要:将图像中需要的部分从画面中精确地提取出来,我们就称为抠图,抠图是后续图像处理的重要基础,关于gimp的快速抠图技巧你们知道吗?将图像中需要的部分从画面中精确地提取出来,我们就称为抠图,抠图是后续…

docker build -t_在Docker环境构建、打包和运行Spring Boot应用

为何考虑采用Docker?Docker是提供用户构建镜像的一种容器化技术,所构建的镜像包含了主要的应用程序和运行应用所需的所有依赖项。该镜像可在任何虚拟机或物理机器上的Docker容器上运行。它的强大之处在于允许用户在开发、测试、预生产和生产中运行同样的…

Java内部类是什么?

在类内部可定义成员变量和方法,且在类内部也可以定义另一个类。如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Outer 则称为外部类(或称为宿主类)。 …

MOOC-人工智能实践:Tensorflow笔记4.2自制数据集txt文件和数据集不匹配解决办法(读取文件名并提取内容并合并原始内容与提取内容)

1、读取文件名称生成txt文件 # P01 批量读取文件名,并将读取的文件名保存到指定路径下的txt中(带.*** 后缀)import os def ListFilesToTxt(dir, file, wildcard, recursion):exts wildcard.split(" ")files os.listdir(dir)for …

file数组 删除文件_java编程IO基础之一:File类

在整个java.io包中,File类是唯一的一个与文件本身操作有关的类,既可以执行文件的创建、删除、重命名,取得文件大小和修改日期。File的构造函数:public File(String pathname) 给定一个要操作文件的完整路径。public File(File par…

excel工具箱_WPS搬来救兵智能工具箱,强大到Excel没有还手之力

EXCEL不加班眼见Excel连胜2局,WPS慌了,搬来救兵智能工具箱,这个神器,所到之处,问题瞬间解决。这智能工具箱究竟是何方宝物,强大到Excel没有还手之力!Excel2016的闪电填充确实牛逼,不…

mysql cve 2016 3521_MySQL-based databases CVE -2016-6663 本地提权

date: 2016/11/3author: dlive0x01 漏洞原文翻译水平不高求轻喷感觉作者在写文章的时候有些地方描述的也不是特别清楚,不过结合poc可以清晰理解漏洞利用过程0x04漏洞利用过程总结给出了清晰的漏洞利用过程,结合poc食用效果更佳# http://legalhackers.com…

mysql 数据迁移_CentOS7迁移Mysql数据库文件

1、查看Mysql安装路径cat /etc/my.cnf2、查看数据盘路径df3、数据盘下创建mysql数据目录,设置目录磁盘写入权限cd /mnt1/xfrb_database/mkdir mysqlchmod -R 777 /mnt1/xfrb_database/mysql/ls -l -a目录创建和权限设置成功。4、停止Mysql服务,拷贝Mysql…

mysql json类型最大长度限制_MySQL json 数据类型

必须要5.7以上版本才能使用 写在开头 mysql json 的功能很强大,只是用来当一个储存数据的字段 就没什么意义了。 使用proto做交互的话,只要JSON 写得好 用proro.Unmarshal() 就可以很方便的转换类型 可以精简很多代码 JSON path 是以 $ 开头,之后就是JSON的层级使用。$ $[0]…

查看目录是否为内存盘_Linux buff/cache内存释放

free 命令 产看内存占用一览:free 参数:今天部署项目的时候,发现pm2命令卡顿不能正确执行,一开始以为是pm2版本的问题,后面升级pm2到最新版本也没有解决问题。既然和pm2本身没有关系,那么就从其它地方检查&…

kafka是存储到本地磁盘么_Kafka 中的消息存储在磁盘上的目录布局是怎样的?

Kafka 中的消息是以主题为基本单位进行归类的,各个主题在逻辑上相互独立。每个主题又可以分为一个或多个分区,分区的数量可以在主题创建的时候指定,也可以在之后修改。每条消息在发送的时候会根据分区规则被追加到指定的分区中,分…

英特尔全部cpu列表_Debian发布安全更新 以修复近期披露的英特尔MDS安全漏洞

Debian项目团队今天发布了针对英特尔微代码固件的新安全更新,以修复近期披露的英特尔MDS(微架构数据采样)漏洞。今年5月14日,英特尔披露了影响旗下诸多英特尔微处理器系列的四个新安全漏洞,不过随后很快发布了缓解这些漏洞的安全升级&#xf…

poi 设置word表格颜色_POI工具练习

POI是一个可以对excel文件进行操作的jar包,使用它可以帮助我们对excel进行操作,也就可以帮助我们实现在jsp页面添加导入数据的功能。只要我们在控制层servlet中加入处理的方法就可以了;首先使用到POI都会与JXL进行对比:查阅之后大…