基于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: true
  gitlabUrl: https://kube.bdeet.top  #修改gitlab的域名
  rbac:
    create: true
  runners:
    privileged: true #开启特权
    locked: false
    config: |
      [[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:latest

before_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: build
  script:
    - echo "Do your build here"

test1:
  stage: test
  script:
    - echo "Do a test here"
    - echo "For example run a test suite"
    - echo 1 > index.html
  artifacts:
    paths:
      - index.html

test2:
  stage: test
  script:
    - echo "Do another parallel test here"
    - echo "For example run a lint test"

deploy1:
  stage: deploy
  script:
    - 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功能验证

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

百度智能小程序系统源码+关键词排名优化 附带完整的搭建教程

百度智能小程序系统的开发背景是基于百度强大的技术实力和对用户需求的深入理解。在移动互联网时代,用户对便捷、高效、智能的服务需求越来越高。而小程序作为一种轻量级的应用程序,恰好能够满足用户的这些需求。然而,开发一个小程序需要掌握…

011 OpenCV warpAffine

目录 一、环境 二、warpAffine原理 三、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、warpAffine原理 warpAffine是OpenCV库中的一个函数,它用于执行二维仿射变换。这个函数接受一个输入图像和变换矩阵&…

波奇学C++:C++11的新特性

列表初始化 #include<iostream> using namespace std; struct A {int _x;int _y; }; int main() {// 三种方式等价&#xff0c;并且可以省略int x 1;int y { 2 };int z{ 3 };return 0; } {}按声明顺序初始化类成员变量 A p{ 1,2 }; cout << p._x; //1 cout &…

零基础可以学编程吗,不懂英语怎么学编程,中文编程工具实例

零基础可以学编程吗&#xff0c;不懂英语怎么学编程&#xff0c;中文编程工具实例 上图是中文编程工具界面、标尺实例。 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#x…

数据结构——堆的实现(详解)

呀哈喽&#xff0c;我是结衣。 堆的介绍 如果有一个关键码的集合K {k0,k1,k2,…,kn-1},把它的所有元素按照完全二叉树的顺序储存方式储存在一个一维数组中&#xff0c;并满足&#xff1a;Ki<K2i1且ki<K2i2(Ki>K2i1且Ki>-K2i2)i 1,2,3…,则称为小堆&#xff08;或…

软著项目推荐 深度学习中文汉字识别

文章目录 0 前言1 数据集合2 网络构建3 模型训练4 模型性能评估5 文字预测6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习中文汉字识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xf…

【我的创作纪念日】

机缘 大家好&#xff0c;我是圥忈ゼ&#xff0c; 2023 年 07 月 20 日&#xff0c;我撰写了第 1 篇技术博客&#xff1a;《我的编程未来规划》&#xff0c;也是由于我高考后的专业选择&#xff0c;和就业方向的选择&#xff0c;加上想立志成为一名专业 IT 作者&#xff0c;我结…

第四节HarmonyOS 熟知开发工具DevEco Studio

一、设置主体样式 默认的代码主题样式是黑暗系的&#xff0c;如下图所示&#xff1a; 如果你不喜欢&#xff0c;可以按照一下步骤进行修改&#xff1a; 左上角点击Flie->Settings->Appearance&Behavior->Appearance&#xff0c;点击Theme&#xff0c;在弹出的下拉…

区块链介绍

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

异步爬虫提速实践-在Scrapy中使用Aiohttp/Trio

在构建爬虫系统时&#xff0c;提高爬虫速度是一个关键问题。而使用异步爬虫技术可以显著提升爬取效率。在本文中&#xff0c;我将与大家分享如何在Scrapy中利用Aiohttp或Trio库实现异步爬取&#xff0c;以加快爬虫的速度。让我们开始吧&#xff01; 1. 安装所需的库 首先&…

SpringCloud-高级篇(五)

一&#xff1a;分布式事务理论基础 原子性&#xff08;Atomicity&#xff09; 原子性是指事务是一个不可分割的工作单位&#xff0c;事务中的操作要么都发生&#xff0c;要么都不发生。 一致性&#xff08;Consistency&#xff09; 事务前后数据的完整性必须保持一致。 隔离性&…

【电路笔记】-电阻器颜色代码与阻值计算

电阻器颜色代码与阻值计算 文章目录 电阻器颜色代码与阻值计算1、概述2、计算电阻器颜色代码值3、贴片电阻器 电阻器颜色编码使用色带轻松识别电阻器的电阻值及其百分比容差。 1、概述 由于有许多不同类型的电阻器可用&#xff0c;我们需要形成电阻器颜色代码系统以便能够识别…

计算计能力挑战赛选择题真题(2020、2021、2022)

2020 1.关于联合体和结构体错误的是&#xff08;a) a.联合体union的存放顺序是所有成员都从高地址开始存放的(x) (ps:联合体union的存放顺序是所有成员都从低地址开始存放的) b.联合体中可以定义多个成员&#xff0c;联合体的大小由最大的成员的大小决定。 c.可以使用匿名…

Spring Boot配置文件 Spring日志文件相关的知识

在上文中&#xff0c;小编带领大家创建了一个Spring Boot项目&#xff0c;并且成功的执行了第一个SPring Boot项目&#xff08;在网页上运行hello world&#xff09; 那么&#xff0c;本文的主要作用便是带领大家走进&#xff1a;Spring Boot配置文件 && Spring日志文件…

C++:由哈希延伸出来的应用--位图和布隆过滤器

文章目录 位图的概念位图的实现布隆过滤器布隆过滤器的查找布隆过滤器的删除布隆过滤器的优点 布隆过滤器的实现 本篇实现的是位图和应用 位图的概念 下面有这样的场景&#xff1a;给定40亿个数&#xff0c;现在要找这当中的一个数&#xff0c;如何寻找&#xff1f; 遍历&am…

大数据平台/大数据技术与原理-实验报告--实战HDFS

实验名称 实战HDFS 实验性质 &#xff08;必修、选修&#xff09; 必修 实验类型&#xff08;验证、设计、创新、综合&#xff09; 综合 实验课时 2 实验日期 2023.10.23-2023.10.27 实验仪器设备以及实验软硬件要求 专业实验室&#xff08;配有centos7.5系统的linu…

智能优化算法应用:基于蝴蝶算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蝴蝶算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蝴蝶算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蝴蝶算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

05-学成在线课程分类查询

课程分类查询 界面原型 在新增课程基本信息界面中课程等级、课程类型、课程分类三处信息需要用户选择 当我们点击新增课程时,前端会请求内容管理服务中的content/course-category/tree-nodes接口获取课程分类表中的课程分类信息 响应数据模型 课程分类表course_category是一…

顺序表总结

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 目录 &#x1f324;️arraylist的简…

redis优化秒杀和消息队列

redis优化秒杀 1. 异步秒杀思路1.1 在redis存入库存和订单信息1.2 具体流程图 2. 实现2.1 总结 3. Redis的消息队列3.1 基于list实现消息队列3.2 基于PubSub实现消息队列3.3 基于stream实现消息队列3.3.1 stream的单消费模式3.3.2 stream的消费者组模式 3.4 基于stream消息队列…