在 IT 领域,自动化无疑已成为提高工作效率和减少人为错误的关键。Sealos 作为一个强大的云操作系统,已经为许多企业和开发者提供了稳定可靠的服务。与此同时,随着技术不断发展,集成更多的功能和服务变得尤为重要。考虑到这一点,本文将介绍如何利用 GitHub Action 来进一步丰富 Sealos 在应用更新方面的自动化体验

原文链接:https://forum.laf.run/d/1059

GitHub Action 介绍

在现代软件开发中,持续集成 (CI) 和持续部署/交付 (CD) 是至关重要的环节。它们可以帮助开发团队高效地验证代码的质量并确保其准确无误地交付到生产环境中。GitHub Action 正是在这个背景下诞生的 CI/CD 工具,致力于为开发者提供一种简洁且高效的自动化工具。

简单来说,GitHub Action 是一个 CI/CD 工具,它允许开发者在 GitHub 仓库中自动执行多种任务,从而极大地提高了工作效率。它可以自动进行代码的构建、测试和部署等关键步骤,确保在每次代码更新或合并请求中都能够进行快速而准确的验证和交付。

但 GitHub Action 不仅仅是一个传统的 CI/CD 工具。其独特之处在于,它与 GitHub 仓库实现了无缝集成。这意味着开发者无需离开 GitHub 环境,就能够配置和管理整个自动化流程,极大地简化了操作过程。此外,由于 GitHub 是目前世界上最大的代码托管平台,这种深度整合使得大量开发者能够轻松上手并利用 GitHub Action 进行自动化操作。

Sealos:同时面向初学者与专家

Sealos 的可视化桌面环境极大简化了用户对分布式应用的管理和维护,用户不再需要进行复杂的操作或拥有深厚的技术背景就能轻松管理分布式应用。通过减少复杂性和提供直观的界面,Sealos 显著地降低了用户的心智负担,使其可以更加集中地完成工作。

Sealos 海外集群:https://cloud.sealos.io

Sealos 国内集群:https://cloud.sealos.top

但 Sealos 不仅仅适用于普通用户,对于云原生领域的专业人员,提供了终端,您可以在终端中执行各种命令行操作。

同时还提供了 kubeconfig 文件的下载功能。拥有这个文件,专业人员可以将其下载到本地电脑,并使用 kubectl 命令行工具来直接管理和操作 Sealos 中的应用资源。这为那些希望深入管理和配置的云原生专家们提供了极大的灵活性。

有了 kubeconfig 之后,我们可以用来实现各种神奇的功能,比如本文将要介绍的自动更新应用镜像

GitHub Action 自动构建镜像

对于自己开发的应用,要想自动更新应用的镜像,前提是得先自动构建镜像。

GitHub Action 完美集成在 GitHub 平台上,无需额外配置或切换到其他平台即可基于源码来构建镜像。对于公开的仓库,GitHub 提供了一定的免费计算额度,适合小型项目或个人开发者。

使用 GitHub Action 自动构建并推送镜像的流程如下:

  1. 创建工作流文件:在你的 GitHub 仓库中创建一个 .github/workflows 目录,并在该目录下创建一个工作流配置文件,例如 docker_build.yml

  2. 配置 Secret:为了安全地推送镜像到 Docker Hub 和 ghcr.io,你需要在 GitHub 仓库的 "Secrets" 部分配置相应的认证信息。通常,这包括你的 Docker Hub 用户名、密码,以及 ghcr.io 的 token。例如:

  3. 编写工作流脚本:在配置文件中,定义所需的触发条件(如 pushmaster 分支)、运行环境以及执行的命令。

    示例:

    # 定义工作流的名称
    name: Build and Push Docker Image # 定义触发工作流的条件
    on:
    workflow_dispatch: # 允许手动触发工作流
    push: # 当有代码推送事件发生时
    branches:
    - master # 只有推送到 master 分支时才触发 # 定义工作流的任务
    jobs:
    build-image:
    # 定义运行此任务的环境:最新版本的 ubuntu
    runs-on: ubuntu-latest # 定义任务中的步骤
    steps:
    # 检出代码。只检出最新的1次提交
    - uses: actions/checkout@v3
    with:
    fetch-depth: 1 # 设置 QEMU 模拟器,这通常用于多平台的 Docker 构建
    - name: Set up QEMU
    uses: docker/setup-qemu-action@v2 # 设置 Docker Buildx,用于构建多平台的 Docker 镜像
    - name: Set up Docker Buildx
    uses: docker/setup-buildx-action@v2 # 登录到 Docker Hub
    - name: Login to DockerHub
    uses: docker/login-action@v2
    with:
    username: ${{ secrets.DOCKER_USERNAME }} # 使用存储在 GitHub Secrets 中的 DockerHub 用户名
    password: ${{ secrets.DOCKER_PASSWORD }} # 使用存储在 GitHub Secrets 中的 DockerHub 密码 # 登录到 ghcr.io (GitHub Container Registry)
    - name: Login to ghcr.io
    uses: docker/login-action@v2
    with:
    registry: ghcr.io
    username: ${{ github.repository_owner }} # 使用仓库的拥有者名作为用户名
    password: ${{ secrets.GHCR_TOKEN }} # 使用存储在 GitHub Secrets 中的 ghcr.io 的访问令牌 # 构建并推送 Docker 镜像到 docker.io 和 ghcr.io
    - name: Build and push Docker images to docker.io and ghcr.io
    uses: docker/build-push-action@v2
    with:
    platforms: linux/amd64 # 设置构建平台为 linux/amd64
    context: . # Docker 构建上下文设置为当前目录
    push: true # 设置为真以确保构建后的镜像被推送
    tags: | # 定义推送的标签
    ${{ secrets.DOCKER_USERNAME }}/xxxx:latest
    ghcr.io/${{ github.repository_owner }}/xxxx:latest
  4. 触发工作流:每当符合触发条件的事件发生时,GitHub Action 就会自动执行定义的工作流,从而构建和推送 Docker 镜像。

  5. 监控与调试:你可以在 GitHub 仓库的 "Actions" 标签页中,查看工作流的执行情况,包括日志、状态和结果。

