K8S部署GitLab

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

文章目录

  • 一、概述
  • 二、持久化存储安装
    • 1. 安装ebs
    • 2. 查看ebs集群服务
    • 3. 设置ebs为默认
  • 三、创建命名空间
  • 四、账号密码
  • 五、创建文件夹
  • 六、Postgresql部署
    • 1. 持久化配置
      • 1.1 文件创建
      • 1.2 部署命令
      • 1.3 查看服务
    • 2. 部署配置
      • 2.1 文件创建
      • 2.2 部署命令
      • 2.3查看服务
    • 3. 服务配置
      • 3.1 文件创建
      • 3.2 部署命令
      • 3.3 查看服务
  • 七、Redis部署
    • 1. 持久化配置
      • 1.1 文件创建
      • 1.2 部署命令
      • 1.3 查看服务
    • 2. 部署配置
      • 2.1 文件创建
      • 2.2 部署命令
      • 2.3 查看服务
    • 3. 服务配置
      • 3.1 文件创建
      • 3.2 部署命令
      • 3.3 查看服务
  • 八、GitLab部署
    • 1. 持久化配置
      • 1.1 文件创建
      • 1.2 部署命令
      • 1.3 查看服务
    • 2. 部署配置
      • 2.1 文件创建
      • 2.2 部署命令
      • 2.3 查看服务
    • 3. 服务配置
      • 3.1 文件创建
      • 3.2 部署命令
      • 3.3 查看服务
  • 九、访问GitLab


一、概述

在k8s中部署gitlab,然后使用gitlab来实现代码打包到打镜像再到使用镜像自动生成容器服务的过程
gitlab部署主要有三个部分,用到了reids、postgresql、gitlab,将三个应用配置好之后启动即可安装gitlab


二、持久化存储安装

安装持久化存储工具,可以使用nfs或ebs
安装后在配置持久化时可根据安装的持久化工具将storageClassName参数的值填充:
如果安装的是nfs则可以是
storageClassName: “managed-nfs-storage”
如果安装的是ebs则可以是
storageClassName: openebs-hostpath

以ebs为例

1. 安装ebs

kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml

在这里插入图片描述

2. 查看ebs集群服务

查看集群的StorageClass

kubectl get sc

在这里插入图片描述

3. 设置ebs为默认

设置openobs-hostpath为default

kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

在这里插入图片描述


三、创建命名空间

在部署之前先创建一个namespace用于分类管理服务
创建一个名为gitlab-dev的命名空间

kubectl create namespace gitlab-dev

四、账号密码

分别创建存储账号和密码的文件
账号文件username,用于存储账号信息

echo -n "gitlab-admin" > ./username

密码文件password,用于存储密码信息

echo -n "gitlab.123" > ./password

查看文件

ls

查看文件内容

cat ./username
cat ./password

在这里插入图片描述

secret对象生成

kubectl create secret generic git-user-pass --from-file=./username --from-file=./password -n gitlab-dev

在这里插入图片描述

查看secret

kubectl -n gitlab-dev get secret git-user-pass -o yaml

在这里插入图片描述
拓展:
如果创建错误或者想重新创建secret,则需先删除

kubectl delete secret git-user-pass -n gitlab-dev

五、创建文件夹

创建gitlab-yaml文件夹用于存储gitlab相关的yaml部署文件

mkdir -p gitlab-yaml

在这里插入图片描述


六、Postgresql部署

为了方便管理以及后续修改更新文件,本篇对每个结构部分都创建一个yaml文件,且创建的文件都放在当前目录下的gitlab-yaml文件夹下,后续redis和gitlab的部分与此相同

参数:
pgs:Postgresql
dplm:Deployment
pvc:PersistentVolumeClaim
svc:Service

1. 持久化配置

pgs-pvc.yaml

1.1 文件创建

创建文件pgs-pvc.yaml

vim ./gitlab-yaml/pgs-pvc.yaml

