基于helm的方式在k8s集群中部署gitlab - 部署(一)

文章目录

    • 1. 背景说明
    • 2. 你可以学到什么?
    • 3. 前置条件
    • 4. 安装docker服务(所有节点)
    • 5. 部署k8s集群
      • 5.1 系统配置(所有节点)
      • 5.2 安装kubelet组件(所有节点)
        • 5.2.1 编写kubelet源
        • 5.2.2 安装kubelet
        • 5.2.3 启动kubelet
      • 5.3 集群初始化(master节点)
      • 5.4 从节点加入到集群中
      • 5.5 安装k8s网络插件
      • 5.6 安装ingress网络
      • 5.7 配置StorageClass
    • 6. helm安装gitlab
      • 6.1 添加gitlab的helm源
      • 6.2 创建证书密钥
      • 6.3 创建集成smtp和ldap的密钥
      • 6.4 拉取并修改gitlab的values文件
      • 6.5 部署gilab
      • 6.6 修改gitlab-nginx-ingress
        • 方法1: 修改gitlab-nginx-ingress的暴露type(upgrade后会失效)
        • 方法2: 修改gitlab的values文件
      • 6.7 修改gitlab-shell的端口
    • 7. 部署runner
      • 7.1 部署nginx代理
      • 7.2 配置runner
      • 7.3 更新gitlab
      • 7.4 测试runner
    • 8. minio功能验证
    • 9. ldap功能验证

1. 背景说明

客户之前的gitlab服务在k8s集群中部署的,为了整合现有的硬件资源,计划将gitlab服务迁移到虚拟机上。

先在测试环境进行如下模拟操作:

  • 基于kubeadm部署一套k8s集群,在集群上部署gitlab服务;
  • 将数据备份到对象存储中;
  • 最终将数据恢复在另外一台gitlab单实例上,实现gitlab在k8s和单实例ominibus之前迁移的一个完整闭环。

2. 你可以学到什么?

  • k8s集群部署
  • K8s 暴露服务的类型
  • K8s storageclass、configmap、secret
  • helm部署gitlab(配置smtp、ldap、runner)
  • gitlab配置对象存储

3. 前置条件

  • helm 安装
  • K8s 集群版本 1.23 (两台 8C16G OS为7.9)
  • Docker 版本 20.10.23
  • 证书在阿里云上申请免费ssl证书即可或者通过let’s encry 申请免费的泛域名证书

4. 安装docker服务(所有节点)

参考 docker安装(二进制&yum)

5. 部署k8s集群

参考k8s1.15安装详细精华版

也可以通过如下命令快捷安装

5.1 系统配置(所有节点)

修改内核参数 - /etc/sysctl.conf

# 转发
net.ipv4.ip_forward = 1
# iptables网络
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#加在生效
sysctl -p 

5.2 安装kubelet组件(所有节点)

5.2.1 编写kubelet源

编辑/etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
yum repolist
5.2.2 安装kubelet
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
5.2.3 启动kubelet
# 启动
systemctl start kubelet.service
# 开启自启
systemctl enable kubelet.service

5.3 集群初始化(master节点)

主节点上执行如下命令

# 命令解析
kubeadm init  \
--apiserver-advertise-address=10.100.0.14  \ 										 # 通常为主节点的ip地址
--image-repository registry.aliyuncs.com/google_containers  \    # 指定基础镜像拉取的仓库
--kubernetes-version v1.23.0  \ 																 # 指定k8s的组件版本
--service-cidr=10.92.0.0/12  \ 																	 # k8s集群svc的子网
--pod-network-cidr=10.220.0.0/16  \ 														 # k8s集群pod的子网
--ignore-preflight-errors=all																		 # 忽略运行时的错误# 一条初始化命令如下:
kubeadm init  --apiserver-advertise-address=10.100.0.14  --image-repository registry.aliyuncs.com/google_containers  --kubernetes-version v1.23.0  --service-cidr=10.92.0.0/12  --pod-network-cidr=10.220.0.0/16  --ignore-preflight-errors=all

