14、リソーススケジューリングのkubernetes

まず、基本的な概念

1、3ノード選択スケジューラー

  • 事前選択:リソース要件、ポートの競合、除外およびその他の汚れを含め、ノードと完全に矛盾する最初のルールアウト
  • 好ましくは、各ノードの優先度算出及び発注の最良一致(最高スコア)を同定するためのノード
  • ノードはその後、最高得点、ランダムに選択されていない場合、スケジューリング完了:選択

2、一般的なスケジューリングポリシーは、事前に選択されました

  • CheckNodeCondition:ノードの状態を確認することは正常です
  • GeneralPredicates:ユニバーサル事前ポリシー
    • ホスト名:pod.spec.hostnameが定義されているかどうかのチェック、およびポッドとチェックノードの競合で同じ名前かどうか
    • PodFitsHostPortsは:pod.spec.containers.ports.hostPortプロパティ(結合ノード上のポート)定義するかどうか、およびノー​​ドポートチェックノードの競合がかどうかをチェックします
    • MatchNodeSelector:pods.spec.nodeSelector、チェックノードセレクタ
    • PodFitsResources:ノードをチェックリソース要件に沿ったものであるポッド
  • NoDiskConflict:満たす需要へのストレージボリュームは、デフォルトではチェックされていないかどうかにポッドが依存チェック
  • PodToletatesNodeTaints:pods.spec.tolerations許容汚れ、ポッドチェックノード上の汚れが許容できるかどうか
  • PodToletatesNodeExecuteTaints:後半ポッド耐え難い汚れノード追放された場合、デフォルトではチェックされません
  • CheckNodelabelPresence:ラベルノードの存在を確認します
  • CheckServiceAffinity:ポッド応じてサービスが属し、デフォルトがチェックされていないのと同じノードで同じサービスに属しています
  • CheckVolumeBinging:VPCへの準拠を確認します
  • NoVolumeZoneConflict:ストレージ・ボリューム領域を確認してください
  • CheckNodeMemoryPressure:チェックノードメモリ圧力がある場合
  • CheckNodePODPressure:圧力がある場合、ノードPIDの数を確認してください
  • CheckNodeDiskPressure:ディスクIOノードチェック圧力があるか否か
  • MatchInterPodAffinity:ノードはポッドの親和性を満たすためにかどうかをチェック

3、好ましくは機能

  • LeastRequested:ハイアイドル資源ノード好ましく
  • ノードを使用した限り、完成できるだけ、およびLeastRequested反する:MostRequested

  • BalanceResourceAllocation:CPUとメモリのリソースは、好ましくは、同様の占有されています
  • NodePreferAvoidPods:注釈ノードが(scheduler.alpha.kubernetes.io/preferAvoidPods)、好ましくは高いノードのスコアの傾向を決定します
  • TaintToleration:は汚染さリスト項目ノードとリスト項目spec.tolerationsポッドマッチングオブジェクトがチェックされ、より優先度のマッチング
  • SeletorSpreading:OBJECTタグからできるだけ遠いノードセレクタ広がりに属するとしてセレクタノードは、小さなに分布していることにより、選択されたタグをチェックします。
  • InterPodAffinity:ポッド親和性、好ましくはより高い親和性マッチングを横切ります
  • NodeAffinity:ノードの親和性
  • NodeLabel:ノードが特定のタグを持っているかどうかに応じて、その後のスコアがあります
  • ImageLoclity:ノードがスコアを計算するために使用されるローカル・ポッドの画像サイズを有します

第二に、例のスケジューリング構成リスト

1、nodeSelector:ノードセレクター

# kubectl label nodes node01 disktype=ssd
# kubectl label nodes node02 disktype=harddisk
# kubectl get nodes --show-labels
# vim pod-demo-ssd.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo-ssd
  namespace: default
  labels:
    app: myapp
    tier: frontend
  annotations:
    dongfei.tech/created-by: "cluster admin"
spec:
  containers:
  - name: myapp
    image: dongfeimg/myapp:v1
    imagePullPolicy: IfNotPresent
  nodeSelector:  #节点选择器
    disktype: ssd  #调度到拥有disktype=ssd的标签的node上

2、nodeaffinity:ノードの親和性

# kubectl label nodes master zone=Beijing   
# kubectl label nodes node01 zone=Shanghai
# kubectl label nodes node02 zone=Guangzhou
# cat pod-demo-nodeaffinity.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo-nodeaffinity
  namespace: default
  labels:
    app: myapp
    tier: frontend
  annotations:
    dongfei.tech/created-by: "cluster admin"
spec:
  containers:
  - name: myapp
    image: dongfeimg/myapp:v1
    imagePullPolicy: IfNotPresent
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:  #硬亲和
        nodeSelectorTerms:
        - matchExpressions:  #选择zone在Beijing或Shanghai
          - key: zone
            operator: In
            values:
            - Beijing
            - Shanghai

3、podaffinity:ポッド親和性

# cat pod-demo-podaffinity.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo-podaffinity-1
  namespace: default
  labels:
    app: myapp
    tier: frontend
  annotations:
    dongfei.tech/created-by: "cluster admin"
spec:
  containers:
  - name: myapp
    image: dongfeimg/myapp:v1
    imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo-podaffinity-2
  namespace: default
  labels:
    app: db
    tier: backend
  annotations:
    dongfei.tech/created-by: "cluster admin"
spec:
  containers:
  - name: busybox
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    command: ["sh","-c","sleep 3600"]
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - {key: app, operator: In, values: ["myapp"]}
        topologyKey: kubernetes.io/hostname

図4は汚染さ:ノード染色

  • 汚染さ
    • 効果:許容範囲
      • NoSchedule:あなたはオーバースケジュール容認することはできません、だけで、既存のポッドには影響をスケジューリングプロセスに影響を与えません
      • PreferNoSchedule:スケジュール上容認しないようにしてください
      • NOEXECUTE:あなたが来ることを予定し、それがスケジューリングプロセスに影響を与える容認するだけでなく、既存のポッドに影響を与えることができません
# kubectl taint node node01 node-type=production:NoSchedule  #打污点
# kubectl describe node node01 |grep Taints
# cat deploy-damo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      containers:
      - name: myapp-container
        image: dongfeimg/myapp:v2
        ports:
        - name: http
          containerPort: 80
      tolerations:
      - key: "node-type"
        operator: "Equal"  #完全相同
        value: "production"
        effect: "NoSchedule"

おすすめ

転載: www.cnblogs.com/L-dongf/p/12327401.html