详情页标题前

阿里云容器服务ACK应用FAQ-云淘科技

详情页1

本文主要为您介绍Kubernetes集群中应用的常见问题

  • 为什么拉取镜像速度慢或拉取失败?

  • 如何进行ACK应用故障排查?

  • 如何手动升级Helm的版本?

  • 如何支持私有镜像?

  • Cloud Controller Manager(CCM)组件升级检查失败

  • 在Kubernetes集群中如何支持私有镜像编排容器

  • 容器镜像服务源码绑定失败问题排查

  • 容器镜像仓库构建服务失败问题排查

  • 如何在国外地域的ACK集群中使用中国内地地域的容器镜像服务企业版的镜像?

  • 更新应用时,如何实现K8s零中断滚动更新?

为什么拉取镜像速度慢或拉取失败?

您可以按照以下方式对拉取镜像慢或失败的问题进行排查:

  • 如果您拉取的是Docker Hub中的国外镜像,或当前网络条件比较差,建议您手动拉取镜像到本地节点,然后重启Pod,或将镜像上传到ACR中,使用ACR拉取镜像。具体操作,请参见使用企业版实例推送和拉取镜像和使用免密组件拉取容器镜像。

  • 如果您使用ACR拉取镜像,请确认用户名或密码是否正确。建议使用免密插件拉取镜像,具体操作,请参见使用免密组件拉取容器镜像。

  • 确认发起请求的客户端是否具备公网能力,如果没有,您需要为客户端设置公网。

如何进行ACK应用故障排查?

ACK应用故障主要是由Pod、Deployment(StatefulSet/DaemonSet)控制器和Service的问题导致,您需要检查以下几类问题。

检查Pod

关于Pod异常问题的处理,请参见Pod异常问题排查。

检查Deployment

  • 创建Deployment、DaemonSet、StatefulSet或Job等资源时,可能为Pod的问题。请参见Pod异常问题排查检查Pod的问题。

  • 您也可以通过查看和Deployment相关的事件及日志定位问题:

    本文以Deployment为例进行介绍,在DaemonSet、StatefulSet或Job等资源中查看事件和日志的操作类似。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态。在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

    3. 无状态页面,单击目标Deployment名称。然后单击事件日志,即可通过异常信息定位问题。

关于创建StatefulSet遇到的更多问题。请参见Forced Rollback。

检查Service

服务(Service)可以为一组Pod提供负载均衡的功能。以下介绍如何定位与Service相关的几类常见问题:

  1. 检查Service的Endpoints。

  2. 登录Kubernetes集群的Master节点。详情请参见获取集群KubeConfig并通过kubectl工具连接集群。

  3. 执行以下命令,查看Service的Endpoints。

    以下代码中[$Service_Name]为目标Service的名称。

    kubectl get endpoints [$Service_Name]

    请确保ENDPOINTS值的地址个数和您期望与该Service匹配的Pod个数相同。例如,您使用Deployment部署了应用,其副本数为3,那么ENDPOINTS值的地址个数一定是3个。

Service中缺少Endpoints地址

如果您的Service中缺少Endpoints地址,可以通过Service的selector查询Service与Pod是否相关联,示例如下:

  1. 若您服务的YAML文件信息如下图所示时。阿里云容器服务ACK应用FAQ-云淘科技

  2. 执行以下命令,核对返回的Pod是否为您已关联的Pod。

    kubectl get pods --selector=app=[$App] -n [$Namespace]

    说明

    • [$App]为关联的Pod名称。

    • [$Namespace]为服务所在的命名空间,如果服务在默认空间,则无需指定。

  3. 如果返回的Pod是您关联的Pod,但没有Endpoints地址,很可能是您没有为Service指定正确的端口。如果Service中指定的端口实际上在Pod中没有被监听,那么该Pod不会被添加到ENDPOINTS列表中,因此,请确保Service指定的容器端口在Pod中可以访问,命令如下。

    curl [$IP]:[$Port]

    说明

    • [$IP]为第1步YAML文件中的clusterIP。

    • [$Port]为第1步YAML文件中的port值。

    • 具体测试方法以实际环境为准。

网络转发问题

如果您的客户端可以连接Service,并且Endpoints中地址正确,但连接很快断开,那么可能是流量不能转发到您的Pod上,通常需要进行以下检查:

  • Pod是否正常工作。

    定位Pod问题。具体操作,请参见Pod异常问题排查。

  • Pod地址是否正常连通。

    1. 执行以下命令,获取Pod的IP地址。

      kubectl get pods -o wide
    2. 登录任意节点,使用ping命令测试Pod的IP地址,确认网络连接正常。

  • 应用程序是否正常监听端口。

    如果您的应用程序监听80端口,那么您需要在Service中指定容器端口为80。在任意节点上执行curl [$IP]:[$Port]命令,查看Pod中容器的端口是否正常。

