跳到主要内容

2 篇博文 含有标签「install」

查看所有标签

· 阅读需 3 分钟

Argo Workflow 生产安装

https://argoproj.github.io/argo-workflows/installation/#production-installation

使用 Helm 安装 Argo Workflow

https://github.com/argoproj/argo-helm

Helm和App版本对应关系,和配置项 https://artifacthub.io/packages/helm/argo/argo-workflows

Argo Workflow v3.2.6 对应的Heml Chart版本为0.10.0

配置工件存储 https://argoproj.github.io/argo-workflows/configure-artifact-repository/#configuring-minio

minio配置文件

// 自动创建Bucket
defaultBucket.enabled: true
defaultBucket.name: my-bucket

// 服务设置
service.type: LoadBalancer
fullnameOverride: argo-artifacts


// 存储类
persistence.enabled: false

// pod配置
resources:
requests:
memory: 512Mi

Argo Workflow 配置文件

修改helm配置文件


helm upgrade my-argo-workflows -n argo-test --set singleNamespace=true --set server.serviceType=NodePort --set server.serviceNodePort=30016 --set server.nodeSelector="kubernetes.io/hostname: cn-shanghai.192.168.0.228" --set server.extraArgs="--auth-mode=server"
// 开启但命名空间模式
singleNamespace: true

// 开启NodePort
server.serviceType: NodePort

// 指定NodePort端口
server.serviceNodePort: 30016

// 指定节点
server.nodeSelector: kubernetes.io/hostname: cn-shanghai.192.168.0.228

// 禁用身份验证
server.extraArgs: --auth-mode=server

// 配置工件存储库
artifactRepository:
s3:
accessKeySecret:
key: accesskey
insecure: true
secretKeySecret:
key: secretkey
name: argo-artifacts
bucket: my-bucket
endpoint: argo-artifacts.argo-dev.svc.cluster.local:9000

s3:
accessKeySecret:
key: accesskey
insecure: true
secretKeySecret:
key: secretkey

参数

server.extraArgs: [--auth-mode=server]

helm install argo-workflows argo/argo-workflows --version 0.10.0 -n argo-test --set server.extraArgs=--auth-mode=server

Helm 配置文件

artifactRepository:
archiveLogs: false
gcs: {}
s3:
accessKeySecret:
key: accesskey
insecure: true
secretKeySecret:
key: secretkey
controller:
affinity: {}
clusterWorkflowTemplates:
enabled: true
containerRuntimeExecutor: docker
containerRuntimeExecutors: []
extraArgs: []
extraContainers: []
extraEnv: []
image:
registry: quay.io
repository: argoproj/workflow-controller
tag: ''
initialDelay: null
instanceID:
enabled: false
explicitID: ''
useReleaseName: false
links: []
livenessProbe:
failureThreshold: 3
httpGet:
path: /healthz
port: 6060
initialDelaySeconds: 90
periodSeconds: 60
timeoutSeconds: 30
loadBalancerSourceRanges: []
logging:
globallevel: '0'
level: info
metricsConfig:
enabled: false
path: /metrics
port: 9090
portName: metrics
servicePort: 8080
servicePortName: metrics
name: workflow-controller
namespaceParallelism: null
nodeSelector:
kubernetes.io/os: linux
parallelism: null
pdb:
enabled: false
persistence: {}
podAnnotations: {}
podLabels: {}
podSecurityContext: {}
podWorkers: null
priorityClassName: ''
replicas: 1
resourceRateLimit: {}
resources: {}
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
serviceAccount:
annotations: {}
create: true
name: ''
serviceAnnotations: {}
serviceLabels: {}
serviceMonitor:
additionalLabels: {}
enabled: false
namespace: ''
serviceType: ClusterIP
telemetryConfig:
enabled: false
path: /telemetry
port: 8081
servicePort: 8081
servicePortName: telemetry
tolerations: []
workflowDefaults: {}
workflowNamespaces:
- default
workflowRestrictions: {}
workflowWorkers: null
createAggregateRoles: true
executor:
env: {}
image:
registry: quay.io
repository: argoproj/argoexec
tag: ''
resources: {}
securityContext: {}
fullnameOverride: null
images:
pullPolicy: Always
pullSecrets: []
kubeVersionOverride: ''
nameOverride: null
server:
affinity: {}
baseHref: /
clusterWorkflowTemplates:
enableEditing: true
enabled: true
enabled: true
extraArgs: []
extraContainers: []
extraEnv: []
image:
registry: quay.io
repository: argoproj/argocli
tag: ''
ingress:
annotations: {}
enabled: false
extraPaths: []
hosts: []
ingressClassName: ''
labels: {}
pathType: Prefix
paths:
- /
tls: []
loadBalancerIP: ''
loadBalancerSourceRanges: []
name: server
nodeSelector:
kubernetes.io/os: linux
pdb:
enabled: false
podAnnotations: {}
podLabels: {}
podSecurityContext: {}
priorityClassName: ''
replicas: 1
resources: {}
secure: false
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: false
runAsNonRoot: true
serviceAccount:
annotations: {}
create: true
name: ''
serviceAnnotations: {}
serviceLabels: {}
serviceNodePort: null
servicePort: 2746
servicePortName: ''
serviceType: ClusterIP
sso: {}
tolerations: []
volumeMounts: []
volumes: []
singleNamespace: false
useDefaultArtifactRepo: false
useStaticCredentials: true
workflow:
namespace: null
rbac:
create: true
serviceAccount:
annotations: {}
create: false
name: argo-workflow

