云服务器内容精选

  • 使用场景 用户在线下IDC有自建的harbor镜像仓库,同时也会将镜像同步到华为云SWR镜像仓库。创建负载后,希望调度到自建Kubernetes集群节点上运行的Pod使用自建镜像仓库的镜像,弹性到CCI的Pod使用SWR的镜像,以提高镜像拉取效率。可通过在Pod.Annotations中加入注解可以实现弹性到CCI的Pod中容器使用的镜像与自建Kubernetes集群使用的镜像为不同地址。 通过Annotation "coordinator.cci.io/image-replacement"配置镜像替换策略。其值为如下所示json字符串:
  • 配置场景二 原Pod中容器使用不同的镜像仓库,可配置多条替换策略。 示例: 第一个容器匹配到第一条策略,将"harbor.domain"替换为"swr.cn-north-4.myhuaweicloud.com/org1"。 第二个容器匹配到第二条策略,将镜像名前加上"swr.cn-north-4.myhuaweicloud.com/org1"和"/"。 第三个容器匹配到第三条策略,将前缀"harbor.domain/a/b/c/d"替换为"swr.cn-north-4.myhuaweicloud.com/org2"。 因为需要完整匹配最后一个"/"之前的部分,第一条策略即便有与该镜像相同的前缀"harbor.domain",也不会生效。 替换策略: "coordinator.cci.io/image-replacement": '[{"repositoryPrefix":"harbor.domain","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org1"},{"repositoryPrefix":"","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org1"},{"repositoryPrefix":"harbor.domain/a/b/c/d","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org2"}]' 替换前: containers: - name: container-0 image: 'harbor.domain/ubuntu:latest' - name: container-1 image: 'nginx:latest' - name: container-2 image: 'harbor.domain/a/b/c/d/redis:latest' 替换后: containers: - name: container-0 image: 'swr.cn-north-4.myhuaweicloud.com/org1/ubuntu:latest' - name: container-1 image: 'swr.cn-north-4.myhuaweicloud.com/org1/nginx:latest' - name: container-2 image: 'swr.cn-north-4.myhuaweicloud.com/org2/redis:latest'
  • 配置场景一 原Pod中所有容器镜像均使用同一镜像仓库与组织,配置一条替换策略即可。 示例:将所有容器镜像"harbor.domain/a/b/c/d"前缀都替换为SWR的镜像前缀"swr.cn-north-4.myhuaweicloud.com/org"。 替换策略: "coordinator.cci.io/image-replacement": '[{"repositoryPrefix":"harbor.domain/a/b/c/d","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org"}]' 替换前: containers: - name: container-0 image: 'harbor.domain/a/b/c/d/ubuntu:latest' - name: container-1 image: 'harbor.domain/a/b/c/d/nginx:latest' 替换后: containers: - name: container-0 image: 'swr.cn-north-4.myhuaweicloud.com/org/ubuntu:latest' - name: container-1 image: 'swr.cn-north-4.myhuaweicloud.com/org/nginx:latest' 示例Deployment: apiVersion: apps/v1 kind: Deployment metadata: name: test-vk labels: virtual-kubelet.io/burst-to-cci: 'auto' spec: replicas: 20 selector: matchLabels: app: test-vk template: metadata: labels: app: test-vk annotations: coordinator.cci.io/image-replacement: '[{"repositoryPrefix":"harbor.domain/a/b/c/d","replaceWith":"swr.cn-north-4.myhuaweicloud.com/org"}]' spec: containers: - name: container-0 image: harbor.domain/a/b/c/d/ubuntu:latest resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 500m memory: 1024Mi command: - /bin/bash - '-c' - sleep 10000 - name: container-1 image: harbor.domain/a/b/c/d/nginx:latest resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 500m memory: 1024Mi command: - /bin/bash - '-c' - sleep 10000
  • 匹配与替换规则 替换策略可配置多条。各条替换策略的原字符串(repositoryPrefix)不允许重复。每个容器至多只会执行一条替换策略。配置替换策略无需考虑先后顺序,不同的配置顺序结果一致。 原Pod.spec中配置的container和initContainer镜像均支持替换。 若repositoryPrefix不为空,则匹配Pod中所有镜像名中最后一个"/"字符之前的字符串与该值相同的容器,对其最后一个"/"字符之前的部分替换为replaceWith的内容。 若repositoryPrefix为空,则对Pod中镜像名不包含前缀(即没有"/"字符)的容器,镜像名前加上replaceWith的内容和一个"/"字符。