将以下内容复制粘贴到文件中,其中name可自定义,namespace前面创建了gitlab-dev

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pgs-pvc
  namespace: gitlab-dev
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: openebs-hostpath
  resources:
    requests:
      storage: 1Gi

查看文件内容

cat ./gitlab-yaml/pgs-pvc.yaml

在这里插入图片描述

1.2 部署命令

根据文件来部署服务

kubectl apply -f ./gitlab-yaml/pgs-pvc.yaml

在这里插入图片描述

1.3 查看服务

查看创建的服务

kubectl get pvc -n gitlab-dev pgs-pvc

在这里插入图片描述
注:如需删除创建的服务请参考:kubectl操作命令集合

2. 部署配置

pgs-dplm.yaml

2.1 文件创建

创建文件pgs-dplm.yaml

vim ./gitlab-yaml/pgs-dplm.yaml

注:公有镜像可省略版本号,默认拉取最新版本。私有镜像必须加版本号,不然部署不成功,Pod状态显示Pending
将以下内容复制粘贴到文件中

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgresql
  namespace: gitlab-dev
  labels:
    name: postgresql
spec:
  replicas: 1
  selector:
    matchLabels:
      name: postgresql
  template:
    metadata:
      name: postgresql
      labels:
        name: postgresql
    spec:
      #nodeSelector:
        #key: gitlab-dev
      containers:
        - name: postgresql
          image: sameersbn/postgresql
          imagePullPolicy: IfNotPresent
          env:
            - name: DB_USER
              value: gitlab
            - name: DB_PASS
              value: passw0rd
            - name: DB_NAME
              value: gitlab_production
            - name: DB_EXTENSION
              value: pg_trgm
          ports:
            - name: postgres
              containerPort: 5432
          volumeMounts:
            - mountPath: /var/lib/postgresql
              name: data
          livenessProbe:
            exec:
              command:
                - pg_isready
                - -h
                - localhost
                - -U
                - postgres
            initialDelaySeconds: 30
            timeoutSeconds: 5
          readinessProbe:
            exec:
              command:
                - pg_isready
                - -h
                - localhost
                - -U
                - postgres
            initialDelaySeconds: 5
            timeoutSeconds: 1
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: pgs-pvc

注:nodeSelector的key的值就是namespace,最后的claimName的值是持久化配置文件的名称pgs-pvc
查看文件内容

cat ./gitlab-yaml/pgs-dplm.yaml

在这里插入图片描述

2.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/pgs-dplm.yaml

在这里插入图片描述

2.3查看服务

查看已创建的服务

kubectl get pod -n gitlab-dev

在这里插入图片描述
注:pod启动需要一点时间,开始状态为ContainerCreating,过一会才会显示Running

3. 服务配置

pgs-svc.yaml

3.1 文件创建

创建文件pgs-svc.yaml

vim ./gitlab-yaml/pgs-svc.yaml

将以下内容复制粘贴到文件中

apiVersion: v1
kind: Service
metadata:
  name: postgresql
  namespace: gitlab-dev
  labels:
    name: postgresql
spec:
  ports:
    - name: postgres
      port: 5432
      targetPort: postgres
  selector:
    name: postgresql

查看文件内容

cat ./gitlab-yaml/pgs-svc.yaml

在这里插入图片描述

3.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/pgs-svc.yaml

在这里插入图片描述

3.3 查看服务

查看已部署的服务

kubectl get svc -n gitlab-dev

在这里插入图片描述

七、Redis部署

数据缓存redis

1. 持久化配置

redis-pvc.yaml

1.1 文件创建

创建文件redis-pvc.yaml

vim ./gitlab-yaml/redis-pvc.yaml

将以下内容复制粘贴到文件中

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis-pvc
  namespace: gitlab-dev
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: openebs-hostpath
  resources:
    requests:
      storage: 1Gi

查看文件内容

cat ./gitlab-yaml/redis-pvc.yaml

在这里插入图片描述

1.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/redis-pvc.yaml

在这里插入图片描述

1.3 查看服务

查看已部署的服务

kubectl get pvc -n gitlab-dev redis-pvc

在这里插入图片描述

