安装 Alauda DevOps

本指南提供安装 Alauda DevOps 的详细步骤。

前提条件

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

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

命名空间安全策略要求

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

    • 命名空间资源充足
    • 命名空间配置了特权安全策略
  • Katanomi Operator 要求命名空间使用特权安全策略配置才能正常工作。此要求基于组件对特权容器和 hostPath 卷挂载的依赖。

    根本原因:Katanomi Operator 组件需要特权容器访问和 hostPath 卷挂载(审计日志目录)才能正常运行:

    • 特权容器:多个 Katanomi Operator 部署使用了 privileged: true 安全上下文:
      • apiserver deployment - API server 部署需要 privileged: true,用于对审计日志目录执行 chown
      • api deployment - API 部署使用 privileged: true,用于对审计日志目录执行 chown
      • devops-api deployment - DevOps API 部署需要 privileged: true,用于对审计日志目录执行 chown
      • build-image-buildkit-v1 tasks - 构建任务显式使用 privileged: true,以支持容器镜像构建能力

安装 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 命名空间中。将 ExternalURL 设置为 global 集群的 Platform URL,并将 Service.Type 设置为 Ingress

  • Business Cluster:可部署在除 cpaas-system 之外的任意命名空间中。

  • 登录 Alauda Container Platform 平台。

  • 导航到 Platform Management 下的 Clusters 选项卡。

  • 选择已部署的集群并单击 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 参数说明

参数说明
名称

Katanomi 实例的名称。

命名空间

对于 Business Cluster,在资源充足的情况下,Katanomi 实例可部署到任意命名空间。对于 Global Cluster,Katanomi 实例必须且仅能部署在 cpaas-system 命名空间中。

外部 URL

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

副本数

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

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

必填字段。提供两种类型:Node Port 和 Ingress。

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

当 Type 设置为 Ingress 时必填。

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

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

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

常见问题

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

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

要解决此问题,可以配置其他审计日志存储路径。例如:

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

此配置会指示 Katanomi 组件使用 /tmp/audit 作为审计日志存储路径,从而确保与强制使用只读根文件系统的环境兼容。请根据安全和运维要求调整该路径。

如何为 Katanomi 配置自定义调度策略

要将 Katanomi 组件调度到特定节点,请在 spec.helmValues.global 下配置 nodeSelectortolerationsaffinity。例如:

spec:
  helmValues:
    global:
      nodeSelector:
        custom.node/role: devops
      tolerations:
        - key: custom-taint
          operator: Exists
          effect: NoSchedule
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: custom.node/role
                    operator: In
                    values:
                      - devops

如果未配置这些字段,Katanomi 组件将继续使用默认调度策略。

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

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

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

此配置可确保 Katanomi 在从私有镜像仓库拉取容器镜像时使用指定的 ImagePullSecret。请将 imagePullSecretName 替换为预先创建的、包含所需仓库凭据的 Kubernetes secret 名称。