安装 Alauda DevOps

本文档提供了安装 Alauda DevOps 的详细步骤。

前提条件

请确保在继续之前已上传 Alauda DevOps v3 operator。

有关上传 operator 的更多信息,请参阅 Uploading Operators

Namespace 安全策略要求

  • Katanomi 仅支持创建一个实例。该实例可以部署到任意 namespace,但必须满足以下条件:

    • namespace 资源充足
    • namespace 配置为特权安全策略
  • Katanomi Operator 需要 namespace 使用特权安全策略配置才能正常运行。此要求源于该组件对特权容器和 hostPath volume 挂载的依赖。

    根本原因:Katanomi Operator 组件需要特权容器访问权限和 hostPath volume 挂载(audit log 目录)才能正常运行:

    • 特权容器:多个 Katanomi Operator 部署使用了 privileged: true security context:
      • apiserver deployment - API server 部署需要 privileged: true,用于对 audit log 目录执行 chown
      • api deployment - API 部署使用 privileged: true,用于对 audit log 目录执行 chown
      • devops-api deployment - DevOps API 部署需要 privileged: true,用于对 audit log 目录执行 chown
      • build-image-buildkit-v1 tasks - 构建任务显式使用 privileged: true,以支持 container image 构建能力

安装 Operator

进入平台的 Administrator -> Marketplace -> OperatorHub 页面,搜索 Alauda DevOps v3,然后单击 operator 卡片进入 operator 详情页。

单击 Install 安装 operator。

部署位置

在 Global Cluster 中部署 Katanomi 实例。Business Cluster 可按需部署实例用于 CI/CD。

组件Global ClusterBusiness Cluster
Katanomi已安装可选

操作步骤

创建 Katanomi 实例

WARNING

仅支持一个 Katanomi 实例。

  • Global Cluster:部署在 cpaas-system namespace 中。将 ExternalURL 设置为 global cluster 的 Platform URL,并将 Service.Type 设置为 Ingress

  • Business Cluster:可以部署在除 cpaas-system 之外的任意 namespace 中。

  • 登录 Alauda Container Platform 平台。

  • 进入 Platform Management 下的 Clusters 选项卡。

  • 选择已部署的 cluster,然后单击 CLI Tools

  • 创建 Katanomi 实例(可根据需要调整参数)

global cluster

export NAMESPACE=cpaas-system
export EXTERNAL_URL=$(kubectl get prdb -n cpaas-system base -o jsonpath='{.spec.platformURL}')
cat <<EOF | kubectl apply -f -
apiVersion: operators.katanomi.dev/v1alpha1
kind: Katanomi
metadata:
  name: katanomi
  namespace: ${NAMESPACE}
spec:
  externalURL: ${EXTERNAL_URL}
  replicas: 1
  resources:
    limits:
      cpu: "2"
      memory: 4Gi
    requests:
      cpu: "1"
      memory: 2Gi
  service:
    ingress:
      protocol: HTTP
    type: Ingress
EOF

business cluster

export NAMESPACE=katanomi-operator
export NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}' | awk -F" " '{print $1}')
export EXTERNAL_URL=http://${NODE_IP}:32001
cat <<EOF | kubectl apply -f -
apiVersion: operators.katanomi.dev/v1alpha1
kind: Katanomi
metadata:
  name: katanomi
  namespace: ${NAMESPACE}
spec:
  externalURL: ${EXTERNAL_URL}
  replicas: 1
  resources:
    limits:
      cpu: "2"
      memory: 4Gi
    requests:
      cpu: "1"
      memory: 2Gi
  service:
    nodePort:
      apiPort:
        httpPort: 32000
      pluginPort:
        httpPort: 32001
    type: NodePort
EOF
  • 等待 DevOps 实例就绪
    kubectl wait --for='jsonpath={.status.conditions[?(@.type=="Running")].status}=true' katanomis/katanomi -n cpaas-system --timeout=5m

CI/CD 功能准备

在开始使用 Alauda DevOps 的构建和发布流水线功能之前,平台管理员需要先完成一些准备工作。

请参考部署 Alauda DevOps v3 后平台内的文档:<Platform URL>/console-devops-docs/en/devops-initialization/cicd/init/

Katanomi 参数说明

参数说明
Name

Katanomi 实例的名称。

Namespaces

对于 Business Cluster,只要资源充足,Katanomi 实例可以部署到任意 namespace。对于 Global Cluster,Katanomi 实例必须且只能部署在 cpaas-system namespace 中。

External URL

访问地址,即 API 地址。请根据 Service Type 的配置进行规划。
当 Service Type 为 Node Port 时,请填写 http://<IP>:<Port>Port 必须与 Service 的 Node Port 保持一致,且 API 端口用于服务访问。
当 Service Type 为 Ingress 时,请填写相应的访问地址,例如:http://kubernetes.io

Replicas

Deployment 的副本数,默认值为 2。
当副本数为 1 时,将使用单节点部署。

Resources
  • requests: 运行工具时可消耗的 CPU 和内存资源最小值。
  • limits: 运行工具时需要占用的 CPU 和内存资源最大值。
Service.Type

必填字段。提供两种类型:主机端口和 Ingress。

  • 主机端口: 通过静态端口暴露路由,使用 <IP>:<port> 访问。
  • Ingress: 通过入站规则暴露路由,使用域名访问。
Service.Ingress

当 Type 设置为 Ingress 时为必填。

  • Domain Name: 用于访问工具的域名。
  • Protocol: 通过 HTTP 或 HTTPS 访问工具。
  • Secret Name: 通过 HTTPS 访问工具时使用的 SSL 证书名称。
Service.Node Port

Type 设置为 主机端口 时为必填。用于访问工具的端口号,API Port 和 Plugin Port 不能重复,端口值范围为 30000-32767。

  • API Port: 用于通过 HTTP 访问 Katanomi-api 组件的端口,用于执行工具集成绑定相关操作。
  • Plugin Port: 用于通过 HTTP 访问 Katanomi-plugin 组件的端口,用于在平台中处理 toolchain 集成绑定事件。

FAQ

由于只读根文件系统导致 Katanomi Pod 无法启动:/cpaas 目录不可写

Katanomi 需要对宿主机上的 /cpaas 目录具有写入权限,以存储 audit logs。如果 Pod 无法向该目录写入,则会启动失败。

要解决此问题,可以配置其他 audit log 存储路径。例如:

spec:
  helmValues:
    api:
      auditHostPath: /tmp/audit
    devopsApiServer:
      auditHostPath: /tmp/audit
    devopsApi:
      auditHostPath: /tmp/audit

该配置会让 Katanomi 组件使用 /tmp/audit 作为 audit log 存储路径,从而确保其可兼容强制使用只读根文件系统的环境。可根据安全和运维要求调整该路径。

部署 Katanomi 时如何配置自定义 ImagePullSecret

要为 Katanomi 实例指定自定义 ImagePullSecret,请添加以下配置:

spec:
  helmValues:
    global:
      registry:
        imagePullSecret:
          name: <imagePullSecretName>

该配置可确保 Katanomi 在从私有 registry 拉取 container images 时使用指定的 ImagePullSecret。请将 imagePullSecretName 替换为您预先创建的、包含所需 registry 凭证的 Kubernetes secret 名称。