2. 部署配置

redis-dplm.yaml

2.1 文件创建

创建redis-dplm.yaml文件

vim ./gitlab-yaml/redis-dplm.yaml

注:公有镜像可省略版本号,默认拉取最新版本。私有镜像必须加版本号,不然部署不成功,Pod状态显示Pending
将以下内容复制粘贴到文件中

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: gitlab-dev
  labels:
    name: redis
spec:
  replicas: 2
  selector:
    matchLabels:
      name: redis
  template:
    metadata:
      name: redis
      labels:
        name: redis
    spec:
      #nodeSelector:
        #key: gitlab-dev
      containers:
        - name: redis
          image: sameersbn/redis
          imagePullPolicy: IfNotPresent
          ports:
            - name: redis
              containerPort: 6379
          volumeMounts:
            - mountPath: /var/lib/redis
              name: data
          livenessProbe:
            exec:
              command:
                - redis-cli
                - ping
            initialDelaySeconds: 30
            timeoutSeconds: 5
          readinessProbe:
            exec:
              command:
                - redis-cli
                - ping
            initialDelaySeconds: 5
            timeoutSeconds: 1
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: redis-pvc

查看文件内容

cat ./gitlab-yaml/redis-dplm.yaml

在这里插入图片描述

2.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/redis-dplm.yaml

在这里插入图片描述

2.3 查看服务

查看已部署的服务

kubectl get pod -n gitlab-dev

在这里插入图片描述

因为文件中配置的副本数为2,故生成了两个redis的pod

3. 服务配置

redis-svc.yaml

3.1 文件创建

创建文件redis-svc.yaml

vim ./gitlab-yaml/redis-svc.yaml

讲一下内容复制粘贴进文件中

apiVersion: v1
kind: Service
metadata:
  name: redis-svc
  namespace: gitlab-dev
  labels:
    name: redis-svc
spec:
  ports:
    - name: redis
      port: 6379
      targetPort: redis
  selector:
    name: redis

查看文件内容

cat ./gitlab-yaml/redis-svc.yaml

在这里插入图片描述

3.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/redis-svc.yaml

在这里插入图片描述

3.3 查看服务

查看已部署的服务

kubectl get svc -n gitlab-dev redis-svc

在这里插入图片描述

八、GitLab部署

gitlab

1. 持久化配置

gitlab-pvc.yaml

1.1 文件创建

创建文件gitlab-pvc.yaml

vim ./gitlab-yaml/gitlab-pvc.yaml

将以下内容复制粘贴到文件中

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: gitlab-pvc
  namespace: gitlab-dev
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: openebs-hostpath
  resources:
    requests:
      storage: 5Gi

查看文件内容

cat ./gitlab-yaml/gitlab-pvc.yaml

在这里插入图片描述

1.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/gitlab-pvc.yaml

在这里插入图片描述

1.3 查看服务

查看已部署的服务

kubectl get pvc -n gitlab-dev gitlab-pvc

在这里插入图片描述

2. 部署配置

gitlab-dplm.yaml

2.1 文件创建

创建文件gitlab-dplm.yaml

vim ./gitlab-yaml/gitlab-dplm.yaml

注:公有镜像可省略版本号,默认拉取最新版本。私有镜像必须加版本号,不然部署不成功,Pod状态显示Pending
讲一下内容复制粘贴到文件中

apiVersion: apps/v1
kind: Deployment
metadata:
  name: gitlab
  namespace: gitlab-dev
  labels:
    name: gitlab
