使用GitLab自带的CI/CD功能在K8S集群里部署项目(四)

 前置内容:

通过Docker Compose部署GitLab和GitLab Runner(一)

使用GitLab自带的CI/CD功能在本地部署项目(二)

使用GitLab自带的CI/CD功能在远程服务器部署项目(三)

一、K8S集群信息

节点名称

IP

Master

192.168.184.130

Worker01

192.168.184.131

Worker02

192.168.184.132

在Master节点上创建eshop命名空间:

kubectl create namespace eshop

二、将公钥拷贝到K8S集群的Master节点上

在GitLab服务器上执行以下命令将公钥拷贝到K8S集群的Master节点上:

scp /root/.ssh/id_rsa.pub root@192.168.184.130:/root/.ssh/id_rsa_gitlab.pub

在K8S集群的Master节点执行以下命令,将GitLab服务器的公钥内容写入authorized_keys文件

cat /root/.ssh/id_rsa_gitlab.pub >> /root/.ssh/authorized_keys

在GitLab服务器上执行以下命令,可以看到不用输入用户名密码就可以登录到K8S集群的Master节点了

ssh 192.168.184.130

三、更新SSH_KNOWN_HOSTS变量值

获取K8S集群Master节点的公钥,并更新到全局的CI/CD变量SSH_KNOWN_HOSTS中。

在GitLab服务器上使用以下命令收集K8S集群Master节点(IP:192.168.184.130)公钥相关内容,并复制它们:

ssh-keyscan 192.168.184.130

在GitLab页面上,通过 【Admin Area → Settings → CI/CD → Variables → Expand 】菜单路径,找到SSH_KNOWN_HOSTS全局变量所在行,点击“编辑”图标,如图所示:

将复制的ssh-keyscan生成内容追加到原内容后面,然后一定要按回车符,添加新行,如图所示:

四、将K8S集群Master节点IP设置成CI/CD全局变量

在GitLab页面上,通过 【Admin Area → Settings → CI/CD → Variables → Expand → Add Variable】菜单路径,添加后的结果如图所示:

五、编写.gitlab-ci.yml文件

重新修改上一篇文章介绍的使用.Net8开发的EShop.WebApi项目的.gitlab-ci.yml文件内容,如下:

stages:- build- deployvariables:## 镜像版本号      Docker_ImageTag: "latest"## 镜像名称Docker_Image: "eshop.webapi:$Docker_ImageTag" ## 阿里云镜像名称Ali_Docker_Image: "$Ali_Docker_Registry/eshop/$Docker_Image"build:stage: buildscript:## 构建镜像  - docker build -f "./EShop.WebApi/Dockerfile" -t $Docker_Image .## 将镜像标记为阿里云镜像名称- docker tag $Docker_Image $Ali_Docker_Image## 登录阿里云私人镜像仓库- docker login -u $Ali_Docker_UserName --password "$Ali_Docker_Password" $Ali_Docker_Registry## 将镜像推送到阿里云镜像仓库- docker push $Ali_Docker_Imageonly:- main  deploy:stage: deploybefore_script:## 安装ssh-agent- 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'- eval $(ssh-agent -s)## 将GitLab服务器私钥添加到ssh-agent代理中- chmod 400 "$SSH_PRIVATE_KEY"- ssh-add "$SSH_PRIVATE_KEY"## 创建~/.ssh目录- mkdir -p ~/.ssh- chmod 700 ~/.ssh## 创建SSH_KNOWN_HOSTS- cp "$SSH_KNOWN_HOSTS" ~/.ssh/known_hosts- chmod 644 ~/.ssh/known_hostsscript:## 使用ssh免密登录K8S集群,执行部署eshop.webapi服务脚本命令- ssh -t $K8S_Master_IP "cd /opt/eshop/ && kubectl apply -f eshop.webapi.yaml"only:- main

   

在.gitlab-ci.yml文件中我们通过ssh登录到K8S集群Master节点,然后使用kubectl命令进行部署,这里的eshop.webapi.yaml文件内容如下:

