公司企业面对不断变化的用户需求,对于应用的快速开发上线提出了新的挑战,一方面在功能性能方面要求越来越高,另一方面对安全性、稳定性、高可用性、可扩展性也越来越苛刻。当云计算重构整体IT产业的同时,也赋予了企业崭新的增长机遇,通过充分利用云计算的能力,释放更多精力专注于自己的业务。以容器为代表的云原生技术正在推动着整个商业世界飞速发展,企业数字化转型过程中,云原生成为企业持续发展和不断创新的必然选择,一款简单易用、灵活扩展、安全可靠的容器平台是众多企业的必由之选。
在微服务改造及上线过程并不是一帆风顺,涉及微服务拆分,云原生架构不可变得基础设施,声明式的API,微服务,服务网络,DevOPS等,这些都是传统企业遇到的困境。
对于在云原生背景下,技术的更新迭代,如果让技术转型立而不破,有机结合呢?
对于我们的应用,一路小跑,追求短平快的快速发布模式,快速实错,从工具->单模块单体->多模块单体->微服务架构,基础架构也在不断变更,从IDC物理机房服务器自己完成高可用架构部署->云服务器,利用公有云资源提供的LB及其他SaaS产品完成高可用架构->容器的基础编排基础设施Kubernetes,为满足市场需求不断进行技术革新与演进。
云原生在为我们提供便利的同时,也提出了更多的挑战,如何运用好云原生,加速企业数字化转型,在此我们就需要借助公有云厂商为我们提供的一站式云原生解决方案,腾讯云容器服务(Tencent Kubernetes Engine,TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务。腾讯云容器服务完全兼容原生 kubernetes API ,扩展了腾讯云的云硬盘、负载均衡等 kubernetes 插件,为容器化的应用提供高效部署、资源调度、服务发现和动态伸缩等一系列完整功能,解决用户开发、测试及运维过程的环境一致性问题,提高了大规模容器集群管理的便捷性,帮助用户降低成本,提高效率。容器服务提供免费使用,涉及的其他云产品另外单独计费。
TKE的使用使得我们可以将容器云交由专业团队进行维护,我们自己来专注于自身业务,释放更多经历对自身业务进行创新,助理企业进行数字化转型。
以下是在应用TKE中的一些实战排错案例。
问题描述: 部署devlopment类型的前端服务(vue+nginx),事件有报错,查看日志为空。
解决方案:日志为容器运行产生日志,创建容器时已报错退出,因此无日志输出可以查看具体事件分析原因。
反思:监控容器日志,将容器日志打印在控制台,采用EFK方案可以在TKE平台查看容器日志,也可以采用filebeat采集容器中持久化文件的日志。
问题描述:选择Global Router网络类型时,同vpc内集群网段不能冲突
问题描述:修改yaml,没有提示错误,但点击完成后不生效,还是重置为之前的yaml文件
解决方式:kubectl在节点中手动创建,根据报错修改配置。
yaml配置:
问题描述:nodeport svc不能被访问
解决方式:先在节点内通过curl访问pod,可以正常访问,之后访问service,也可以正常返回信息,判断在node节点上面的云防火墙有限制,查看服务器iptables策略正常,放行安全组放通nodeport端口后正常。
问题描述:No networks found in /etc/cni/net.d/multus
解决方式: 查看对应节点10.0.0.8是存在该插件的,重新部署解决。可能是node是新加入的节点,pod创建时网络插件未ready。
问题描述:pod 0调度正常, pod1调度报错:
0/3 nodes are available: 1 node(s) didn't match pod affinity/anti-affinity, 1 node(s) didn't satisfy existing pods anti-affinity rules, 2 Insufficient cpu.
解决方式:由于pod反亲和性podAntiAffinity 配置,pod(master-1)不能调度到已经有pod (app=elasticsearch-master)的node3上,可以修改为preferredDuringScheduling-IgnoredDuringExecution或者考虑再增加一个新node。
解决方式:build镜像前,在Dockerfile中配置时区。
RUN rm -f /etc/localtime \
&& ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
&& echo "Asia/Shanghai" > /etc/timezone
Readiness probe failed: Waiting for elasticsearch cluster to become ready (request params: "wait_for_status=green&timeout=1s" )
解决方案:需要确保Elasticsearch在升级到有状态集和Kubernetes节点本身期间保持可用,等待集群变green。通过curl 192.168.255.131:9200/_cluster/health?pretty查看状态
问题描述:如何规划service和pod该选用哪个ip地址段以及子网掩码长度
解决方案:设计网络时一定要结合业务设置合理的ip地址和子网掩码,防止后期pod和service的ip地址不够使用。
问题描述:对于在云原生中配置中心,例如configmap和secret对象,虽然可以进行直接更新资源对象,对于引用这些有些不变的配置是可以打包到镜像中的,那可变的配置呢?每次配置更新后,都要重新打包一次,升级应用。镜像版本过多,也给镜像管理和镜像中心存储带来很大的负担。定制化太严重,可扩展能力差,且不容易复用。在K8s中Configmap或Secret使用有两种方式,一种是env系统变量赋值,一种是volume挂载赋值,env写入系统的configmap是不会热更新的,而volume写入的方式支持热更新!
解决方案:
1.业务改造:如果业务自身支持 reload 配置的话,比如nginx -s reload,可以通过 inotify 感知到文件更新,或者直接定期进行 reload(这里可以配合我们的 readinessProbe 一起使用)。
2.基础设施自动滚动升级:目前有个开源工具Reloader,它就是采用这种方式,通过 watch ConfigMap 和 Secret,一旦发现对象更新,就自动触发对 Deployment 或 StatefulSet 等工作负载对象进行滚动升级。
TKE助力企业将更多的精力放在迁移平台的逻辑业务开发,提供从基础设施高可用部署,其主要针对容器进行编排管理。
其于腾讯云LB/CBS等实现联动,提供一整套完善的云原生解决方案,而且TKE也进行了开源,可以私有化进行部署,在这里可以遇到志同道合的友人,一块探讨适合自己业务的云原生之路。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。