5.4 从节点加入到集群中

从节点上执行如下命令

 kubeadm join 10.100.0.14:6443 \--token saleos.q26gm2rbtgrwvdla \--discovery-token-ca-cert-hash sha256:5058ac78bd8f7879e14bae262d359b2b499d55a2d54796e3d103a27208f06d93

5.5 安装k8s网络插件

# 参考 https://github.com/flannel-io/flannel#deploying-flannel-with-kubectl
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

5.6 安装ingress网络

# 参考 https://github.com/kubernetes/ingress-nginx/tree/controller-v1.1.1#support-versions-table
# 参考 https://github.com/kubernetes/ingress-nginx/blob/controller-v1.1.1/deploy/static/provider/cloud/deploy.yaml
# 下载wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.1/deploy/static/provider/cloud/deploy.yaml
# 如果有问题 可以下一下crd的网络和你的svc的crd一样即可,将LoadBalancer改成NodePort

5.7 配置StorageClass

参考 安装并配置StorageClass

6. helm安装gitlab

6.1 添加gitlab的helm源

# 添加helm源
helm repo add gitlab-jh https://charts.gitlab.cn
# 更新helm源
helm repo update 

6.2 创建证书密钥

# 创建gitlab服务运行的命名空间
kubectl create ns jihulab
# 创建证书sa(将证书上传到主节点机器上的某个目录下,然后切换到该目录即可)
kubectl create secret tls gitlab-jihulab-cn-ssl --cert=kube.bdeet.top.pem --key=kube.bdeet.top.key -n jihulab
kubectl create secret tls registry-jihulab-cn-ssl --cert=registry.bdeet.top.pem --key=registry.bdeet.top.key -n jihulab
kubectl create secret tls minio-jihulab-cn-ssl --cert=minio.bdeet.top.pem --key=minio.bdeet.top.key -n jihulab

6.3 创建集成smtp和ldap的密钥

kubectl create secret generic ldap-admin --from-literal=password='Jh@2022' -n jihulab
kubectl create secret generic smtp-gitlab --from-literal=password='wqfhqohixshrnnnh' -n jihulab

6.4 拉取并修改gitlab的values文件

拉取gitlab 15.8.0的charts,编辑values文件

...
...
## 域名配置hosts:	domain: bdeet.top	hostSuffix:	externalIP:	ssh:	gitlab:	name: kube.bdeet.top	https: true	minio:	name: minio.bdeet.top	https: true	registry:	name: registry.bdeet.top	https: true
...
...
## ldap集成ldap:	preventSignin: false	servers:	main:	label: 'LDAP'	host: '129.226.208.223'	port: 389	uid: 'uid'	bind_dn: 'cn=ldap,dc=wkx,dc=cn'	base: 'dc=wkx,dc=cn'	password:	secret: ldap-admin	key: password	encryption: 'plain'
...
...
## 配置邮箱       smtp:	enabled: true	address: smtp.gmail.com	port: 587	user_name: "kxw12108@gmail.com"	## https://docs.gitlab.com/charts/installation/secrets#smtp-password	password:	secret: "smtp-gitlab"	key: password	# domain:	authentication: "login"	starttls_auto: true	openssl_verify_mode: "peer"	pool: false	## https://docs.gitlab.com/charts/charts/globals#outgoing-email	## Email persona used in email sent by GitLab	email:	from: "kxw12108@gmail.com"	display_name: "GitLab Administrator"	reply_to: "kxw12108@gmail.com"	subject_suffix: "GitLab"	smime:	enabled: false	secretName: ""	keyName: "tls.key"	certName: "tls.crt"
...
...

6.5 部署gilab

# 创建gitlab运行的命名空间
kubectl create ns jihulab
# 安装gitlab
helm install  gitlab gitlab-jh/gitlab \
--version 6.8.0 \
--timeout 600s  \
--set certmanager.install=false \
--set global.ingress.configureCertmanager=false  \
--set global.ingress.tls.enabled=true \
--set gitlab.webservice.ingress.tls.secretName=gitlab-jihulab-cn-ssl \
--set registry.ingress.tls.secretName=registry-jihulab-cn-ssl \
--set minio.ingress.tls.secretName=minio-jihulab-cn-ssl \
--values values.yaml -n jihulab

