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-pvcnamespace: gitlab-dev
spec:accessModes:- ReadWriteOncestorageClassName: openebs-hostpathresources: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: postgresqlnamespace: gitlab-devlabels:name: postgresql
spec:replicas: 1selector:matchLabels:name: postgresqltemplate:metadata:name: postgresqllabels:name: postgresqlspec:#nodeSelector:#key: gitlab-devcontainers:- name: postgresqlimage: sameersbn/postgresqlimagePullPolicy: IfNotPresentenv:- name: DB_USERvalue: gitlab- name: DB_PASSvalue: passw0rd- name: DB_NAMEvalue: gitlab_production- name: DB_EXTENSIONvalue: pg_trgmports:- name: postgrescontainerPort: 5432volumeMounts:- mountPath: /var/lib/postgresqlname: datalivenessProbe:exec:command:- pg_isready- -h- localhost- -U- postgresinitialDelaySeconds: 30timeoutSeconds: 5readinessProbe:exec:command:- pg_isready- -h- localhost- -U- postgresinitialDelaySeconds: 5timeoutSeconds: 1volumes:- name: datapersistentVolumeClaim: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: postgresqlnamespace: gitlab-devlabels:name: postgresql
spec:ports:- name: postgresport: 5432targetPort: postgresselector: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-pvcnamespace: gitlab-dev
spec:accessModes:- ReadWriteOncestorageClassName: openebs-hostpathresources: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: redisnamespace: gitlab-devlabels:name: redis
spec:replicas: 2selector:matchLabels:name: redistemplate:metadata:name: redislabels:name: redisspec:#nodeSelector:#key: gitlab-devcontainers:- name: redisimage: sameersbn/redisimagePullPolicy: IfNotPresentports:- name: rediscontainerPort: 6379volumeMounts:- mountPath: /var/lib/redisname: datalivenessProbe:exec:command:- redis-cli- pinginitialDelaySeconds: 30timeoutSeconds: 5readinessProbe:exec:command:- redis-cli- pinginitialDelaySeconds: 5timeoutSeconds: 1volumes:- name: datapersistentVolumeClaim: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-svcnamespace: gitlab-devlabels:name: redis-svc
spec:ports:- name: redisport: 6379targetPort: redisselector: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-pvcnamespace: gitlab-dev
spec:accessModes:- ReadWriteOncestorageClassName: openebs-hostpathresources: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: gitlabnamespace: gitlab-devlabels:name: gitlab
spec:replicas: 1selector:matchLabels:name: gitlabtemplate:metadata:name: gitlablabels:name: gitlabspec:#nodeSelector:#key: gitlab-devcontainers:- name: gitlabimage: sameersbn/gitlabimagePullPolicy: IfNotPresentenv:- name: TZvalue: Asia/Shanghai- name: GITLAB_TIMEZONEvalue: Beijing- name: GITLAB_SECRETS_DB_KEY_BASEvalue: long-and-random-alpha-numeric-string- name: GITLAB_SECRETS_SECRET_KEY_BASEvalue: long-and-random-alpha-numeric-string- name: GITLAB_SECRETS_OTP_KEY_BASEvalue: long-and-random-alpha-numeric-string- name: GITLAB_ROOT_PASSWORD#value: admin321valueFrom:secretKeyRef:name: git-user-passkey: password- name: GITLAB_ROOT_EMAILvalue: hslb@163.com- name: GITLAB_HOSTvalue: gitlab.hslb.com- name: GITLAB_PORTvalue: "30021"- name: GITLAB_SSH_PORTvalue: "30022"- name: GITLAB_NOTIFY_ON_BROKEN_BUILDSvalue: "true"- name: GITLAB_NOTIFY_PUSHERvalue: "false"- name: GITLAB_BACKUP_SCHEDULEvalue: daily- name: GITLAB_BACKUP_TIMEvalue: 01:00- name: DB_TYPEvalue: postgres- name: DB_HOSTvalue: postgresql- name: DB_PORTvalue: "5432"- name: DB_USERvalue: gitlab- name: DB_PASSvalue: passw0rd- name: DB_NAMEvalue: gitlab_production- name: REDIS_HOSTvalue: redis- name: REDIS_PORTvalue: "6379"ports:- name: httpcontainerPort: 80- name: sshcontainerPort: 22volumeMounts:- mountPath: /home/git/dataname: datalivenessProbe:httpGet:path: /port: 80initialDelaySeconds: 180timeoutSeconds: 5readinessProbe:httpGet:path: /port: 80initialDelaySeconds: 5timeoutSeconds: 1volumes:- name: datapersistentVolumeClaim: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: gitlabnamespace: gitlab-devlabels:name: gitlab
spec:ports:- name: httpport: 80targetPort: httpnodePort: 30021- name: sshport: 22targetPort: sshnodePort: 30022selector:name: gitlabtype: 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

关于yaml文件中image参数的写法格式
https://blog.csdn.net/m0_46629123/article/details/124144654
官网的image可以省略tag
但是私有的image必须带上tag


感谢阅读,祝君暴富!

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

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

相关文章

SpringBoot 如何 返回页面

背景 RestController ResponseBody Controller Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。 Mapping ResponseBody 也会出现同样的问题。 解…

明明白白安装Python解释器(多版本共存切换)、Python IDE:PyCharm(专业版永久)、透彻!

Python解释器安装 ———————— 解释器(英语:Interpreter)。用户可以到Python的官网上直接下载Python解释器安装程序。 在浏览器地址栏中输入: http://www.python.org 需要最新专业版PyCharm永久使用权限的扫码免费获取&a…

基于FFmpeg的短视频编辑工具Cut