如何手动升级Helm的版本?

  1. 登录到Kubernetes集群。更多信息,请参见获取集群KubeConfig并通过kubectl工具连接集群。

  2. 执行以下命令安装Tiller。

    其中镜像地址可使用对应地域的VPC域名,例如,杭州地域的机器替换为registry-vpc.cn-hangzhou.aliyuncs.com/acs/tiller:v2.11.0

    helm init --tiller-image registry.cn-hangzhou.aliyuncs.com/acs/tiller:v2.11.0 --upgrade
  3. 等待tiller健康检查通过,执行helm version命令查看版本升级情况。

    说明

    • 这里只会升级Helm服务端版本,客户端可以通过直接下载对应的Client Binary使用。

    • 请下载阿里云支持的最新客户端版本Helm client 2.11.0。

  4. Helm客户端和服务端版本都升级完毕后,执行以下命令查看Helm版本。

    helm version

    预期输出:

    Client: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b****", GitTreeState:"clean"}
    Server: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b****", GitTreeState:"clean"}

如何支持私有镜像?

执行以下命令创建Secret。

kubectl create secret docker-registry regsecret --docker-server=registry-internal.cn-hangzhou.aliyuncs.com --docker-username=abc****@aliyun.com --docker-password=**** --docker-email=abc****@aliyun.com

说明

  • regsecret:指密钥的键名称,可自定义。

  • --docker-server:指Docker仓库地址。

  • --docker-username:指Docker仓库用户名。

  • --docker-password:指Docker仓库登录密码。

  • 可选:--docker-email:指邮件地址。

您可以通过以下两种方法进行操作:

  • 手动配置私有镜像

    YAML文件加入密钥参数。

    containers:
        - name: foo
          image: registry-internal.cn-hangzhou.aliyuncs.com/abc/test:1.0
    imagePullSecrets:
        - name: regsecret

    说明

    • imagePullSecrets是声明拉取镜像时需要指定密钥。

    • regsecret必须和上面生成密钥的键名一致。

    • image中的Docker仓库名称必须和--docker-server中的Docker仓库名一致。

    更多信息,请参见使用私有仓库。

  • 自动配置私有镜像实现无密钥编排

    说明

    为了避免每次使用私有镜像部署时,都需要引用密钥,您可将Secret添加到Namespace的Default Service Account中。更多信息,请参见Add ImagePullSecrets to a service account。

    1. 执行以下命令,查看创建的拉取私有镜像的Secret。

      kubectl get secret regsecret

      预期输出:

      NAME        TYPE                             DATA      AGE
      regsecret   kubernetes.io/dockerconfigjson   1         13m

      本例中采用手动配置的方式,修改命名空间的默认服务账号Default,从而将此Secret作为imagePullSecret。

    2. 创建一个sa.yaml配置文件,将服务账号Default的配置导入到该文件中。

      kubectl get serviceaccounts default -o yaml > ./sa.yaml
    3. 执行以下命令查看sa.yaml文件详情。

      cat  sa.yaml

      预期输出:

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        creationTimestamp: 2015-08-07T22:02:39Z
        name: default
        namespace: default
        resourceVersion: "243024"             #注意该项selfLink: /api/v1/namespaces/default/serviceaccounts/default。
        uid: 052fb0f4-3d50-11e5-b066-42010af0****
      secrets:
      - name: default-token-uudgeoken-uudge
    4. 执行vim sa.yaml命令,删除resourceVersion,并增加拉取镜像的密钥配置项imagePullSecrets。修改后的配置如下所示:

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        creationTimestamp: 2015-08-07T22:02:39Z
        name: default
        namespace: default
        selfLink: /api/v1/namespaces/default/serviceaccounts/default
        uid: 052fb0f4-3d50-11e5-b066-42010af0****
      secrets:
      - name: default-token-uudge
      imagePullSecrets:                 #增加该项。
      - name: regsecret                                    
    5. 执行以下命令将sa.yaml配置文件替换Default的服务账号配置。

      kubectl replace serviceaccount default -f ./sa.yaml

      预期输出:

      serviceaccount "default" replaced
    6. 创建Tomcat示例应用。

      Tomcat编排示例tomcat.yaml文件如下所示:

      apiVersion: apps/v1 
      kind: Deployment
      metadata:
        name: tomcat-deployment
        labels:
          app: tomcat
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: tomcat
        template:
          metadata:
            labels:
              app: tomcat
          spec:
            containers:
            - name: tomcat
              image: registry-internal.cn-hangzhou.aliyuncs.com/abc/test:1.0              #替换为您自己的私有镜像地址Ports。
              - containerPort: 8080

      执行以下命令创建Tomcat应用。

      kubectl create -f tomcat.yaml
    7. Pod启动成功后执行以下命令,可看到预期的配置。

      kubectl get pod tomcat-**** -o yaml

      预期输出:

      spec:
        imagePullSecrets:
      - nameregsecretey

