登录容器实例
操作场景
如果在使用容器的过程中遇到非预期的问题,您可登录容器进行调试。
约束与限制
- 在CloudShell中使用kubectl时,kubectl的权限由登录用户的权限决定。
- CloudShell暂不支持委托账号。
- 同一用户在使用CloudShell组件连接集群或容器时,限制同时打开的实例上限数量为15个。
- CloudShell中kubectl集群访问凭据有效期为1天,从UCS重新跳转可以重置有效期。
- 当前仅华北-北京四、华北-北京一、华北-乌兰察布一、华东-上海二、华东-上海一、华南-广州、西南-贵阳一和亚太-新加坡等支持使用CloudShell登录容器,具体请以控制台为准。
前提条件
- 将线下自有IDC或第三方云厂商的网络环境与华为云VPC打通。
- 虚拟专用网络(VPN)方案:请参见通过VPN连接云下数据中心与云上VPC。
- 云专线(DC)方案:请参见用户通过单专线静态路由访问VPC或用户通过单专线BGP协议访问VPC。
- 购买弹性负载均衡(ELB)实例并配置:详情参考购买独享型负载均衡器,购买共享型负载均衡器。
- 创建终端节点服务:详情参考创建终端节点服务。
- 虚拟私有云:选择用户云上所属VPC,与ELB同一个VPC。
- 连接审批:关闭
- 网络协议/端口:协议:TCP,服务端口:ELB实例的监听端口(ELB添加监听器时的端口,例:5443),终端端口:与集群的kubeconfig.yaml文件中端口一致(例:5443)。
- 弹性负载均衡:选择上一步“购买弹性负载均衡(ELB)实例”所创建的ELB实例。
- 终端节点服务创建成功后,添加CloudShell登录白名单:白名单id从集群远程登录接入点配置提醒处获取。
- 集群注册并接入成功。
远程登录接入点配置
- 进入UCS控制台,左侧导航栏选择“容器舰队”。
- 如果是未加入舰队集群,直接单击集群名即可进入集群控制台。
- 如果是已加入容器舰队的集群,先进入对应容器舰队控制台,选择左侧 “集群管理”内的“容器集群”,再进入对应集群控制台。
- 进入目标集群的“基本信息”页面,单击基本信息页面的“接入信息”对应的“配置”按钮。
- 选择项目:如果开通了IAM项目,还需要选择一个项目。
- 终端节点服务:可选择已有VPC终端节点服务,或者新建VPC终端节点服务。
- 单击“确定”。
等待集群接入信息配置成功后,“接入信息”将显示接入终端节点服务的名称,说明集群远程登录接入点已配置成功。
使用CloudShell登录容器
- 进入UCS控制台,左侧导航栏选择“容器舰队”。
- 如果是未加入舰队集群,直接单击集群名即可进入集群控制台。
- 如果是已加入容器舰队的集群,先进入对应容器舰队控制台,选择左侧 “集群管理”内的“容器集群”,再进入对应集群控制台。
- 在左侧导航栏选择“工作负载”,单击目标工作负载名称,查看工作负载的实例列表。
- 单击目标实例操作列中的“更多 > 远程登录”。
图1 登录容器
- 在弹出窗口中选择要登录的容器以及命令,然后单击“确定”。
图2 选择登录的容器与命令
- 页面会自动跳转到CloudShell,并初始化启动kubectl,然后自动执行kubectl exec命令登录到容器。
请等待kubectl exec 命令自动执行后再进行后续操作,此命令出现需要一段时间 5-10秒。
图3 CloudShell页面
使用kubectl命令登录容器
- 使用kubectl连接集群,可参见通过kubectl连接集群。
- 执行以下命令,查看已创建的Pod。
kubectl get pod
示例输出如下:NAME READY STATUS RESTARTS AGE nginx-59d89cb66f-mhljr 1/1 Running 0 11m
- 查询该Pod中的容器名称。
kubectl get po nginx-59d89cb66f-mhljr -o jsonpath='{range .spec.containers[*]}{.name}{end}{"\n"}'
示例输出如下:container-1
- 执行以下命令,登录到nginx-59d89cb66f-mhljr这个Pod中名为container-1的容器。
kubectl exec -it nginx-59d89cb66f-mhljr -c container-1 -- /bin/sh
- 如需退出容器,可执行exit命令。
使用CloudShell连接集群
CloudShell中已预装并配置了kubectl工具,且默认连接到对应集群,您可以在CloudShell界面中直接执行kubectl命令,管理集群资源。使用CloudShell连接集群的具体步骤如下:
- 进入UCS控制台,左侧导航栏选择“容器舰队”。
- 如果是未加入舰队集群,直接单击集群名即可进入集群控制台。
- 如果是已加入容器舰队的集群,先进入对应容器舰队控制台,选择左侧 “集群管理”内的“容器集群”,再进入对应集群控制台
- 在集群基本信息页面,单击页面右上角“命令行工具”即可使用CloudShell。
图4 未加入舰队集群CloudShell图5 已加入容器舰队的集群CloudShell
- 进入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'.