controller是在集群上管理和运行容器的对象,pod通过controller来实现应用的运维比如伸缩,滚动升级等。pod和controller之间通过label标签建立联系。
1 deployment控制器 1.1 应用场景- 部署无状态应用,如web服务、微服务
- 管理Pod和ReplicaSet
- 部署、滚动升级等功能
1 导出yaml文件
kubectl create deployment web --image=nginx --dry-run -o yaml > web.yaml
2 使用yaml部署应用
kubectl apply -f web.yaml
3 对外暴露服务
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 – name=web1 -o yaml > web.yaml
4 部署应用
1.3 升级回滚和d性伸缩kubectl apply -f web1.yaml
- 镜像升级
镜像升级中一个个升级,首先下载目标版本镜像,下载过程中老服务仍然提供服务。下载后做替换,优雅升级
1 当前镜像版本
2 镜像升级:
kubectl set image deployment web nginx=nginx:1.15
3 查看升级状态:
kubectl rollout status deployment web
- 镜像回滚
1 查看升级记录
kubectl rollout history depolyment web
2 回退到上个版本
kubectl rollout undo depolyment web
3 回滚到指定版本
kubectl rollout undo depolyment web --to-revision=2
- d性伸缩
2 StatefulSet控制器kubectl scale deployment web --replicas=10
通过deployment控制器部署无状态应用。如果想部署有状态应用需要使用StatefulSet控制器
2.1 无状态和有状态无状态概念:
- 认为pod都是一样的
- 没有顺序要求
- 不用考虑在哪个node上运行
- 随意进行伸缩和扩展
有状态概念:
- 上述因素都要考虑到
- 每个pod都是独立的,保持pod的启动顺序(如mysql主从结构,先启动主再启动从)和唯一性(通过唯一的网络标识符进行区分)
- 首先定义一个无头Service
- 配置有状态应用
可以看到pod名称和配置是一致的
查看创建的无头service
每个pod都会生成一个唯一域名,生成规则如下
DaemonSet确保集群中每个(部分)node运行一份pod副本,当node加入集群时创建pod,当node离开集群时回收pod。如果删除DaemonSet,其创建的所有pod也被删除,DaemonSet中的pod覆盖整个集群。
当需要在集群内每个node运行同一个pod,使用DaemonSet是有价值的,以下是典型使用场景:
- 运行集群存储守护进程,如glusterd、ceph。
- 运行集群日志收集守护进程,如fluentd、logstash。
- 运行节点监控守护进程,如Prometheus Node Exporte
这里做一个nginx日志采集功能,把日志写到特定目录
测试效果
1 编写yaml文件
backoffLimit:失败之后再尝试4次
2 创建并查看pod
3 查看job
因为是一次性任务,运行完成后变成Completed状态
4 查看日志
1 编写yaml文件
定时输出时间和hello
2 创建并查看容器
3 查看任务
4 查看日志
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)