当前位置: 首页 > news >正文

gitlab流水线与k8s集群的联通

gitlab流水线与k8s集群的连接,首先是通过gitlab-ci.yml文件中的命令,通过runner执行器实例运行对应的kubectl命令实现的。
那么runner执行器实例执行器如何执行kubectl命令,执行环境的配置,kubectl命令如何与k8s集群互认,以及从git push到k8s集群的运行,都需要逐步进行配置并确定连通性。
这个流程应当是:
IDE->gitlab->gitlab runner->shell->docker+kubectl->k8s集群

1.runner与k8s的连接

我们安装gitlab runner肯定是为了构建自动化流水线的。现在考虑如何将自动化流水线与k8s相连接。

1.1 执行器实例机器kubectl安装

首先我在gitlab runner的runner实例的执行器(我选的shell)运行的位置安装kube,方便kubectl命令的执行。

  1. 下载。换google的官方源难以yum安装,尝试使用io提供的文件。
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

我是x86架构的centos7.4内核的系统,如上命令即可。如果是arm架构等其他情况,可以修改对应的位置。
下载后转移到自己的PATH下即可。一般放到/usr/local/bin/下就行。
为了保持学习的态度,我们可以通过echo $PATH命令查看自己系统的PATH有哪些。他会返回一系列用:结尾的字符串,这些就是你的PATH地址。
2. 下一步,修改kubectl文件的可执行权限。
在这里插入图片描述

# 在kubectl存放的位置检查一下权限
ls -la kubectl
# 可以看到只有所有者有读写权限。考虑到中标麒麟的权限管理严格,我计划给所有用户执行权限。
sudo chmod 711 kubectl
# 更改完后查询权限
ls -la kubectl
# 可以看到执行权限被添加了
  1. 转移到bin下
sudo mv kubectl /usr/local/bin/
  1. 验证安装成功
kubectl version --client#返回值为
Client Version: v1.34.0
Kustomize Version: v5.7.1

说明安装成功了

1.2 测试gitlab能否正常连接kubectl

我们操作k8s执行的整个链条为:

  • 通过IDE在本地编辑gitlab-ci.yml文件。
  • 文件指导gitlab,通过文件中的tag和gitlab中注册的runner实例tag匹配,选择gitlab runner特定执行器执行相关命令。
  • 执行器选择使用shell
  • shell命令使用kubectl命令
  • kubectl按照IDE中编辑的deployment.yaml和service.yaml,将要执行的内容部署到K8S集群上

我需要确认gitlab-ci.yml能正常命令shell级别的kubectl能正常执行。既确认IDE到kubectl的连接。
首先修改gitlab-ci.yml内容为:

stages:- build- deployvariables:DOCKER_DRIVER: overlay2DOCKER_TLS_CERTDIR: ""build:stage: buildtags:- shellscript:- docker --versiondeploy:stage: deploytags:- shellscript:- kubectl version --client

之后进行commit和push。
之后前往gitlab->demo项目->构建->作业 下查看build和deploy是否正常反馈。
build里会看到Job succeeded的字样:

# 省略一大段
$ docker --version
Docker version 17.03.2-ce,build f5ec1e2
Job succeeded

deploy里也会看到:

# 省略一大段
$ kubectl version --client
Client Version: v1.34.0
Kustomize Version: v5.7.1
Job succeeded

至此我可以确认IDE->gitlab->gitlab runner->shell->docker/kubectl是正常的。

1.3 将k8s集群与kubectl连接

在端口开通没有障碍的情况下,直接在k8s节点复制config文件到kubectl运行的位置是最方便的,命令如下:

# 在k8s主节点执行
scp /etc/kubernetes/admin.conf 目标机器用户名@IP地址:/etc/kubernetes/config

考虑到我这边开通机器到机器的权限比较麻烦,我选择手动复制。从k8s的master机器,或者通过kubephere手动拷贝config内容。
到了本地机器之后,在本地执行环境配置:

echo "export KUBECONFIG=/etc/kubernetes/config" >> ~/.bashrc
source ~/.bashrc

你的config文件存储位置/etc/kubernetes/config不是这个的话,记得进行修改。
测试一下能不能连接集群

kubectl get nodes

执行上述命令你会发现,哎他通不了

1.4 集群和本级策略开通

基于内网环境,各种端口默认是不能通信的,那么需要调查确定需要开通哪些权限。

1.4.1 开通端口的确认

k8s集群的kubernetes API server服务监听端口需要确认。k8s默认监听6443端口,进行API server。
受限网络环境下,我申请到开通一个策略的时间代价是很长的,所以我倾向于先确认再后续操作。下面通过命令确认开通情况。

