本文介绍自建Kubernetes集群部署VNode来使用ECI的常见问题。
网络相关问题
镜像拉取相关问题
Pod调度相关问题
存储相关问题
日志和监控相关问题
云上服务如何访问线下IDC的Pod IP?
如果您使用高速通道(专线)来打通线下和云上网络,则线下IDC和云上服务之间可以通过边界路由协议BGP相互学习路由规则,IDC可以将Pod IP的路由信息通过BGP广播给云上服务,实现云上服务可以访问线下IDC的Pod IP。具体操作,请参见配置BGP。
线下IDC服务如何访问云上的Pod IP?
如果您使用高速通道(专线)来打通线下和云上网络,配置BGP后,线下IDC和云上服务之间可以相互学习路由规则,云上的Pod IP的路由信息可以部署CCM实现自动同步。更多关于CCM的信息,请参见Cloud Controller Manager。
自建K8s集群部署CCM后,可以将K8s的Pod IP路由信息同步到VPC路由表。部署CCM时,请注意以下事项:
需要将K8s集群节点的providerID修改为
<region-id>.<ecs-id>
的格式,例如cn-shanghai.i-ankb8zjh2nzchf*******
。确保Pod IP与节点的Pod CIDR相匹配,即该节点上的Pod IP地址均在该节点定义的Pod CIDR网段内。例如:Calico IPAM需要配置为
host-local
才能使Pod IP与节点的Pod CIDR相匹配。Pod CIDR网段可以在节点的spec信息中查看:
spec: podCIDR: 172.23.XX.0/26 podCIDRs: - 172.23.XX.0/26 providerID: cn-shanghai.i-ankb8zjh2nzchfxxxxxxx
内网域名无法解析怎么办?
问题描述
云上和线下服务由于无法解析内网域名,导致无法进行业务调用,包括:
云上服务无法解析IDC内网域名
IDC服务无法解析云上PrivateZone域名
解决方案
线下IDC和阿里云VPC分别属于两套网络环境,如果部署在线下IDC和云上的服务都需要通过DNS解析进行业务间调用,您可以配置PrivateZone云解析实现云上和线下服务通过内网域名方式实现相互访问。具体操作,请参见PrivateZone&VPN网关联动实现云上访问云下资源。
线下IDC服务如何访问云上服务?
问题描述
线下IDC服务通过专线无法访问阿里云服务,例如IDC通过专线无法访问云数据库RDS、对象存储OSS、日志服务SLS等。
解决方案
您可以通过以下两种方式解决问题,推荐您使用方案一。
方案一
在云上配置云服务域名,边界路由器VBR将通过边界路由协议BGP发布路由给线下IDC。具体操作,请参见访问云服务。
方案二
配置IDC添加静态路由,将100.64.0.0/10路由到专线。
使用自建的容器镜像仓库无法拉取镜像,怎么办?
问题描述
使用自建的容器镜像仓库无法拉取镜像,报错如下:
解决方案
上述问题可能是因为镜像仓库使用的自签发的证书,拉取镜像时无法通过证书认证导致。在创建Pod时,您可以添加以下Annotation来跳过证书认证:
"k8s.aliyun.com/insecure-registry": "<host-name>"
例如:假设私有镜像仓库中的Nginx镜像的链接为test.example.com/test/nginx:apline
,则可以添加"k8s.aliyun.com/insecure-registry": "test.example.com"
的Annotation来跳过证书认证。
如何调度Pod到VNode?
您可以根据业务需要选择合适的方式将Pod调度到VNode,即在ECI上运行Pod。常用方式如下:
手动调度
通过配置nodeSelector和tolerations、指定nodeName的方式,可以手动将Pod调度到VNode。具体操作,请参见将Pod调度到VNode。
自动调度
部署eci-profile组件后,可以自定义配置Selector,将满足条件的Pod自动调度到VNode。具体操作,请参见使用eci-profile调度Pod到VNode。
为什么DaemonSet Pod调度到VNode后一直是Pending状态?
由于VNode不是真实节点,并不支持DaemonSet,因此在创建DaemonSet时,您需要配置反亲和性调度策略,禁止DaemonSet Pod调度到VNode上。配置示例如下:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: type
operator: NotIn
values:
- virtual-kubelet
使用配置Pod Label的方式调度Pod到VNode,为什么调度失败?
使用配置Pod Label的方式调度Pod到VNode时,需要确保K8s版本为1.16及以上版本。
挂载NAS目录超时,怎么办?
问题原因
由于K8s的工作流程是挂载NAS后按照Pod指定的权限及归属,对相应NAS目录中的文件递归执行chmod/chown操作,因此如果NAS目录中文件较多,且在创建Pod时在安全上下文中配置了文件的权限及归属时,会产生NAS Volume挂载超时的问题。
解决方案
配置安全上下文时,将fsGroupChangePolicy配置为OnRootMismatch,实现当NAS中根目录权限及归属与Pod预期匹配时,跳过chmod/chown操作。更多信息,请参见为Pod或容器配置安全上下文。
如何采集日志到阿里云日志服务SLS?
您可以在自建Kubernetes集群上安装Logtail组件(即安装alibaba-log-controller组件),以实现采集日志到SLS。在安装Logtail组件过程中,系统将自动完成以下操作:
创建alibaba-log-configuration ConfigMap,该ConfigMap中包含日志服务配置信息,例如Project等。
(可选)创建AliyunLogConfig CRD资源。
(可选)部署alibaba-log-controller Deployment,用于监听AliyunLogConfig CRD资源的变更、创建Logtail采集配置。
部署logtail-ds Daemonset,用于采集节点的日志。
具体操作,请参见安装Logtail组件。
如果您的集群版本较低(例如1.13),请获取并部署早期版本的日志采集CRD(下载链接为alibaba-cloud-log-0.1.1)。如果还有其他问题,请提交工单。
metrics-server报404错误,如何处理?
目前VNode支持0.5.x及以下版本的metrics-server,如果出现404报错,请尝试降低metrics-server的版本。
从0.6.x版本开始,metrics-server获取node metrics信息时,由/stats/summary
切换到了/metrics/resource
,VNode暂时不支持/metrics/resource API。
通常情况下,metrics-server的启动参数如下:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --kubelet-insecure-tls