DevOps实现CI/CD实战(六)- Jenkins集成k8s

news2024/11/13 10:45:16

十、 Jenkins集成k8s

Jenkins在集成K8s之前,需要搭建k8s集群,具体搭建步骤,完整笔记
https://github.com/ITenderL/ITenderL.github.io/tree/main/docs/DevOps,
包括完整的DevOps的笔记。

1. 准备部署的yml文件

pipeline.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test
  name: pipeline
  labels:
    app: pipeline
spec:
  replicas: 2
  selector:
    matchLabels:
      app: pipeline
  template:
    metadata:
      labels:
        app: pipeline
    spec:
      containers:
      - name: pipeline
        image: harbor.com/sswang/pipeline:v4.0.0
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
  namespace: test
  name: pipeline
  labels:
    app: pipeline
spec:
  selector:
    app: pipeline
  ports:
    - port: 8082
      targetPort: 8080
  type: NodePort

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: test
  name: pipeline
spec:
  ingressClassName: nginx
  rules:
  - host: pipeline.test.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: pipeline
            port:
              number: 8082
2. 配置Docker私服

在尝试用kubernetes的yml文件启动pipeline服务时,会出现Kubernetes无法拉取镜像的问题,这里需要在kubernetes所在的Linux中配置Harbor服务信息,并且保证Kubernetes可以拉取Harbor上的镜像。
在这里插入图片描述
填写你的harbor地址信息,填写完成后下面会生成一行命令,复制命令到你的kube服务器运行,看是否可以登录成功,登陆成功就ok了
在这里插入图片描述
如果不成功,要检查一下你的daemon.json的配置

{
  "exec-opts": ["native.cgroupdriver=systemd"],
   # docker私服地址,把你的harbor地址加到这里
  "insecure-registries": ["kubernetes-register.sswang.com", "harbor.com"],
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerhub.icu",
    "https://registry.aliyuncs.com",
    "https://docker.nju.edu.cn"
  ]
}

配置完成后,再次启动你的pipeline.yml

# 删除
kubectl delete -f pipeline.yml
# 启动
kubectl apply -f pipeline.yml

部署成功后,查看状态

[root@master ~]# kubectl get all -n test
NAME                            READY   STATUS    RESTARTS   AGE
pod/pipeline-647d4585fb-qh292   1/1     Running   0          48m

NAME               TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/pipeline   NodePort   10.96.126.239   <none>        8082:32562/TCP   48m

NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/pipeline   1/1     1            1           48m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/pipeline-647d4585fb   1         1         1       48m

然后访问192.168.201.111:32562
在这里插入图片描述

3. Jenkins配置k8s
  • 在系统配置下面添加publish over ssh 配置,配置完成后,应用保存
    在这里插入图片描述
    • 修改pipeline任务配置

修改项目中Jenkinsfile中publish over ssh步骤的配置命令,到pipeline语法中生成
在这里插入图片描述

sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'pipeline.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

然后修改项目中的Jenkinsfile的配置,用下面的配置,替换原来publish over ssh的配置

		stage('将部署的yml文件传送到k8s-master节点') {
			steps {
				sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'pipeline.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
			}
		}

修改代码返回5.0.0,然后打标签v5.0.0,,然后构建看是否可以将pipeline文件传送到k8s服务器

[root@master k8s]# ls /usr/local/k8s/
pipeline.yml
# 文件已经传到目标服务器了,然后执行文件
  • 运行pipeline.yml

如何运行pipeline.yml,使用shell命令的方式会需要输入密码

[root@master ~]# ssh root@192.168.201.120 kubectl ap -f /usr/local/k8s/pipeline.yml
root@192.168.201.120's password:

因此只能使用ssh的无密码登录方式,让Jenkins容器内部以无密码的方式连接到k8s的master节点,绝体步骤如下

  1. 进入Jenkins容器内部
[root@clear jenkins_docker]# docker exec -it jenkins bash
jenkins@e96108b4b77b:/$ cd ~
# 找到隐藏的文件.ssh
jenkins@e96108b4b77b:~$ ls -a
.ssh