使用 GitHub Action 自动构建镜像不仅可以简化开发流程,还可以确保每次代码的更改都得到了有效且一致的处理,大大提高了开发效率和代码质量。同时通过使用 GitHub 的 secrets 功能,还确保了认证信息的安全。

自动更新 Sealos 应用镜像

现在我们来到了最后一步。要想自动更新镜像,首先我们来回顾一下整个流程:

首先,当你的应用代码更新并合并到主分支时,GitHub Action 会自动触发构建镜像的任务。构建完成后,新的应用镜像会被推送到镜像仓库。

接下来,你需要在 GitHub Action 中调用 kubectl,更新 Sealos 集群中对应的 Deployment 或 StatefulSet。这样,Sealos 集群的应用就会使用新的镜像版本进行滚动更新。

我们可以利用一个特定的 GitHub Action:actions-hub/kubectl。这个 Action 提供了在 GitHub Actions 工作流中执行 kubectl 命令的能力。

以下是如何在你的 GitHub Actions 工作流中使用 actions-hub/kubectl 来更新 Sealos 应用镜像:

设置 kubeconfig

为了让 kubectl 能够与你的 Sealos 或其他 Kubernetes 集群进行通信,你需要提供一个有效的 Kubeconfig,Sealos 的 kubeconfig 可以在桌面中下载。

下载完成后,你需要将其中的内容转换为 base64 格式:

$ cat kubeconfig.yaml | base64

然后将转换后的内容存储到 GitHub 仓库的 Secret 中,假设 Secret 名为 KUBE_CONFIG 。Secret 配置方式参考上文。

使用 actions-hub/kubectl

现在您只需要在前面自动构建镜像的工作流脚本中添加一个新的 job 来调用 kubectl 即可。例如:

# 定义工作流的名称
name: Build and Push Docker Image # 定义触发工作流的条件
on:
workflow_dispatch: # 允许手动触发工作流
push: # 当有代码推送事件发生时
branches:
- master # 只有推送到 master 分支时才触发 # 定义工作流的任务
jobs:
build-image:
...
...
deploy:
needs: build-image
runs-on: ubuntu-latest
if: github.repository == '<your_repository>'
steps:
- name: Checkout code
uses: actions/checkout@v3
- uses: actions-hub/kubectl@master
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
with:
args: rollout restart deployment my-deployment

在这个例子中,我们更新一个名为 my-deployment 的 Deployment,更新的方法非常简单:直接滚动重启。因为 Deployment 的 imagePullPolicy 默认都是 Always,且镜像 tag 保持 latest 不变,所以直接重启就会拉取最新的镜像。

如果您的镜像每次构建的 tag 都不同,那可以使用这个命令来更新镜像:

...
with:
args: set image deployment/my-deployment my-container=my-repo/my-image:<tag>

在这个例子中,我们更新一个名为 my-deployment 的 Deployment,将 my-container 的镜像设置为 my-repo/my-image:<tag>。其中 tag 可以通过环境变量的形式从构建镜像的 job 中获取

如果您的应用不是自己开发的,且这个应用已提供了镜像,那么您可以设计一个定时触发的工作流,工作流的任务是检测镜像仓库(例如 Docker Hub)的镜像有没有更新,如果更新了,就调用 kubectl 来更新镜像。

