kubernetes实战之运行aspnetcore webapi微服务 - kubernetes
1、预备工作
- unbuntu 16.04 or above
- docker for linux
- kubernetes for linux 集群环境
2、使用vs2017创建一个web api应用程序,并打包镜像到本地。
3、推送本地镜像到docker hub
4、编写k8s资源配置文件(yml)
备注:kubernetes使用的是“声明式模型”,即需要用户“描述”和“声明”其所希望实现的系统最终状态,kubernetes会努力帮你实现这个状态,模型的声明是通过编写yml文件来体现。
hello-world-deployment.yml如下
上面replicas部署两个副本实例,k8s集群将会自动分配到不同的worker上,等一下我们将对这两个实例,来探测k8s的负载均衡机制。
hello-world-service.yml如下
为了提供外部访问,注意需要修改type: NodePort。nodePort端口的范围:30000-32767。当然除了NodePort,还有其他的方式(LoadBalancer、Ingress)也可以提供service给外网访问,希望大家下去自己实践。
5、在k8s集群的master机器上,创建k8s资源对象
也可以通过调用k8s api server 或者 dashboard上面进行创建资源对象,其他方式大家下去自己实践。
6、通过dashboard查看集群概况
7、测试部署的微服务
浏览器上打开地址
到这一步,说明我们的微服务已经部署成功!!!
8、测试k8s内部负载均衡机制
多刷新几次浏览器,然后查看服务日志
从上面分析可以看到两个副本pod都被不同程度的进行了调用。在某些情况下,kuberproxy组件会使用轮训调度算法(Round-robin)将请求发送给集群中的多个实例。
到目前为止,已经完成了k8s集群部署并运行微服务,下一篇将与微服务结合实践k8s的健康探测机制。
参考源码:https://github.com/justmine66/k8s.ecoysystem.apps
kubernetes默认使用iptables实现的负载均衡策略,路由转发规则可以通过命令 iptables -t nat -L KUBE-SERVICES -n 查看,如下:
9、浅析kubernetes
kubernetes是一个特殊的数据库,里面存储的是能够组成kubernetes模型的各种资源,包括Pods、Deployments、Services、Config Maps、Secrets、Namespaces、Nodes、Service Accounts、Ingress、Jobs等等。K8s中所有的配置都是通过API对象的spec去设置的,也就是用户通过配置系统的理想状态来改变系统,这是k8s重要设计理念之一,即所有的操作都是声明式(Declarative)的而不是命令式(Imperative)的。
下面我们将浅析k8s中一个**非常非常非常**优秀的设计,也是它区别于其他容器编排/调度系统(docker swarm etc.)的显著优势。
- Pod
容器运行一个或一组应用程序进程,大多数情况下,一个单一的容器可能不够运行一个完整的应用程序,即使可以通过伸缩增加容器的数量。许多时候,除了运行应用程序主进程外,还需要运行一些辅助进程(例如:监控程序、日志程序等)来运行一个完整的应用程序。这些辅助进程可能需要与主进程住在一起(co-lacated),从而完成工作。为了支持这一特性,kubernetes创造了Pod(英文翻译豆荚,如下图很形象。),Pod是kubernetes集群运行部署应用的最小单位。利用这个特性我们可以很容易的实现Side-car模式,例如将日志收集系统完全从业务系统中抽离出来。
如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。
如果你对 kubernets 感兴趣的话可以关注我,我会定期的在博客分享我的学习心得。