kubernetes部署应用的流程
pod和controller控制器的关系
- controllers: 在集群上管理和运行容器的对象
- pod和controller通过label-selector关联
- Pod通过控制器实现应用的运维,例如伸缩,升级等
deployment 控制器
- 功能:
- 用于部署无状态应用
- 管理POD和Replicaset
- 具有上线部署,副本设定,滚动升级,回滚等功能
- 提供声明式更新
- 应用场景: Web服务,微服务,API
deployment控制器的定义
kubectl explain deployment.spec
$ vim deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
namespace: prod
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.18-alpine
ports:
- containerPort: 80
$ kubectl apply -f deployment.yml
$ kubectl get deploy -n prod -o wide
被控制对象是放在template下的containers
通过命令行操作deployment
- 部署应用
$ 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 svc,deploy,pod
- 应用升级
$ kubectl set image deploy/web nginx=nginx:1.15
$ kubectl rollout status deploy/web #查看升级状态
- 应用回滚
$ kubectl rollout history deploy/web #查看版本
$ kubectl rollout undo deploy/web #回滚到上一个版本
$ kubectl rollout undo deploy/web --to-revision=1 #回到指定版本
- 扩缩容
$ kubectl scale deployment web --replicas=10 #扩容
$ kubectl scale deployment web --replicas=1 #缩容
daemonSet
- 功能
- 在每一个node上运行一个POD
- 新加入的node也会自动运行一个POD
- 引用场景: Agent
Job
- 分类
- 普通Job
- 定时任务
- 特点: 一次性执行
- 应用场景: 离线数据处理,视频解码业务
$ cat job.yml
apiVersion: batch/v1
kind: Job
metadata:
name: pi
namespace: prod
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl","-Mbignum=bpi","-wle","print bpi(20000)"]
restartPolicy: Never
backoffLimit: 4
$ kubectl get pod -n prod
$ kubectl get job -n prod
$ kubectl logs -f pi-rjdhm -n prod
CronJob
- 定时任务,类似于linux的crontab
- 用用场景: 通知任务,备份任务
$ vim cronjob.yml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cron
namespace: prod
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date;echo hello from the kubernetes cluster
restartPolicy: OnFailure
$ kubectl get cronjob -n prod
$ kubectl logs -f cron-1595347620-nptsf -n prod