jenkins@e96108b4b77b:~$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC86IaWBtwJkhlAEH4WYoMUAg8acBZGiM13BZPTsHeqM541lKp02qcgvk8RBd9Zg2ykmeCH6qkPNLTVPzqfR75bnOFD7ZZ3q/A0Yl6h06NzoxFAIAepuXdy+hF+IK3ORScl1pOsFq8TQAWtQWN2UTPYJ7xORW8w/2hgwXKffwzTj1uuA2PZDpoQanSyx1N0qV+/t2omFRFscV1BkhiZvNKa7Pifesd3m24y/uFykZTE8/YCn8Bjbvlj1AH77vdgkkrCXjFJZeqWVLYcpLEGVqUt9tklDI9XkEf6gE/ut+QWtB5HHN+pfW95MFkFY/78i4KXNDUT7+Ogix0AqvUKyhriMOUx8KaAfLCUAWNtrmC+mLQwPFyyJN1EEiCNYWb6OJ5G9geH1YvrzoRfcpLk/k6pmsbkrpJdxh2ZSQqwdvTnxWNDMjnJLRw4OE6rRMp57qWecFnqJuaJN1z43Cdk2wo9J/Ve6f02vXAN0iTFK6t6xAF9E5+lBbKps9FRoLz/3njqWcrMlFQ3jKO2IvL/JJKe+fNbc6VHGT0BPc2TQ4nay24I7KAqfLhLqkrpuhOHbPoj7dO3yr5zzu0I9Z78gPsRpM2BOmaEE+Q2WXKyGUZmsr3IWdy9V/l4IwxYRlNUxjvUxbetkbvRRP8rT48JhsJYeZfHAekgpsVnHKJMsTYnAQ== your_email@example.com

# 如果没有则自己生成,生成方式如下

在设置SSH服务时,生成SSH密钥(公钥和私钥)是一个常见的任务。这些密钥用于安全地进行身份验证,无需输入密码。以下是如何生成SSH密钥的步骤:

  1. 生成SSH密钥对
    首先,您需要在客户端机器上生成一个SSH密钥对。使用ssh-keygen命令来生成密钥对。

ssh-keygen -t rsa -b 4096 -C “your_email@example.com”
-t rsa:指定密钥类型为RSA。
-b 4096:指定密钥长度为4096位。
-C “your_email@example.com”:添加注释(通常是您的电子邮件地址),这有助于识别密钥。
执行上述命令后,系统会提示您输入文件名以保存密钥(默认情况下保存在~/.ssh/id_rsa中),以及是否设置密码短语。设置密码短语可以增加额外的安全层,但也可以留空以便免密码连接。

  1. 查看生成的密钥文件
    生成密钥对后,您的SSH目录(通常是~/.ssh)中将包含以下两个文件:

id_rsa:私钥文件。
id_rsa.pub:公钥文件。

  1. 将公钥复制到远程服务器
    要使用SSH密钥登录到远程服务器,需要将生成的公钥添加到远程服务器上的~/.ssh/authorized_keys文件中。可以使用ssh-copy-id命令来完成此操作:
ssh-copy-id user@remote_host

