设为首页加入收藏
全站搜索
新闻详情
 
当前位置
Core 借助 K8S 玩转容器编排
作者:admin    发布于:2019-09-06 06:49    浏览次数:
  

  由于最近在学习微服务,所以就基于之前docker的基础上把玩一下k8s(Kubernetes),以了解基本概念和核心功能。

  k8s涉及到很多基本概念,可以看十分钟带你理解Kubernetes核心概念快速了解。 下面这张图包含了k8s了核心组成模块:

  梳理完基本概念,我们来动手玩一玩吧。有三种玩法:一种就是跟随k8s官方的在线实验室进行实操;第二种就是基于Docker For Windows 中集成的k8s进行玩耍;第三种就是安装MiniKube捣鼓。这里选择第二种进行讲解。

  PS:很多初学者在环境准备阶段遭遇挫折的后就直接放弃了,笔者为了搭建这个k8s环境也耗费了不少时日,其中包含一次重装系统,汗!希望下面的步骤助你k8s之行有个好的开端。

  这时你可能会问,这和我直接用docker run-d-p8091:80k8s.net.demo运行一个容器有什么区别呢?并没有看到k8s强大在哪里啊?! 别急,你现在再执行一次kubectlgetpod,我来告诉你答案。

  看到RESTARTS列没有,它是用来说明pod重启了多少次。使用docker运行容器,如果容器挂掉,docker是不会负责给你重启容器的。 而在k8s中,只需要配置存活探针,k8s就会自动探测容器的运行状态,进行自动重启。而存活探针仅需要在yaml文件中指定livenessProbe节点即可。(PS:/home/checkhealth 使用随机数来模拟容器应用运行状态,当随机数小于50,就返回BadRequest。)

  Pod运行于集群内部,虽然使用kubect port-forward可以映射端口在本机访问,但对于外部依旧无法访问,如果需要暴露供外部直接访问,则需要创建 service。

  另外一种方式就是创建描述文件来创建了,添加k8s-net-service.yaml文件:

  是时候来体验下k8s强大的自动伸缩功能了。k8s中通过创建ReplicaSet或Deployment来管理 pod,进而完成自动化扩展和管理。PS: 也可以使用ReplicaController,但推荐使用ReplicaSet,因为其标签匹配功能更强大。

  从上面看到,k8s-net-replicaset以k8s-net-pod为模板创建了额外两个pod副本,当我们尝试删除其中一个副本后,再次查看pod列表,replicaset会自动帮我们重新创建一个pod。 那我们尝试把刚创建的k8s-net-replicaset暴露为Service,看看实际运行是什么效果吧。依次执行以下命令:

  然后浏览器访问,尝试多次刷新浏览器,显示效果如下,我们发现ReplicaSet已帮我们做好了负载均衡。

  假如现在网站访问量剧增,3个实例任然无法有效支撑,可以不停止应用的情况下做到水平伸缩吗?Of course, Yes! 仅需执行kubectl scale命令进行扩展即可。

  从以上的输出可以看,我们一句命令就扩展pod实例到6个,是不是很简单?!

  本文从使用docker创建image,到使用k8s创建第一个pod,到暴露第一个Service,再到使用ReplicaSet 进行容器伸缩,基本串通了k8s的核心基础概念,从而对k8s有了基础的认知,希望对你的K8S之路有所帮助。

  由于篇幅有限,笔者也是初玩,k8s的很多功能并未一一罗列,那就留着下次分享吧。 如果要问我,k8s有什么好书推荐,首推《Kubernetes In Action》,国内已经有中文版了,翻译的不错! 本文示例代码已上传至GitHub:。

  参考资料雨夜朦胧 - Kubernetes初探[1]:部署你的第一个ASP.NET Core应用到k8s集群返回搜狐,查看更多

脚注信息
Copyright 2017 凯发k8 All Rights Reserved