云服务器内容精选

  • 异常回退 若在迁移过程中出现异常,可按照如下步骤回退。 登录应用服务网格控制台,在网格列表页面单击待删除网格右上角的卸载按钮卸载网格,是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。 在网格详情页,依次单击“网格配置-基本信息-添加集群”将卸载后集群重新添加回1.0企业版里面。 添加集群时,集群 选择“扁平网格”,选择需要开启自动注入的命名空间(准备工作中步骤11中记录的命名空间),是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。 使用控制面kubectl 执行如下命令。 kubectl create -f all-svc.yamlkubectl create -f all-vs.yamlkubectl create -f all-dr.yamlkubectl create -f all-gw.yaml 功能验证。 网关访问正常 路由显示正常 修改DNS解析地址为网关ELB IP。 删除CCE ingress。
  • 迁移 登录应用服务网格控制台,单击待迁移的企业版网格名称进入网格详情页面,在在网关管理页面删除网格内的所有网关资源。 在网格详情页,单击“网格配置”进入基本信息页签,单击集群后面的“移除”按钮 。 是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。 选择从企业版网格移除出来的集群创建基础版网格。建议创建istio最新版本的网格。 在网格详情页,依次单击“网格配置-sidecar管理-sidecar管理”,选择需要开启自动注入的命名空间(准备工作中步骤11中记录的命名空间),是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。 单击创建出来的网格名称进入详情页,依次单击“服务网关-添加网关”手动创建网关,选择原ELB实例。 将准备工作中备份的配置文件在新网格中恢复,若未配置kubectl命令,可参考CCE配置kubectl 。 kubectl create -f all-vs.yamlkubectl create -f all-dr.yaml 若出现“Error from server (AlreadyExists): xxxxx already exists” 已存在的报错则忽略。
  • 部署虚拟机服务灰度版本 此处以httptest-canary测试程序作为示例。httptest-canary为go http应用,监听在8080端口,访问正常返回“hello, canary http server”消息。 上传httptest-canary应用到虚拟机2。 修改权限。 chmod +x httptest-canary 启动httptest-canary应用。 ./httptest-canary
  • 获取镜像包 以root用户登录虚拟机。 获取asm-proxy-1.8.4镜像包。 asm-proxy-1.8.4镜像包存放在SWR镜像仓库中,使用如下命令拉取镜像(x86和arm架构的命令相同)。 docker pull SWR镜像仓库地址/istio/asm-proxy:1.8.4 SWR镜像仓库地址的获取方式如下: 在 容器镜像服务 控制台“总览”页面单击右上角的“登录指令”,弹出“登录指令”对话框,指令末尾的 域名 即为SWR镜像仓库地址,形式为swr.***.com。
  • 启动前检查 以root用户登录虚拟机。 检查证书文件信息。 ls -l /opt/asm_proxy/certs/ 以下为预期结果: -rw------- 1 root root 757 Jan 24 10:41 istio-token-rw------- 1 root root 1789 Jan 24 10:41 root-cert.pem 检查启动参数文件信息。 cat /opt/asm_proxy/asm_proxy.env 以下为预期结果(具体值会不同,确保不为空): ISTIO_PILOT_ADDR=10.252.2.36ISTIO_META_CLUSTER_ID=cluster-vmISTIO_META_MESH_ID=e256c79c-8b13-11ec-94e9-0255ac10069aTRACING_ZIPKIN_ADDRESS=otel-collector.monitoring.svc.cluster.local:9411NS=vmnsSERVICE_ACCOUNT=vmsaISTIO_SERVICE_CIDR=10.233.0.0/16POD_NAME=vmapp1
  • 迁移方案选择 表1 迁移方案 匹配条件 迁移方案 仅存在一个集群 业务允许小时级别中断 原集群卸载重装方案 网格使用了流量治理规则,envoyfilter等配置 对外ip端口可替换 客户业务可重新部署 新建集群和网格方案 仅使用了网格网关能力 业务允许闪断 使用ingress中转方案 业务多集群 业务允许小时级别中断 1.0企业版多集群场景(使用原集群创建网格) 业务多集群 业务允许闪断 1.0企业版多集群场景(新建集群和网格方案)
  • 容器服务加入网格 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“网格配置”,单击“sidecar管理”页签,为命名空间“vmns”注入sidecar。 在左侧导航栏选择“服务管理”,选择命名空间“vmns”。 按下述指导修复异常状态的tomcat服务。 单击“处理”进入自动修复项页面,单击“一键修复”,自动处理异常状态的检查项,直到配置诊断为正常状态。 图1 服务状态
  • 节点亲和调度策略 进入CCE Console页面,单击“集群名称-节点管理-节点”,单击更多列的|“编辑YAML”。 通过YAML配置如下参数: metadata: labels: istio: ingressgateway 也可在步骤1节点页面单击操作列的“标签管理”设置。 进入CCE Console页面,单击“集群名称--工作负载”,单击待升级工作负载更多列的“编辑YAML”。 通过YAML配置如下参数: spec: template: spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: istio operator: In values: - ingressgateway 也可以通过单击步骤3页面待升级工作负载的操作列的“升级”按钮来配置,对应参数如下: 建议值说明: 节点亲和硬约束:Pod调度到包含istio:ingressgateway标签的节点上; 节点亲和参数说明: 参数名 参数描述 必须满足 即硬约束,设置必须要满足的条件,对应requiredDuringSchedulingIgnoredDuringExecution。 添加多条“必须满足”规则时,只需要满足一条规则就会进行调度。 尽量满足 即软约束,设置尽量满足的条件,对应preferredDuringSchedulingIgnoredDuringExecution。 添加多条“尽量满足”规则时,满足其中一条或者都不满足也会进行调度。 节点亲和性调度策略参数说明: 参数名 参数描述 标签名 设置节点亲和性时,填写需要匹配的节点标签。 该标签可以使用系统默认的标签,也可以使用自定义标签。 操作符 可以设置六种匹配关系(In、NotIn、Exists、DoesNotExist、Gt、Lt)。 In:亲和/反亲和对象的标签在标签值列表(values字段)中。 NotIn:亲和/反亲和对象的标签不在标签值列表(values字段)中。 Exists:亲和/反亲和对象存在指定标签名。 DoesNotExist:亲和/反亲和对象不存在指定标签名。 Gt:仅在节点亲和性中设置,调度节点的标签值大于列表值 (字符串比较)。 Lt:仅在节点亲和性中设置,调度节点的标签值小于列表值 (字符串比较)。 标签值 设置节点亲和性时,填写节点标签对应的标签值。 配置节点亲和参数会触发工作负载滚动升级,即Pod会立即发生重启。 父主题: 调度策略
  • 滚动升级策略 进入CCE Console页面,单击“集群名称--工作负载”,单击待升级工作负载更多列的“编辑YAML”。 通过YAML配置如下参数: spec: strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 0 maxSurge: 10% 也可以通过单击步骤1页面待升级工作负载的操作列的“升级”按钮来配置,对应参数如下: 参数说明: 参数 说明 最大无效实例数(maxUnavailable) 与spec.replicas相比,可以有多少个Pod失效,也就是删除的个数或比例,建议值是0个。 比如spec.replicas为3,那升级过程中就至少有3个可用的Pod存在。 最大浪涌(maxSurge) 与spec.replicas相比,可以有多少个Pod存在,建议值是10%。 比如spec.replicas为 3,那升级过程中就不能超过4个Pod存在,即按10%(1个)的步长升级,实际升级过程中会换算成数字,且换算会向上取整。这个值也可以直接设置成个数。 仅配置升级策略参数maxUnavailable及maxSurge,不会触发工作负载滚动升级,即Pod不会发生重启。新配置值在工作负载的下一次滚动升级中生效。 在CCE Console中执行工作负载的重新部署,实际上就是完成一次工作负载的滚动升级流程,只是工作负载的版本没有发生变化。 父主题: 网关工作负载
  • 负载亲和调度策略 进入CCE Console页面,单击“集群名称--工作负载”,单击待升级工作负载更多列的“编辑YAML”。 通过YAML配置如下参数: spec: template:spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - istio-ingressgateway namespaces: - istio-system topologyKey: kubernetes.io/hostname preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - istio-ingressgateway namespaces: - istio-system topologyKey: topology.kubernetes.io/zone 也可以通过单击步骤1页面待升级工作负载的操作列的“升级”按钮来配置,对应参数如下: 建议值说明: 负载反亲和硬约束:Pod调度到不同的节点上。 负载反亲和软约束:Pod优先调度到不同可用区的节点上。 负载亲和参数说明: 策略 规则类型 说明 工作负载亲和性 必须满足 即硬约束,设置必须满足的条件,对应YAML定义中的requiredDuringSchedulingIgnoredDuringExecution字段。 通过标签筛选需要亲和的Pod,如果满足筛选条件的Pod已经运行在拓扑域中的某个节点上,调度器会将本次创建的Pod强制调度到该拓扑域。 说明: 添加多条亲和性规则时,即设置多个标签筛选需要亲和的Pod,则本次创建的Pod必须要同时亲和所有满足标签筛选的Pod,即所有满足标签筛选的Pod要处于同一拓扑域中才可以调度。 尽量满足 即软约束,设置尽量满足的条件,对应YAML定义中的preferredDuringSchedulingIgnoredDuringExecution字段。 通过标签筛选需要亲和的Pod,如果满足筛选条件的Pod已经运行在拓扑域中的某个节点上,调度器会将本次创建的Pod优先调度到该拓扑域。 说明: 添加多条亲和性规则时,即设置多个标签筛选需要亲和的Pod,则本次创建的Pod会尽量同时亲和多个满足标签筛选的Pod。但即使所有Pod都不满足标签筛选条件,也会选择一个拓扑域进行调度。 工作负载反亲和性 必须满足 即硬约束,设置必须满足的条件,对应YAML定义中的requiredDuringSchedulingIgnoredDuringExecution字段。 通过标签筛选需要反亲和的一个或多个Pod,如果满足筛选条件的Pod已经运行在拓扑域中的某个节点上,调度器不会将本次创建的Pod调度到该拓扑域。 说明: 添加多条反亲和性规则时,即设置多个标签筛选需要反亲和的Pod,则本次创建的Pod必须要同时反亲和所有满足标签筛选的Pod,即所有满足标签筛选的Pod所处的拓扑域都不会被调度。 尽量满足 即软约束,设置尽量满足的条件,对应YAML定义中的preferredDuringSchedulingIgnoredDuringExecution字段。 通过标签筛选需要反亲和的一个或多个Pod,如果满足筛选条件的Pod已经运行在拓扑域中的某个节点上,调度器会将本次创建的Pod优先调度到其他拓扑域。 说明: 添加多条反亲和性规则时,即设置多个标签筛选需要反亲和的Pod,则本次创建的Pod会尽量同时反亲和多个满足标签筛选的Pod。但即使每个拓扑域都存在需要反亲和的Pod,也会选择一个拓扑域进行调度。 负载亲和/反亲和调度策略参数说明: 参数名 参数描述 权重 仅支持在“尽量满足”策略中添加。权重的取值范围为1-100,调度器在进行调度时会将该权重加到其他优先级函数的评分上,最终将Pod调度到总分最大的节点上。 命名空间 指定调度策略生效的命名空间。 拓扑域 拓扑域(topologyKey)通过节点的标签先圈定调度的节点范围,例如标签指定为kubernetes.io/hostname,则根据标签值不同(标签值为节点名称)区分范围,不同名称的节点为不同的拓扑域,此时一个拓扑域中仅包含一个节点;如果指定标签为kubernetes.io/os,则根据标签值不同(标签值为节点的操作系统类型)来区分,不同操作系统的节点为不同的拓扑域,此时一个拓扑域中可能包含多个节点。 根据拓扑域确定节点范围后,然后再选择策略定义的内容(通过标签名、操作符、标签值确定)进行调度,调度时最小单位为拓扑域。例如,某个拓扑域中的一个节点满足负载亲和性规则,则该拓扑域中的节点均可以被调度。 标签名 设置工作负载亲和/反亲和性时,填写需要匹配的工作负载标签。 该标签可以使用系统默认的标签,也可以使用自定义标签。 操作符 可以设置四种匹配关系(In、NotIn、Exists、DoesNotExist)。 In:亲和/反亲和对象的标签在标签值列表(values字段)中。 NotIn:亲和/反亲和对象的标签不在标签值列表(values字段)中。 Exists:亲和/反亲和对象存在指定标签名。 DoesNotExist:亲和/反亲和对象不存在指定标签名。 标签值 设置工作负载亲和/反亲和性时,填写工作负载标签对应的标签值。 配置负载亲和参数会触发工作负载滚动升级,即Pod会立即发生重启。 父主题: 调度策略
  • 新建集群和网格 登录CCE控制台选择在当前企业版集群所在的同VPC下创建集群。 在应用服务网格ASM控制台 ,创建基础版本网格,选择步骤1新建的集群。 在新建的网格详情页,依次单击“网格配置-sidecar管理-sidecar管理”,选择需要开启自动注入的命名空间(准备工作中步骤11中记录的命名空间),是否重启已有服务选择“是”,勾选“取消注入sidecar会重启关联的Pod,将会暂时中断您的业务”,单击“确定”。 查看网格使用了几个ELB,新建同等数量和规格的ELB。
  • 删除已添加的iptables规则 以root用户登录虚拟机。 执行以下命令删除添加的istio iptables规则。 iptables -t nat -D PREROUTING -p tcp -j ISTIO_INBOUND iptables -t nat -D OUTPUT -p tcp -j ISTIO_OUTPUT iptables -t nat -F ISTIO_OUTPUT iptables -t nat -X ISTIO_OUTPUT iptables -t nat -F ISTIO_INBOUND iptables -t nat -X ISTIO_INBOUND iptables -t nat -F ISTIO_REDIRECT iptables -t nat -X ISTIO_REDIRECT iptables -t nat -F ISTIO_IN_REDIRECT iptables -t nat -X ISTIO_IN_REDIRECT iptables-save 执行以下命令查看虚拟机当前的iptables规则。 iptables -t nat -L -v 回显如下,可以看到istio相关规则已经清除。 Chain PREROUTING (policy ACCEPT 2 packets, 104 bytes) pkts bytes target prot opt in out source destination 47 2498 DOCKER all -- any any anywhere anywhere ADDRTYPE match dst-type LOCALChain INPUT (policy ACCEPT 2 packets, 104 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 5 packets, 350 bytes) pkts bytes target prot opt in out source destination 0 0 DOCKER all -- any any anywhere !localhost/8 ADDRTYPE match dst-type LOCALChain POSTROUTING (policy ACCEPT 5 packets, 350 bytes) pkts bytes target prot opt in out source destination 0 0 MASQUERADE all -- any !docker0 172.17.0.0/16 anywhere Chain DOCKER (2 references) pkts bytes target prot opt in out source destination 0 0 RETURN all -- docker0 any anywhere anywhere
  • 配置同步 方案一 手动同步网格配置(推荐) 手动在新建的网格上添加网关路由,并同步1.0企业版网格配置。 方案二 使用备份网格资源还原配置 查看企业版网格网关使用了几个ELB,使用新建的几个ELB进行替换,如下图所示使用了两个ELB: ELB1:(3dbb4787-75c1-42f0-897a-1f683f7e89a0)* .*.*.* ELB2:(e60fdaa7-3398-4a19-8bd1-d53598c6917e)* .*.*.* 新建两个ELB。 newELB1:(caf6ec4a-2fa8-42ae-bdfb-388f8b13778a)* .*.*.* newELB2:(792c0a3d-190d-413d-a5b9-5c1ac3fe3705)* .*.*.* 将准备工作中备份的istio 配置文件拷贝一份到新集群节点上, 执行如下命令: #查看老ELB IPgrep -i "老ELB IP" *.yaml#ELB IP 替换sed -i 's/老ELB IP/新ELB IP/g' *.yaml#ELB ID 替换sed -i 's/老ELB ID/新ELB ID/g' *.yaml#替换clusterIDsed -i 's/老clusterID/新clusterID/g' *.yaml#替换CluseterNamesed -i 's/老CluseterName/新CluseterName/g' *.yaml#替换完成后查看 grep -i "新ELB IP" *.yamlgrep -i "新ELB ID" *.yamlgrep -i "新clusterID" *.yamlgrep -i "新CluseterName" *.yaml 替换完成后如下所示: 将准备工作中备份的配置文件在新网格中恢复,若未配置kubectl命令,可参考CCE配置kubectl 。 kubectl create -f all-svc.yaml//kubectl create -f all-secret.yamlkubectl create -f all-vs.yamlkubectl create -f all-dr.yamlkubectl create -f all-gw.yamlkubectl create -f all-se.yamlkubectl create -f all-ef.yamlkubectl create -f all-sidecar.yamlkubectl create -f all-we.yamlkubectl create -f all-wg.yamlkubectl create -f all-pa.yamlkubectl create -f all-ra.yamlkubectl create -f all-ap.yamlkubectl create -f user-all-svc.yamlkubectl create -f user-all-secret.yaml 若出现“Error from server (AlreadyExists): xxxxx already exists” 已存在的报错则忽略。 删除新版本无用配置。 若源版本是1.6企业版则执行如下命令: kubectl -nistio-system delete svc istiod-remotekubectl -nistio-system delete svc istiod-elbkubectl -nistio-system delete vs istiod 若源版本是1.8企业版则执行如下命令: kubectl -nistio-system delete envoyfilter metadata-exchange-1.6 kubectl -nistio-system delete envoyfilter metadata-exchange-1.7 kubectl -nistio-system delete envoyfilter metadata-exchange-1.8 kubectl -nistio-system delete envoyfilter stats-filter-1.6kubectl -nistio-system delete envoyfilter stats-filter-1.7kubectl -nistio-system delete envoyfilter stats-filter-1.8kubectl -nistio-system delete envoyfilter tcp-metadata-exchange-1.6kubectl -nistio-system delete envoyfilter tcp-metadata-exchange-1.7kubectl -nistio-system delete envoyfilter tcp-metadata-exchange-1.8kubectl -nistio-system delete envoyfilter tcp-stats-filter-1.6kubectl -nistio-system delete envoyfilter tcp-stats-filter-1.7kubectl -nistio-system delete envoyfilter tcp-stats-filter-1.8kubectl -nistio-system delete svc istiod-remotekubectl -nistio-system delete svc istiod-elbkubectl -nistio-system delete vs istiod 验证业务功能若出现服务异常场景,单击处理,查看异常错误。 在CCE service页面修改
  • 卸载容器 在虚拟机上执行以下命令,获取asm-proxy容器ID。 docker ps | grep asm-proxy 回显第一列为asm-proxy容器的ID。 46afed024f46 asm-proxy:1.8.4 "/usr/bin/bash /usr/..." 2 days ago Up 2 days asm-proxy 执行以下命令,停止asm-proxy容器。 docker rm -f xxx 其中,xxx为1获取的asm-proxy容器ID。
  • 添加readiness探针 添加readiness探针,可以保证您的新实例pod在真正准备就绪时,才开始接管业务流量。这就避免了在新的实例pod未启动时,接管业务流量造成的访问不通问题。 相关配置如下: kubectl get deploy nginx -n namespace_name -oyaml | grep readinessProbe -a10 配置项说明: readiness探针配置项:deployment.spec.template.spec.containers[i].readinessProbe 其中,包括探针检查初始时间,检查间隔,超时时间等配置。