user:远程服务器上的用户名。
remote_host:远程服务器的IP地址或域名。
此命令会提示您输入远程服务器用户的密码,并将公钥自动复制到远程服务器的~/.ssh/authorized_keys文件中。

  1. 手动复制公钥 (可选
    如果无法使用ssh-copy-id,也可以手动复制公钥。首先查看公钥内容:
cat ~/.ssh/id_rsa.pub

然后,将输出的内容复制并粘贴到远程服务器上的~/.ssh/authorized_keys文件中。确保文件权限正确:

在远程服务器上执行

mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "your_public_key" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
  1. 测试SSH连接
    完成上述步骤后,您应该能够使用SSH密钥进行无密码登录:
ssh user@remote_host

如果一切正常,您将直接登录到远程服务器,而不需要输入密码。

  1. 配置SSH客户端(可选)
    为了更方便地管理多个SSH连接,可以在本地机器的~/.ssh/config文件中配置SSH客户端:
Host remote_host_alias
HostName remote_host
User user
IdentityFile ~/.ssh/id_rsa

这样,您可以通过别名进行连接:

ssh remote_host_alias

通过以上步骤,您可以生成SSH密钥并配置SSH服务,以便实现更加安全和便捷的无密码登录

  • 来到k8s的master节点用户目录下.ssh文件夹,把jenkins的公钥放到.ssh文件夹下的authorized_keys文件中
[root@master ~]# cd ~
[root@master ~]# ls -a
.   anaconda-ks.cfg  .bash_logout   .bashrc  .config  deploy-nginx.yml  ingress  kuboard-v3.yaml   pipeline.yml  .ssh     .viminfo
..  .bash_history    .bash_profile  .cache   .cshrc   .docker           .kube    nginx-tomcat.yml  .pki          .tcshrc
[root@master ~]# cd .ssh
[root@master .ssh]# ls
known_hosts
[root@master .ssh]#  touch authorized_keys
[root@master .ssh]# vim authorized_keys
# 复制密钥到文件中保存即可


jenkins@e96108b4b77b:~$ ssh root@192.168.201.120 sfs
bash: sfs: command not found
jenkins@e96108b4b77b:~$

下面就可以在Jenkins中执行k8s的命令了,来到jenkins中添加配置,生成pipeline命令
在这里插入图片描述
修改项目中Jenkinsfile文件,在执行步骤中添加一个步骤,然后去Jenkins构建

stage('远程执行k8s-master节点的kubectl命令') {
			steps {
				sh 'ssh root@192.168.201.120 kubectl apply -f /usr/local/k8s/pipeline.yml'
			}
		}

最后成功部署了

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

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

相关文章

祝福在茶礼丨酒茶香充满东方古韵特色的中秋礼盒,太惊艳了

中国是礼仪之邦&#xff0c;礼尚往来更是普通不过。象征东方古韵的茶礼成为现代送礼热门&#xff0c;尤其是逢年过节茶礼氛围更是浓郁&#xff0c;跃居礼单榜首。 中秋节作为团圆之节&#xff0c;送礼肯定少不了&#xff01;送茶礼的这几个理由你一定要知道&#xff01; 送茶即…

【动手学深度学习】06 矩阵计算(个人向笔记)

标量导数 这个比较简单&#xff0c;就是直接求导 亚导数 举了两个例子 梯度 下面是当 y 和 x 分别为向量和标量时求导的结果。一个为向量&#xff0c;一个为标量则结果为向量。两个都为向量结果为矩阵&#xff0c;两个都为标量结果为标量 当 y 为标量&#xff0c;x 为列…

关于腾讯IM消息ID不统一的问题?服务端的MsgKey和前端的msgID不一样

角色>前端&#xff1a;web、小程序、客户端&#xff08;ios、安卓&#xff09;&#xff1b;服务端&#xff1b;腾讯IM&#xff1b; 1、背景 IM消息ID不一致&#xff0c;本地没有缓存历史数据&#xff0c;导致在调用腾讯sdk方法时&#xff0c;id不一致报错问题 2、调研目的…

MySQL进阶篇4 - 锁

五、锁 5.1 概述 介绍 分类 5.2 全局锁 介绍 红色代表不可执行的操作&#xff0c;绿色代表可执行的操作 # mysqldump 是 MySQL 提供的数据备份的命令演示 # 如果想进行全库的逻辑备份&#xff0c;那么就需要在逻辑备份之前 # 手动的加上全局锁 flush tables with read …

flask下https教程

一、定义 linux 下flask https 协议 二、实现 linux 下flask https 协议 生成SSL证书和密钥文件。您可以使用工具如openssl来生成自签名SSL证书和密钥文件。运行以下命令生成证书和密钥文件&#xff1a; openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout…

HCIE和CCIE,哪个含金量更高点?

在现在内卷的大环境下&#xff0c;技术岗可谓人人自危&#xff0c;也因此各种认证的重视程度直线升高。 特别是华为认证的HCIE和思科认证的CCIE&#xff0c;它们都代表着网络技术领域的顶尖水平。 但面对这两个高含金量的认证&#xff0c;不得不让人问出这个问题&#xff1a;同…

找到办法了!一个站点,搞定所有访问权限需求

在知识库的构建与管理过程中&#xff0c;如何平衡信息的公开与私密性始终是一大挑战。传统方法往往需要建立多个具有不同访问权限的站点&#xff0c;操作繁琐且难以维护。尤其当企业需同时向公众和内部成员提供知识文章时&#xff0c;这一问题尤为突出。用户频繁反馈&#xff0…

振弦式渗压计安装流程全面指南

在大坝安全监测体系中&#xff0c;振弦式渗压计作为关键设备之一&#xff0c;承担着监测大坝内部渗流压力变化的重任。其安装质量直接关系到监测数据的准确性和大坝安全的评估。因此&#xff0c;制定一套科学、精细的安装流程&#xff0c;对于确保渗压计的正常运行和延长使用寿…

什么是生成式 AI?

人工智能 (AI) 通过使用机器学习与环境交互并执行任务来模仿人类行为&#xff0c;而无需明确指示要输出的内容。 生成式 AI 描述 AI 中用于创建原创内容的一类功能。 人员通常与聊天应用程序中内置的生成式 AI 交互。 此类应用程序的一个常见示例是 Microsoft Copilot&#xf…

Telephony STK 域选

在场测过程中,经常遇到STK功能不生效,点击STK会出现无响应的问题. 一般需要对比DUT和REF来确认问题所在。一般情况下,出现类似问题需要check是否域选是一致的。 测试机 对比机 对比机为展锐平台会出现弹框情况,从Log看,相关业务进行了报错回落,从IMS业务回落到了…

基于spring的博客系统(一)

通过前⾯课程的学习, 我们掌握了Spring框架和MyBatis的基本使⽤, 并完成了图书管理系统的常规功能 开发, 接下来我们系统的从0到1完成⼀个项⽬的开发&#xff1b; 1. 项⽬介绍 使⽤SSM框架实现⼀个简单的博客系统 共5个⻚⾯ 1. 用户登录 2. 博客发表⻚ 3. 博客编辑⻚ 4. 博客…

【Java算法】模拟

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【算法工作坊】算法实战揭秘 &#x1f9e3; 一.模拟算法 模拟算法和传统的算法有一些不同之处&#xff0c;更多的是对题目要求的理解&#xff0c;通过代码的方式去模拟实现一道题目在现实中的实现方法…

接口基础知识4概念纠正与补充说明

​接口基础知识4 1 请求方法的幂等性 幂等性的理解是没有问题的。但是请求方法和幂等性没有直接的关联。 在 REST API 设计中&#xff0c;幂等性非常重要&#xff0c;因为它保证了在重复请求的情况下&#xff0c;资源的状态始终保持一致&#xff0c;不会因为重复请求而发生副…

量化交易backtrader实践(一)_数据获取篇(1)_数据准备

我们需要使用backtrader来做量化交易回测&#xff0c;先解决一些前置问题&#xff1a; 需要回测哪几支股票&#xff0c;或者即时选取股票即时选取股票以什么形式&#xff0c;代码还是名称这些数据的格式是怎么样的&#xff0c;backtrader如何接收 在解决这些前置问题的过程中…

如何抽取一个特定页面从devExpress的例程集合中

https://download.csdn.net/download/haoyujie/89729356https://download.csdn.net/download/haoyujie/89729356相关资源。 devExpress界面库的例程的设计是有必要来吐槽的。其紧耦合和大捆绑&#xff0c;我认为是devExpress很重要的不友好&#xff0c;导致可用性差和学习曲线…

让AI算算国庆中秋,你究竟多休了几天

最近&#xff0c;2024年中秋和国庆的放假调休安排火速登上热搜&#xff1a; “上6休3&#xff0c;上3休2&#xff0c;上5休1&#xff0c;上2休7&#xff0c;再上5休1。” 是不是看着眼花缭乱&#xff1f;其实不仅你懵了&#xff0c;广大网友也集体抓狂&#xff1a;“这比高考…

Spring介绍和Log4j2

目录 一、模块组成二、基本用例-Spring框架基本使用、原理三、启用日志框架 Spring 有两个最核心模块&#xff1a; IoC 和 AOP。 IoC&#xff1a;Inverse of Control 的简写&#xff0c;译为“控制反转”&#xff0c;指把创建对象过程交给 Spring 进行管理。AOP&#xff1a;Asp…

python爬虫代理ip池搭建

最近大量爬取数据的时候总会遇到被封ip的情况&#xff0c;所有打算自己搭建一个代理ip池来使用。本次使用的是开源的ip代理池项目ProxyPool 1.下载redis数据库 redis安装 这里我选择直接下载redis的解压包形式&#xff0c;方便安装。下载地址&#xff1a;发布 TPORADOWSKI/RED…

Linux网络协议栈的实现

网络协议栈是操作系统核心的一个重要组成部分&#xff0c;负责管理网络通信中的数据包处理。在 Linux 操作系统中&#xff0c;网络协议栈&#xff08;Network Stack&#xff09;负责实现 TCP/IP 协议簇&#xff0c;处理应用程序发起的网络请求并与底层的网络硬件进行交互。本文…

关于ansible自动化运维工具

成长路上不孤单&#x1f60a;【14后&#xff0c;C爱好者&#xff0c;持续分享所学&#xff0c;如有需要欢迎收藏转发&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#xff01;&#xff01;&#xff01;&#xff01;&#xff…