---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: eshop-webapiname: eshop-webapinamespace: eshop
spec:replicas: 2selector:# Deployment会匹配与这里设置的相同标签内容的podmatchLabels:app: eshop-webapi# pod的模板描述template:metadata:#定义pod的标签labels:app: eshop-webapispec:containers:- image: 'registry.cn-qingdao.aliyuncs.com/eshop/eshop.webapi:latest'name: eshop-webapiports:- containerPort: 8080imagePullSecrets:- name: aliyun
---
apiVersion: v1
kind: Service
metadata:labels:app: svc-eshop-webapiname: svc-eshop-webapinamespace: eshop
spec:selector:#选择指定标签的Deploymentapp: eshop-webapi#注意指定type为NodePorttype: NodePortports:- port: 8000protocol: TCPtargetPort: 8080#指定暴露的端口号,不设置就默认随机一个#nodePort: 31234    

因为我用的是阿里云私有镜像,所以文件中使用到了k8s的secret对象,其保存了阿里云仓库用户名密码等信息,其创建命令如下:

kubectl create secret docker-registry aliyun --docker-server=https://registry.cn-qingdao.aliyuncs.com --docker-username=xxxx --docker-password=xxxxx --docker-email=xxxxx -n eshop

六、验证

在GitLab的EShopWebApi仓库页面查看Pipeline的Job执行结果,可以看到kubectl apply命令已经执行成功:

在K8S Master节点上查看eshop-webapi服务暴露的端口信息:

在浏览器中输入master节点IP和端口信息,访问接口地址:http://192.168.184.130:31644/WeatherForecast,可以看到返回的信息:

至此,通过GitLab自带的CI/CD实现应用部署到K8S集群大功告成!

七、总结

本地搭建K8S集群环境其实没那么复杂,大家可以去我主页找相关教程学习一下,多动手实验。

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

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

相关文章

基于springboot+vue+Mysql的体质测试数据分析及可视化设计

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

JAVA反射示例