spec:
  replicas: 1
  selector:
    matchLabels:
      name: gitlab
  template:
    metadata:
      name: gitlab
      labels:
        name: gitlab
    spec:
      #nodeSelector:
        #key: gitlab-dev
      containers:
        - name: gitlab
          image: sameersbn/gitlab
          imagePullPolicy: IfNotPresent
          env:
            - name: TZ
              value: Asia/Shanghai
            - name: GITLAB_TIMEZONE
              value: Beijing
            - name: GITLAB_SECRETS_DB_KEY_BASE
              value: long-and-random-alpha-numeric-string
            - name: GITLAB_SECRETS_SECRET_KEY_BASE
              value: long-and-random-alpha-numeric-string
            - name: GITLAB_SECRETS_OTP_KEY_BASE
              value: long-and-random-alpha-numeric-string
            - name: GITLAB_ROOT_PASSWORD
              #value: admin321
              valueFrom:
                secretKeyRef:
                  name: git-user-pass
                  key: password
            - name: GITLAB_ROOT_EMAIL
              value: hslb@163.com
            - name: GITLAB_HOST
              value: gitlab.hslb.com
            - name: GITLAB_PORT
              value: "30021"
            - name: GITLAB_SSH_PORT
              value: "30022"
            - name: GITLAB_NOTIFY_ON_BROKEN_BUILDS
              value: "true"
            - name: GITLAB_NOTIFY_PUSHER
              value: "false"
            - name: GITLAB_BACKUP_SCHEDULE
              value: daily
            - name: GITLAB_BACKUP_TIME
              value: 01:00
            - name: DB_TYPE
              value: postgres
            - name: DB_HOST
              value: postgresql
            - name: DB_PORT
              value: "5432"
            - name: DB_USER
              value: gitlab
            - name: DB_PASS
              value: passw0rd
            - name: DB_NAME
              value: gitlab_production
            - name: REDIS_HOST
              value: redis
            - name: REDIS_PORT
              value: "6379"
          ports:
            - name: http
              containerPort: 80
            - name: ssh
              containerPort: 22
          volumeMounts:
            - mountPath: /home/git/data
              name: data
          livenessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 180
            timeoutSeconds: 5
          readinessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 5
            timeoutSeconds: 1
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: gitlab-pvc

GITLAB_ROOT_PASSWORD 密码部分,可以直接将值设为密码,这里从第二章中设置的密码文件中读取
GITLAB_ROOT_EMAIL 邮箱部分,自定义即可
GITLAB_HOST 主机地址,可自定义

查看文件内容

cat ./gitlab-yaml/gitlab-dplm.yaml

在这里插入图片描述

2.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/gitlab-dplm.yaml

在这里插入图片描述

2.3 查看服务

查看已部署的服务

kubectl get pod -n gitlab-dev

在这里插入图片描述

3. 服务配置

gitlab-svc.yaml

3.1 文件创建

创建文件gitlab-svc.yaml

vim ./gitlab-yaml/gitlab-svc.yaml

将以下内容复制粘贴到文件中

apiVersion: v1
kind: Service
metadata:
  name: gitlab
  namespace: gitlab-dev
  labels:
    name: gitlab
spec:
  ports:
    - name: http
      port: 80
      targetPort: http
      nodePort: 30021
    - name: ssh
      port: 22
      targetPort: ssh
      nodePort: 30022
  selector:
    name: gitlab
  type: NodePort

查看文件内容

cat ./gitlab-yaml/gitlab-svc.yaml

在这里插入图片描述

3.2 部署命令

部署服务

kubectl apply -f ./gitlab-yaml/gitlab-svc.yaml

在这里插入图片描述

3.3 查看服务

查看已部署的服务

kubectl get svc -n gitlab-dev

在这里插入图片描述

以上就是redis、postgresql、gitlab三个部分的部署,如果出现问题需要删除创建的服务,可参考以下命令
部署pvc

kubectl apply -f ./gitlab-yaml/pgs-pvc.yaml
kubectl apply -f ./gitlab-yaml/redis-pvc.yaml
kubectl apply -f ./gitlab-yaml/gitlab-pvc.yaml

查看pvc

kubectl get pvc -n gitlab-dev

删除指定pvc

kubectl delete pvc pgs-pvc -n gitlab-dev

删除全部pvc (bukeyong)

kubectl delete pvc -n gitlab-dev

部署pod

kubectl apply -f ./gitlab-yaml/pgs-dplm.yaml
kubectl apply -f ./gitlab-yaml/redis-dplm.yaml
kubectl apply -f ./gitlab-yaml/gitlab-dplm.yaml

