pod控制器:
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