Pod与controllers的关系
- controllers:在集群上管理和运行容器的对象
- 通过label-selector相关联
- Pod通过控制器实现应用的运维,如伸缩,滚动升级等
一般在部署应用的时候很少直接部署pod,都是通过控制器来部署。
Deployment
Deployment功能:
- 部署无状态应用
无状态和有状态部署的区别
无状态服务,K8S使用RC(或更新的Replica Set)来保证一个服务的实例数量,如果说某个Pod实例由于某种原因Crash了,RC会立刻用这个Pod的模版新启一个Pod来替代它,由于是无状态的服务,新启的Pod与原来健康状态下的Pod一模一样。在Pod被重建后它的IP地址可能发生变化,为了对外提供一个稳定的访问接口,K8S引入了Service的概念。一个Service后面可以挂多个Pod,实现服务的高可用。
普通有状态服务,和无状态服务相比,它多了状态保存的需求。Kubernetes提供了以Volume和Persistent Volume为基础的存储系统,可以实现服务的状态保存。
有状态集群服务,与普通有状态服务相比,它多了集群管理的需求。K8S为此开发了一套以Pet Set为核心的全新特性,方便了有状态集群服务在K8S上的部署和管理。具体来说是通过Init Container来做集群的初始化工作,用 Headless Service 来维持集群成员的稳定关系,用动态存储供给来方便集群扩容,最后用Pet Set来综合管理整个集群。
- 管理Pod和ReplicaSet
- 具有上线部署、副本设定、滚动升级、回滚等功能
- 提供声明式更新,例如只更新一个新的Image 应用场景:Web服务,微服务
apiVersion
kubectl apply -f nginx-deployment.yaml
kubectl expose deployment nginx-deployment --port=80 --type=NodePort --target-port=80 --name=web
curl k8s-node1:31109
curl k8s-node2:31109
#创建
kubectl create deployment web --image=nginx:1.14
kubectl get deploy,pods
#发布
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web
kubectl get service
#升级
kubectl set image deployment/web nginx=nginx:1.15
kubectl rollout status deployment/web
#回滚
kubectl rollout history deployment/web
kubectl rollout undo deployment/web
kubectl rollout undo deployment/web --to-revision=2 #revision表示具体第几次发布
#扩容/缩容
kubectl scale deployment nginx-deployment --replicas=10
当执行升级应用,rs采用的是k8s的默认滚动更新机制
kubectl set image deployment/nginx-deployment nginx=nginx:1.15
kubectl describe deploy nginx-deployment
应用回滚版本
执行回滚,应用的版本 从 nginx:1.15 回滚到 nginx:latest
执行具体版本回滚,应用会准确的回滚到具体版本,nginx:1.15对应的revision 为2
应用扩容 将原先的 3副本 扩容成 5副本
应用缩容,将原先的5副本缩容为3副本
deployment 是使用最广泛的一种控制器
DaemonSet
DaemonSet功能:
• 在每一个Node上运行一个Pod
• 新加入的Node也同样会自动运行一个Pod
应用场景:Agent
DaemonSet 官网:https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
apiVersion
Job
Job分为普通任务(Job)和定时任务(CronJob)
• 一次性执行
应用场景:离线数据处理,视频解码等业务
job.yaml
apiVersion
计算pi
job官网:https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
CronJob
定时任务,像Linux的Crontab一样。
• 定时任务
应用场景:通知,备份
apiVersion