前言 最近在学习FFmpeg和音视频的相关知识,为了加强对FFmpeg的认识和了解,于是撸了一个短视频编辑软件Cut。 效果图先行: 技术点 启动页优化 但启动app的时候会有一个短暂的黑屏或者白屏。为什么呢? 是因为在App启动时&#x…

智能分析网关V4在工业园区周界防范场景中的应用

一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,对…

分布式系统——共识问题

1. 分布式系统 1.1 分布式系统的概念 分布式系统是由多台计算机组成的网络,这些计算机共同协作以实现一个共同的目标。在这种环境中,每台计算机作为一个独立的进程运行。但对最终用户来说,它们似乎是作为一个单一系统在操作。这个概念对于创…

大学生搜题软件,未来可期吗?

作为一家专注于软件开发的公司《智创有术》,我们致力于为客户提供创新、高效和可靠的解决方案。通过多年的经验和专业知识,我们已经在行业内建立了良好的声誉,并赢得了客户的信任和支持。 支持各种源码,网站搭建,APP&a…

数字孪生在增强现实(AR)中的应用

数字孪生在增强现实(Augmented Reality,AR)中的应用可以提供更丰富、交互性更强的现实世界增强体验。以下是数字孪生在AR中的一些应用,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司&#xff…

视频剪辑实战:如何批量嵌套合并视频,提高剪辑效率必备技巧

在视频剪辑工作中,经常要处理大量的视频片段。要提高工作效率,批量嵌套合并视频成为了一项必备技巧。现在一起看看云炫AI智剪如何使用一些实用的技巧,快速、准确地完成批量嵌套合并视频的任务。 合并后的视频截图,由两段不同片段组…

【STM32】STM32学习笔记-DMA直接存储器存储(23)

00. 目录 文章目录 00. 目录01. DMA简介02. DMA主要特性03. 存储器映像04. DMA框图05. DMA基本结构06. DMA请求07. 数据宽度与对齐08. 数据转运DMA09. ADC扫描模式DMA10. 附录 01. DMA简介 小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xx、STM32F102xx和STM32F…

解决Gitlab Prometheus导致的磁盘空间不足问题

解决Gitlab Prometheus导致的磁盘空间不足问题 用docker搭建了一个gitlab服务,已经建立了多个项目上传,但是突然有一天就503了。 df -TH查看系统盘,发现已经Used 100%爆满了。。。 💡Tips:/dev/vda1目录是系统盘目录。…

AntV L7 实现地图功能(高德)

一、 使用前的准备 首先,注册开发者账号,成为高德开放平台开发者 登陆之后,在进入「应用管理」 页面「创建新应用」 为应用添加 Key,「服务平台」一项请选择「 Web 端 ( JSAPI ) 」 二、安装依赖 // 安装L7 依赖 npm install…

2024年【危险化学品生产单位主要负责人】复审模拟考试及危险化学品生产单位主要负责人作业模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 2024年危险化学品生产单位主要负责人复审模拟考试为正在备考危险化学品生产单位主要负责人操作证的学员准备的理论考试专题,每个月更新的危险化学品生产单位主要负责人作业模拟考试祝您顺利通过危险化学品…

深度学习 Day23——J3DenseNet算法实战与解析

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制🚀 文章来源:K同学的学习圈子 文章目录 前言1 我的环境2 pytorch实现DenseNet算法2.1 前期准备2.1.1 引入库2.1.2 设…

flutter 使用adb 同时连接 多个模拟器

MUMU模拟器 MuMu模拟器官网_安卓12模拟器_网易手游模拟器 传统只需要 连接一个 默认命令是 默认端口是7555 adb connect 127.0.0.1:7555 但是需要同时连接调试多个模拟器的时候 就需要连接多个 这里可以使用自带的多开 多开后 使用 1 是对应多开的序号 这样就可以查看对…

我是谁 whoami

文章目录 我是谁 whoami更多信息 我是谁 whoami 我知道你是谁,但我不知道我是谁,此时whoami可以帮助你,哈哈。 whoami将打印当前用户的名字。与id -un类似。 官方定义为: whoami - print effective userid 用法为: …

Redis基础学习一

1. Redis 入门 1.1. Redis 诞生历程 1.1.1.从一个故事开始 08 年的时候有一个意大利西西里岛的小伙子,笔名 antirez(http://invece.org/),创建了一个访客信息网站 LLOOGG.COM。有的时候我们需要知道网站的访问情况,…

高级数据结构:并查集

文章目录 1.什么是并查集:2、并查集的基本结构3.现实问题和代码实现链接4.代码实现 1.什么是并查集: 对于一个集合S{a1,a2,……an-1,an},这是可以对集合S进一步划分:S1,S2,……,Sm-1&#xff0…

阿里云迁移AWS视频点播技术攻坚

文章目录 🐷 背景🦥 简述🐥 Aws服务🦜 AWS CloudFormation🐞 问题🐉 落地方案🦉 Aws vs Aliyun🍄 避坑指南 🐷 背景 由于AWS整体成本略低于阿里云,公司决定将…

R 批量对多个变量进行单因素方差分析 批量计算均值±标准差

多个变量批量进行单因素方差 R实现 文章目录 一、批量生成均值标准差 P值二、添加协变量单因素方差分析,生成校正P值三、在分层情况下进行单因素方差分析四、添加协变量和交互项的单因素方差分析,生成交互项的P值 一、批量生成均值标准差 P值 数据结构如…

Android AAudio

文章目录 基本概念启用流程基本流程HAL层对接数据流计时模型调试 基本概念 AAudio 是 Android 8.0 版本中引入的一种音频 API。 AAudio 提供了一个低延迟数据路径。在 EXCLUSIVE 模式下,使用该功能可将客户端应用代码直接写入与 ALSA 驱动程序共享的内存映射缓冲区…