私有镜像仓库部署

私有化平台上传部署包

1.联系技术支持获取探针部署包tingyun-kubeimage-X.X.X.X.zip。其中X.X.X.X为探针的版本号。

2.通过admin账号上传该部署包,然后在下载中心页面看到Kubernetes UniAgent有更新即可。

说明:SaaS平台不需要上述操作。

私有镜像库上传

  1. 联系技术支持获取镜像包tingyun-k8s-images-X.X.X.X.tar.gz。其中X.X.X.X为探针的版本号。

  2. 解压缩。

    tar xvf tingyun-k8s-images-X.X.X.X.tar.gz
    
  3. 推送镜像到私有仓库。

    如需指定镜像架构为AMD64(仅适用于集群内所有Node的CPU均为AMD64的场景),请执行

    IMAGE_PLATFORM=amd64 sh ./pushImages.sh
    

    如需指定镜像架构为ARM64(仅适用于集群内所有Node的CPU均为ARM64的场景),请执行

    IMAGE_PLATFORM=arm64 sh ./pushImages.sh
    

    如果集群内既存在AMD64的Node节点,又存在ARM64的Node节点,(也适用于集群内所有Node均为同一CPU架构的场景),请执行

    sh ./pushImages.sh
    
    • 输入待上传的私有仓库镜像地址和项目名称,如registry.tingyun.com/tingyun。

    • 输入私有仓库的用户名和密码进行登录。

    • 脚本会自动检测当前环境上是否安装了 docker、podman、nerdctl、ctr 等推送工具, 并自动选择一种推送工具。

    • 如果当前用户使用的推送工具支持Manifest功能,则推送脚本会自动上传AMD64和ARM64两种镜像,每个Node拉取镜像时,会尝试自动拉取和Node CPU架构一致的镜像。

    • 如果当前用户使用的推送工具不支持Manifest功能,则脚本会提示选择上传的镜像类型,AMD64或ARM64,只能选择一种镜像进行推送。

    说明

    • 如果不开启Manifest,AMD64和ARM64两种类型的镜像不会共存,如果推送多次,后上传的镜像会覆盖前面上传的镜像。
    • 不开启Manifest进行推送仅适用于所有Node的CPU架构均一致的情况,如果Node CPU既有AMD64又有ARM64,请开启Manifest功能。Manifest的开启方式见下方的FAQ小节。

    img

私有镜像选择

上传完毕后,在部署Kubernetes UniAgent时选择私有仓库,并输入私有仓库地址。

image.png

如果拉取镜像需要权限验证,设置镜像拉取密钥 (仅2.5.3.0及以上版本探针支持)

  1. 在私有仓库内创建只读账号

    以Harbor平台为例,创建Robot机器人只读账号,过期时间选择永不过期,权限选择查询和拉取镜像,项目选择听云镜像所在的项目名称

  2. 添加听云探针所在命名空间的镜像拉取密钥

    在听云探针命名空间例如tingyun中创建名称为tingyun-image-secret的秘钥

    确认录入正确的秘钥类型、仓库地址、只读账号和密码或令牌,注意如果账号名或密码令牌包含$+等特殊字符,执行命令时需要转义

     kubectl -n tingyun create secret docker-registry tingyun-image-secret \
     --docker-server=私有库服务器地址 --docker-username=只读账号 --docker-password=密码或令牌
    

    例如其中用户名为robot$test+app-readonly, 则转义为

     kubectl -n tingyun create secret docker-registry tingyun-image-secret \
     --docker-server=私有库服务器地址 --docker-username=robot\$test\+app-readonly --docker-password=密码或令牌
    

    放开从听云平台下载的yaml脚本中kind: ServiceAccount下面2行代码注释

     #imagePullSecrets:
     #  - name: tingyun-image-secret
    
  3. 添加业务Pod所在命名空间的镜像拉取密钥 (此步骤根据现场情况可选)

    如果需要嵌入探针的Pod中现有密钥策略已经包含了听云镜像所在项目的权限,则可以跳过此步

    在需要嵌入探针的Pod所在的业务命名空间中创建名称为tingyun-image-secret的秘钥

    如果有多个命名空间需要嵌入探针,那么必须针对每个命名空间单独创建tingyun-image-secret

     kubectl -n 业务命名空间 create secret docker-registry tingyun-image-secret \
     --docker-server=私有库服务器地址 --docker-username=只读账号 --docker-password=密码或令牌
    

    放开从听云平台下载的yaml脚本中mutate.yaml下面2行代码注释

     #imagePullSecrets:
     #- name: tingyun-image-secret
    
  4. 重新apply yaml脚本, 并删除Pod tingyun-agent-xxx ,Pod重建后配置才能生效。

     kubectl apply -f tingyunagent.yaml
     kubectl -n tingyun delete pod tingyun-agent-xxx
    

FAQ

Q: 如何开启Manifest?

A:Docker 20 以上已经默认开启了Manifest功能,Docker 20以下版本执行以下命令:

  1. 执行vim /root/.docker/config.json命令,并修改experimental为enabled:

    {
      "auth": {},
      "experimental": "enabled"   
    }
    
  2. 重新加载Docker。

    systemctl daemon-reload
    systemctl restart docker
    
  3. 验证是否开启。

    img

Q: ARM64和AMD64的镜像先后上传到同一个私有库,安装后探针启动不了或者应用的Pod启动不了?

img

A:每个Node拉取镜像时,会尝试自动拉取和当前Node CPU架构一致的镜像,

如果Node CPU既有AMD64又有ARM64,进行镜像推送时请开启Manifest功能。否则可能造成Node拉取了错误的CPU架构的镜像导致无法启动。

如果应用Pod启动失败,并且InitContainer报错 exec /bin/sh exec format error ,说明镜像和当前Node CPU架构不一致。

© 2007-2023 北京基调网络股份有限公司 all right reserved,powered by Gitbook本文档更新于: 2024-04-25 10:51

results matching ""

    No results matching ""