基于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.hqwc.cn/news/222929.html

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

相关文章

元宇宙vr线上展馆在线制作降低开发门槛和成本

让人人都拥有自己的元宇宙空间,说起来就是一个令人亢奋的消息,也是大家所期待的,VR元宇宙空间在线编辑平台是VRARAI元宇宙公司深圳华锐视点自主研发的平台,允许用户在虚拟环境中创建、设计和共享空间,操作简单&#xf…

关于el-table的二次封装及使用,支持自定义列内容

关于el-table的二次封装及使用 table组件 <template><el-table ref"tableComRef" :data"tableData" border style"width: 100%"><el-table-column v-if"tableHeaderList[0]?.type selection" type"selection&…

微信小程序体验版提交审核,提示接口未配置在app.json文件且无权限

在火狐浏览器 打开微信公众平台 发布小程序 弹窗一闪而过 是因为 放开这里就可以了

51单片机的智能窗帘系统【含proteus仿真+程序+报告+原理图】

1、主要功能 该系统由AT89C51单片机LCD1602显示模块DS18B20温度模块DS1302时间模块光敏传感器步进电机蓝牙等模块构成。适用于智能窗帘、智能门窗家具等相似项目。 可实现基本功能: 版本一&#xff1a; 1、LCD1602实时显示北京时间、环境温度、光照强度、手动/自动控制等信息…

pycharm安装PyQt5及其工具

PyCharm安装PyQt5及其工具&#xff08;Qt Designer、PyUIC、PyRcc&#xff09;详细教程_pycharm pyqt5-CSDN博客 上面是原文链接&#xff0c;根据原文链接&#xff0c;我重新记录一下。IDE&#xff1a;pycharm 2023.2.5 一共需要安装5个。 在PyCharm中如何完整优雅地安装配置…

Java EE 进程线程

JavaEE 进程&线程 文章目录 JavaEE 进程&线程1. 进程1.1 概念1.2 进程管理1.3 PCB (Process Control Block) 2. 线程2.1 概念2.1 线程与进程的区别2.3 创建线程 1. 进程 1.1 概念 什么是进程&#xff1f; 进程是操作系统对一个正在执行的程序的一种抽象 我们可以打开…

区块链介绍

区块链提供了比特币的公共账本&#xff0c;这是一个有序的、带有时间戳的交易记录。这个系统用于防止重复消费和修改之前的交易记录。 Introduction 比特币网络中的每个完全节点都独立存储只包含该节点验证的块的区块链。当多个节点在他们的区块链中都有相同的块时&#xff0…

蓝桥杯每日一题2023.11.27

题目描述 星系炸弹 - 蓝桥云课 (lanqiao.cn) 题目分析 对于此题目一一枚举即可 #include<bits/stdc.h> using namespace std; bool is_r(int n) {if((n % 4 0 && n % 100 ! 0)|| n % 400 0)return true;return false; } int mm[13] {0, 31, 28, 31, 30, 3…

微服务--01--简介、服务拆分原则

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 微服务微服务架构&#xff0c;是服务化思想指导下的一套最佳实践架构方案。服务化&#xff0c;就是把单体架构中的功能模块拆分为多个独立项目。 单体架构微服务架构…

java--单继承、Object

java是单继承的&#xff0c;java中的类不支持多继承&#xff0c;但是支持多层继承。 反证法&#xff1a; 如果一个类同时继承两个类&#xff0c;然后两个类中都有同样的一个方法&#xff0c;哪当我创建这个类里的方法&#xff0c;是调用哪父类的方法 所以java中的类不支持多继…

python实现数值积分

目录 1、求解问题 2、求解原理 3、python实现 1、求解问题 2、求解原理 高斯-勒让德数值积分是一种有效的数值积分方法&#xff0c;它结合了高斯点和勒让德函数来计算一维函数的积分。 高斯-勒让德求积公式在给定的积分区间[a, b]上&#xff0c;通过选择一些特定的点&#…

2023年最新Dev-C++下载安装以及C语言环境搭建教程(C语言入门)

文章目录 写在前面C语言简介Dev-C简介Dev-C下载安装Dev-C使用教程 写在后面 写在前面 2023年最新Dev-C下载安装以及C语言环境搭建教程&#xff0c;快来看看吧&#xff01; C语言简介 C语言是一种通用的高级程序设计语言&#xff0c;由美国计算机科学家Dennis Ritchie于20世纪…