6.6 修改gitlab-nginx-ingress

方法1: 修改gitlab-nginx-ingress的暴露type(upgrade后会失效)
kubectl edit svc -n jihulab gitlab-nginx-ingress-controller
# 将type: LoadBalancer 改成 type: NodePort,保存退出后,会看到gitlab-shell
方法2: 修改gitlab的values文件
...
...
nginx-ingress:enabled: true......service:externalTrafficPolicy: "Local"type: "NodePort" # 添加ingress的svc的type......

问题说明

由于我们的自建k8s集群 gitlab的ingress的svc没有使用LoadBalancer而是NodePort,因为之前将minio、registry、gitlab的域名解析到该节点上后肯定是无法访问的,还必须需要在域名后添加nodeport的端口才可以。

kube.bdeet.top       			 --->        kube.bdeet.top:nodeport
registry.bdeet.top         --->        registry.bdeet.top:nodeport      
minio.bdeet.top            --->        minio.bdeet.top:nodeport

6.7 修改gitlab-shell的端口

由于将gitlab-nginx-ingress-controller的暴露端口的方式修改成了NodePort,因为ssh的端口也需要调整(查看下gitlab-nginx-ingress-controller ssh的暴露端口),否则会无法克隆。修改gitlab-shell

...
...
global:	shell:	port: 31475
...
...

更新gitlab

# 更新
helm upgrade gitlab gitlab-jh/gitlab \
--version 6.8.0 \
--timeout 600s  \
--set certmanager.install=false \
--set global.ingress.configureCertmanager=false  \
--set global.ingress.tls.enabled=true \
--set gitlab.webservice.ingress.tls.secretName=gitlab-jihulab-cn-ssl \
--set registry.ingress.tls.secretName=registry-jihulab-cn-ssl \
--set minio.ingress.tls.secretName=minio-jihulab-cn-ssl \
--set nginx-ingress.service.type=NodePort \
--set global.shell.port=31475 \
--values values.yaml -n jihulab

7. 部署runner

这样的runner存在一个问题就是由于使用的是nodeport的暴露方式,因为runner中的gitlaburl需要加端口,同时在runner进行克隆的时候也需要加端口,因为在部署一个nginx,作为一个转发。

7.1 部署nginx代理