查看pod

kubectl get pod -n gitlab-dev

删除无副本设置的pod

kubectl delete pod postgresql -n gitlab-dev

删除设置副本的pod

kubectl delete deployment postgresql -n gitlab-dev

部署svc

kubectl apply -f ./gitlab-yaml/pgs-svc.yaml
kubectl apply -f ./gitlab-yaml/redis-svc.yaml
kubectl apply -f ./gitlab-yaml/gitlab-svc.yaml

查看svc

kubectl get svc -n gitlab-dev

删除指定svc

kubectl delete svc postgresql -n gitlab-dev

删除全部svc

kubectl delete svc -n gitlab-dev

注:此注释可无视,由于操作是在阿里云服务器的运维管理浏览器窗口操作,复制粘贴功能有瑕疵导致内容格式会错乱,故安装了ossutil工具,在本地创建了文件后上传到oss然后再拉取到服务器指定位置(gitlab-yaml文件夹),如有需要可参考linux服务器中oss工具安装和上传下载文件


九、访问GitLab

待定。。。。


感谢阅读,祝君暴富!

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

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

相关文章

【数据结构】二叉树链式结构详解

目录 1.前言2.快速创建一颗二叉树3.二叉树的遍历3.1前序遍历3.2中序遍历3.3后序遍历3.4层序遍历 4.二叉树节点个数与高度4.1二叉树节点个数4.2二叉树叶子节点个数4.3二叉树高度4.4二叉树第k层节点个数4.5二叉树查找值为x的节点 5.二叉树的基础oj题练习6.二叉树的创建和销毁6.1通…

【⭐AI工具⭐】AI工具导航推荐

