pod控制器:
pod控制器,工作负载 workload,介于k8s集群和节点之间。
中间层。
确保pod资源符合预期的状态。
pod资源出现故障的时候,会自动重启。
对基于控制器创建的pod,delete pod 相当于对pod重启,并不能删除pod
必须要把控制器删除,pod才会自动删除。
pod控制器的类型:
1、replicaset 结合控制器一块,控制副本数量。
2、Deployment 最常见,也是最好用的控制器。
3、DaemonSet 确保在每个节点上都会部署一个pod,主要用于系统后台的支撑业务。
特性:服务是无状态应用。
delete pod 也相当于重启
核心:需要在每个节点都部署,或者是需要在后台运行的pod ELK
DaemonSet部署不能指定副本数
4、StateFulSet 有状态的部署,pod的名称是固定的,一旦创建永久不变,增加副本数,也是有序的递增
可以指定副本数,pod可以扩容和缩容
delete pod 也是相当于重启,只不过pod的名称不再发生变化。
主要用于数据库,数据库必须要有指定的编号。主要用于对数据性要求比较高的应用。
Cluster Ip 为空 None
无头服务: headless
有状态的副本需要持久化存储。每一个pod都有一个自己的的挂载卷。
hostpath
动态pv自动给每个pod创建一个挂载卷。
创建DaemonSet的pod
[root@master01 k8s-yaml]# vim daemonSet.yml
labels:
app: nginx1
spec:
selector:
matchLabels:
app: nginx1
template:
metadata:
labels:
app: nginx1
spec:
containers:
- name: nginx1
image: nginx:1.22
nodeName: "node01"
#指定节点部署
创建StateFulSet的pod
apiVersion: v1
kind: Service
metadata:
name: nginx-web
labels:
app: svc1
spec:
ports:
- port: 80
#service的暴露端口
targetPort: 80
#容器的端口
clusterIP: None
selector:
app: nginx1
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
labels:
app: nginx1
spec:
replicas: 3
selector:
matchLabels:
app: nginx1
serviceName: "nginx-web"
#这个字段必须要加,名称要和service的名字一一对应
template:
metadata:
labels:
app: nginx1
spec:
terminationGracePeriodSeconds: 10
#pod被终止时,强制等待容器退出的时间是10秒,可以不加。也可以在命令行 --force。
containers:
- name: nginx1
image: nginx:1.22
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: ["ReadWriteMany"]
storageClassName: "nfs-client-storageclass"
resources:
requests:
storage: 1Gi
#所有的pod都会自动生成一个pv,在存储节点目录创建一个的数据卷。不能作为统一的数据同步到容器。
DNS解析:因为是无头服务,k8s集群为这些pod做一个dns的记录
web-0.nginx-web.default.svc.cluster.local
# 所有的pod都会自动生成一个pv,在存储节点目录创建一个的数据卷。不能作为统一的数据同步到容器
[root@master01 k8s-yaml]# kubectl run -i --tty dns-test --image=busybox --restart=Never -- sh
If you don't see a command prompt, try pressing enter.
/ #
/ # nslookup web-1.nginx-web.default.svc.cluster.local
Server: 10.96.0.10
Address: 10.96.0.10:53
Name: web-1.nginx-web.default.svc.cluster.local
Address: 10.244.1.230
补充:job控制器
任务类型的控制器:
普通任务 JOB
定时任务:Cronjob
批量处理脚本,数据库迁移,视频解码的一次性的任务。
需要定期执行的任务,比如环境扫描,监控检查等等。
[root@master01 k8s-yaml]# vim job.yml
#job,普通类型的任务
apiVersion: batch/v1
kind: Job
metadata:
name: centos
spec:
template:
spec:
containers:
- name: centos
image: centos:7
command: ["/bin/bash","-c","test -e /etc/passwd"]
restartPolicy: Never
#job类型的pod重启策略只能是Never或者OnFailure
backoffLimit: 4
#表示如果任务失败,重试的次数,可以不加,默认是6次。
[root@master01 k8s-yaml]# kubectl get job
NAME COMPLETIONS DURATION AGE
centos 1/1 2s 43s
cronjob:
[root@master01 k8s-yaml]# vim cronjob.yml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: test1-1
spec:
schedule: "*/1 * * * *"
#定时任务执行行的时间周期。* * * * *
jobTemplate:
#指定定时任务的执行模板 镜像和任务
spec:
template:
spec:
containers:
- name: centos
image: centos:7
command: ["/bin/bash","-c","test -e /etc/passwd"]
restartPolicy: OnFailure
#重启策略也只能是Never和Onfailure
[root@master01 k8s-yaml]# kubectl get cronjobs.batch
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
test1-1 */1 * * * * False 0 32s 2m12s
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: test1-1
spec:
schedule: "*/1 * * * *"
#定时任务执行行的时间周期。* * * * *
concurrencyPolicy: Allow
#要保留的失败的完成作业数,默认保留1个
startingDeadlineSeconds: 15
#pod必须在15秒内开始执行定时任务的内容,超过这个时间没有运行,任务不运行而且标记为失败
jobTemplate:
#指定定时任务的执行模板 镜像和任务
spec:
template:
spec:
containers:
- name: centos
image: centos:7
command: ["/bin/bash","-c","test -e /etc/passwd"]
restartPolicy: OnFailure
#重启策略也只能是Never和Onfailure