使用 GitHub Action 自动更新 Sealos 集群的应用镜像的更多相关文章

  1. 利用 Github Actions 自动更新 docfx 文档

    利用 Github Actions 自动更新 docfx 文档 Intro docfx 是微软出品一个 .NET API 文档框架,有一个理念是代码即文档,会根据项目代码自动生成 API 文档,即使没 ...

  2. hexo配合github action 自动构建(多种形式)

    已经使用HEXO正常构建GitHub页面 根据github action 给hexo配置自动部署github page 前往墨抒颖的个人网站查看纯净版 1. 为仓库设置访问密钥 第一步先生成密钥,打开 ...

  3. 使用Github Action自动填写疫情通

    使用Github Action自动填写疫情通 西电晨午晚检一天三次,通过企业号功能进行填写.实际上,西电企业号大部分功能是以网页模式工作的,通过构造connection发送合适的request,设置计 ...

  4. 【学习随手记】kubeadm 查看创建集群需要的镜像版本,附拉取镜像脚本

    查看创建集群需要的镜像版本 kubeadm config images list [--kubernetes-version <version>] 国内拉取镜像脚本 一般而言,直接使用ku ...

  5. 制作ACK集群自定义节点镜像的正确姿势

    随着云原生时代的到来,用户应用.业务上云的需求也越来越多,不同的业务场景对容器平台的需求也不尽相同,其中一个非常重要的需求就是使用自定义镜像创建ACK集群. ACK支持用户使用自定义镜像创建Kuber ...

  6. Azure vm 扩展脚本自动部署Elasticsearch集群

    一.完整过程比较长,我仅给出Azure vm extension script 一键部署Elasticsearch集群的安装脚本,有需要的同学,可以邮件我,我给你完整的ARM Template 如果你 ...

  7. Kubernetes自动横向伸缩集群节点以及介绍PDB资源

    在kubernetes中,有HPA在需要的时候创建更多的pod实例.但万一所有的节点都满了,放不下更多pod了,怎么办?显然这个问题并不局限于Autoscaler创建新pod实例的场景.即便是手动创建 ...

  8. 《搭建更新DNS集群服务》RHEL6

    DNS服务器的更新: 一听就知道不止一台的DNS服务器,要是一台也用不着更新对吧?一般都是DNS集群. 一台DNS更新了,添加一条数据,下面的都要跟着它变. 主DNS服务器的配置 首先先配置DNS服务 ...

  9. Git github webhook 自动更新/部署代码 php自动更新脚本

    这几天尝试了利用github的webhook,当代码更新到github,我们的测试服务器自动更新最新的gitbub仓库代码. 先列几个大概步骤,有时间再补充详细 1 . 服务器生成ssh key,一般 ...

  10. Ambari?自动部署Hadoop集群

    自动部署?Ambari Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目.就 Ambari 的作用来说,就是创建 ...

随机推荐

  1. 深入Python网络编程:从基础到实践

    Python,作为一种被广泛使用的高级编程语言,拥有许多优势,其中之一就是它的网络编程能力.Python的强大网络库如socket, requests, urllib, asyncio,等等,让它在网 ...

  2. [Java基础]String,StringBuffer,StringBuilder的区别

    String 和 StringBuffer/StringBuilder应该分开来看 java.lang.String源码中的注释说明 java.lang.StringBuffer源码中的注释说明 ja ...

  3. JavaScript中this的绑定

    <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path s ...

  4. Go的语言特性有哪些

    摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 本文主要通过值传递和指针.字符串.数组.切片.集合.面向 ...

  5. 从逻辑门到 CPU

    目的,造一个很简单的,概念上的 CPU,虽然简单,但是是五脏俱全的 CPU 从最基础的逻辑门开始造,零基础可以看 制造基本武器:与门.非门.或门 现在计算机都是二进制,那二进制是一开始就能想到的吗?显 ...

  6. 图像阈值_有cv2.threshold,cv2.adaptiveThreshold 等。

    1.简单阈值 使用的函数:cv2.threshold (src, thresh, maxval, type) 注释: 与名字一样,这种方法非常简单.但像素值高于阈值时,我们给这个像素赋予一个新值(可能 ...

  7. 关于python pycharm中输出的内容不全的解决办法

    import pandas as pd #设置显示的最大列.宽等参数,消除打印不完全中间的省略号 pd.set_option("display.width",1000) #加了这一 ...

  8. pandas 显示所有的行和列

    import pandas as pd # 显示所有列,所有行 pd.set_option('display.max_columns', None) pd.set_option('display.ma ...

  9. [kvm]硬盘IO优化

    硬盘类型选择 在CentOS7中有IDE.SATA和virtio三种,建议用virtio三种.virtio是半虚拟化的,性能媲美原生. 缓存模式选择 缓存模式有五种,不过常用的只有三种:writeth ...

  10. Pixi.js的使用整理

    最近在做的一个前端项目中,有一些图像的处理操作(3D图,2D图都有),其中3D图也是通过获取后端服务的图像2D数据进行绘制展示,通过鼠标各种操作调用后端服务来进行重新获取新图数据.这里前端设计到图像的 ...