497. 【kubernetes】使用-buildkit-构建镜像

文章详细介绍了如何在Linux系统中安装和设置Buildkit客户端和buildkitd服务,包括将可执行文件复制到/usr/bin目录,创建systemd服务文件,以及启动和验证buildkitd服务的过程。通过这些步骤,解决了使用nerdctl构建镜像时遇到的依赖问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、安装 buildkit 客户端

buildkit 可执行文件: 下载地址
解压:
tar -zxvf buildkit-v0.10.6.linux-amd64.tar.gz
复制到 /usr/bin

cp build/buildctl /usr/bin/

二、验证安装

buildkit -version

  • 可以看到已经安装成功了

三、安装buildkitd 服务

  1. 复制buildkitd/usr/bin
cp build/builkitd /usr/bin/
  1. 配置 systemd 服务
    创建 /usr/lib/systemd/system/buildkitd.service文件:
cat > /usr/lib/systemd/system/buildkitd.service <<EOF
[Unit]
Description=/usr/bin/buildkitd
ConditionPathExists=/usr/bin/buildkitd
After=containerd.service

[Service]
Type=simple
ExecStart=/usr/bin/buildkitd
User=root
Restart=on-failure
RestartSec=1500ms

[Install]
WantedBy=multi-user.target
EOF
  1. 开机自启动
systemctl daemon-reload && systemctl restart buildkitd && systemctl enable buildkitd

验证运行状态

systemctl status buildkitd

四、构建镜像

未运行 buildkitd 之前:会报下面的错误:

[root@k8s0 cbbpa-server-utils]#  nerdctl build -t test/testimage:0.0.1 .
ERRO[0000] `buildctl` needs to be installed and `buildkitd` needs to be running, see https://github.com/moby/buildkit  error="2 errors occurred:\n\t* failed to ping to host unix:///run/buildkit-default/buildkitd.sock: exit status 1\n\t* failed to ping to host unix:///run/buildkit/buildkitd.sock: exit status 1\n\n"
FATA[0000] no buildkit host is available, tried 2 candidates: 2 errors occurred:
        * failed to ping to host unix:///run/buildkit-default/buildkitd.sock: exit status 1
        * failed to ping to host unix:///run/buildkit/buildkitd.sock: exit status 1

运行 buildkitd 执行:就跑通了:

[root@k8s0 cbbpa-server-utils]#  systemctl start buildkitd
[root@k8s0 cbbpa-server-utils]#  nerdctl build -t test/testimage:0.0.1 .
[+] Building 3.6s (9/9) FINISHED                                                                                                                                 
 => [internal] load .dockerignore                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                             0.0s
 => [internal] load build definition from Dockerfile                                                                                                        0.0s
 => => transferring dockerfile: 256B                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/busybox:latest                                                                                           3.0s
 => [1/4] FROM docker.io/library/busybox@sha256:fcd85228d7a25feb59f101ac3a955d27c80df4ad824d65f5757a954831450185                                            0.0s
 => => resolve docker.io/library/busybox@sha256:fcd85228d7a25feb59f101ac3a955d27c80df4ad824d65f5757a954831450185                                            0.0s
 => [internal] load build context                                                                                                                           0.0s
 => => transferring context: 106B                                                                                                                           0.0s
 => CACHED [2/4] WORKDIR /root                                                                                                                              0.0s
 => CACHED [3/4] ADD cbbpa_server_utils.bin /root                                                                                                           0.0s
 => CACHED [4/4] RUN chmod -R 777 .                                                                                                                         0.0s
 => exporting to oci image format                                                                                                                           0.5s
 => => exporting layers                                                                                                                                     0.0s
 => => exporting manifest sha256:e2cc5478d2911b1ac660886ee53950997f89d05b3c5ffc6ca63653e0b64e0a58                                                           0.0s
 => => exporting config sha256:3585a98666945a396c21d259885b61a922ff46d8db5b33dc111b7a0701d26744                                                             0.0s
 => => sending tarball                                                                                                                                      0.4s
unpacking docker.io/test/testimage:0.0.1 (sha256:e2cc5478d2911b1ac660886ee53950997f89d05b3c5ffc6ca63653e0b64e0a58)...
Loaded image: docker.io/test/testimage:0.0.1[root@k8s0 cbbpa-server-utils]#  date
Mon Nov 21 10:26:59 CST 2022

镜像构建成功