# 安装nginx
yum -y install nginx
# 配置nginx 
# cat /etc/nginx/nginx.conf
...
...server {listen       443 ssl http2;listen       [::]:443 ssl http2;server_name  kube.bdeet.top;ssl_certificate "/root/cert/kube.bdeet.top.pem";ssl_certificate_key "/root/cert/kube.bdeet.top.key";ssl_session_cache shared:SSL:1m;ssl_session_timeout  10m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {proxy_pass https://kube.bdeet.top:31501;}error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}
...
...

7.2 配置runner

修改values文件

...
...runner:registrationToken:secret: gitlab-gitlab-runner-secret  # gitlab-runner的secret
...
...
gitlab-runner:install: truegitlabUrl: https://kube.bdeet.top  #修改gitlab的域名rbac:create: truerunners:privileged: true #开启特权locked: falseconfig: |[[runners]][runners.kubernetes]image = "ubuntu:18.04"{{- if .Values.global.minio.enabled }}[runners.cache]Type = "s3"Path = "gitlab-runner"Shared = true[runners.cache.s3]#ServerAddress = {{ include "gitlab-runner.cache-tpl.s3ServerAddress" . }}ServerAddress = "https://minio.bdeet.top:31501" #接入对象存储BucketName = "runner-cache"BucketLocation = "us-east-1"Insecure = false
...
...

7.3 更新gitlab

Upgrade 更新gitlab

helm upgrade gitlab gitlab-jh/gitlab \
--version 6.8.0 \
--timeout 600s  \
--set certmanager.install=false \
--set global.ingress.configureCertmanager=false  \
--set global.ingress.tls.enabled=true \
--set gitlab.webservice.ingress.tls.secretName=gitlab-jihulab-cn-ssl \
--set registry.ingress.tls.secretName=registry-jihulab-cn-ssl \
--set minio.ingress.tls.secretName=minio-jihulab-cn-ssl \
--set nginx-ingress.service.type=NodePort \
--set global.shell.port=31475 \
--values values.yaml -n jihulab

7.4 测试runner

gitlab上创建一个pipeline项目,然后commit提交后触发。
.gitlab-ci.yml文件如下

image: busybox:latestbefore_script:- echo "Before script section"- echo "For example you might run an update here or install a build dependency"- echo "Or perhaps you might print out some debugging details"after_script:- echo "After script section"- echo "For example you might do some cleanup here"build1:stage: buildscript:- echo "Do your build here"test1:stage: testscript:- echo "Do a test here"- echo "For example run a test suite"- echo 1 > index.htmlartifacts:paths:- index.htmltest2:stage: testscript:- echo "Do another parallel test here"- echo "For example run a lint test"deploy1:stage: deployscript:- echo "Do your deploy here"environment: production

可以发现minio上有artifacts文件(5/6/9 分别是job的artifacts文件、meta元数据、日志)
在这里插入图片描述
在这里插入图片描述## 8. 邮箱验证

可以验证项目创建、提交代码、pipeline测试、runner测试、minio测试

修改个人邮箱

在这里插入图片描述
设置通知 - 自定义全部勾选
在这里插入图片描述
运行pipeline
在这里插入图片描述

邮箱查看
在这里插入图片描述

8. minio功能验证

查看artifacts
在这里插入图片描述

9. ldap功能验证

查看用户属性
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

从零开始,用Docker-compose打造SkyWalking、Elasticsearch和Spring Cloud的完美融合

🎏:你只管努力,剩下的交给时间 🏠 :小破站 "从零开始,用Docker-compose打造SkyWalking、Elasticsearch和Spring Cloud的完美融合 前言准备工作编写docker-compose.yml文件为什么使用本机ip为什么skywa…

python中的字符串

字符串 字符串是编程语言中的一种基本数据类型,用于表示一串字符序列。在Python中,字符串是不可变的,也就是说一旦字符串被创建,就无法修改其中的字符。 Python中的字符串可以用单引号或双引号括起来,例如&#xff1…

【LeetCode】 160. 相交链表

相交链表 题目题解 题目 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意&am…

卡码网15 .链表的基本操作III

链表的基础操作III 时间限制:1.000S 空间限制:128MB 题目描述 请编写一个程序,实现以下链表操作:构建一个单向链表,链表中包含一组整数数据。 1. 实现在链表的第 n 个位置插入一个元素,输出整个链表的…

0-1背包问题详解

0-1背包问题 部分一:问题描述 0-1背包问题是一类经典的组合优化问题,它出现在很多实际生活和工业环境中。问题描述如下: 假设你是一个冒险家,带着一个可承重的背包,面对一堆宝物。每件宝物都有自己的价值&#xff0…

【设计模式-2.1】创建型——单例模式

说明:设计模式根据用途分为创建型、结构性和行为型。创建型模式主要用于描述如何创建对象,本文介绍创建型中的单例模式。 饿汉式单例 单例模式是比较常见的一种设计模式,旨在确保对象的唯一性,什么时候去使用这个对象都是同一个…

Rust UI开发(一):使用iced构建UI时,如何在界面显示中文字符

注:此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。 iced的基本逻辑是: UI交互产生消息message,message传递给后台的update,在这个函数中编写逻辑,然后通过…

Pytest做性能测试?

Pytest其实也是可以做性能测试或者基准测试的。是非常方便的。 可以考虑使用Pytest-benchmark类库进行。 安装pytest-benchmark 首先,确保已经安装了pytest和pytest-benchmark插件。可以使用以下命令安装插件: pip install pytest pytest-benchmark …

黑马一站制造数仓实战1

1. 项目目标 一站制造 企业中项目开发的落地:代码开发 代码开发:SQL【DSL SQL】 SparkCore SparkSQL 数仓的一些实际应用:分层体系、建模实现 2. 内容目标 项目业务介绍:背景、需求 项目技术架构:选型、架构 项目环境…

ubuntu系统下搭建本地物联网mqtt服务器的步骤

那么假如我们需要做一些终端设备,例如温湿度传感器、光照等物联网采集设备要接入呢?怎么样才能将数据报送到服务器呢? 以下内容基于我们ubuntu系统下的emqx成功启动的基础上。我们可以用浏览器键入控制板的地址,如果启动成功&…

数据爬取+可视化实战_告白气球_词云展示----酷狗音乐

一、前言 歌词上做文本分析,数据存储在网页上,需要爬取数据下来,词云展示在工作中也变得日益重要,接下来将数据爬虫与可视化结合起来,做个词云展示案例。 二、代码 # -*- coding:utf-8 -*- # 酷狗音乐 通过获取每首歌…

HarmonyOS到底有哪些独特之处?你真正了解鸿蒙多少!

鸿蒙系统太炸裂了💥我已经后悔了😭后悔没早点学习鸿蒙 HarmonyOS 概念,系统定位 1:鸿蒙系统是由华为公司自主研发的全球化开放源代码操作系统,它具有以下特别之处: 2:分布式架构:…

SpringBoot+mysql+vue实现大学生健康档案管理系统前后端分离

一、项目简介 本项目是一套基于SpringBoot实现大学生健康档案管理系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试&#…

数据结构——图解链表OJ题目

学完了单链表之后,我们对其基本结构已经有了一定的了解,接下来我们通过一些题目强化对链表的理解,同时学习一些面试笔试题目的新思路以及加强对数据结构单链表的掌握。 目录 题目一.876. 链表的中间结点 - 力扣(LeetCode&#x…

14.Tomcat和HTTP协议-[一篇通]

文章目录 1.HTTP 协议1.1HTTP 是什么1.2理解 "应用层协议"1.3理解 HTTP 协议的工作过程1.4HTTP 协议格式1.4.1抓包工具的使用(Fiddler)1.4.2抓包工具的原理1.4.3抓包结果1.4.4协议格式总结 1.5HTTP 请求 (Request)1.5.1认识 URL1.5.1.1URL 基本格式1.5.1.2关于 URL e…

二次元检测设备导轨修复指南

二次元检测设备是一种高精度的测量仪器,用于检测物体表面的形状、尺寸和精度等。直线导轨是二次元检测设备中最重要的组成部分之一,它的精度和稳定性直接影响到设备的测量结果和可靠性,因此,对导轨进行修复和保养是非常重要的。 直…

网站实现验证码功能

一、验证码 一般来说&#xff0c;网站在登录的时候会生成一个验证码来验证是否是人类还是爬虫&#xff0c;还有一个好处是防止恶意人士对密码进行爆破。 二、流程图 三、详细说明 3.1 后端生成验证码 Override public Result<Map<String, String>> getVerifica…

Linux安装nginx超完整步骤

1、到官网&#xff08;http://nginx.org&#xff09;下载nginx包,推荐使用稳定版本 2、上传nginx到linux系统&#xff0c;我上传的默认路径在/usr/local/下 3、安装依赖环境&#xff1a; ①安装gcc环境 yum install gcc-c ②安装PCRE库&#xff0c;用于解析正则表达式 yum…

MinkowskiEngine安装

pip install torch ninjagit clone https://github.com/NVIDIA/MinkowskiEngine.git cd MinkowskiEngine安装之前先把并行安装的thread数降低&#xff0c;否则会导致进程卡死。 打开setup.py文件内位于142行的MAX_COMPILATION_THREADS变量值从12改成4。 export CXXg-7 python…

深入理解Zookeeper系列-1.初识Zoookeeper

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理&#x1f525;如果感觉博主的文章还不错的话&#xff…