[CKA-Exercises]Scheduling

411 阅读2分钟
原文链接: blog.kii.la

Scheduling (5%) [调度 占比 5%].

kubernetes.io > Documentation > Reference > kubectl CLI > kubectl Cheat Sheet

kubernetes.io > Documentation > Concepts > Configuration > Managing Compute Resources for Containers

kubernetes.io > Documentation > Concepts > Workload > Controllers > DaemonSets

kubernetes.io > Documentation > Concepts > Configuration > Assigning Pod to Nodes

kubernetes.io > Documentation > Concepts > Configuration > Taints and Tolerations

kubernetes.io > Documentation > Tasks > Administer a Cluster > Configure Multiple Schedulers

kubernetes.io > Documentation > Tasks > Administer a Cluster > Manage Memory, CPU, and API Resources > Configure Default Memory Requests and Limits for a Namespace

kubernetes.io > Documentation > Tasks > Administer a Cluster > Static Pods > Static Pods

kubernetes.io > Documentation > Reference > Command line tools reference > kube-scheduler

Use label selectors to schedule Pods [使用 Selector 来调度 Pod]

show

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ kubectl label nodes node-1 size=Large  # 给对应的 `node` 添加 label
$ cat pod.yaml
kind: Pod
metadata:
    name: nginx
spec:
    containers:
        - name: nginx
          image: nginx
    nodeSelector:
      size: Large

Understand the role of DaemonSets [理解 DaemonSets 的角色]

show 创建一个 YAML

1
$ cat daemonsets.yaml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
apiVersion: apps/v1
kind: DaemonSet
metadata:
    name: myapp-rc
spec:
    selector:
        matchLabels:
            app: myapp
    template:
        metadata:
            labels:
                app: myapp
        spec:
            containers:
              - name: nginx-container
                image: nginx
1
$ kubectl create -f daemonset.yaml

Understand how resource limits can affect Pod Scheduling [了解资源限制如何影响 Pod 调度]

show

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
apiVersion: v1
kind: ResourceQuota
metadata:
    name: compute-quota
    namespace: default
spec:
    hard:
        pods: "10"
        requests.cpu: "4"
        requests.memory: 4Gi
        limits.cpu: "10"
        limits.memory: 10Gi    
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
apiVersion: v1
kind: Pod
metadata:
    name: nginx
    labels:
        name: nginx
spec:
    containers:
    - name: nginx
      image: nginx
      ports:
        - containerPort: 8080
      resources:
        requests:
            memory: "1Gi"
            cpu: 1
        limits:
            memory: "2Gi"
            cpu: 2

Understand how to run multiple schedulers and how to configure Pods to use them [了解如何运行多个调度程序,以及如何配置 Pods 来使用它们]

show



apiVersion: v1
kind: Pod
metadata:
    name: my-custom-scheduler
    namespace: kube-system
spec:
    containers:
    - command:
        - kube-scheduler
        - --address=127.0.0.1
        - kubeconfig=/etc/kubernetes/scheduler.conf
        - --lock-object0name=my-custom-scheduler
    image: k8s.gcr.io/kube-scheduler-amd64:v1.11.3
    name: kube-scheduler


apiVersion: v1
kind: Pod
metadta:
    name: my-custom-scheduled-pod
spec:
    containers:
    - image nginx
      name: nginx
    schedulerName: my-custom-scheduled

Manually schedule a Pod without a scheduler [在诶呦调度程序的情况下手动调度 Pod]

show



# 将 `Pod YAML` 文件存储在 /etc/kubernetes/manifest 中
# 创建一个名为 `static-bosybox` 的 StaticPod, 它使用 busybox 镜像和 sleep 1000 命令.

$ kubectl run --restart=Never --image=busybox static-busybox --dry-run \
    -o yaml --command -- sleep 1000 > /etc/kubernetes/manifests/static-busybox.yaml
    
# 如果要求您从特定的节点删除 StaticPod, 那么运行 
$ kubectl get nodes -o wide
# 来获得节点 IP, 然后 ssh 到它. 
# kubelet 配置文件可能在 `/var/lib/kubelet/config.yaml`. 
# 检查 `StaticPodPath:` 然后转到该目录删除 YAML 文件.

Display scheduler events

show



$ kubectl get events
$ kubectl get events --watch
$ kubectl logs kube-scheduler-bk8s-node0 -n kube-system

/var/log/kube-scheduler.log on the control/master node (if schedule is standalone service)

Know how to configure the Kubernetes scheduler [了解如何配置 Kubernetes 调度程序]

show



$ wget "https://storage.goolgeapis.com/kubernetes-release/release/v1.12.0/bin/linux/amd64/kube-scheduler"


$ chmod +x kube-scheduler
$ sudo mv kube-scheduler /usr/local/bin
$ sudo mv kube-scheduler.kubeconfig /var/lib/kubernetes/
$ cat << EOS | sudo tee /etc/kubernetes/config/kube-scheduler.yaml
apiVersion: componentconfig/v1alpha1
kind:KubeSchedulerConfiguration
clientConnection:
    kubeconfig: "/var/lib/kubernetes/kube-scheduler.kubeconfig"
leaderElection:
    leaderElect: true
EOF

$ cat <<EOF | sudo tee /etc/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes

[Service]
ExecStart/usr/local/bin/kube-scheduler \\
    --config=/etc/kubernetes/config/kube-scheduler.yaml \\
    --v=2
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

$ sudo systemctl daemon-reload
$ sudo systemctl enable kube-scheduler
$ sudo systemctl start kube-scheduler