目录 零 工具导航👉【[AI工具集导航](https://ai-bot.cn/)】👈👉【[iForAI](https://iforai.com/)】👈👉【[AInav](https://www.ainav.cn/)】👈👉【[Navi AI 导航](https://www.naviai.cn/)】&a…

PhpPythonC++圆类的实现(OOP)

哎......被投诉了 😭😭😭😭😭 其实也不是小编不更,这不是期末了吗(zhaojiekou~~),而且最近学的信息收集和ctf感觉好像没找到啥能更的(不过最经还是在考虑更一…

Flink CDC使用

Flink 环境准备 Flink 版本对应的CDC版本 两个jar包上传到flink bin目录下 flink-sql-connector-mysql-cdc mysql-connector-java 重启Flink集群

体系结构汇总复习(练习题)

1.MSI cache一致性协议问题 题解引用自:MSI cache一致性协议_假设在一个双cpu多处理器系统中,两个cpu用单总线连接,并且采用监听一致性协议(msi-CSDN博客 答: 事件A状态B状态初始状态IICPU A读SICPU A写MICPU B写IMCPU A读SS 接下来分析CPU A/B中各自c…

【Verilog】运算符

系列文章 数值(整数,实数,字符串)与数据类型(wire、reg、mem、parameter) 系列文章算术运算符关系运算符相等关系运算符逻辑运算符按位运算符归约运算符移位运算符条件运算符连接和复制运算符 算术运算符 …

React 入门 - 05(响应式与事件绑定)

本章内容 目录 一、响应式设计思想二、React 中的事件绑定 继上一节我们简单实现一个 TodoList来更加了解编写组件的一些细节。本节继续这个案例功能的完成。 一、响应式设计思想 1、在原生的 JS中,如果要实现点击”提交“按钮就将输入框的内容添加至页面列表中&…

【OpenVINO】 使用 OpenVINO CSharp API 部署 PaddleOCR 项目介绍

前言: 在之前的项目中,我们已经使用 OpenVINO TM CSharp API 部署 PaddleOCR 全系列模型,但随着PaddleOCRv4版本发布以及OpenVINO CSharp API版本迭代,上一版本的项目已经不再适用。因此在推出的最新项目中,已经完成了…

6款实用的Git可视化管理工具

前言 俗话说得好“工欲善其事,必先利其器”,合理的选择和使用可视化的管理工具可以降低技术入门和使用门槛。我们在团队开发中统一某个开发工具能够降低沟通成本,提高协作效率。今天给大家分享6款实用的Git可视化管理工具。 Git是什么&…

QT基础篇(1)QT概述

1.什么是QT QT是一个跨平台的C应用程序开发框架。它提供了一套丰富的图形用户界面(GUI)和多媒体功能,可以用于开发各种类型的应用程序,包括桌面应用程序、移动应用程序和嵌入式系统。QT具有易于使用、可定制性强、性能高等特点&a…

DelayQueue原理探究

DelayQueue并发队列是一个无界阻塞延迟队列,队列中的每个元素都有个过期时间,当从队列获取元素时,只有过期元素才会出队列。队列头元素是最快要过期的元素。 DelayQueue类图结构 由该图可知,DelayQueue内部使用PriorityQueue存放…

doris部署

doris-2.0.1.1部署安装 一、下载doris安装包二、解压到/data下,修改名称三、修改fe配置文件四、启动doris-fe五、验证doris-fe六、修改be配置文件七、启动doris-be八、mysql中连接be,在Doris中添加后端节点九、设置密码 一、下载doris安装包 wget https…

腾讯云优惠券是什么?2024年如何领取优惠券?

腾讯云优惠券是腾讯云平台提供的一种优惠方式,用户可以通过领取并使用优惠券,享受一定的折扣优惠。这些优惠券适用于腾讯云的各类产品,包括云服务器、数据库、CDN等,帮助用户降低购买成本,提高使用体验。 在2024年&…

软件测试|Django 入门:构建Python Web应用的全面指南

引言 Django 是一个强大的Python Web框架,它以快速开发和高度可扩展性而闻名。本文将带您深入了解Django的基本概念和核心功能,帮助您从零开始构建一个简单的Web应用。 什么是Django? Django 是一个基于MVC(模型-视图-控制器&a…

11.11上课笔记

1.字符串 1.字符串是基本数据类型: "字符串" 字符串字符串str(字符串) #创建或者转换其他类型的字符串 a.获取长度:len(字符串) b.字符串是一个有序的数列(sequence),也是一个可迭…

Edge浏览器停止更新方法之一(一分钟版)

一分钟时间停止器 开整原理效果步骤 结尾 开整 原理 通过限制window管理员的权限,禁止了更新程序的写入和读取,自然就更新不了了 效果 步骤 对着Edge浏览器图标右键,点击“打开文件所在位置” 到这级目录,然后往回退两级找到…

二进制部署

HOST HostnameIP地址flannedAPPmaster192.169.116.10ETCD\APIserver\Scheduler\Controller-Managernode1192.168.116.11172.17.28.0ETCD,Flanned,Kubelet,kube-proxynode2192.168.116.12172.17.26.0ETCD,Flanned,Kubelet,kube-proxy Kubernetes社区 Kubernetes文档 ETCD mas…

最新ThinkPHP版本实现证书查询系统,实现批量数据导入,自动生成电子证书

前提:朋友弄了一个培训机构,培训考试合格后,给发证书,需要一个证书查询系统。委托我给弄一个,花了几个晚上给写的证书查询系统。 实现功能: 前端按照姓名手机号码进行证书查询证书信息展示证书展示&#x…

云仓酒庄的品牌雷盛红酒LEESON分享什么是“小农香槟”?

云仓酒庄的品牌雷盛红酒LEESON分享说起香槟,第一时间会想到法国,因为只有法国的起泡酒才能叫“香槟”。那么,什么又是“小农香槟”呢? 小农香槟是相对大厂香槟而命名的,是指葡萄果农自产、自酿、自销的香槟&#xff0…

【AI】AI和点云(1/2)

目录 一、什么是点云 二、点云的应用领域 三、点云的创建 四、点云感知 一、什么是点云 在三维技术领域中,点云被定义为一种数据结构,用于表示三维空间中一组离散的点。这些点通常由它们的坐标(x,y,z)…