· 阅读需 6 分钟

概述

这是部署好本站的第一篇文章,记录本站部署过程中踩坑的问题点。参考官方文档,这里采用源代码仓库跟静态文件仓库分离的方式部署,把静态文件托管到Github Pages上,并使用Github Actions触发部署。官方文档写的比较详细的内容本文会简化或者直接省略,把重点放在官方文档写的比较绕、不容易理解以及容易出错的地方,尽量做到简单易懂。

包含以下内容:

  • 使用两个仓库时部署验证问题。
  • 两个仓库分支配置问题。
  • Github Actions触发部署,遇到的问题,以及解决方式。
  • Github Pages域名设置,如何设置DNS,以及去除www前缀。

生成项目

提示

有了基础的模板之后,我们可以先搭建工作流,把整个工作流程跑通之后,就可以开始更新迭代了。

使用默认模板生成项目

npx create-docusaurus@latest my-website classic

运行开发服务器

cd my-website
npm run start

默认情况下,浏览器窗口将在 http://localhost:3000 打开。

修改配置

警告

注意deploymentBranch: 'main'参数,这个参数决定Github Actions生成的静态文件,推送到远程静态文件仓库的哪个分支,默认为gh-pages

docusaurus.config.js
module.exports = {
// ...
url: 'https://endiliey.github.io', // Your website URL
baseUrl: '/',
projectName: 'endiliey.github.io',
organizationName: 'endiliey',
trailingSlash: false,
deploymentBranch: 'main',
// ...
};

部署

创建 Github 仓库

创建两个github仓库:

  • my-website用来存放整个项目源代码,可以设置为私有仓库。

  • username.github.io参照 Github Pages 文档创建,用来存放生成的静态文件,需要设置为公开仓库。

生成 ssh 密钥。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

可以使用-f 指定目录和密钥名字,以免覆盖现有ssh密钥,需要先创建.ssh目录。例如以下命令会在当前目录生成ssh密钥。

mkdir .ssh
`ssh-keygen -f ./.ssh/id_rsa -t rsa -b 4096 -C "your_email@example.com"`

添加 Deploy keys

添加公钥到静态文件仓库的Deploy keys

deploy-keys

添加 Actions secrets

添加私钥到源代码仓库的Actions secrets and variablesactions-secrets-and-variables

创建工作流文件

在源代码仓库根目录,创建工作流文件。

GitHub action files
调整对应的参数

请确保把actions@github.com替换为您的GitHub邮箱,把gh-actions替换你的Github的用户名。

该文件假定您使用的是Yarn。如果使用npm,请相应地将cache:yarnyarninstall--freezed-lockfileyarn-build更改为cache:npmnpm-cinpm-run-build

.github/workflows/deploy.yml
name: Deploy to GitHub Pages

on:
pull_request:
branches: [main]
push:
branches: [main]

jobs:
test-deploy:
if: github.event_name != 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
cache: yarn
- name: Install dependencies
run: yarn install --frozen-lockfile
- name: Test build website
run: yarn build
deploy:
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
cache: yarn
- uses: webfactory/ssh-agent@v0.5.0
with:
ssh-private-key: ${{ secrets.GH_PAGES_DEPLOY }}
- name: Deploy to GitHub Pages
env:
USE_SSH: true
run: |
git config --global user.email "actions@github.com"
git config --global user.name "gh-actions"
yarn install --frozen-lockfile
yarn deploy

推送 my-website 到远程

到这里,两个远程仓库都应该是空的,把本地my-website文件夹内的内容,推送到远程my-website仓库,使用默认main分支。

检查静态文件仓库

如果上述操作一切顺利的话,本地my-website推送到远程仓库my-websitemain分支之后,会自动触发Github Actions工作流。工作流会生成静态文件,并把静态文件推送到静态文件仓库的main分支。

修改静态文件仓库配置

修改静态文件仓库的Github Pages配置。

configure-github-pages

添加DNS记录

警告

CNAME文件需要放到源代码my-website仓库里的./static文件夹下,而不是直接在静态文件仓库进行设置。否则工作流更新静态文件时会把CNAME文件刷掉,导致站点访问错误。

域名访问分为两种情况

  • 使用 www.you-domain-name.com 子域

  • 使用 you-domain-name.com 主域

使用www子域名,只需设置www子域的CNAME记录解析到username.github.io,并且在my-website仓库里的./static文件夹下,添加CNAME文件,文件内容为www.you-domain-name.com。此时域名主记录会自动跳转到www子域。

使用主域,需要添加主机记录解析到github服务器的IP,并设置www子域的CNAME记录解析到username.github.io,并且在my-website仓库里的./static文件夹下,添加CNAME文件,文件内容为you-domain-name.com。此时www子域会自动跳转到主域。

检查工作流触发和运行状态

以上操作如无错误,则可以直接访问you-domain-name.com查看页面,直接更新my-websitemain分支,即可触发工作流,自动更新Github Pages页面。