kubernetes的Controller之deployment
kubernetes的Controller之deployment
Controller是kubernetes集群中管理和运行容器的对象,pod通过Controller进行应用的操作,Controller与pod通过label标签来对应,Controller可以进行负载
deployment是pod控制器的一种,部署无状态的应用,它用来管理pod和replicaSet,它支持滚动升级等功能
使用yaml来创建应用
首先我们使用命令创建一个yaml文件
kubectl create deployment web --image=nginx --dry-run -o yaml > nginx.yaml
其中web表示应用的名字
这样我们就可以生成一个Nginx的yaml文件,然后可以基于这个文件做修改,使用这个文件的话使用命令
kubectl apply -f nginx.yaml
然后对外暴露端口:
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1 -o yaml > web1.yaml
其中port是内部端口,target-port是对外暴露的端口
完成之后可以使用下面的命令查看服务的状态
kubectl get pods,svc
我们刚才说它支持应用的升级、回滚和弹性伸缩
升级
使用命令
kubectl set image deployment web nginx=nginx:1.16
通过设置应用的版本号来让应用升级
升级的过程在应用容器创建完成后旧版本的应用才会暂停
查看升级状态
kubectl rollout status deployment webname
回滚上一版本命令:
kubectl rollout undo deployment web
也可以回滚到指定的版本,加入参数- -to revision=3
查看历史版本
kubectl rollout history deployment web
总结
deployment可以保证支撑服务的pod数量,动态伸缩,弹性扩缩容,但是它没有解决如何进行服务访问的问,当新的节点以新的ip启动的时候,不能确定它的ip和端口,从而不能进行服务的发现和负载均衡,这就需要service对象了。service就像个注册中心,通过service拿到提供的ip和port,service还可以进行负载均衡,pod和service的关联是通过label和selector进行关联的。Service三种常用的类型有ClusterIp,NodePort和LoadBalancer,默认是ClusterIp,LoadBalancer可以在对外访问的时候。可以添加yaml文件中type字段的属性值更改service类型。
❤️ 感谢大家
如果你觉得这篇内容对你挺有有帮助的话:
- 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏
- 关注
盼盼小课堂
,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。 - 有不当之处欢迎批评指正。
- 点赞
- 收藏
- 关注作者
评论(0)