如何在国外地域的ACK集群中使用中国内地地域的容器镜像服务企业版的镜像?

在此种场景下,您需要在中国内地地域购买标准版和高级版的容器镜像服务企业版,在国外地域购买基础版的容器镜像服务企业版。

完成购买后,您需要使用同步实例的方法将中国内地地域的镜像同步到国外地域,具体操作,请参见同账号同步实例。在国外地域的容器镜像服务企业版中获取镜像地址,然后在国外地域的ACK集群中使用镜像地址创建应用。

如果您使用容器镜像服务个人版,同步镜像的速度将非常慢。如果您使用的是自建仓库,您需要购买GA加速。

说明

自建仓库和购买GA加速的成本比购买容器镜像服务企业版高,推荐您使用容器镜像服务企业版。

关于容器镜像服务企业版的计费方式,请参见计费说明。

更新应用时,如何实现K8s零中断滚动更新?

旧的应用删除,新的应用在创建过程中产生了短暂的5XX访问错误。此问题是由于应用滚动更新时,Pod变更同步到CLB会存在秒级延迟,因此会出现5XX错误。您可以通过配置优雅中断等方式解决此问题,以实现K8s零中断滚动更新。具体操作,请参见如何实现K8s零中断滚动更新?。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/159070.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 腾讯云容器服务镜像仓库相关同尘科技

    Serverless 集群如何使用容器镜像服务 TCR? Serverless 集群如需使用容器镜像服务 TCR,需要确保 已选择对应的镜像访问凭证 和 Serverless 集群到镜像服务网络打通。 确保已选择对应的镜像访问凭证 容器镜像默认私有,因此在创建工作负载时:1. 不指定访问凭证,自动匹配命名空间下已有访问凭证,需要确保当前命名空间下,已有镜像仓…

    2023年12月9日
  • 腾讯云对象存储存储桶标签

    简介 本文档提供关于存储桶标签的 API 概览以及 SDK 示例代码。 API 操作名 操作描述 PUT Bucket tagging 设置存储桶标签 为已存在的存储桶设置标签 GET Bucket tagging 查询存储桶标签 查询指定存储桶下已有的存储桶标签 DELETE Bucket tagging 删除存储桶标签 删除指定的存储桶标签 SDK AP…

    腾讯云 2023年12月9日
  • 腾讯云CVM服务器关于标准型 S5 价格调整的公告

    腾讯云最新一代全新服务器标准型 S5 包年包月价格调整: 标准型 S5 规格 降幅 S5.SMALL2 降价49% S5.MEDIUM4 降价19% 其他规格 降价13% 调整详情 2019年9月17日起,购买/续费云服务器包年包月预付费标准型 S5 机型可享受特惠时长折扣。包年包月的时长折扣适用于按量计费转包年包月的场景。特惠时长折扣只涉及 CPU 和内存…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云容器服务删除节点池同尘科技

    操作场景 本文介绍如何通过容器服务控制台删除集群下已创建的节点池。您可参考本文删除不再使用的节点池,减少不必要的资源浪费。 前提条件 已创建可用节点池。详情请参见 创建节点池。已进入“节点池列表”页面。详情请参见 查看节点池。 操作步骤 1. 选择目标节点池名片页右上角的更多 > 删除。如下图所示: 2. 在弹出的删除节点池窗口中,按需设置是否保…

    2023年12月9日
  • 腾讯云对象存储列出对象

    简介 本文档提供关于列出对象操作相关的 API 概览以及 SDK 示例代码。 API 操作名 操作描述 GET Bucket(List Objects) 查询对象列表 查询存储桶下的部分或者全部对象 GET Bucket Object Versions 查询对象及其历史版本列表 查询存储桶下的部分或者全部对象及其历史版本信息 SDK API 参考 SDK 所…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。