私有镜像仓库部署

私有化平台上传部署包

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及以上版本探针支持)

在私有仓库内创建长期有效的账号

⚠️ 创建账号时,一定要创建长期有效的账号,如果仅是临时账号,当账号过期后,会导致镜像拉取失败。

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

    image.png

    image.png

    image.png

    image.png

    image.png

  • 以阿里云平台为例,选择 容器镜像服务 -> 仓库管理 -> 访问凭证,生成固定密码访问凭证:

    image.png

  • 以华为云平台为例,选择 容器镜像服务 -> 我的镜像 -> 客户端上传 -> 生成登录指令 -> 长期有效登录指令 -> 生成指令,平台生成登录命令中包含了账号密码和地址信息:

      docker login -u 镜像账号 -p 密码 私有库服务器域名
    

    image.png

    image.png

    image.png

    image.png

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

在听云探针命名空间例如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=test.huaweicloud.com --docker-username=robot\$test\+app-readonly --docker-password=******

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

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tingyun-k8s-monitor
  namespace: tingyun
#imagePullSecrets:
#  - name: tingyun-image-secret

修改后的yaml, 注意格式及对齐, imagePullSecretsmetadata 对齐, - 空2格:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tingyun-k8s-monitor
  namespace: tingyun
imagePullSecrets:
  - name: tingyun-image-secret

添加业务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行代码注释

  mutate.yaml: |
    #imagePullSecrets:
    #- name: tingyun-image-secret
    initContainers:

修改后的yaml, 注意格式及对齐, imagePullSecretsinitContainers 对齐, -imagePullSecrets 对齐:

  mutate.yaml: |
    imagePullSecrets:
    - name: tingyun-image-secret
    initContainers:

重新apply yaml脚本, 并删除Pod tingyun-agent-xxx ,Pod重建后配置才能生效。

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

常见问题

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架构不一致。

Q: 部署时,拉取镜像报错 ImagePullBackOff

报ImagePullBackOff的原因有很多,包括:镜像未上传、连接镜像库失败、没有拉取权限、拉取超时等

  • 连接镜像库失败:describe pod中出现 connected fail 等字样,请联系镜像库管理人员确认。

  • 没有拉取权限:describe pod中出现 deniedYou may not loginauthorization failed401 Unauthorized 等字样,解决方案请参考本文档设置镜像拉取密钥

img

img

img

  • 镜像未上传:describe pod中出现 404 Not Found 等字样,请联系镜像库管理人员确认镜像名、镜像Tag等是否正确。

  • 拉取超时:describe pod中出现 timedtout 等字样, 请联系运维确认。

results matching ""

    No results matching ""