更新时间:2025-08-05 GMT+08:00

登录容器实例

操作场景

如果在使用容器的过程中遇到非预期的问题,您可登录容器进行调试。

约束与限制

  • 在CloudShell中使用kubectl时,kubectl的权限由登录用户的权限决定。
  • CloudShell暂不支持委托账号。
  • 同一用户在使用CloudShell组件连接集群或容器时,限制同时打开的实例上限数量为15个。
  • CloudShell中kubectl集群访问凭据有效期为1天,从UCS重新跳转可以重置有效期。
  • 当前仅华北-北京四、华北-北京一、华北-乌兰察布一、华东-上海二、华东-上海一、华南-广州、西南-贵阳一和亚太-新加坡等支持使用CloudShell登录容器,具体请以控制台为准。

前提条件

  • 将线下自有IDC或第三方云厂商的网络环境与华为云VPC打通。
  • 购买弹性负载均衡(ELB)实例并配置:详情参考购买独享型负载均衡器购买共享型负载均衡器
    • 网络配置:选择用户云上所属VPC。
    • 添加监听器:后端服务器选择“IP类型后端”,IP地址填写集群访问地址,可从集群的kubeconfig.yaml文件中的server字段获得。

  • 创建终端节点服务:详情参考创建终端节点服务
    • 虚拟私有云:选择用户云上所属VPC,与ELB同一个VPC。
    • 连接审批:关闭
    • 网络协议/端口:协议:TCP,服务端口:ELB实例的监听端口(ELB添加监听器时的端口,例:5443),终端端口:与集群的kubeconfig.yaml文件中端口一致(例:5443)。

    • 弹性负载均衡:选择上一步“购买弹性负载均衡(ELB)实例”所创建的ELB实例。
    • 终端节点服务创建成功后,添加CloudShell登录白名单:白名单id从集群远程登录接入点配置提醒处获取。

  • 集群注册并接入成功。

    如果是未加入舰队集群,需要先确认集群已注册并接入网络成功:请参见注册本地集群附着集群

远程登录接入点配置

  1. 进入UCS控制台,左侧导航栏选择“容器舰队”。

    • 如果是未加入舰队集群,直接单击集群名即可进入集群控制台。
    • 如果是已加入容器舰队的集群,先进入对应容器舰队控制台,选择左侧 “集群管理”内的“容器集群”,再进入对应集群控制台。

  2. 进入目标集群的“基本信息”页面,单击基本信息页面的“接入信息”对应的“配置”按钮。

    • 选择项目:如果开通了IAM项目,还需要选择一个项目。
    • 终端节点服务:可选择已有VPC终端节点服务,或者新建VPC终端节点服务。

  3. 单击“确定”

    等待集群接入信息配置成功后,“接入信息”将显示接入终端节点服务的名称,说明集群远程登录接入点已配置成功。

使用CloudShell登录容器

  1. 进入UCS控制台,左侧导航栏选择“容器舰队”。

    • 如果是未加入舰队集群,直接单击集群名即可进入集群控制台。
    • 如果是已加入容器舰队的集群,先进入对应容器舰队控制台,选择左侧 “集群管理”内的“容器集群”,再进入对应集群控制台。

  2. 在左侧导航栏选择“工作负载”,单击目标工作负载名称,查看工作负载的实例列表。
  3. 单击目标实例操作列中的“更多 > 远程登录”

    图1 登录容器

    若工作负载所在集群未配置终端节点服务,则工作负载实例操作列的“远程登录”按钮将会是置灰不可点击状态,并提示用户进行远程登录接入点配置

  4. 在弹出窗口中选择要登录的容器以及命令,然后单击“确定”

    图2 选择登录的容器与命令

  5. 页面会自动跳转到CloudShell,并初始化启动kubectl,然后自动执行kubectl exec命令登录到容器。

    请等待kubectl exec 命令自动执行后再进行后续操作,此命令出现需要一段时间 5-10秒。

    图3 CloudShell页面

使用kubectl命令登录容器

  1. 使用kubectl连接集群,可参见通过kubectl连接集群
  2. 执行以下命令,查看已创建的Pod。

    kubectl get pod
    示例输出如下:
    NAME                               READY   STATUS    RESTARTS       AGE
    nginx-59d89cb66f-mhljr             1/1     Running   0              11m

  3. 查询该Pod中的容器名称。

    kubectl get po nginx-59d89cb66f-mhljr -o jsonpath='{range .spec.containers[*]}{.name}{end}{"\n"}'
    示例输出如下:
    container-1

  4. 执行以下命令,登录到nginx-59d89cb66f-mhljr这个Pod中名为container-1的容器。

    kubectl exec -it nginx-59d89cb66f-mhljr -c container-1 -- /bin/sh

  5. 如需退出容器,可执行exit命令。

使用CloudShell连接集群

CloudShell中已预装并配置了kubectl工具,且默认连接到对应集群,您可以在CloudShell界面中直接执行kubectl命令,管理集群资源。使用CloudShell连接集群的具体步骤如下:

  1. 进入UCS控制台,左侧导航栏选择“容器舰队”。

    • 如果是未加入舰队集群,直接单击集群名即可进入集群控制台。
    • 如果是已加入容器舰队的集群,先进入对应容器舰队控制台,选择左侧 “集群管理”内的“容器集群”,再进入对应集群控制台

  2. 在集群基本信息页面,单击页面右上角“命令行工具”即可使用CloudShell。

    图4 未加入舰队集群CloudShell

    图5 已加入容器舰队的集群CloudShell

  3. 进入CloudShell后,执行以下命令,验证CloudShell中的kubectl是否已连接对应集群。

    kubectl cluster-info    # 查看集群信息

    若回显结果如下,则说明CloudShell中的kubectl已连接集群,您可以直接使用kubectl命令管理集群资源。

    Kubernetes control plane is running at https://xx.xx.xx.xx:5443
    CoreDNS is running at https://xx.xx.xx.xx:5443/api/v1/namespaces/kube-system/services/coredns:dns/proxy
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.