1、什么是controller?
在集群上管理和运行容器的对象。
2、Pod和Controller的关系
Pod是通过Controller实现应用的运维,比如伸缩、滚动升级等。
Pod和Controller之间通过label标签建立关系 selector
3、deployment应用场景
* 部署无状态应用
* 管理Pod和ReplicaSet
* 部署,滚动升级等功能
** 应用场景:web服务,微服务
4、使用deployment部署应用
(1)导出yaml文件
(2)使用yaml部署文件
(3)对外发布(暴露对外端口号)
kubectl expose deployment web --port...
5、应用升级回滚和弹性伸缩
kubectl set image deployment nginx-deployment nginx=nginx:1.15 # 将应用升级到1.15
现在下载1.15,但是1.14并不停止执行,下载好之后,再进行替换。
查看是否升级成功的命令:
kubectl rollout status deployment nginx-deployment
查看升级的历史
kubectl rollout history deployment nginx-deploymen
回滚到上一个版本
kubectl rollout undo deployment nginx-deployment
回滚到指定版本
kubectl rollout undo deployment nginx-deployment --to-revision=2
弹性伸缩
kubectl scale deployment nginx-deployment --replicas=3
6、确保所有的node运行同一个pod一次性任务和定时任务
部署守护进程DaemonSet
* 在每个node上运行一个pod,新加入的node也同样运行一个pod
* 例子:在每个node节点安装数据采集工具
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: ds-test
labels:
app: filebeat
spec:
selector:
matchLabels:
app: filebeat
template:
metadata:
labels:
app: filebeat
spec:
containers:
- name: logs
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: varlog
mountPath: /tmp/log
volumes:
- name: varlog
hostPath:
path: /var/log
进入某一个pod可以看到日志信息
4、 job(一次性任务)
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi # 计算3.14圆周率
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4 # 失败的话,需要重启多少次 默认是6
5、cronjob(定时任务)
apiVersion: batch/v1beta1
kind: CronJob # 定时任务
metadata:
name: hello
spec:
schedule: "*/1 * * * *" # cron表达式 每隔一分钟执行一次
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure