当前位置:   article > 正文

k8s笔记 | 高度调度

k8s笔记 | 高度调度

CronJob计划任务

简介:在k8s中周期性运行计划任务,与linux中的crontab相同;注意点 CornJob执行的时间是controller-manager的时间,所以一定要确保controller-manager的时间是准确的,另外cornjob

cron表达式 

文章参考

  1. ┌─────────────秒 (0 - 59)
  2. │ ┌─────────────分钟 (0 - 59)
  3. │ │ ┌─────────────小时 (0 - 23)
  4. │ │ │ ┌─────────────日 (1 - 31)
  5. │ │ │ │ ┌─────────────月 (1 - 12)
  6. │ │ │ │ │ ┌─────────────周 (0 - 6) (0 表示周日)
  7. │ │ │ │ │ │ ┌─────────────年 (可选,1970 - 2099)
  8. │ │ │ │ │ │ │
  9. │ │ │ │ │ │ │
  10. * * * * * * *

配置文件

cron-job-pd.yaml

  1. apiVersion: batch/v1
  2. kind: CronJob # 定时任务
  3. metadata:
  4. name: cron-job-test # 定时任务名字
  5. spec:
  6. concurrencyPolicy: Allow # 开发调度策略 Allow允许开发调度,Forbid 不允许开发调度 Replace 如果之前的任务还没有执行完,就直接执行新的,放弃上一个
  7. failedJobsHistoryLimit: 1 # 保留多少个失败任务
  8. successfulJobsHistoryLimit: 3 # 保留多少个成功任务
  9. suspend: false # 是否挂起任务,若为true 则该任务不会执行
  10. schedule: "* * * * *" # 调度策略
  11. jobTemplate:
  12. spec:
  13. template:
  14. spec:
  15. containers:
  16. - name: hello
  17. image: busybox:1.28
  18. imagePullPolicy: IfNotPresent
  19. command:
  20. - /bin/sh
  21. - -c
  22. - date; echo Hello from the Kubernetes cluster
  23. restartPolicy: OnFailure

操作:

  1. # 创建
  2. kubectl create -f cron-job-pd.yaml
  3. # 查看
  4. kubectl get cronjob
  5. kubectl get cj
  6. # 描述
  7. kubectl describe cj cron-job-test

初始化容器

简介:相对于postStart来说,首先InitContainer 能够保证一定在EntryPoint之前执行,而postStart 不能,其次postStart更适合去执行一些命令操作,而initContainer实际就是一个容器,可以在其他基础容器环境下执行更复杂的初始化功能

配置参考 nginx-deploy.yaml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-deploy
  5. labels:
  6. type: nginx-deploy
  7. test: 1.0.0
  8. namespace: default
  9. spec:
  10. replicas: 1 # 副本数
  11. revisionHistoryLimit: 10 # 保留的历史版本数
  12. selector: # 选择器
  13. matchLabels:
  14. app: nginx-deploy
  15. test: 1.0.0
  16. strategy: # 更新策略
  17. type: RollingUpdate # 更新策略类型 RollingUpdate、Recreate
  18. rollingUpdate:
  19. maxUnavailable: 25% # 更新时最大不可用副本数
  20. maxSurge: 25% # 更新时最大超出副本数
  21. template: # 模板
  22. metadata:
  23. labels:
  24. app: nginx-deploy
  25. test: 1.0.0
  26. spec:
  27. initContainers:
  28. - image: nginx:latest
  29. imagePullPolicy: IfNotPresent
  30. command: ["sh", "-c", "echo 'inited;' >> ~/.init"]
  31. name: init-test
  32. containers:
  33. - name: nginx
  34. image: nginx:latest
  35. imagePullPolicy: IfNotPresent
  36. resources:
  37. requests:
  38. cpu: 100m
  39. memory: 256Mi
  40. limits:
  41. cpu: 200m
  42. memory: 512Mi
  43. terminationMessagePath: /dev/termination-log # 容器终止时的消息路径
  44. terminationMessagePolicy: File # 容器终止时的消息策略
  45. dnsPolicy: ClusterFirst # DNS策略
  46. restartPolicy: Always # 重启策略
  47. schedulerName: default-scheduler # 调度器名称
  48. securityContext: {} # 安全上下文
  49. terminationGracePeriodSeconds: 30 # pod被删除时的等待时间

测试

  1. # 创建
  2. kubectl create -f nginx-deploy.yaml
  3. # 查看po
  4. kubectl get po -o wide
  5. # 结果
  6. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  7. nginx-deploy-5bcc8cd95b-bb7fn 1/1 Running 0 85s 10.244.107.210 k8s-node3 <none> <none>
  8. nginx-deploy-5bcc8cd95b-fq5gs 1/1 Running 0 75s 10.244.169.177 k8s-node2 <none> <none>
  9. nginx-pod 0/1 Terminating 0 46h <none> k8s-node3 <none> <none>
  10. pvc-test-pd 1/1 Running 0 3h30m 10.244.122.110 k8s-node4 <none> <none>
  11. # 查看日志
  12. kubectl exec -it nginx-deploy-5bcc8cd95b-bb7fn -- sh
  13. # 结果
  14. Defaulted container "nginx" out of: nginx, init-test (init)