ps -ef | grep kube-apiserver | grep -E 'secure-port|bind-address'

正常情况你能在返回中看到–secure-port=6443

1.4.2 端口监听情况确认

查看端口监听情况是否正常

sudo netstat -tnlp | grep kube-apiserver

正常你会看到kube-apiserver监听:::6443,就是监听的6443端口,看到:::*,就是所有来源的都收。

1.4.3 开通策略

runner机器-》k8s master节点,需要开通all-〉6443
因为runner机器与k8s master节点通信的端口是随机的。所以这一侧应该是要开通all

1.5 为执行器指引配置文件位置

在gitlab-ci.yml中编辑一行variables

variables:          # 告诉 Runner kubeconfig 在哪KUBECONFIG: "<to your config flie path>/config"

具体位置改成你存放config文件的位置。

1.6 集成连通性测试

gitlab-ci.yml中编辑一行kubectl get nodes。
之后执行推送。
到gitlab流水线中查看deploy阶段情况。
能正常展示你的几个节点的列表那就是和k8s集群通常起来了。


文章转载自:

http://S9zHk8ko.Ljygq.cn
http://s9HAVcO7.Ljygq.cn
http://l7K9SkHQ.Ljygq.cn
http://VwOjreP0.Ljygq.cn
http://LFkx0xVH.Ljygq.cn
http://cWSR2D6G.Ljygq.cn
http://WxGn1B0i.Ljygq.cn
http://mR1jmTMI.Ljygq.cn
http://g9Auzlza.Ljygq.cn
http://BZyU5v4D.Ljygq.cn
http://mmT71g9A.Ljygq.cn
http://UPfJFKIu.Ljygq.cn
http://wRItvL8e.Ljygq.cn
http://MaCqyycc.Ljygq.cn
http://60FMTCRJ.Ljygq.cn
http://YAprZxX7.Ljygq.cn
http://54i27W0J.Ljygq.cn
http://h1gXcLjI.Ljygq.cn
http://2bVWFJEB.Ljygq.cn
http://eZpbhuzu.Ljygq.cn
http://DM5nzzvX.Ljygq.cn
http://QtIXZZpI.Ljygq.cn
http://JfcLnOxp.Ljygq.cn
http://pfiPE8on.Ljygq.cn
http://cRxGliPB.Ljygq.cn
http://dw8Orx1K.Ljygq.cn
http://pHkPFBoH.Ljygq.cn
http://KSu9HYzp.Ljygq.cn
http://kLbmBWoc.Ljygq.cn
http://5tq4y3aR.Ljygq.cn
http://www.dtcms.com/a/377973.html

相关文章:

  • 关于神经网络中回归的概念
  • 前后端接口调试提效:Postman + Mock Server 的工作流
  • Cesium---1.133版本不修改源码支持arcgis MapServer 4490切片
  • express 框架基础和 EJS 模板
  • 多楼层室内定位可视化 Demo(A*路径避障)
  • python将pdf转txt,并切割ai
  • 可视化图解算法60: 矩阵最长递增路径
  • 4、幽络源微服务项目实战:后端公共模块创建与引入多租户模块
  • 用Next.js 构建一个简单的 CRUD 应用:集成 API 路由和数据获取
  • 如何通过url打开本地文件文件夹
  • Swagger隐藏入参中属性字段
  • JavaEE--8.网络编程
  • linux系统搭建nacos集群,并通过nginx实现负载均衡
  • 论文阅读:openai 2025 Why Language Models Hallucinate
  • Rail开发日志_9
  • opencv特征检测
  • 科普:环境隔离的工具:虚拟环境与容器Docker
  • 小迪安全v2023学习笔记(八十一讲)—— 框架安全ThinkPHPLaravelStruts2SpringBootCVE复现
  • ubuntu22.04 安装Docker
  • OpenCV 开发 -- 图像阈值处理
  • [Ubuntu][mount]ubuntu电脑挂载新硬盘
  • Maven中optional的作用
  • 使用pdfjs-dist 预览pdf,并添加文本层的实现
  • 操作系统应用开发(五)智能浏览器开发——东方仙盟元婴期
  • 蓝桥杯算法之基础知识(7)---排序题的快排和归并排序
  • leetcode-python-2154将找到的值乘以 2
  • Nginx 实战系列(十)—— LVS+Keepalived 高可用集群技术详解
  • C++ 前缀积 高频笔试考点 实用技巧 力扣 238.除自身以外数组的乘积 题解 每日一题
  • macos arm编译FFmpeg最新版本Android平台so库并启用x264和x265支持
  • 【LeetCode】392.判断子序列