k8s中controller部署有状态应用StatefulSet
无状态和有状态区别
(1) 无状态:
- 认为pod都是一样的(副本内容一样)
- 没有顺序要求(先用哪一个pod)
- 不用考虑在哪一个node运行
- 随意进行伸缩和扩展
(2)有状态: - 上面因素都要考虑到
- 让每个pod都是独立的。保持pod的启动顺序和唯一性
-
- 唯一的网络标识符,持久存储
- 有序,比如mysql主从
部署有状态应用
** 无头service也就是里面 ClusterIP:none
**
无头的service
(1)SatefulSet 部署有状态应用
创建了三个有状态应用,查看pod,有三个,每个都是唯一的名称。
查看创建的无头的service
kubectl get pods,service
kubectl get pods,svc
deployment和statefulset区别
statefulset有唯一标识)
根据主机名+按照一定的规则生成域名
规则:
** 每个pod有唯一的主机名 **
** 唯一域名,格式为主机名称.service名称。名称空间.svc.cluster.local
**
nginx-statefulset-0.nginx.default.svc.cluster.local
部署守护进程DaemonSet
它可以确保所有node运行同一个pod
- 在每一个node上运行同一个pod, 新加入的node也同样运行同一个pod
例子:在每个node节点安装数据采集工具(日志收集)
实际操作
编写yaml文件:
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
删除StatefulSet创建的pod
kubectl delete statefulset --all //删除所有statefulset创建的pod
删除svc中的服务
kubectl delete svc [pod名称] // 删除service中的pod服务
创建DaemonSet的pod
kubectl apply -f ds.yaml // 创建 pod
kubectl get pods //查看pods
可以看到创建完毕
进入某一个pod里面查看日志
kubectl exec -it [pod名称] /bin/bash
kubectl exec -it ds-test-fsl2w bash //进入pod新的终端
Controller一次性任务JOB和定时任务CRONJOB
一次性任务 Job
yaml文件
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi","-wle","print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
创建job任务
如果使用create
创建job,无法进行滚动更新或者回滚,使用apply
就可以
kubectl create -f job.yaml // 如果使用`create`创建job,无法进行滚动更新或者回滚,使用`apply`就可以
kubectl get pods -o wide //查看pod具体信息 ,可知道job在node2节点上
kubectl get jobs //查看任务
docker images // 在node2节点上可以查看到pull下来的perl镜像
创建了任务
而且只完成一次。出现completed
查看job的信息
node2节点的perl镜像被下载完成
查看日志
kubectl logs [pod名称]
计算了pi,执行一次
删除job的yaml文件
再次查看job情况,会发现已经消失。
kubectl get jobs
定时任务
定时写出hello任务
编写yaml文件
[root@k8s-master01 ~]# cat cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1****"
jobTemplate:
##################CronJob#####################
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo He11o from the Kubernetes cluster
restartPolicy: OnFailure
创建任务
kubectl apply -f cronjob.yaml
查看pod信息
发现每隔一分钟执行一次hello
查看定时任务
kubectl get coronjobs
查看日志
kubectl logs [job名称]
kubectl logs hello-27242448--1-mm9kj // 查看日志
删除job
kubectl delete cornjob [名称] //删除job
kubectl delete cronjob hello // 删除了定时任务hello