### 实现阿里云云效流水线 RuoYi-SpringBoot 项目自动化部署 #### 准备工作 为了在阿里云云效流水线上实现RuoYi-SpringBoot项目的自动化部署,需先完成一些准备工作。确保已创建好阿里云账号并开通了云效服务;同时,在本地环境中准备好待部署的Spring Boot应用源码以及Dockerfile文件用于构建镜像[^1]。 #### 创建仓库与分支策略 将RuoYi-SpringBoot工程推送到GitLab或其他支持Webhook功能的版本控制系统中去,并设置合理的分支管理策略以便于后续触发CI/CD流程。对于主要开发工作的master/main分支建议开启保护模式防止误操作影响生产环境稳定性[^2]。 #### 构建自定义Maven命令 针对特定需求定制maven打包指令,比如指定JDK版本、跳过测试用例执行等参数优化编译效率。此部分可通过`.mvn/jvm.config` 和 `.mvn/mvn.config` 文件来配置全局变量或者通过pipeline脚本动态传递给maven插件使用[^3]。 ```bash # .mvn/jvm.config -Xms512m -Xmx1024m # .mvn/mvn.config -DskipTests=true clean package ``` #### 编写Pipeline YAML配置文件 编写适用于当前场景下的持续集成管道描述文档(通常是yaml格式),明确定义各个阶段的任务列表及其依赖关系。下面是一个简单的例子展示了如何利用官方提供的Java模板快速搭建起一套完整的CICD体系结构: ```yaml version: 1.0 stages: - compile - test - build_image - deploy jobs: maven_compile_job: stage: compile steps: - mvn clean install -Dmaven.test.skip=true unit_test_job: stage: test script: - mvn test docker_build_push_job: image: registry.cn-hangzhou.aliyuncs.com/cloudnative/docker:latest stage: build_image only: changes: - '**/*.java' services: - docker:dind before_script: - export DOCKER_BUILDKIT=1 script: - echo "$DOCKER_PASSWORD" | docker login --username="$DOCKER_USERNAME" --password-stdin $REGISTRY_URL - cd ./ruoyi-cloud/ - docker build -t ${IMAGE_NAME}:${CI_COMMIT_REF_SLUG} . - docker push ${IMAGE_NAME}:${CI_COMMIT_REF_SLUG} kubernetes_deploy_job: type: deploy environment: name: production url: http://${K8S_SERVICE_IP}/api/v1/namespaces/${NAMESPACE}/services/${SERVICE_NAME}:http/proxy/ when: manual dependencies: - docker_build_push_job script: - apk add curl - curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl - chmod +x ./kubectl - mv ./kubectl /usr/local/bin/ - mkdir -p ~/.kube - echo "${KUBECONFIG}" >~/.kube/config - kubectl apply -f deployment.yaml ``` 上述代码片段实现了从源码拉取到最终发布上线整个过程中涉及到的关键环节控制逻辑表达[^4]。 #### Kubernetes集群中的资源对象声明 最后一步是在目标Kubernetes集群内部署应用程序所需的各类资源配置清单,如Deployment、Service、Ingress等API对象的具体属性设定。这通常保存在一个名为`deployment.yaml` 的文本文件里供kubctl工具读取解析后提交至apiserver处理请求。 ```yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: ruoyi-springboot-app name: ruoyi-springboot-deployment spec: replicas: 3 selector: matchLabels: app: ruoyi-springboot-app template: metadata: labels: app: ruoyi-springboot-app spec: containers: - envFrom: - secretRef: name: db-secret image: 'registry.cn-hangzhou.aliyuncs.com/my-repo/ruoyi-springboot:${TAG}' livenessProbe: failureThreshold: 3 initialDelaySeconds: 40 periodSeconds: 10 successThreshold: 1 tcpSocket: port: 9090 name: ruoyi-springboot-container ports: - containerPort: 9090 --- apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: lb-wz9hjg**** labels: app: ruoyi-springboot-service name: ruoyi-springboot-service spec: externalTrafficPolicy: Cluster healthCheckNodePort: 30727 loadBalancerID: lb-wz9hjg**** ports: - nodePort: 30727 port: 80 protocol: TCP targetPort: 9090 selector: app: ruoyi-springboot-app sessionAffinity: None type: LoadBalancer ``` 以上就是关于如何借助阿里云云效平台实施RuoYi-SpringBoot项目的自动部署方案介绍[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值