public static void main(String[] args) throws Exception {Class pClass Class.forName("jdj.Person");//遍历整个控制器Constructor[] constructorspClass.getDeclaredConstructors();for(Constructor con:constructors) {System.out.println(con);}//通过控制器…

【CCF-CSP】202403-3 化学方程式配平

输入格式: 从标准输入读入数据。 输入的第一行包含一个正整数 n,表示需要判断的化学方程式的个数。 接下来的 n 行,每行描述了一个需要被配平的化学方程式。包含空格分隔的一个正整数和全部涉及物质的化学式。其中,正整数 m 表…

Ubuntu 安装 samba 实现文件共享

1. samba的安装: sudo apt-get install samba sudo apt-get install smbfs2. 创建共享目录 mkdir /home/share sudo chmod -R 777 /home/share3. 创建Samba配置文件: 3.1 保存现有的配置文件 sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak3.2 打开现有的文件 sudo…

Docker快速启动清单

以下容器均使用 Docker version 24.0.2 版本测试使用,这里需要注意一下,高版本的Docker不支持镜像V1版本,不知道怎么操作才可以让它支持,所以推荐使用低版本 如果觉得不直观,或者觉得有点乱,可以访问以下网…

第十二章 元数据管理练习

单选题 (每题1分,共23道题) 1、 [单选] 元数据的来源有哪些? A:参考数据库、BI工具 B:数据字典、数据集成工具 C:建模工具和事件消息工具 D:以上都是 正确答案:D 你的答案:D 解析:327~330页,一共15个来源,所以选D,考核知识点,元数据的基本概念,元数据来源相关…

Window如何运行sh文件以及wget指令

Git下载 官网链接如下:https://gitforwindows.org/ 安装就保持一路无脑安装就行,不需要改变安装过程中的任何一个选项。 配置Git 切刀桌面,随便右击屏幕空白处,点open Git Bash here 把这行复制过去,回车&#xff1…

【用文本生成歌声】Learn2Sing 2.0——歌声转换算法及梅尔频谱详解

一. 频谱图与梅尔谱图的介绍 频谱图:频谱图可以理解为一堆垂直堆叠在一起的快速傅里叶变换结果。 1.1 信号 在进入频谱图模块之前,首先我们需要了解信号是什么。 信号就是某一特定量随时间变化,对于音频来说,这个特定的变化量就…

Python图形复刻——绘制母亲节花束

各位小伙伴,好久不见,今天学习用Python绘制花束。 有一种爱,不求回报,有一种情,无私奉献,这就是母爱。祝天下妈妈节日快乐,幸福永远! 图形展示: 代码展示: …

多目标跟踪入门介绍

多目标跟踪算法 我们也可以称之为 Multi-Target-Tracking (MTT)。 那么多目标跟踪是什么? 不难看出,跟踪算法同时会为每个目标分配一个特定的 id 。 由此得出了目标跟踪与目标检测的区别(似乎都是用方框来框出目标捏…

创新案例|搜索新王Perplexity如何构建生成式AI产品开发的新模式

Perplexity AI:生成式搜索的颠覆者 刚刚成立满两年,Perplexity AI已经变成了我日常频繁使用的工具,甚至取代了我对 Google搜索的依赖 —— 而我并非个案。该公司仅凭不到 50 名员工,已经吸引了数千万用户。他们目前的年收入超过 …

数据赋能(81)——数据要素:管理必要性

数据作为现代社会的核心资源,其潜在价值巨大。有效的数据要素管理能够确保数据得到充分的利用,转化为具备潜在利用价值的数据资产,为使用者或所有者带来经济效益。数据要素管理涉及到数据的收集、存储、处理、分析和利用等各个环节&#xff0…

马尔可夫决策过程(Markov Decision Process,简称MDP)

马尔可夫决策过程是一个四元组(S, A, P, R),其中: S是状态集合,表示智能体(Agent)可能处于的所有状态;A是动作集合,表示智能体可以采取的所有动作;P是状态转…

Linux 操作系统线程1

目录 一、线程 1.1线程的基本概念 1.2 线程相关的API函数 1.2.1 线程的创建 1.2.2 线程退出 1.2.3 线程等待函数 1.2.4 获取线程ID 1.2.5 线程取消 1.2.6 线程的清理函数 一、线程 1.1线程的基本概念 线程是属于进程;一个进程可以有多个线程&#xff…

第五十八节 Java设计模式 - 适配器模式

Java设计模式 - 适配器模式 我们在现实生活中使用适配器很多。例如,我们使用存储卡适配器连接存储卡和计算机,因为计算机仅支持一种类型的存储卡,并且我们的卡与计算机不兼容。 适配器是两个不兼容实体之间的转换器。适配器模式是一种结构模…

一文看懂深度学习中的cuda环境配置:cuda,cuda driver,cudnn与pytorch-cuda

深度学习中通常会涉及到cuda环境相关的问题,特别是torch版本,cuda版本等兼容问题。 主要涉及到这四个方向 显卡驱动:cuda driver 。驱动API (driver API)通过nvidia-smi查看,是所有cuda环境的基础CudaTool…

【二叉树】(一)二叉树基础知识及多种遍历方式

二叉树基础知识及多种遍历方式 关于二叉树,该了解这些二叉树的种类存储方式遍历方式节点定义 二叉树的三种递归遍历(深度遍历)递归遍历设计核心思想递归遍历力扣例题解析 二叉树的三种迭代遍历(深度遍历)前后续遍历中序…

数据库开启远程连接

服务器端添加一个允许远程连接的root用户: mysql -u root -p create user root192.168.10.20 identified by admin; //创建一个192.168.10.20地址远程连接的root用户 grant all privileges on *.* to root192.168.10.20; //赋予远程root用户所有的权…

中国地形可调节高度-UE5-UE4

2000坐标系,可进行高度调整。 支持版本4.21-5.4版本 下载位置:https://mbd.pub/o/bread/ZpWZm5Zs

教你解决PUBG绝地求生启动不了 登录不了 登录不进去的问题

尽管《绝地求生》(PUBG)凭借其紧张刺激的战术对抗与高度仿真的战场环境在全球范围内赢得了众多拥趸,但不少玩家在经历了一场紧张激烈的生命争夺赛后,却面临着一个不愉快的现实:游戏无法顺利启动或登录。这种紧随激烈战…