污点和容忍度

简介:

容忍:是标在pod上的,当pod被调度时,如果没有配置容忍,则该pod不会被调度到有污点的节点上,只有该pod上标注了满足某个节点的所有污点,则会被调度到这些节点

  1. tolerations:
  2. - key: "污点的key"
  3. value: "污点的value"
  4. offset:"NoSchedule" # 污点产生的影响
  5. operator:"Equal" # 表示value与污点的value要相等,也可以设置为Exists 表示存在key即可,此时可以不用设置 value

nginx-deploy.yaml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-deploy
  5. labels:
  6. type: nginx-deploy
  7. test: 1.0.0
  8. namespace: default
  9. spec:
  10. replicas: 1 # 副本数
  11. revisionHistoryLimit: 10 # 保留的历史版本数
  12. selector: # 选择器
  13. matchLabels:
  14. app: nginx-deploy
  15. test: 1.0.0
  16. strategy: # 更新策略
  17. type: RollingUpdate # 更新策略类型 RollingUpdate、Recreate
  18. rollingUpdate:
  19. maxUnavailable: 25% # 更新时最大不可用副本数
  20. maxSurge: 25% # 更新时最大超出副本数
  21. template: # 模板
  22. metadata:
  23. labels:
  24. app: nginx-deploy
  25. test: 1.0.0
  26. spec:
  27. tolerations:
  28. - key: "memory"
  29. operator: "Equal"
  30. value: "low"
  31. effect: "NoSchedule"
  32. # initContainers:
  33. # - image: nginx:latest
  34. # imagePullPolicy: IfNotPresent
  35. # command: ["sh", "-c", "echo 'inited;' >> ~/.init"]
  36. # name: init-test
  37. containers:
  38. - name: nginx
  39. image: nginx:latest
  40. imagePullPolicy: IfNotPresent
  41. resources:
  42. requests:
  43. cpu: 100m
  44. memory: 256Mi
  45. limits:
  46. cpu: 200m
  47. memory: 512Mi
  48. terminationMessagePath: /dev/termination-log # 容器终止时的消息路径
  49. terminationMessagePolicy: File # 容器终止时的消息策略
  50. dnsPolicy: ClusterFirst # DNS策略
  51. restartPolicy: Always # 重启策略
  52. schedulerName: default-scheduler # 调度器名称
  53. securityContext: {} # 安全上下文
  54. terminationGracePeriodSeconds: 30 # pod被删除时的等待时间

测试

  1. # 创建
  2. kubectl create -f nginx-deploy.yaml
  3. # 查看po
  4. kubectl get po -o wide
  5. # 结果
  6. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  7. nginx-deploy-5997fbff9d-h7m8f 1/1 Running 0 9s 10.244.107.212 k8s-node3 <none> <none>
  8. nginx-deploy-5997fbff9d-lbgmn 1/1 Running 0 12s 10.244.122.111 k8s-node4 <none> <none>
  9. nginx-pod 0/1 Terminating 0 47h <none> k8s-node3 <none> <none>
  10. # 编辑 查看 nginx-deploy
  11. kubectl edit deploy nginx-deploy
  12. 核心代码
  13. tolerations:
  14. - effect: NoSchedule
  15. key: memory
  16. operator: Equal
  17. value: low
  18. # 将node4中的 NoSchedule 移除
  19. kubectl taint no k8s-node4 memory=flow:NoSchedule-
  20. kubectl taint no k8s-node4 memory=flow:NoExecute
  21. # 在查看po
  22. kubectl get po -o wide
  23. # 结果
  24. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  25. nginx-deploy-5997fbff9d-h7m8f 1/1 Running 0 13m 10.244.107.212 k8s-node3 <none> <none>
  26. nginx-deploy-5997fbff9d-q8z92 1/1 Running 0 11s 10.244.169.178 k8s-node2 <none> <none>
  27. nginx-pod 0/1 Terminating 0 47h <none> k8s-node3 <none> <none>
  28. # 由之前部署在k8s-node4跑到了 k8s-node2
  29. # 查看node4
  30. kubectl describe no k8s-node4
  31. #核心内容
  32. ...
  33. Taints: memory=flow:NoExecute
  34. ...

污点Taint 

NoSchedule 不能容忍的pod不能被调度到该节点,但是已经存在的节点不会被驱逐

NoExecute 不能容忍的节点会被立即清除,能容忍且没有配置tolerationSeconds属性的可以一直运行,设置了的 则还会在该node运行对应的时间

有点懵。。。。

污点

亲和力

简介:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/609239
推荐阅读
相关标签
  

闽ICP备14008679号