CloudProvider 提供kubernetes与云厂商基础服务的对接能力,由 cloud-controller-manager组件实现(lb,云盘,安全组等等)。
aliyun-cloud-provider这个组件主要是aliyun平台的对接插件,可以让用户在创建k8s LoadBalancer 类型的service的时候自动的为用户创建一个阿里云SLB,同时动态的绑定与解绑SLB后端,并且提供了丰富的配置允许用户自定义生成的LoadBalancer.
其他cloud-provider比如aws可提供elb,ebs,安全组等能力,阿里云这里实现了service_controller和route_controller,所以暂时只提供了对接slb资源,其他资源需要单独插件在cloud-provider上层实现,比如cluster-autoscaler需依赖cloud-provider完成node初始化.
所以cloud-provider的能力仅仅对接云厂商基础服务给kubernetes集群使用,我们使用aliyun-cloud-provider 主要也是对接aliyun ess资源,使用cluster-autoscaler动态/定时伸缩kubernetes node节点。
集群环境:
kubele 启动参数添加--cloud-provider=external --hostname override= instance id--provider id= instance id参数并重启kubelet。格式为 Instance。
以下命令可找到REGION_ID 和INSTANCE_ID
然后重启kubelet kubectl get node 查看hostname是否生效,也可以delete node,重新注册到集群。
cloud-provider需要一定的权限才能访问阿里云,需要为ECS实例创建一些RAM策略,或者直接使用accesskeyid&secret,由于我们容器部署cloud-provider所以这里采用AK。
1.配置aliyun-cloud-provider AK(access key) 权限
创建自定义策略,然后将策略绑定到k8s-cloud-provider用户,创建其AK提供给aliyun-cloud-provider使用,保证只能访问我们授权的资源。或者参考地址: https://github.com/kubernetes/cloud-provider-alibaba-cloud/blob/master/docs/examples/master.policy
创建cloud-config configmap 为cloud-provider提供配置,主要存放AK信息
替换$CA_DATA 为cat /etc/kubernetes/pki/ca.crt|base64 -w 0输出结果或者kubectl config view --flatten=true可查看CA data ,以及将apiserver替换自己kubernetes apiserver的服务器地址. 我们通过configmap 挂载到cloud-provider容器中.
一旦云控制器管理器启动并运行,运行一个示例nginx部署:
然后使用以下类型创建服务:LoadBalancer:
其他SLB相关创建annotation参考: https://github.com/kubernetes/cloud-provider-alibaba-cloud/blob/master/docs/zh/usage.md
cloud-provider注意事项 :
通过cloud-provider动态管理SLB最佳实践:
FAQ:
参考链接:
如果你确定你的服务器是windows系统的话,并且里面也开了远程桌面的话,那么我推荐你随着我下面提到的排查方法进行操作:
看看服务器能不能ping通
如果服务器正常开着,过了一段时间突然连不上了,其实很大程度上有可能服务器因为CPU占用高导致死机了,这时候可以ping下看看,如果没有禁ping的情况下你会发现绝对ping不通。
2.看看服务器上其他开的应用是否正常。
比方说,web服务没法访问了,远程桌面也连不上,但是开的DNS服务还是可以正常访问,那么就真的需要你通过阿里云的控制台登上去看看怎么回事了。
3.安全组设置
阿里云中在服务器的外面还设置了一个类似于防火墙作用的东西,你得检查你的这个的设置是否正确,其中默认的0.0.0.0规则是不可以删除的。
4.那么重启下试试?
重启下服务器或许可以解决你的问题。