Kubernetes: بعض العقد لا تؤخذ في الاعتبار في الجدولة عندما يكون هناك خلل في المنطقة

تم إنشاؤها على ٣٠ مايو ٢٠٢٠  ·  129تعليقات  ·  مصدر: kubernetes/kubernetes

ما حدث : لقد قمنا بترقية 15 مجموعة من مجموعات kubernetes من 1.17.5 إلى 1.18.2 / 1.18.3 وبدأنا نرى أن هذه المجموعات لا تعمل بشكل صحيح بعد الآن.

تكمن المشكلة في أن جميع مجموعات الشياطين لا توفر. سيعيد رسالة الخطأ التالية إلى الأحداث:

Events:
  Type     Reason            Age               From               Message
  ----     ------            ----              ----               -------
  Warning  FailedScheduling  9s (x5 over 71s)  default-scheduler  0/13 nodes are available: 12 node(s) didn't match node selector.

ومع ذلك ، تتوفر جميع العقد ولا تحتوي على محدد العقدة. العقد لا تحتوي على عيوب أيضًا.

daemonset https://gist.github.com/zetaab/4a605cb3e15e349934cb7db29ec72 definitely

% kubectl get nodes
NAME                                   STATUS   ROLES    AGE   VERSION
e2etest-1-kaasprod-k8s-local           Ready    node     46h   v1.18.3
e2etest-2-kaasprod-k8s-local           Ready    node     46h   v1.18.3
e2etest-3-kaasprod-k8s-local           Ready    node     44h   v1.18.3
e2etest-4-kaasprod-k8s-local           Ready    node     44h   v1.18.3
master-zone-1-1-1-kaasprod-k8s-local   Ready    master   47h   v1.18.3
master-zone-2-1-1-kaasprod-k8s-local   Ready    master   47h   v1.18.3
master-zone-3-1-1-kaasprod-k8s-local   Ready    master   47h   v1.18.3
nodes-z1-1-kaasprod-k8s-local          Ready    node     47h   v1.18.3
nodes-z1-2-kaasprod-k8s-local          Ready    node     47h   v1.18.3
nodes-z2-1-kaasprod-k8s-local          Ready    node     46h   v1.18.3
nodes-z2-2-kaasprod-k8s-local          Ready    node     46h   v1.18.3
nodes-z3-1-kaasprod-k8s-local          Ready    node     47h   v1.18.3
nodes-z3-2-kaasprod-k8s-local          Ready    node     46h   v1.18.3

% kubectl get pods -n weave -l weave-scope-component=agent -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP           NODE                                   NOMINATED NODE   READINESS GATES
weave-scope-agent-2drzw   1/1     Running   0          26h     10.1.32.23   e2etest-1-kaasprod-k8s-local           <none>           <none>
weave-scope-agent-4kpxc   1/1     Running   3          26h     10.1.32.12   nodes-z1-2-kaasprod-k8s-local          <none>           <none>
weave-scope-agent-78n7r   1/1     Running   0          26h     10.1.32.7    e2etest-4-kaasprod-k8s-local           <none>           <none>
weave-scope-agent-9m4n8   1/1     Running   0          26h     10.1.96.4    master-zone-1-1-1-kaasprod-k8s-local   <none>           <none>
weave-scope-agent-b2gnk   1/1     Running   1          26h     10.1.96.12   master-zone-3-1-1-kaasprod-k8s-local   <none>           <none>
weave-scope-agent-blwtx   1/1     Running   2          26h     10.1.32.20   nodes-z1-1-kaasprod-k8s-local          <none>           <none>
weave-scope-agent-cbhjg   1/1     Running   0          26h     10.1.64.15   e2etest-2-kaasprod-k8s-local           <none>           <none>
weave-scope-agent-csp49   1/1     Running   0          26h     10.1.96.14   e2etest-3-kaasprod-k8s-local           <none>           <none>
weave-scope-agent-g4k2x   1/1     Running   1          26h     10.1.64.10   nodes-z2-2-kaasprod-k8s-local          <none>           <none>
weave-scope-agent-kx85h   1/1     Running   2          26h     10.1.96.6    nodes-z3-1-kaasprod-k8s-local          <none>           <none>
weave-scope-agent-lllqc   0/1     Pending   0          5m56s   <none>       <none>                                 <none>           <none>
weave-scope-agent-nls2h   1/1     Running   0          26h     10.1.96.17   master-zone-2-1-1-kaasprod-k8s-local   <none>           <none>
weave-scope-agent-p8njs   1/1     Running   2          26h     10.1.96.19   nodes-z3-2-kaasprod-k8s-local          <none>           <none>

لقد حاولت إعادة تشغيل apiserver / الجدولة / مديري وحدة التحكم لكنها لا تساعد. لقد حاولت أيضًا إعادة تشغيل تلك العقدة المفردة العالقة (nodes-z2-1-kaasprod-k8s-local) لكنها لا تساعد أيضًا. فقط حذف تلك العقدة وإعادة إنشائها يساعد.

% kubectl describe node nodes-z2-1-kaasprod-k8s-local
Name:               nodes-z2-1-kaasprod-k8s-local
Roles:              node
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/instance-type=59cf4871-de1b-4294-9e9f-2ea7ca4b771f
                    beta.kubernetes.io/os=linux
                    failure-domain.beta.kubernetes.io/region=regionOne
                    failure-domain.beta.kubernetes.io/zone=zone-2
                    kops.k8s.io/instancegroup=nodes-z2
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=nodes-z2-1-kaasprod-k8s-local
                    kubernetes.io/os=linux
                    kubernetes.io/role=node
                    node-role.kubernetes.io/node=
                    node.kubernetes.io/instance-type=59cf4871-de1b-4294-9e9f-2ea7ca4b771f
                    topology.cinder.csi.openstack.org/zone=zone-2
                    topology.kubernetes.io/region=regionOne
                    topology.kubernetes.io/zone=zone-2
Annotations:        csi.volume.kubernetes.io/nodeid: {"cinder.csi.openstack.org":"faf14d22-010f-494a-9b34-888bdad1d2df"}
                    node.alpha.kubernetes.io/ttl: 0
                    projectcalico.org/IPv4Address: 10.1.64.32/19
                    projectcalico.org/IPv4IPIPTunnelAddr: 100.98.136.0
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Thu, 28 May 2020 13:28:24 +0300
Taints:             <none>
Unschedulable:      false
Lease:
  HolderIdentity:  nodes-z2-1-kaasprod-k8s-local
  AcquireTime:     <unset>
  RenewTime:       Sat, 30 May 2020 12:02:13 +0300
Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  NetworkUnavailable   False   Fri, 29 May 2020 09:40:51 +0300   Fri, 29 May 2020 09:40:51 +0300   CalicoIsUp                   Calico is running on this node
  MemoryPressure       False   Sat, 30 May 2020 11:59:53 +0300   Fri, 29 May 2020 09:40:45 +0300   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         False   Sat, 30 May 2020 11:59:53 +0300   Fri, 29 May 2020 09:40:45 +0300   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure          False   Sat, 30 May 2020 11:59:53 +0300   Fri, 29 May 2020 09:40:45 +0300   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready                True    Sat, 30 May 2020 11:59:53 +0300   Fri, 29 May 2020 09:40:45 +0300   KubeletReady                 kubelet is posting ready status. AppArmor enabled
Addresses:
  InternalIP:  10.1.64.32
  Hostname:    nodes-z2-1-kaasprod-k8s-local
Capacity:
  cpu:                4
  ephemeral-storage:  10287360Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             8172420Ki
  pods:               110
Allocatable:
  cpu:                4
  ephemeral-storage:  9480830961
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             8070020Ki
  pods:               110
System Info:
  Machine ID:                 c94284656ff04cf090852c1ddee7bcc2
  System UUID:                faf14d22-010f-494a-9b34-888bdad1d2df
  Boot ID:                    295dc3d9-0a90-49ee-92f3-9be45f2f8e3d
  Kernel Version:             4.19.0-8-cloud-amd64
  OS Image:                   Debian GNU/Linux 10 (buster)
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  docker://19.3.8
  Kubelet Version:            v1.18.3
  Kube-Proxy Version:         v1.18.3
PodCIDR:                      100.96.12.0/24
PodCIDRs:                     100.96.12.0/24
ProviderID:                   openstack:///faf14d22-010f-494a-9b34-888bdad1d2df
Non-terminated Pods:          (3 in total)
  Namespace                   Name                                        CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                   ----                                        ------------  ----------  ---------------  -------------  ---
  kube-system                 calico-node-77pqs                           100m (2%)     200m (5%)   100Mi (1%)       100Mi (1%)     46h
  kube-system                 kube-proxy-nodes-z2-1-kaasprod-k8s-local    100m (2%)     200m (5%)   100Mi (1%)       100Mi (1%)     46h
  volume                      csi-cinder-nodeplugin-5jbvl                 100m (2%)     400m (10%)  200Mi (2%)       200Mi (2%)     46h
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests    Limits
  --------           --------    ------
  cpu                300m (7%)   800m (20%)
  memory             400Mi (5%)  400Mi (5%)
  ephemeral-storage  0 (0%)      0 (0%)
Events:
  Type    Reason                   Age    From                                    Message
  ----    ------                   ----   ----                                    -------
  Normal  Starting                 7m27s  kubelet, nodes-z2-1-kaasprod-k8s-local  Starting kubelet.
  Normal  NodeHasSufficientMemory  7m26s  kubelet, nodes-z2-1-kaasprod-k8s-local  Node nodes-z2-1-kaasprod-k8s-local status is now: NodeHasSufficientMemory
  Normal  NodeHasNoDiskPressure    7m26s  kubelet, nodes-z2-1-kaasprod-k8s-local  Node nodes-z2-1-kaasprod-k8s-local status is now: NodeHasNoDiskPressure
  Normal  NodeHasSufficientPID     7m26s  kubelet, nodes-z2-1-kaasprod-k8s-local  Node nodes-z2-1-kaasprod-k8s-local status is now: NodeHasSufficientPID
  Normal  NodeAllocatableEnforced  7m26s  kubelet, nodes-z2-1-kaasprod-k8s-local  Updated Node Allocatable limit across pods

نحن نرى هذا بشكل عشوائي في كل مجموعاتنا.

ما كنت تتوقع حدوثه : أتوقع أن يتم توفير مجموعة الشيطان لجميع العقد.

كيفية إعادة إنتاجه (بأقل قدر ممكن من الدقة والدقة

أي شيء آخر نحن بحاجة إلى معرفته؟ : عندما يحدث هذا ، لا يمكننا توفير أي مجموعات أخرى لتلك العقدة أيضًا. كما ترون ، فإن التسجيل بطلاقة بت مفقود أيضًا. لا يمكنني رؤية أي أخطاء في سجلات عقدة kubelet ومثلما قال ، إعادة التشغيل لا يساعد.

% kubectl get ds --all-namespaces
NAMESPACE     NAME                       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                     AGE
falco         falco-daemonset            13        13        12      13           12          <none>                            337d
kube-system   audit-webhook-deployment   3         3         3       3            3           node-role.kubernetes.io/master=   174d
kube-system   calico-node                13        13        13      13           13          kubernetes.io/os=linux            36d
kube-system   kops-controller            3         3         3       3            3           node-role.kubernetes.io/master=   193d
kube-system   metricbeat                 6         6         5       6            5           <none>                            35d
kube-system   openstack-cloud-provider   3         3         3       3            3           node-role.kubernetes.io/master=   337d
logging       fluent-bit                 13        13        12      13           12          <none>                            337d
monitoring    node-exporter              13        13        12      13           12          kubernetes.io/os=linux            58d
volume        csi-cinder-nodeplugin      6         6         6       6            6           <none>                            239d
weave         weave-scope-agent          13        13        12      13           12          <none>                            193d
weave         weavescope-iowait-plugin   6         6         5       6            5           <none>                            193d

كما ترون ، تفتقد معظم مجموعات الشياطين إلى جراب واحد

البيئة :

  • إصدار Kubernetes (استخدم kubectl version ): 1.18.3
  • مزود السحابة أو تكوين الأجهزة: openstack
  • نظام التشغيل (على سبيل المثال: cat /etc/os-release ): debian buster
  • Kernel (على سبيل المثال uname -a ): عقد Linux-z2-1-kaasprod-k8s-local 4.19.0-8-cloud-amd64 # 1 SMP Debian 4.19.98-1 + deb10u1 (2020-04-27) x86_64 جنو / لينكس
  • أدوات التثبيت: kops
  • المكون الإضافي وإصدار الشبكة (إذا كان هذا خطأ متعلقًا بالشبكة): calico
  • الآخرين:
help wanted kinbug prioritimportant-soon sischeduling

التعليق الأكثر فائدة

أنا الآن أعمل على إضافة حالة اختبار للقطة ، للتأكد من اختبارها بشكل صحيح.

ال 129 كومينتر

/ جدولة سيج

هل يمكنك توفير yaml الكامل للعقدة ، و daemonset ، ونموذج pod ، ومساحة الاسم المحتوية كما تم استردادها من الخادم؟

جدول مجموعات DaemonSet باستخدام محدد nodeAffinity الذي يتطابق فقط مع عقدة واحدة ، لذلك من المتوقع ظهور رسالة "12 من 13 غير متطابقة".

لا أرى سببًا لعدم رضا المجدول عن مجموعة pod / node ... لا توجد منافذ يمكن أن تتعارض في podspec ، والعقدة ليست غير قابلة للجدولة أو ملوثة ، ولديها موارد كافية

حسنًا ، لقد أعدت تشغيل جميع المجدولين الثلاثة (تم تغيير مستوى السجل إلى 4 إذا كان بإمكاننا رؤية شيء مثير للاهتمام هناك). ومع ذلك ، تم إصلاح المشكلة

% kubectl get ds --all-namespaces
NAMESPACE     NAME                       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                     AGE
falco         falco-daemonset            13        13        13      13           13          <none>                            338d
kube-system   audit-webhook-deployment   3         3         3       3            3           node-role.kubernetes.io/master=   175d
kube-system   calico-node                13        13        13      13           13          kubernetes.io/os=linux            36d
kube-system   kops-controller            3         3         3       3            3           node-role.kubernetes.io/master=   194d
kube-system   metricbeat                 6         6         6       6            6           <none>                            36d
kube-system   openstack-cloud-provider   3         3         3       3            3           node-role.kubernetes.io/master=   338d
logging       fluent-bit                 13        13        13      13           13          <none>                            338d
monitoring    node-exporter              13        13        13      13           13          kubernetes.io/os=linux            59d
volume        csi-cinder-nodeplugin      6         6         6       6            6           <none>                            239d
weave         weave-scope-agent          13        13        13      13           13          <none>                            194d
weave         weavescope-iowait-plugin   6         6         6       6            6           <none>                            194d

الآن يتم توفير جميع مجموعات الخدم بشكل صحيح. غريب ، على أي حال هناك خطأ ما في المجدول على ما يبدو

cc @ kubernetes / sig-Scheduling-bugs @ ahg-g

نرى نفس المشكلة في الإصدار 1.18.3 ، لا يمكن جدولة عقدة واحدة للقرون الخفية.
إعادة جدولة يساعد.

[root@tesla-cb0434-csfp1-csfp1-control-03 ~]# kubectl get pod -A|grep Pending
kube-system   coredns-vc5ws                                                 0/1     Pending   0          2d16h
kube-system   local-volume-provisioner-mwk88                                0/1     Pending   0          2d16h
kube-system   svcwatcher-ltqb6                                              0/1     Pending   0          2d16h
ncms          bcmt-api-hfzl6                                                0/1     Pending   0          2d16h
ncms          bcmt-yum-repo-589d8bb756-5zbvh                                0/1     Pending   0          2d16h
[root@tesla-cb0434-csfp1-csfp1-control-03 ~]# kubectl get ds -A
NAMESPACE     NAME                       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                   AGE
kube-system   coredns                    3         3         2       3            2           is_control=true                 2d16h
kube-system   danmep-cleaner             0         0         0       0            0           cbcs.nokia.com/danm_node=true   2d16h
kube-system   kube-proxy                 8         8         8       8            8           <none>                          2d16h
kube-system   local-volume-provisioner   8         8         7       8            7           <none>                          2d16h
kube-system   netwatcher                 0         0         0       0            0           cbcs.nokia.com/danm_node=true   2d16h
kube-system   sriov-device-plugin        0         0         0       0            0           sriov=enabled                   2d16h
kube-system   svcwatcher                 3         3         2       3            2           is_control=true                 2d16h
ncms          bcmt-api                   3         3         0       3            0           is_control=true                 2d16h
[root@tesla-cb0434-csfp1-csfp1-control-03 ~]# kubectl get node
NAME                                  STATUS   ROLES    AGE     VERSION
tesla-cb0434-csfp1-csfp1-control-01   Ready    <none>   2d16h   v1.18.3
tesla-cb0434-csfp1-csfp1-control-02   Ready    <none>   2d16h   v1.18.3
tesla-cb0434-csfp1-csfp1-control-03   Ready    <none>   2d16h   v1.18.3
tesla-cb0434-csfp1-csfp1-edge-01      Ready    <none>   2d16h   v1.18.3
tesla-cb0434-csfp1-csfp1-edge-02      Ready    <none>   2d16h   v1.18.3
tesla-cb0434-csfp1-csfp1-worker-01    Ready    <none>   2d16h   v1.18.3
tesla-cb0434-csfp1-csfp1-worker-02    Ready    <none>   2d16h   v1.18.3
tesla-cb0434-csfp1-csfp1-worker-03    Ready    <none>   2d16h   v1.18.3

من الصعب تصحيح الأخطاء دون معرفة كيفية التكاثر. هل لديك سجلات المجدول بأي فرصة للفشل في جدولة البود؟

حسنًا ، لقد أعدت تشغيل جميع المجدولين الثلاثة

أفترض أن واحدًا منهم فقط اسمه default-scheduler ، صحيح؟

تم تغيير loglevel إلى 4 إذا كان بإمكاننا رؤية شيء مثير للاهتمام هناك

هل يمكنك مشاركة ما لاحظته؟

قم بتعيين loglevel إلى 9 ، ولكن يبدو أنه لا يوجد شيء أكثر إثارة للاهتمام ، فالسجلات أدناه تتكرر.

I0601 01:45:05.039373       1 generic_scheduler.go:290] Preemption will not help schedule pod kube-system/coredns-vc5ws on any node.
I0601 01:45:05.039437       1 factory.go:462] Unable to schedule kube-system/coredns-vc5ws: no fit: 0/8 nodes are available: 7 node(s) didn't match node selector.; waiting
I0601 01:45:05.039494       1 scheduler.go:776] Updating pod condition for kube-system/coredns-vc5ws to (PodScheduled==False, Reason=Unschedulable)

نعم لم أستطع رؤية أي شيء أكثر من نفس السطر

no fit: 0/8 nodes are available: 7 node(s) didn't match node selector.; waiting

الغريب أن رسالة السجل تعرض نتيجة 7 عقد فقط ، مثل المشكلة التي تم الإبلاغ عنها في https://github.com/kubernetes/kubernetes/issues/91340

/ cc damemi

@ ahg-g هذا يبدو وكأنه نفس المشكلة التي أبلغت عنها هناك ، يبدو أن لدينا إما مكونًا إضافيًا للتصفية لا يبلغ دائمًا عن خطأه أو بعض الحالات الأخرى التي تفشل بصمت إذا اضطررت إلى التخمين

لاحظ أنه في مشكلتي ، أدت إعادة تشغيل المجدول أيضًا إلى إصلاحها (كما هو مذكور في هذا الموضوع أيضًا https://github.com/kubernetes/kubernetes/issues/91601#issuecomment-636360092)

كان خاصتي أيضًا حول مجموعة شيطان ، لذلك أعتقد أن هذه نسخة مكررة. إذا كان الأمر كذلك ، فيمكننا إغلاق هذا ومتابعة المناقشة في https://github.com/kubernetes/kubernetes/issues/91340

على أي حال ، يحتاج المجدول إلى مزيد من خيارات التسجيل المطول ، ومن المستحيل تصحيح هذه المشكلات إذا لم تكن هناك سجلات حول ما يفعله

zetaab +1 ، يمكن أن يستخدم المجدول تحسينات كبيرة لقدرات التسجيل الحالية. هذه ترقية كنت أقصد معالجتها لفترة من الوقت وأخيراً فتحت مشكلة لها هنا: https://github.com/kubernetes/kubernetes/issues/91633

/تعيين

أنا أبحث في هذا. بعض الأسئلة لمساعدتي في تضييق نطاق القضية. لم أتمكن من التكاثر بعد.

  • ما الذي تم إنشاؤه أولاً: الشيطان أم العقدة؟
  • هل تستخدم ملف التعريف الافتراضي؟
  • هل لديك موسعات؟

تم إنشاء العقد قبل مجموعة الشيطان.
لنفترض أننا استخدمنا ملف التعريف الافتراضي ، ما هو الملف الشخصي الذي تقصده وكيف نتحقق منه؟
لا تمديدات.

    command:
    - /usr/local/bin/kube-scheduler
    - --address=127.0.0.1
    - --kubeconfig=/etc/kubernetes/kube-scheduler.kubeconfig
    - --profiling=false
    - --v=1

الشيء الآخر الذي قد يؤثر على أداء القرص هو أن أداء القرص ليس جيدًا جدًا بالنسبة لـ etcd ، وما إلى ذلك يشكو من بطء العمليات.

نعم ، ستعمل هذه العلامات على تشغيل برنامج الجدولة مع ملف التعريف الافتراضي. سأستمر في البحث. ما زلت لا أستطيع التكاثر.

لا يزال لا شيء ... أي شيء آخر تستخدمه تعتقد أنه قد يكون له تأثير؟ العيوب والموانئ والموارد الأخرى؟

بذلت بعض المحاولات المتعلقة بهذا. عندما تكون المشكلة قيد التشغيل ، لا يزال من الممكن جدولة البودات إلى العقدة (بدون تعريف أو باستخدام محدد "nodeName").

إذا كنت تحاول استخدام Affinity / Antiaffinity ، فلن تتم جدولة البودات كعقدة.

العمل عندما تكون المشكلة في:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  nodeName: master-zone-3-1-1-test-cluster-k8s-local
  containers:
    - image: nginx
      name: nginx
      resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always

لا يعمل في نفس الوقت:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: kubernetes.io/hostname
                operator: In
                values:
                  - master-zone-3-1-1-test-cluster-k8s-local
  containers:
    - image: nginx
      name: nginx
      resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always

أيضًا عند التحقق من هذا الأخير حتى تلك كانت مثيرة جدًا للاهتمام:

Warning  FailedScheduling  4m37s (x17 over 26m)  default-scheduler  0/9 nodes are available: 8 node(s) didn't match node selector.
Warning  FailedScheduling  97s (x6 over 3m39s)   default-scheduler  0/8 nodes are available: 8 node(s) didn't match node selector.
Warning  FailedScheduling  53s                   default-scheduler  0/8 nodes are available: 8 node(s) didn't match node selector.
Warning  FailedScheduling  7s (x5 over 32s)      default-scheduler  0/9 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 7 node(s) didn't match node selector.
  • الحدث الأول هو عندما تم تطبيق البيان للتو (لم يتم فعل أي شيء للعقدة غير القابلة للجدولة).
  • كان الثاني والثالث عند إزالة العقدة باستخدام kubectl ثم إعادة تشغيلها.
  • الرابع جاء عندما عادت العقدة. كانت العقدة التي بها مشكلة رئيسية ، لذا لم تكن العقدة موجودة هناك (لكنها توضح أن العقدة لم يتم العثور عليها في 3 أحداث سابقة). الشيء المثير للاهتمام في الحدث الرابع هو أنه لا تزال هناك معلومات من عقدة واحدة مفقودة. يقول الحدث أن هناك 0/9 عقد متاحة ، ولكن الوصف مقدم فقط من 8.

"nodeName" ليس محددًا. سيؤدي استخدام nodeName إلى تجاوز الجدولة.

الرابع جاء عندما عادت العقدة. كانت العقدة التي بها مشكلة رئيسية ، لذا لم تكن العقدة موجودة هناك (لكنها توضح أن العقدة لم يتم العثور عليها في 3 أحداث سابقة). الشيء المثير للاهتمام في الحدث الرابع هو أنه لا تزال هناك معلومات من عقدة واحدة مفقودة. يقول الحدث أن هناك 0/9 عقد متاحة ، ولكن الوصف مقدم فقط من 8.

أنت تقول أن سبب عدم جدولة الكبسولة في العقدة المفقودة هو أنها كانت رئيسية؟

نحن نرى 8 node(s) didn't match node selector ذاهبًا إلى 7. أفترض أنه لم تتم إزالة أي عقد في هذه المرحلة ، أليس كذلك؟

"nodeName" ليس محددًا. سيؤدي استخدام nodeName إلى تجاوز الجدولة.

كانت محاولة "NodeName" إبراز ، هذه العقدة قابلة للاستخدام ويصل البود إلى هناك إذا أراد ذلك. لذا فالشيء ليس عدم قدرة العقدة على بدء البودات.

الرابع جاء عندما عادت العقدة. كانت العقدة التي بها مشكلة رئيسية ، لذا لم تكن العقدة موجودة هناك (لكنها توضح أن العقدة لم يتم العثور عليها في 3 أحداث سابقة). الشيء المثير للاهتمام في الحدث الرابع هو أنه لا تزال هناك معلومات من عقدة واحدة مفقودة. يقول الحدث أن هناك 0/9 عقد متاحة ، ولكن الوصف مقدم فقط من 8.

أنت تقول أن سبب عدم جدولة الكبسولة في العقدة المفقودة هو أنها كانت رئيسية؟

نحن نرى 8 node(s) didn't match node selector ذاهبًا إلى 7. أفترض أنه لم تتم إزالة أي عقد في هذه المرحلة ، أليس كذلك؟

تحتوي مجموعة الاختبار على 9 عقد ؛ 3 سادة و 6 عمال. قبل بدء تشغيل العقدة غير العاملة بنجاح ، أبلغت الأحداث عن معلومات حول جميع العقد المتاحة: 0/8 nodes are available: 8 node(s) didn't match node selector. . ولكن عندما ظهرت تلك العقدة التي قد تتطابق مع محدد العقدة ، أخبر الحدث 0/9 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 7 node(s) didn't match node selector. Explanation أن هناك 8 غير متطابقة ، لكنها لا تخبر أي شيء عن التاسعة (التي تم الاعتراف بها في الحدث السابق).

لذلك يذكر الحدث:

  • الحدث الأول: 9 عقد متاحة ، لوحظ الخطأ في daemonset
  • الحدث الثاني والثالث: 8 عقد متوفرة. الجهاز الذي لم يستقبل البود تم إعادة تشغيله
  • الحدث الرابع: 9 عقد متاحة (لذلك تم البدء من جديد).

في النهاية ، لم يتم تشغيل جراب الاختبار في العقدة المطابقة بسبب العيوب ، ولكن هذه قصة أخرى (وكان يجب أن تكون هي الحالة بالفعل في الحدث الأول).

كانت محاولة "NodeName" إبراز ، هذه العقدة قابلة للاستخدام ويصل البود إلى هناك إذا أراد ذلك. لذا فالشيء ليس عدم قدرة العقدة على بدء البودات.

لاحظ أنه لا يوجد شيء يحمي من الإفراط في ارتكاب عقدة ، لكن المجدول. لذلك هذا لا يظهر الكثير حقًا.

في النهاية ، لم يتم تشغيل جراب الاختبار في العقدة المطابقة بسبب العيوب ، ولكن هذه قصة أخرى (وكان يجب أن تكون هي الحالة بالفعل في الحدث الأول).

سؤالي هو: هل كانت العقدة التاسعة ملوثة منذ البداية؟ أحاول البحث عن (1) خطوات قابلة للتكرار للوصول إلى الحالة أو (2) حيث يمكن أن يكون الخطأ.

سؤالي هو: هل كانت العقدة التاسعة ملوثة منذ البداية؟ أحاول البحث عن (1) خطوات قابلة للتكرار للوصول إلى الحالة أو (2) حيث يمكن أن يكون الخطأ.

نعم ، كان التلوث موجودًا طوال الوقت في هذه الحالة ، حيث كانت العقدة غير المستقبلة رئيسية. لكننا رأينا نفس المشكلة على كل من السادة والعمال.

لا تزال هناك فكرة عن مصدر المشكلة ، يبدو أن إعادة إنشاء العقدة وإعادة تشغيل العقدة على الأقل يعملان على حل المشكلة. ولكن هذه بعض الطرق "الصعبة" لإصلاح الأشياء.

لقطة طويلة ، ولكن إذا صادفتها مرة أخرى ... هل يمكنك التحقق مما إذا كانت هناك أي حشوات معينة للعقدة لا تظهر؟

أنشر أسئلة كما أفكر في السيناريوهات المحتملة:

  • هل لديك عقد رئيسية أخرى في مجموعتك؟
  • هل لديك موسعات؟
* Do you have other master nodes in your cluster?

تحتوي جميع أدوات التثبيت على 3 أساتذة (لذا من السهل إعادة تشغيلهم)

* Do you have extenders?

لا.

هناك شيء واحد مثير للاهتمام لوحظ اليوم: كان لدي مجموعة حيث لم يكن أحد المعلمين يتلقى الكبسولة من DaemonSet. لدينا ChaosMonkey قيد الاستخدام ، والذي أنهى إحدى عقد العامل. هذا مثير للاهتمام ، فقد جعل هذا الكبسولة تذهب إلى المعلم الذي لم يستلمها سابقًا. لذلك يبدو أن إزالة العقدة الأخرى بطريقة ما غير العقدة الإشكالية تعمل على حل المشكلة في تلك المرحلة.

بسبب هذا "الإصلاح" ، يجب أن أنتظر المشكلة حتى تتكرر حتى أتمكن من الإجابة عن البودات المرشحة.

أنا في حيرة من أمري الآن ... هل تتسامح مجموعة شياكتك ​​مع تلوث العقد الرئيسية؟ بمعنى آخر ... هل الخطأ بالنسبة لك مجرد حدث الجدولة أم أيضًا حقيقة أنه كان يجب جدولة البودات؟

المشكلة هي أن هذه العقدة لم يتم العثور عليها بواسطة المجدول حتى لو كان هناك على الأقل إعدادات تقارب واحدة متطابقة (أو تقارب).

لهذا السبب قلت إن الخطأ الملوث متوقع ، ويجب أن يكون موجودًا بالفعل في الحدث الأول (حيث أن التلوث ليس جزءًا من معايير التقارب)

فهمت. كنت أحاول تأكيد الإعداد للتأكد من عدم فقدان شيء ما.

لا أعتقد أن العقدة "غير مرئية" بواسطة المجدول. بالنظر إلى أننا نرى 0/9 nodes are available ، يمكننا أن نستنتج أن العقدة موجودة بالفعل في ذاكرة التخزين المؤقت. إنه أشبه بضياع السبب الذي لا يمكن تحديده في مكان ما ، لذلك لا نقوم بتضمينه في الحدث.

صحيح ، العدد الإجمالي يتطابق دائمًا مع عدد العقد الفعلي. لم يتم تقديم نص حدث وصفي أكثر على جميع العقد ، ولكن يمكن أن يكون ذلك مشكلة منفصلة كما ذكرت.

هل أنت قادر على إلقاء نظرة على سجلات جدولة kube؟ أي شيء يبدو ذا صلة؟

أعتقد أن zetaab حاول البحث عن ذلك دون نجاح. يمكنني المحاولة عند حدوث المشكلة مرة أخرى (بالإضافة إلى ذلك الشيء المرشح الذي تم طرحه مسبقًا)

إذا كان ذلك ممكنًا ، فقم أيضًا بتشغيل 1.18.5 ، في حالة إصلاح المشكلة عن غير قصد.

أنا قادر على إعادة إنتاج هذا بشكل موثوق في مجموعة الاختبار الخاصة بي إذا كنت بحاجة إلى المزيد من السجلات

dilyevsky يرجى مشاركة خطوات repro. هل يمكنك بطريقة ما تحديد ما هو المرشح الذي فشل؟

يبدو أنها مجرد بيانات وصفية.اسم العقدة الخاصة بجراب ds ... غريب. ها هو البود يامل:

قرنة يامل:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    scheduler.alpha.kubernetes.io/critical-pod: ""
  creationTimestamp: "2020-07-09T23:17:53Z"
  generateName: cilium-
  labels:
    controller-revision-hash: 6c94db8bb8
    k8s-app: cilium
    pod-template-generation: "1"
  managedFields:
    # managed fields crap
  name: cilium-d5n4f
  namespace: kube-system
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: DaemonSet
    name: cilium
    uid: 0f00e8af-eb19-4985-a940-a02fa84fcbc5
  resourceVersion: "2840"
  selfLink: /api/v1/namespaces/kube-system/pods/cilium-d5n4f
  uid: e3f7d566-ee5b-4557-8d1b-f0964cde2f22
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchFields:
          - key: metadata.name
            operator: In
            values:
            - us-central1-dilyevsky-master-qmwnl
  containers:
  - args:
    - --config-dir=/tmp/cilium/config-map
    command:
    - cilium-agent
    env:
    - name: K8S_NODE_NAME
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: spec.nodeName
    - name: CILIUM_K8S_NAMESPACE
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: metadata.namespace
    - name: CILIUM_FLANNEL_MASTER_DEVICE
      valueFrom:
        configMapKeyRef:
          key: flannel-master-device
          name: cilium-config
          optional: true
    - name: CILIUM_FLANNEL_UNINSTALL_ON_EXIT
      valueFrom:
        configMapKeyRef:
          key: flannel-uninstall-on-exit
          name: cilium-config
          optional: true
    - name: CILIUM_CLUSTERMESH_CONFIG
      value: /var/lib/cilium/clustermesh/
    - name: CILIUM_CNI_CHAINING_MODE
      valueFrom:
        configMapKeyRef:
          key: cni-chaining-mode
          name: cilium-config
          optional: true
    - name: CILIUM_CUSTOM_CNI_CONF
      valueFrom:
        configMapKeyRef:
          key: custom-cni-conf
          name: cilium-config
          optional: true
    image: docker.io/cilium/cilium:v1.7.6
    imagePullPolicy: IfNotPresent
    lifecycle:
      postStart:
        exec:
          command:
          - /cni-install.sh
          - --enable-debug=false
      preStop:
        exec:
          command:
          - /cni-uninstall.sh
    livenessProbe:
      exec:
        command:
        - cilium
        - status
        - --brief
      failureThreshold: 10
      initialDelaySeconds: 120
      periodSeconds: 30
      successThreshold: 1
      timeoutSeconds: 5
    name: cilium-agent
    readinessProbe:
      exec:
        command:
        - cilium
        - status
        - --brief
      failureThreshold: 3
      initialDelaySeconds: 5
      periodSeconds: 30
      successThreshold: 1
      timeoutSeconds: 5
    resources: {}
    securityContext:
      capabilities:
        add:
        - NET_ADMIN
        - SYS_MODULE
      privileged: true
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/run/cilium
      name: cilium-run
    - mountPath: /host/opt/cni/bin
      name: cni-path
    - mountPath: /host/etc/cni/net.d
      name: etc-cni-netd
    - mountPath: /var/lib/cilium/clustermesh
      name: clustermesh-secrets
      readOnly: true
    - mountPath: /tmp/cilium/config-map
      name: cilium-config-path
      readOnly: true
    - mountPath: /lib/modules
      name: lib-modules
      readOnly: true
    - mountPath: /run/xtables.lock
      name: xtables-lock
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: cilium-token-j74lr
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  hostNetwork: true
  initContainers:
  - command:
    - /init-container.sh
    env:
    - name: CILIUM_ALL_STATE
      valueFrom:
        configMapKeyRef:
          key: clean-cilium-state
          name: cilium-config
          optional: true
    - name: CILIUM_BPF_STATE
      valueFrom:
        configMapKeyRef:
          key: clean-cilium-bpf-state
          name: cilium-config
          optional: true
    - name: CILIUM_WAIT_BPF_MOUNT
      valueFrom:
        configMapKeyRef:
          key: wait-bpf-mount
          name: cilium-config
          optional: true
    image: docker.io/cilium/cilium:v1.7.6
    imagePullPolicy: IfNotPresent
    name: clean-cilium-state
    resources: {}
    securityContext:
      capabilities:
        add:
        - NET_ADMIN
      privileged: true
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/run/cilium
      name: cilium-run
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: cilium-token-j74lr
      readOnly: true
  priority: 2000001000
  priorityClassName: system-node-critical
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: cilium
  serviceAccountName: cilium
  terminationGracePeriodSeconds: 1
  tolerations:
  - operator: Exists
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/disk-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/memory-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/pid-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/unschedulable
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/network-unavailable
    operator: Exists
  volumes:
  - hostPath:
      path: /var/run/cilium
      type: DirectoryOrCreate
    name: cilium-run
  - hostPath:
      path: /opt/cni/bin
      type: DirectoryOrCreate
    name: cni-path
  - hostPath:
      path: /etc/cni/net.d
      type: DirectoryOrCreate
    name: etc-cni-netd
  - hostPath:
      path: /lib/modules
      type: ""
    name: lib-modules
  - hostPath:
      path: /run/xtables.lock
      type: FileOrCreate
    name: xtables-lock
  - name: clustermesh-secrets
    secret:
      defaultMode: 420
      optional: true
      secretName: cilium-clustermesh
  - configMap:
      defaultMode: 420
      name: cilium-config
    name: cilium-config-path
  - name: cilium-token-j74lr
    secret:
      defaultMode: 420
      secretName: cilium-token-j74lr
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2020-07-09T23:17:53Z"
    message: '0/6 nodes are available: 5 node(s) didn''t match node selector.'
    reason: Unschedulable
    status: "False"
    type: PodScheduled
  phase: Pending
  qosClass: BestEffort

الطريقة التي أعيد بها إنتاج هذا هي عن طريق تدوير مجموعة جديدة مع 3 وحدات رئيسية و 3 عقد عاملة (باستخدام Cluster API) وتطبيق Cilium 1.7.6:

كيليوم يامل:

---
# Source: cilium/charts/agent/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: cilium
  namespace: kube-system
---
# Source: cilium/charts/operator/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: cilium-operator
  namespace: kube-system
---
# Source: cilium/charts/config/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: cilium-config
  namespace: kube-system
data:

  # Identity allocation mode selects how identities are shared between cilium
  # nodes by setting how they are stored. The options are "crd" or "kvstore".
  # - "crd" stores identities in kubernetes as CRDs (custom resource definition).
  #   These can be queried with:
  #     kubectl get ciliumid
  # - "kvstore" stores identities in a kvstore, etcd or consul, that is
  #   configured below. Cilium versions before 1.6 supported only the kvstore
  #   backend. Upgrades from these older cilium versions should continue using
  #   the kvstore by commenting out the identity-allocation-mode below, or
  #   setting it to "kvstore".
  identity-allocation-mode: crd

  # If you want to run cilium in debug mode change this value to true
  debug: "false"

  # Enable IPv4 addressing. If enabled, all endpoints are allocated an IPv4
  # address.
  enable-ipv4: "true"

  # Enable IPv6 addressing. If enabled, all endpoints are allocated an IPv6
  # address.
  enable-ipv6: "false"

  # If you want cilium monitor to aggregate tracing for packets, set this level
  # to "low", "medium", or "maximum". The higher the level, the less packets
  # that will be seen in monitor output.
  monitor-aggregation: medium

  # The monitor aggregation interval governs the typical time between monitor
  # notification events for each allowed connection.
  #
  # Only effective when monitor aggregation is set to "medium" or higher.
  monitor-aggregation-interval: 5s

  # The monitor aggregation flags determine which TCP flags which, upon the
  # first observation, cause monitor notifications to be generated.
  #
  # Only effective when monitor aggregation is set to "medium" or higher.
  monitor-aggregation-flags: all

  # ct-global-max-entries-* specifies the maximum number of connections
  # supported across all endpoints, split by protocol: tcp or other. One pair
  # of maps uses these values for IPv4 connections, and another pair of maps
  # use these values for IPv6 connections.
  #
  # If these values are modified, then during the next Cilium startup the
  # tracking of ongoing connections may be disrupted. This may lead to brief
  # policy drops or a change in loadbalancing decisions for a connection.
  #
  # For users upgrading from Cilium 1.2 or earlier, to minimize disruption
  # during the upgrade process, comment out these options.
  bpf-ct-global-tcp-max: "524288"
  bpf-ct-global-any-max: "262144"

  # bpf-policy-map-max specified the maximum number of entries in endpoint
  # policy map (per endpoint)
  bpf-policy-map-max: "16384"

  # Pre-allocation of map entries allows per-packet latency to be reduced, at
  # the expense of up-front memory allocation for the entries in the maps. The
  # default value below will minimize memory usage in the default installation;
  # users who are sensitive to latency may consider setting this to "true".
  #
  # This option was introduced in Cilium 1.4. Cilium 1.3 and earlier ignore
  # this option and behave as though it is set to "true".
  #
  # If this value is modified, then during the next Cilium startup the restore
  # of existing endpoints and tracking of ongoing connections may be disrupted.
  # This may lead to policy drops or a change in loadbalancing decisions for a
  # connection for some time. Endpoints may need to be recreated to restore
  # connectivity.
  #
  # If this option is set to "false" during an upgrade from 1.3 or earlier to
  # 1.4 or later, then it may cause one-time disruptions during the upgrade.
  preallocate-bpf-maps: "false"

  # Regular expression matching compatible Istio sidecar istio-proxy
  # container image names
  sidecar-istio-proxy-image: "cilium/istio_proxy"

  # Encapsulation mode for communication between nodes
  # Possible values:
  #   - disabled
  #   - vxlan (default)
  #   - geneve
  tunnel: vxlan

  # Name of the cluster. Only relevant when building a mesh of clusters.
  cluster-name: default

  # DNS Polling periodically issues a DNS lookup for each `matchName` from
  # cilium-agent. The result is used to regenerate endpoint policy.
  # DNS lookups are repeated with an interval of 5 seconds, and are made for
  # A(IPv4) and AAAA(IPv6) addresses. Should a lookup fail, the most recent IP
  # data is used instead. An IP change will trigger a regeneration of the Cilium
  # policy for each endpoint and increment the per cilium-agent policy
  # repository revision.
  #
  # This option is disabled by default starting from version 1.4.x in favor
  # of a more powerful DNS proxy-based implementation, see [0] for details.
  # Enable this option if you want to use FQDN policies but do not want to use
  # the DNS proxy.
  #
  # To ease upgrade, users may opt to set this option to "true".
  # Otherwise please refer to the Upgrade Guide [1] which explains how to
  # prepare policy rules for upgrade.
  #
  # [0] http://docs.cilium.io/en/stable/policy/language/#dns-based
  # [1] http://docs.cilium.io/en/stable/install/upgrade/#changes-that-may-require-action
  tofqdns-enable-poller: "false"

  # wait-bpf-mount makes init container wait until bpf filesystem is mounted
  wait-bpf-mount: "false"

  masquerade: "true"
  enable-xt-socket-fallback: "true"
  install-iptables-rules: "true"
  auto-direct-node-routes: "false"
  kube-proxy-replacement:  "probe"
  enable-host-reachable-services: "false"
  enable-external-ips: "false"
  enable-node-port: "false"
  node-port-bind-protection: "true"
  enable-auto-protect-node-port-range: "true"
  enable-endpoint-health-checking: "true"
  enable-well-known-identities: "false"
  enable-remote-node-identity: "true"
---
# Source: cilium/charts/agent/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cilium
rules:
- apiGroups:
  - networking.k8s.io
  resources:
  - networkpolicies
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - discovery.k8s.io
  resources:
  - endpointslices
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - namespaces
  - services
  - nodes
  - endpoints
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - pods
  - nodes
  verbs:
  - get
  - list
  - watch
  - update
- apiGroups:
  - ""
  resources:
  - nodes
  - nodes/status
  verbs:
  - patch
- apiGroups:
  - apiextensions.k8s.io
  resources:
  - customresourcedefinitions
  verbs:
  - create
  - get
  - list
  - watch
  - update
- apiGroups:
  - cilium.io
  resources:
  - ciliumnetworkpolicies
  - ciliumnetworkpolicies/status
  - ciliumclusterwidenetworkpolicies
  - ciliumclusterwidenetworkpolicies/status
  - ciliumendpoints
  - ciliumendpoints/status
  - ciliumnodes
  - ciliumnodes/status
  - ciliumidentities
  - ciliumidentities/status
  verbs:
  - '*'
---
# Source: cilium/charts/operator/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cilium-operator
rules:
- apiGroups:
  - ""
  resources:
  # to automatically delete [core|kube]dns pods so that are starting to being
  # managed by Cilium
  - pods
  verbs:
  - get
  - list
  - watch
  - delete
- apiGroups:
  - discovery.k8s.io
  resources:
  - endpointslices
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  # to automatically read from k8s and import the node's pod CIDR to cilium's
  # etcd so all nodes know how to reach another pod running in in a different
  # node.
  - nodes
  # to perform the translation of a CNP that contains `ToGroup` to its endpoints
  - services
  - endpoints
  # to check apiserver connectivity
  - namespaces
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - cilium.io
  resources:
  - ciliumnetworkpolicies
  - ciliumnetworkpolicies/status
  - ciliumclusterwidenetworkpolicies
  - ciliumclusterwidenetworkpolicies/status
  - ciliumendpoints
  - ciliumendpoints/status
  - ciliumnodes
  - ciliumnodes/status
  - ciliumidentities
  - ciliumidentities/status
  verbs:
  - '*'
---
# Source: cilium/charts/agent/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cilium
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cilium
subjects:
- kind: ServiceAccount
  name: cilium
  namespace: kube-system
---
# Source: cilium/charts/operator/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cilium-operator
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cilium-operator
subjects:
- kind: ServiceAccount
  name: cilium-operator
  namespace: kube-system
---
# Source: cilium/charts/agent/templates/daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    k8s-app: cilium
  name: cilium
  namespace: kube-system
spec:
  selector:
    matchLabels:
      k8s-app: cilium
  template:
    metadata:
      annotations:
        # This annotation plus the CriticalAddonsOnly toleration makes
        # cilium to be a critical pod in the cluster, which ensures cilium
        # gets priority scheduling.
        # https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/
        scheduler.alpha.kubernetes.io/critical-pod: ""
      labels:
        k8s-app: cilium
    spec:
      containers:
      - args:
        - --config-dir=/tmp/cilium/config-map
        command:
        - cilium-agent
        livenessProbe:
          exec:
            command:
            - cilium
            - status
            - --brief
          failureThreshold: 10
          # The initial delay for the liveness probe is intentionally large to
          # avoid an endless kill & restart cycle if in the event that the initial
          # bootstrapping takes longer than expected.
          initialDelaySeconds: 120
          periodSeconds: 30
          successThreshold: 1
          timeoutSeconds: 5
        readinessProbe:
          exec:
            command:
            - cilium
            - status
            - --brief
          failureThreshold: 3
          initialDelaySeconds: 5
          periodSeconds: 30
          successThreshold: 1
          timeoutSeconds: 5
        env:
        - name: K8S_NODE_NAME
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: spec.nodeName
        - name: CILIUM_K8S_NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
        - name: CILIUM_FLANNEL_MASTER_DEVICE
          valueFrom:
            configMapKeyRef:
              key: flannel-master-device
              name: cilium-config
              optional: true
        - name: CILIUM_FLANNEL_UNINSTALL_ON_EXIT
          valueFrom:
            configMapKeyRef:
              key: flannel-uninstall-on-exit
              name: cilium-config
              optional: true
        - name: CILIUM_CLUSTERMESH_CONFIG
          value: /var/lib/cilium/clustermesh/
        - name: CILIUM_CNI_CHAINING_MODE
          valueFrom:
            configMapKeyRef:
              key: cni-chaining-mode
              name: cilium-config
              optional: true
        - name: CILIUM_CUSTOM_CNI_CONF
          valueFrom:
            configMapKeyRef:
              key: custom-cni-conf
              name: cilium-config
              optional: true
        image: "docker.io/cilium/cilium:v1.7.6"
        imagePullPolicy: IfNotPresent
        lifecycle:
          postStart:
            exec:
              command:
              - "/cni-install.sh"
              - "--enable-debug=false"
          preStop:
            exec:
              command:
              - /cni-uninstall.sh
        name: cilium-agent
        securityContext:
          capabilities:
            add:
            - NET_ADMIN
            - SYS_MODULE
          privileged: true
        volumeMounts:
        - mountPath: /var/run/cilium
          name: cilium-run
        - mountPath: /host/opt/cni/bin
          name: cni-path
        - mountPath: /host/etc/cni/net.d
          name: etc-cni-netd
        - mountPath: /var/lib/cilium/clustermesh
          name: clustermesh-secrets
          readOnly: true
        - mountPath: /tmp/cilium/config-map
          name: cilium-config-path
          readOnly: true
          # Needed to be able to load kernel modules
        - mountPath: /lib/modules
          name: lib-modules
          readOnly: true
        - mountPath: /run/xtables.lock
          name: xtables-lock
      hostNetwork: true
      initContainers:
      - command:
        - /init-container.sh
        env:
        - name: CILIUM_ALL_STATE
          valueFrom:
            configMapKeyRef:
              key: clean-cilium-state
              name: cilium-config
              optional: true
        - name: CILIUM_BPF_STATE
          valueFrom:
            configMapKeyRef:
              key: clean-cilium-bpf-state
              name: cilium-config
              optional: true
        - name: CILIUM_WAIT_BPF_MOUNT
          valueFrom:
            configMapKeyRef:
              key: wait-bpf-mount
              name: cilium-config
              optional: true
        image: "docker.io/cilium/cilium:v1.7.6"
        imagePullPolicy: IfNotPresent
        name: clean-cilium-state
        securityContext:
          capabilities:
            add:
            - NET_ADMIN
          privileged: true
        volumeMounts:
        - mountPath: /var/run/cilium
          name: cilium-run
      restartPolicy: Always
      priorityClassName: system-node-critical
      serviceAccount: cilium
      serviceAccountName: cilium
      terminationGracePeriodSeconds: 1
      tolerations:
      - operator: Exists
      volumes:
        # To keep state between restarts / upgrades
      - hostPath:
          path: /var/run/cilium
          type: DirectoryOrCreate
        name: cilium-run
      # To install cilium cni plugin in the host
      - hostPath:
          path:  /opt/cni/bin
          type: DirectoryOrCreate
        name: cni-path
        # To install cilium cni configuration in the host
      - hostPath:
          path: /etc/cni/net.d
          type: DirectoryOrCreate
        name: etc-cni-netd
        # To be able to load kernel modules
      - hostPath:
          path: /lib/modules
        name: lib-modules
        # To access iptables concurrently with other processes (e.g. kube-proxy)
      - hostPath:
          path: /run/xtables.lock
          type: FileOrCreate
        name: xtables-lock
        # To read the clustermesh configuration
      - name: clustermesh-secrets
        secret:
          defaultMode: 420
          optional: true
          secretName: cilium-clustermesh
        # To read the configuration from the config map
      - configMap:
          name: cilium-config
        name: cilium-config-path
  updateStrategy:
    rollingUpdate:
      maxUnavailable: 2
    type: RollingUpdate
---
# Source: cilium/charts/operator/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    io.cilium/app: operator
    name: cilium-operator
  name: cilium-operator
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      io.cilium/app: operator
      name: cilium-operator
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      annotations:
      labels:
        io.cilium/app: operator
        name: cilium-operator
    spec:
      containers:
      - args:
        - --debug=$(CILIUM_DEBUG)
        - --identity-allocation-mode=$(CILIUM_IDENTITY_ALLOCATION_MODE)
        - --synchronize-k8s-nodes=true
        command:
        - cilium-operator
        env:
        - name: CILIUM_K8S_NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
        - name: K8S_NODE_NAME
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: spec.nodeName
        - name: CILIUM_DEBUG
          valueFrom:
            configMapKeyRef:
              key: debug
              name: cilium-config
              optional: true
        - name: CILIUM_CLUSTER_NAME
          valueFrom:
            configMapKeyRef:
              key: cluster-name
              name: cilium-config
              optional: true
        - name: CILIUM_CLUSTER_ID
          valueFrom:
            configMapKeyRef:
              key: cluster-id
              name: cilium-config
              optional: true
        - name: CILIUM_IPAM
          valueFrom:
            configMapKeyRef:
              key: ipam
              name: cilium-config
              optional: true
        - name: CILIUM_DISABLE_ENDPOINT_CRD
          valueFrom:
            configMapKeyRef:
              key: disable-endpoint-crd
              name: cilium-config
              optional: true
        - name: CILIUM_KVSTORE
          valueFrom:
            configMapKeyRef:
              key: kvstore
              name: cilium-config
              optional: true
        - name: CILIUM_KVSTORE_OPT
          valueFrom:
            configMapKeyRef:
              key: kvstore-opt
              name: cilium-config
              optional: true
        - name: AWS_ACCESS_KEY_ID
          valueFrom:
            secretKeyRef:
              key: AWS_ACCESS_KEY_ID
              name: cilium-aws
              optional: true
        - name: AWS_SECRET_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              key: AWS_SECRET_ACCESS_KEY
              name: cilium-aws
              optional: true
        - name: AWS_DEFAULT_REGION
          valueFrom:
            secretKeyRef:
              key: AWS_DEFAULT_REGION
              name: cilium-aws
              optional: true
        - name: CILIUM_IDENTITY_ALLOCATION_MODE
          valueFrom:
            configMapKeyRef:
              key: identity-allocation-mode
              name: cilium-config
              optional: true
        image: "docker.io/cilium/operator:v1.7.6"
        imagePullPolicy: IfNotPresent
        name: cilium-operator
        livenessProbe:
          httpGet:
            host: '127.0.0.1'
            path: /healthz
            port: 9234
            scheme: HTTP
          initialDelaySeconds: 60
          periodSeconds: 10
          timeoutSeconds: 3
      hostNetwork: true
      restartPolicy: Always
      serviceAccount: cilium-operator
      serviceAccountName: cilium-operator

هنا سجل المجدول:
I0709 23:08:22.055830 1 registry.go:150] Registering EvenPodsSpread predicate and priority function I0709 23:08:22.056081 1 registry.go:150] Registering EvenPodsSpread predicate and priority function I0709 23:08:23.137451 1 serving.go:313] Generated self-signed cert in-memory W0709 23:08:33.843509 1 authentication.go:297] Error looking up in-cluster authentication configuration: etcdserver: request timed out W0709 23:08:33.843671 1 authentication.go:298] Continuing without authentication configuration. This may treat all requests as anonymous. W0709 23:08:33.843710 1 authentication.go:299] To require authentication configuration lookup to succeed, set --authentication-tolerate-lookup-failure=false I0709 23:08:33.911805 1 registry.go:150] Registering EvenPodsSpread predicate and priority function I0709 23:08:33.911989 1 registry.go:150] Registering EvenPodsSpread predicate and priority function W0709 23:08:33.917999 1 authorization.go:47] Authorization is disabled W0709 23:08:33.918162 1 authentication.go:40] Authentication is disabled I0709 23:08:33.918238 1 deprecated_insecure_serving.go:51] Serving healthz insecurely on [::]:10251 I0709 23:08:33.925860 1 configmap_cafile_content.go:202] Starting client-ca::kube-system::extension-apiserver-authentication::client-ca-file I0709 23:08:33.926013 1 shared_informer.go:223] Waiting for caches to sync for client-ca::kube-system::extension-apiserver-authentication::client-ca-file I0709 23:08:33.930685 1 secure_serving.go:178] Serving securely on 127.0.0.1:10259 I0709 23:08:33.936198 1 tlsconfig.go:240] Starting DynamicServingCertificateController I0709 23:08:34.026382 1 shared_informer.go:230] Caches are synced for client-ca::kube-system::extension-apiserver-authentication::client-ca-file I0709 23:08:34.036998 1 leaderelection.go:242] attempting to acquire leader lease kube-system/kube-scheduler... I0709 23:08:50.597201 1 leaderelection.go:252] successfully acquired lease kube-system/kube-scheduler E0709 23:08:50.658551 1 factory.go:503] pod: kube-system/coredns-66bff467f8-9rjvd is already present in the active queue E0709 23:12:27.673854 1 factory.go:503] pod kube-system/cilium-vv466 is already present in the backoff queue E0709 23:12:58.099432 1 leaderelection.go:320] error retrieving resource lock kube-system/kube-scheduler: etcdserver: leader changed

بعد إعادة تشغيل كبسولات المجدول ، يتم تحديد المواعيد المعلقة على الفور.

ما هي أحداث الكبسولة التي تحصل عليها؟ هل تعرف ما إذا كانت هناك عيوب في العقدة
حيث لا يتم جدولتها؟ هل تفشل فقط للعقد الرئيسية أو أي
العقد؟ هل هناك مساحة كافية في العقدة؟

في الخميس ، 9 يوليو ، 2020 ، الساعة 7:49 مساءً ، dilyevsky ، [email protected]
كتب:

يبدو أنها مجرد بيانات وصفية.اسم العقدة الخاصة بجراب ds ...
عجيب. ها هو البود يامل:

الإصدار: v1kind: Podmetadata:
التعليقات التوضيحية:
Scheduler.alpha.kubernetes.io/critical-pod: ""
إنشاء الطابع الزمني: "2020-07-09T23: 17: 53Z"
توليد الاسم: سيليوم-
ملصقات:
وحدة تحكم-مراجعة التجزئة: 6c94db8bb8
تطبيق k8s: cilium
إنشاء قالب pod: "1"
الحقول:
# حقول مُدارة هراء
الاسم: cilium-d5n4f
مساحة الاسم: kube-system
المالك المراجع:

  • الإصدار: التطبيقات / v1
    blockOwnerDeletion: صحيح
    تحكم: صحيح
    النوع: DaemonSet
    الاسم: سيليوم
    uid: 0f00e8af-eb19-4985-a940-a02fa84fcbc5
    ResourceVersion: "2840"
    selfLink: / api / v1 / namespaces / kube-system / pods / cilium-d5n4f
    uid: e3f7d566-ee5b-4557-8d1b-f0964cde2f22spec:
    التقارب:
    العقدة
    مطلوب أثناء الجدولة تم التجاهل أثناء التنفيذ:
    nodeSelector الشروط:
    - مطابقة الحقول:
    - المفتاح: metadata.name
    المشغل: In
    القيم:
    - us-central1-dilyevsky-master-qmwnl
    حاويات:
  • أرغس:

    • --config-dir = / tmp / cilium / config-map

      أمر:

    • عامل سيليوم

      env:

    • الاسم: K8S_NODE_NAME

      من:

      الحقل

      الإصدار: v1.0

      fieldPath: spec.nodeName

    • الاسم: CILIUM_K8S_NAMESPACE

      من:

      الحقل

      الإصدار: v1.0

      fieldPath: metadata.namespace

    • الاسم: CILIUM_FLANNEL_MASTER_DEVICE

      من:

      configMap KeyRef:

      المفتاح: جهاز الفانيلا الرئيسي

      الاسم: cilium-config

      اختياري: صحيح

    • الاسم: CILIUM_FLANNEL_UNINSTALL_ON_EXIT

      من:

      configMap KeyRef:

      المفتاح: flannel-uninstall-on-exit

      الاسم: cilium-config

      اختياري: صحيح

    • الاسم: CILIUM_CLUSTERMESH_CONFIG

      القيمة: / var / lib / cilium / clustermesh /

    • الاسم: CILIUM_CNI_CHAINING_MODE

      من:

      configMap KeyRef:

      المفتاح: وضع تسلسل cni

      الاسم: cilium-config

      اختياري: صحيح

    • الاسم: CILIUM_CUSTOM_CNI_CONF

      من:

      configMap KeyRef:

      المفتاح: Custom-cni-conf

      الاسم: cilium-config

      اختياري: صحيح

      الصورة: docker.io/cilium/ cilium : v1.7.6

      imagePullPolicy: IfNotPresent

      دورة الحياة:

      postStart:

      إكسيك:

      أمر:



      • /cni-install.sh


      • --enable-debug = false


        قبل التوقف:


        إكسيك:


        أمر:


      • /cni-uninstall.sh


        مسبار:


        إكسيك:


        أمر:





        • كيليوم



        • الحالة



        • --نبذة



          الحد الأدنى: 10



          الأوليDelaySeconds: 120



          فترةالثواني: 30



          النجاح الحد الأدنى: 1



          مهلة الثواني: 5



          الاسم: عامل سيليوم



          الاستعداد



          إكسيك:



          أمر:



        • كيليوم



        • الحالة



        • --نبذة



          الحد الأدنى: 3



          الأوليDelaySeconds: 5



          فترةالثواني: 30



          النجاح الحد الأدنى: 1



          مهلة الثواني: 5



          مصادر: {}



          الأمن



          قدرات:



          أضف:



        • NET_ADMIN



        • SYS_MODULE



          مميز: صحيح



          terminationMessagePath: / dev / termination-log



          terminationMessagePolicy: ملف



          الحجم






    • mountPath: / var / run / cilium

      الاسم: cilium-run

    • mountPath: / host / opt / cni / bin

      الاسم: مسار cni

    • mountPath: /host/etc/cni/net.d

      الاسم: etc-cni-netd

    • mountPath: / var / lib / cilium / clustermesh

      الاسم: clustermesh-secrets

      readOnly: صحيح

    • mountPath: / tmp / cilium / config-map

      الاسم: cilium-config-path

      readOnly: صحيح

    • mountPath: / ليب / وحدات

      الاسم: وحدات ليب

      readOnly: صحيح

    • mountPath: /run/xtables.lock

      الاسم: xtables-lock

    • mountPath: /var/run/secrets/kubernetes.io/serviceaccount

      الاسم: cilium-token-j74lr

      readOnly: صحيح

      dnsPolicy: ClusterFirst

      enableServiceLinks: صحيح

      hostNetwork: صحيح

      initContainers:

  • أمر:

    • /init-container.sh

      env:

    • الاسم: CILIUM_ALL_STATE

      من:

      configMap KeyRef:

      المفتاح: حالة الهدب النظيف

      الاسم: cilium-config

      اختياري: صحيح

    • الاسم: CILIUM_BPF_STATE

      من:

      configMap KeyRef:

      المفتاح: حالة نظيفة cilium-bpf

      الاسم: cilium-config

      اختياري: صحيح

    • الاسم: CILIUM_WAIT_BPF_MOUNT

      من:

      configMap KeyRef:

      المفتاح: wait-bpf-mount

      الاسم: cilium-config

      اختياري: صحيح

      الصورة: docker.io/cilium/ cilium : v1.7.6

      imagePullPolicy: IfNotPresent

      الاسم: حالة الهدب النظيف

      مصادر: {}

      الأمن

      قدرات:

      أضف:



      • NET_ADMIN


        مميز: صحيح


        terminationMessagePath: / dev / termination-log


        terminationMessagePolicy: ملف


        الحجم



    • mountPath: / var / run / cilium

      الاسم: cilium-run

    • mountPath: /var/run/secrets/kubernetes.io/serviceaccount

      الاسم: cilium-token-j74lr

      readOnly: صحيح

      الأولوية: 2000001000

      PriorityClassName: نظام عقدة حرجة

      resetPolicy: دائمًا

      الاسم: المجدول الافتراضي

      securityContext: {}

      serviceAccount: سيليوم

      serviceAccountName: سيليوم

      إنهاء GracePeriodseconds: 1

      التسامح:

  • عامل التشغيل: موجود
  • التأثير: NoExecute
    المفتاح: node.kubernetes.io/not-ready
    عامل التشغيل: موجود
  • التأثير: NoExecute
    المفتاح: node.kubernetes.io/unreachable
    عامل التشغيل: موجود
  • التأثير: NoSchedule
    المفتاح: node.kubernetes.io/disk-pressure
    عامل التشغيل: موجود
  • التأثير: NoSchedule
    المفتاح: node.kubernetes.io/memory-pressure
    عامل التشغيل: موجود
  • التأثير: NoSchedule
    المفتاح: node.kubernetes.io/pid-pressure
    عامل التشغيل: موجود
  • التأثير: NoSchedule
    المفتاح: node.kubernetes.io/unschedulable
    عامل التشغيل: موجود
  • التأثير: NoSchedule
    المفتاح: node.kubernetes.io/network-unavailable
    عامل التشغيل: موجود
    أحجام:
  • hostPath:
    المسار: / var / run / cilium
    اكتب: DirectoryOrCreate
    الاسم: cilium-run
  • hostPath:
    المسار: / opt / cni / bin
    اكتب: DirectoryOrCreate
    الاسم: مسار cni
  • hostPath:
    المسار: /etc/cni/net.d
    اكتب: DirectoryOrCreate
    الاسم: etc-cni-netd
  • hostPath:
    المسار: / ليب / وحدات
    نوع: ""
    الاسم: وحدات ليب
  • hostPath:
    المسار: /run/xtables.lock
    النوع: FileOrCreate
    الاسم: xtables-lock
  • الاسم: clustermesh-secrets
    سر:
    الوضع الافتراضي: 420
    اختياري: صحيح
    secretName: cilium-clustermesh
  • configMap:
    الوضع الافتراضي: 420
    الاسم: cilium-config
    الاسم: cilium-config-path
  • الاسم: cilium-token-j74lr
    سر:
    الوضع الافتراضي: 420
    secretName: cilium-token-j74lrstatus:
    الظروف:
  • lastProbeTime: فارغة
    lastTransitionTime: "2020-07-09T23: 17: 53Z"
    الرسالة: "0/6 عقد متاحة: 5 عقد (عقدة) لم تتطابق مع محدد العقدة."
    السبب: غير قابل للجدولة
    الحالة: "خطأ"
    النوع: مجدول
    المرحلة: معلقة
    qosClass: BestEffort

الطريقة التي أعيد بها إنتاج هذا هي عن طريق تدوير مجموعة جديدة مع اثنين من الماجستير و
3 عقد عاملة (باستخدام Cluster API) وتطبيق Cilium 1.7.6:

--- # المصدر: cilium / مخططات / وكيل / قوالب / serviceaccount.yamlapi الإصدار: v1kind: ServiceAccountmetadata:
الاسم: سيليوم
مساحة الاسم: kube-system
--- # المصدر: cilium / charts / المشغل / قوالب / serviceaccount.yamlapi الإصدار: v1kind: ServiceAccountmetadata:
الاسم: مشغل سيليوم
مساحة الاسم: kube-system
--- # المصدر: cilium / charts / config / template / configmap.yamlapiVersion: v1kind: ConfigMapmetadata:
الاسم: cilium-config
مساحة الاسم: kube-systemdata:

# وضع تخصيص الهوية يحدد كيفية مشاركة الهويات بين الهدوء
# عقد من خلال تعيين كيفية تخزينها. الخيارات هي "crd" أو "kvstore".
# - يخزن "crd" الهويات في kubernetes مثل CRDs (تعريف مورد مخصص).
# يمكن الاستعلام عن ذلك من خلال:
# kubectl احصل على ciliumid
# - يخزن "kvstore" الهويات في kvstore أو etcd أو القنصل ، أي
# مهيأ أدناه. دعم إصدارات Cilium قبل 1.6 kvstore فقط
# الخلفية. يجب أن تستمر الترقيات من إصدارات cilium القديمة في الاستخدام
# the kvstore بالتعليق على وضع تخصيص الهوية أدناه ، أو
# إعداده على "kvstore".
وضع تخصيص الهوية: crd

# إذا كنت تريد تشغيل cilium في وضع التصحيح ، فقم بتغيير هذه القيمة إلى true
التصحيح: "خطأ"

# تمكين عنونة IPv4. في حالة التمكين ، يتم تخصيص IPv4 لكافة نقاط النهاية
# عنوان.
enable-ipv4: "صحيح"

# تمكين عنونة IPv6. في حالة التمكين ، يتم تخصيص IPv6 لكافة نقاط النهاية
# عنوان.
تمكين ipv6: "خطأ"

# إذا كنت تريد مراقب cilium لتجميع تتبع الحزم ، فاضبط هذا المستوى
# إلى "منخفض" أو "متوسط" أو "أقصى". كلما ارتفع المستوى ، قل عدد الحزم
# التي ستظهر في شاشة الإخراج.
رصد التجميع: متوسط

# يتحكم الفاصل الزمني لتجميع الشاشة في الوقت المعتاد بين الشاشة
حدثان إعلامان لكل اتصال مسموح به.
#
# فعال فقط عندما يتم ضبط تجميع الشاشة على "متوسط" أو أعلى.
فاصل تجميع المراقبة: 5 ثوانٍ

# تحدد علامات تجميع المراقبة أي علامات TCP التي ، عند
# الملاحظة الأولى ، تسبب في إنشاء إشعارات المراقبة.
#
# فعال فقط عندما يتم ضبط تجميع الشاشة على "متوسط" أو أعلى.
رصد-تجميع-أعلام: الكل

# ct-global-max-إدخالات- * يحدد الحد الأقصى لعدد الاتصالات
# مدعوم عبر جميع نقاط النهاية ، مقسمًا حسب البروتوكول: tcp أو غيره. زوج واحد
# من الخرائط تستخدم هذه القيم لاتصالات IPv4 وزوج آخر من الخرائط
# استخدم هذه القيم لاتصالات IPv6.
#
# إذا تم تعديل هذه القيم ، فعند بدء تشغيل Cilium التالي ، فإن
# قد يتعطل تتبع الاتصالات الجارية. هذا قد يؤدي إلى إيجاز
# إسقاط السياسة أو تغيير في قرارات موازنة التحميل للاتصال.
#
# بالنسبة للمستخدمين الذين يقومون بالترقية من Cilium 1.2 أو ما قبله ، لتقليل الانقطاع
# أثناء عملية الترقية ، قم بالتعليق على هذه الخيارات.
bpf-ct-global-tcp-max: "524288"
bpf-ct-global-any-max: "262144"

حدد # bpf-policy-map-max الحد الأقصى لعدد الإدخالات في نقطة النهاية
# خريطة سياسة (لكل نقطة نهاية)
bpf-policy-map-max: "16384"

# يسمح التخصيص المسبق لإدخالات الخريطة بتقليل زمن الانتقال لكل حزمة ، على
# حساب تخصيص الذاكرة المسبقة للإدخالات في الخرائط. ال
# القيمة الافتراضية أدناه ستقلل من استخدام الذاكرة في التثبيت الافتراضي ؛
قد يفكر # المستخدمون الذين لديهم حساسية تجاه وقت الاستجابة في تعيين هذا على "صحيح".
#
# تم تقديم هذا الخيار في Cilium 1.4. تجاهل Cilium 1.3 وما قبله
# هذا الخيار ويتصرف كما لو أنه مضبوط على "صحيح".
#
# إذا تم تعديل هذه القيمة ، فعند بدء تشغيل Cilium التالي ، يتم الاستعادة
قد يتم تعطيل # نقاط النهاية الموجودة وتتبع الاتصالات الجارية.
# قد يؤدي هذا إلى حدوث تراجع في السياسة أو تغيير في قرارات موازنة الأحمال من أجل أ
# اتصال لبعض الوقت. قد تحتاج إلى إعادة إنشاء نقاط النهاية للاستعادة
# اتصال.
#
# إذا تم تعيين هذا الخيار على "خطأ" أثناء الترقية من 1.3 أو ما قبل ذلك إلى
# 1.4 أو أحدث ، فقد يتسبب ذلك في حدوث اضطرابات لمرة واحدة أثناء الترقية.
preallocate-bpf-maps: "خطأ"

# التعبير العادي يطابق وكيل Istio sidecar المتوافق
# اسم صورة حاوية
الصورة الجانبية للوكيل: "cilium / istio_proxy"

# وضع التغليف للتواصل بين العقد
# القيم الممكنة:
# - معاق
# - vxlan (افتراضي)
# - جينيف
نفق: vxlan

# اسم الكتلة. مناسب فقط عند بناء شبكة من المجموعات.
اسم الكتلة: الافتراضي

# يقوم استقصاء DNS بشكل دوري بإصدار بحث DNS لكل matchName من
# عامل سيليوم. يتم استخدام النتيجة لإعادة إنشاء سياسة نقطة النهاية.
# تتكرر عمليات بحث DNS بفاصل 5 ثوانٍ ، ويتم إجراؤها لـ
عناوين # A (IPv4) و AAAA (IPv6). إذا فشل البحث ، فإن أحدث عنوان IP
تم استخدام # بيانات بدلاً من ذلك. سيؤدي تغيير عنوان IP إلى تجديد Cilium
# سياسة لكل نقطة نهاية وزيادة سياسة لكل عامل cilium
# مراجعة المستودع.
#
# يتم تعطيل هذا الخيار افتراضيًا بدءًا من الإصدار 1.4.x لصالحه
# لتنفيذ أكثر فاعلية يعتمد على وكيل DNS ، راجع [0] للحصول على التفاصيل.
# قم بتمكين هذا الخيار إذا كنت تريد استخدام سياسات FQDN ولكنك لا تريد استخدامها
# وكيل DNS.
#
# لتسهيل الترقية ، يمكن للمستخدمين اختيار ضبط هذا الخيار على "true".
# وإلا يرجى الرجوع إلى دليل الترقية [1] الذي يشرح كيفية القيام بذلك
# تحضير قواعد السياسة للترقية.
#
# [0] http://docs.cilium.io/en/stable/policy/language/#dns -based
# [1] http://docs.cilium.io/en/stable/install/upgrade/#changes -that-may-required-action
tofqdns-enable-poller: "خطأ"

# wait-bpf-mount تجعل حاوية init تنتظر حتى يتم تركيب نظام ملفات bpf
wait-bpf-mount: "خطأ"

حفلة تنكرية: "صحيح"
enable-xt-socket-backback: "صحيح"
install-iptables-rules: "صحيح"
توجيهات العقدة المباشرة التلقائية: "خطأ"
استبدال وكيل kube: "التحقيق"
تمكين-المضيف-للوصول-الخدمات: "خطأ"
تمكين - خارجي - IPS: "خطأ"
تمكين عقدة منفذ: "خطأ"
node-port-bind-protection: "صحيح"
تمكين-حماية آلية-عقدة-منفذ-المدى: "صحيح"
تمكين التحقق من صحة نقطة النهاية: "صحيح"
تمكين الهويات المعروفة: "خطأ"
تمكين هوية العقدة البعيدة: "صحيح"
--- # المصدر: cilium / مخططات / وكيل / قوالب / clusterrole.yamlapiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata:
الاسم: ciliumrules:

  • مجموعات api:

    • الشبكات. k8s.io

      مصادر:

    • سياسات الشبكة

      أفعال:

    • احصل على

    • قائمة

    • راقب

  • مجموعات api:

    • Discover.k8s.io

      مصادر:

    • شرائح النهاية

      أفعال:

    • احصل على

    • قائمة

    • راقب

  • مجموعات api:

    • ""

      مصادر:

    • مساحات الأسماء

    • خدمات

    • العقد

    • نقاط النهاية

      أفعال:

    • احصل على

    • قائمة

    • راقب

  • مجموعات api:

    • ""

      مصادر:

    • القرون

    • العقد

      أفعال:

    • احصل على

    • قائمة

    • راقب

    • تحديث

  • مجموعات api:

    • ""

      مصادر:

    • العقد

    • العقد / الحالة

      أفعال:

    • رقعة قماشية

  • مجموعات api:

    • apiextensions.k8s.io

      مصادر:

    • تعاريف مخصصة

      أفعال:

    • خلق

    • احصل على

    • قائمة

    • راقب

    • تحديث

  • مجموعات api:

    • cilium.io

      مصادر:

    • سياسات ciliumnetwork

    • ciliumnetworkpolicies / status

    • ciliumclusterwidenetwork السياسات

    • ciliumclusterwidenetwork السياسات / الحالة

    • نقاط النهاية الهدبية

    • نقاط النهاية / الحالة cilium

    • العقد القلبية

    • ciliumnodes / الحالة

    • هويات cilium

    • هويات / حالة cilium

      أفعال:

    • "*"

      --- # المصدر: cilium / charts / المشغل / قوالب / clusterrole.yamlapiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata:

      الاسم: قواعد التشغيل سيليوم:

  • مجموعات api:

    • ""

      مصادر:

      # لحذف قرون نظام أسماء النطاقات [core | kube] تلقائيًا بحيث بدأت في الوجود

      # تدار من قبل Cilium

    • القرون

      أفعال:

    • احصل على

    • قائمة

    • راقب

    • حذف

  • مجموعات api:

    • Discover.k8s.io

      مصادر:

    • شرائح النهاية

      أفعال:

    • احصل على

    • قائمة

    • راقب

  • مجموعات api:

    • ""

      مصادر:

      # للقراءة تلقائيًا من k8s واستيراد جراب العقدة CIDR إلى cilium's

      # etcd حتى تعرف جميع العقد كيفية الوصول إلى جراب آخر يعمل في ملف

      # عقدة.

    • العقد

      # لأداء ترجمة CNP الذي يحتوي على ToGroup إلى نقاط النهاية الخاصة به

    • خدمات

    • نقاط النهاية

      # للتحقق من اتصال الخادم

    • مساحات الأسماء

      أفعال:

    • احصل على

    • قائمة

    • راقب

  • مجموعات api:

    • cilium.io

      مصادر:

    • سياسات ciliumnetwork

    • ciliumnetworkpolicies / status

    • ciliumclusterwidenetwork السياسات

    • ciliumclusterwidenetwork السياسات / الحالة

    • نقاط النهاية الهدبية

    • نقاط النهاية / الحالة cilium

    • العقد القلبية

    • ciliumnodes / الحالة

    • هويات cilium

    • هويات / حالة cilium

      أفعال:

    • "*"

      --- # المصدر: cilium / مخططات / وكيل / قوالب / clusterrolebinding.yamlapiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:

      الاسم: ciliumrole

      apiGroup: rbac.authorization.k8s.io

      النوع: ClusterRole

      الاسم: cilium

  • النوع: ServiceAccount
    الاسم: سيليوم
    مساحة الاسم: kube-system
    --- # المصدر: cilium / الرسوم البيانية / المشغل / القوالب / clusterrolebinding.yamlapiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:
    الاسم: cilium-workerroleRef:
    apiGroup: rbac.authorization.k8s.io
    النوع: ClusterRole
    الاسم: cilium- المشغلون
  • النوع: ServiceAccount
    الاسم: مشغل سيليوم
    مساحة الاسم: kube-system
    --- # المصدر: cilium / charts / agent / template / daemonset.yamlapiVersion: apps / v1kind: DaemonSetmetadata:
    ملصقات:
    تطبيق k8s: cilium
    الاسم: سيليوم
    مساحة الاسم: kube-systemspec:
    المحدد:
    المباراة:
    تطبيق k8s: cilium
    قالب:
    البيانات الوصفية:
    التعليقات التوضيحية:
    # هذا التعليق التوضيحي بالإضافة إلى CriticalAddonsOnly التسامح يجعل
    # الهدب ليكون القرنة الحرجة في الكتلة ، مما يضمن الهدب
    # يحصل على جدولة الأولوية.
    # https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/
    Scheduler.alpha.kubernetes.io/critical-pod: ""
    ملصقات:
    تطبيق k8s: cilium
    المواصفات:
    حاويات:

    • أرغس:



      • --config-dir = / tmp / cilium / config-map


        أمر:


      • عامل سيليوم


        مسبار:


        إكسيك:


        أمر:





        • كيليوم



        • الحالة



        • --نبذة



          الحد الأدنى: 10



          # التأخير الأولي لمسبار الحياة كبير عن قصد



          # تجنب دورة القتل وإعادة التشغيل اللانهائية إذا حدث ذلك في البداية



          يستغرق # bootstrapping وقتًا أطول من المتوقع.



          الأوليDelaySeconds: 120



          فترةالثواني: 30



          النجاح الحد الأدنى: 1



          مهلة الثواني: 5



          الاستعداد



          إكسيك:



          أمر:



        • كيليوم



        • الحالة



        • --نبذة



          الحد الأدنى: 3



          الأوليDelaySeconds: 5



          فترةالثواني: 30



          النجاح الحد الأدنى: 1



          مهلة الثواني: 5



          env:





      • الاسم: K8S_NODE_NAME


        من:


        الحقل


        الإصدار: v1.0


        fieldPath: spec.nodeName


      • الاسم: CILIUM_K8S_NAMESPACE


        من:


        الحقل


        الإصدار: v1.0


        fieldPath: metadata.namespace


      • الاسم: CILIUM_FLANNEL_MASTER_DEVICE


        من:


        configMap KeyRef:


        المفتاح: جهاز الفانيلا الرئيسي


        الاسم: cilium-config


        اختياري: صحيح


      • الاسم: CILIUM_FLANNEL_UNINSTALL_ON_EXIT


        من:


        configMap KeyRef:


        المفتاح: flannel-uninstall-on-exit


        الاسم: cilium-config


        اختياري: صحيح


      • الاسم: CILIUM_CLUSTERMESH_CONFIG


        القيمة: / var / lib / cilium / clustermesh /


      • الاسم: CILIUM_CNI_CHAINING_MODE


        من:


        configMap KeyRef:


        المفتاح: وضع تسلسل cni


        الاسم: cilium-config


        اختياري: صحيح


      • الاسم: CILIUM_CUSTOM_CNI_CONF


        من:


        configMap KeyRef:


        المفتاح: Custom-cni-conf


        الاسم: cilium-config


        اختياري: صحيح


        الصورة: "docker.io/cilium/ cilium : v1.7.6 "


        imagePullPolicy: IfNotPresent


        دورة الحياة:


        postStart:


        إكسيك:


        أمر:





        • "/cni-install.sh"



        • "--enable-debug = false"



          قبل التوقف:



          إكسيك:



          أمر:



        • /cni-uninstall.sh



          الاسم: عامل سيليوم



          الأمن



          قدرات:



          أضف:







          • NET_ADMIN




          • SYS_MODULE




            مميز: صحيح




            الحجم









      • mountPath: / var / run / cilium


        الاسم: cilium-run


      • mountPath: / host / opt / cni / bin


        الاسم: مسار cni


      • mountPath: /host/etc/cni/net.d


        الاسم: etc-cni-netd


      • mountPath: / var / lib / cilium / clustermesh


        الاسم: clustermesh-secrets


        readOnly: صحيح


      • mountPath: / tmp / cilium / config-map


        الاسم: cilium-config-path


        readOnly: صحيح


        # مطلوب لتكون قادرًا على تحميل وحدات kernel


      • mountPath: / ليب / وحدات


        الاسم: وحدات ليب


        readOnly: صحيح


      • mountPath: /run/xtables.lock


        الاسم: xtables-lock


        hostNetwork: صحيح


        initContainers:



    • أمر:



      • /init-container.sh


        env:


      • الاسم: CILIUM_ALL_STATE


        من:


        configMap KeyRef:


        المفتاح: حالة الهدب النظيف


        الاسم: cilium-config


        اختياري: صحيح


      • الاسم: CILIUM_BPF_STATE


        من:


        configMap KeyRef:


        المفتاح: حالة نظيفة cilium-bpf


        الاسم: cilium-config


        اختياري: صحيح


      • الاسم: CILIUM_WAIT_BPF_MOUNT


        من:


        configMap KeyRef:


        المفتاح: wait-bpf-mount


        الاسم: cilium-config


        اختياري: صحيح


        الصورة: "docker.io/cilium/ cilium : v1.7.6 "


        imagePullPolicy: IfNotPresent


        الاسم: حالة الهدب النظيف


        الأمن


        قدرات:


        أضف:





        • NET_ADMIN



          مميز: صحيح



          الحجم





      • mountPath: / var / run / cilium


        الاسم: cilium-run


        resetPolicy: دائمًا


        PriorityClassName: نظام عقدة حرجة


        serviceAccount: سيليوم


        serviceAccountName: سيليوم


        إنهاء GracePeriodseconds: 1


        التسامح:



    • عامل التشغيل: موجود

      أحجام:

      # للحفاظ على الحالة بين إعادة التشغيل / الترقيات

    • hostPath:

      المسار: / var / run / cilium

      اكتب: DirectoryOrCreate

      الاسم: cilium-run

      # لتثبيت البرنامج المساعد cilium cni في المضيف

    • hostPath:

      المسار: / opt / cni / bin

      اكتب: DirectoryOrCreate

      الاسم: مسار cni

      # لتثبيت تكوين cilium cni في المضيف

    • hostPath:

      المسار: /etc/cni/net.d

      اكتب: DirectoryOrCreate

      الاسم: etc-cni-netd

      # لتتمكن من تحميل وحدات النواة

    • hostPath:

      المسار: / ليب / وحدات

      الاسم: وحدات ليب

      # للوصول إلى iptables بالتزامن مع العمليات الأخرى (مثل kube-proxy)

    • hostPath:

      المسار: /run/xtables.lock

      النوع: FileOrCreate

      الاسم: xtables-lock

      # لقراءة تكوين Clustermesh

    • الاسم: clustermesh-secrets

      سر:

      الوضع الافتراضي: 420

      اختياري: صحيح

      secretName: cilium-clustermesh

      # لقراءة التكوين من خريطة التكوين

    • configMap:

      الاسم: cilium-config

      الاسم: cilium-config-path

      تحديث الإستراتيجية:

      المتداول التحديث:

      ماكس غير متاح: 2

      النوع: RollingUpdate

      --- # المصدر: cilium / الرسوم البيانية / المشغل / القوالب / النشر .yamlapiVersion: apps / v1kind: Deploymentmetadata:

      ملصقات:

      io.cilium / التطبيق: عامل التشغيل

      الاسم: مشغل سيليوم

      الاسم: مشغل سيليوم

      مساحة الاسم: kube-systemspec:

      النسخ المتماثلة: 1

      المحدد:

      المباراة:

      io.cilium / التطبيق: عامل التشغيل

      الاسم: مشغل سيليوم

      إستراتيجية:

      المتداول التحديث:

      maxSurge: 1

      ماكس غير متاح: 1

      النوع: RollingUpdate

      قالب:

      البيانات الوصفية:

      التعليقات التوضيحية:

      ملصقات:

      io.cilium / التطبيق: عامل التشغيل

      الاسم: مشغل سيليوم

      المواصفات:

      حاويات:

    • أرغس:



      • --debug = $ (CILIUM_DEBUG)


      • - وضع تخصيص الهوية = $ (CILIUM_IDENTITY_ALLOCATION_MODE)


      • --synchronize-k8s-nodes = صحيح


        أمر:


      • مشغل cilium


        env:


      • الاسم: CILIUM_K8S_NAMESPACE


        من:


        الحقل


        الإصدار: v1.0


        fieldPath: metadata.namespace


      • الاسم: K8S_NODE_NAME


        من:


        الحقل


        الإصدار: v1.0


        fieldPath: spec.nodeName


      • الاسم: CILIUM_DEBUG


        من:


        configMap KeyRef:


        المفتاح: التصحيح


        الاسم: cilium-config


        اختياري: صحيح


      • الاسم: CILIUM_CLUSTER_NAME


        من:


        configMap KeyRef:


        المفتاح: اسم الكتلة


        الاسم: cilium-config


        اختياري: صحيح


      • الاسم: CILIUM_CLUSTER_ID


        من:


        configMap KeyRef:


        المفتاح: معرف الكتلة


        الاسم: cilium-config


        اختياري: صحيح


      • الاسم: CILIUM_IPAM


        من:


        configMap KeyRef:


        المفتاح: ipam


        الاسم: cilium-config


        اختياري: صحيح


      • الاسم: CILIUM_DISABLE_ENDPOINT_CRD


        من:


        configMap KeyRef:


        المفتاح: تعطيل نقطة النهاية- crd


        الاسم: cilium-config


        اختياري: صحيح


      • الاسم: CILIUM_KVSTORE


        من:


        configMap KeyRef:


        المفتاح: kvstore


        الاسم: cilium-config


        اختياري: صحيح


      • الاسم: CILIUM_KVSTORE_OPT


        من:


        configMap KeyRef:


        المفتاح: kvstore-opt


        الاسم: cilium-config


        اختياري: صحيح


      • الاسم: AWS_ACCESS_KEY_ID


        من:


        مفتاح سري:


        المفتاح: AWS_ACCESS_KEY_ID


        الاسم: cilium-aws


        اختياري: صحيح


      • الاسم: AWS_SECRET_ACCESS_KEY


        من:


        مفتاح سري:


        المفتاح: AWS_SECRET_ACCESS_KEY


        الاسم: cilium-aws


        اختياري: صحيح


      • الاسم: AWS_DEFAULT_REGION


        من:


        مفتاح سري:


        المفتاح: AWS_DEFAULT_REGION


        الاسم: cilium-aws


        اختياري: صحيح


      • الاسم: CILIUM_IDENTITY_ALLOCATION_MODE


        من:


        configMap KeyRef:


        المفتاح: وضع تخصيص الهوية


        الاسم: cilium-config


        اختياري: صحيح


        الصورة: "docker.io/cilium/ المشغل: v1.7.6 "


        imagePullPolicy: IfNotPresent


        الاسم: مشغل سيليوم


        مسبار:


        http الحصول على:


        المضيف: '127.0.0.1'


        المسار: / healthz


        المنفذ: 9234


        المخطط: HTTP


        الأوليDelaySeconds: 60


        فترةالثواني: 10


        مهلة الثواني: 3


        hostNetwork: صحيح


        resetPolicy: دائمًا


        serviceAccount: مشغل cilium


        serviceAccountName: مشغل cilium



-
أنت تتلقى هذا لأنه تم تعيينك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/kubernetes/kubernetes/issues/91601#issuecomment-656404841 ،
أو إلغاء الاشتراك
https://github.com/notifications/unsubscribe-auth/AAJ5E6BMTNCADT5K7D4PMF3R2ZJRVANCNFSM4NOTPEDA
.

هل يمكنك محاولة زيادة مستوى السجل واستخدام grep لتصفية العقدة
أو الكبسولة؟

يوم الخميس ، 9 يوليو ، 2020 ، الساعة 7:55 مساءً ، dilyevsky ، [email protected]
كتب:

هنا سجل المجدول:

I0709 23: 08: 22.056081 1 register.go: 150] تسجيل EvenPodsSpread دالة الأساس والأولوية
I0709 23: 08: 23.137451 1 serve.go: 313] تم إنشاء شهادة موقعة ذاتيًا في الذاكرة
W0709 23: 08: 33.843509 1 Authentication.go: 297] خطأ في البحث عن تكوين المصادقة داخل المجموعة: etcdserver: انتهاء مهلة الطلب
W0709 23: 08: 33.843671 1 Authentication.go: 298] متابعة بدون تكوين المصادقة. قد يعامل هذا جميع الطلبات على أنها مجهولة المصدر.
W0709 23: 08: 33.843710 1 Authentication.go: 299] للمطالبة ببحث تكوين المصادقة بنجاح ، قم بتعيين - المصادقة - التسامح - البحث - فشل = خطأ
I0709 23: 08: 33.911805 1 register.go: 150] تسجيل EvenPodsSpread دالة الأساس والأولوية
I0709 23: 08: 33.911989 1 register.go: 150] تسجيل EvenPodsSpread دالة المسند والأولوية
W0709 23: 08: 33.917999 1 authorization.go: 47] تم تعطيل التفويض
W0709 23: 08: 33.918162 1 Authentication.go: 40] تم تعطيل المصادقة
I0709 23: 08: 33.918238 1 ملغاة_insecure_serving.go: 51] عرض healthz بشكل غير آمن على [::]: 10251
I0709 23: 08: 33.925860 1 configmap_cafile_content.go: 202] بدء client-ca :: kube-system :: extension-apiserver-Authentication :: client-ca-file
I0709 23: 08: 33.926013 1 shared_informer.go: 223] في انتظار مزامنة ذاكرات التخزين المؤقت لـ client-ca :: kube-system :: extension-apiserver-Authentication :: client-ca-file
I0709 23: 08: 33.930685 1 secure_serving.go: 178] العرض بأمان على 127.0.0.1:10259
I0709 23: 08: 33.936198 1 tlsconfig.go: 240] بدء DynamicServingCertificateController
I0709 23: 08: 34.026382 1 shared_informer.go: 230] يتم مزامنة ذاكرات التخزين المؤقت لـ client-ca :: kube-system :: extension-apiserver-Authentication :: client-ca-file
I0709 23: 08: 34.036998 1 Leaderelection.go: 242] محاولة الحصول على تأجير رائد kube-system / kube-Scheduler ...
I0709 23: 08: 50.597201 1 Leaderelection.go: 252] تم الحصول على عقد إيجار kube-system / kube-Scheduler بنجاح
E0709 23: 08: 50.658551 1 factory.go: 503] pod: kube-system / coredns-66bff467f8-9rjvd موجود بالفعل في قائمة الانتظار النشطة
E0709 23: 12: 27.673854 1 factory.go: 503] pod kube-system / cilium-vv466 موجود بالفعل في قائمة انتظار التراجع
E0709 23: 12: 58.099432 1 Leaderelection.go: 320] خطأ في استرداد قفل المورد kube-system / kube-Scheduler: etcdserver: تم تغيير القائد

بعد إعادة تشغيل كبسولات المجدول ، يتم تحديد المواعيد المعلقة على الفور.

-
أنت تتلقى هذا لأنه تم تعيينك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/kubernetes/kubernetes/issues/91601#issuecomment-656406215 ،
أو إلغاء الاشتراك
https://github.com/notifications/unsubscribe-auth/AAJ5E6E4QPGNNBFUYSZEJC3R2ZKHDANCNFSM4NOTPEDA
.

هذه هي الأحداث:
الأحداث:
اكتب سبب العمر من الرسالة
------ ---- -------
فشل التحذيرتتوفر عُقد المجدول الافتراضي 0/6: 5 عقد (عقدة) لم تتطابق مع محدد العقدة.
فشل التحذيرتتوفر عُقد المجدول الافتراضي 0/6: 5 عقد (عقدة) لم تتطابق مع محدد العقدة.


The node only has two taints but the pod tolerates all existing taints and yeah it seems to only happen on masters:

Taints: node-role.kubernetes.io/ master: NoSchedule
node.kubernetes.io/network-un متاح: NoSchedule


There is enough space and pod is best effort with no reservation anyway:
```  Resource                   Requests    Limits
  --------                   --------    ------
  cpu                        650m (32%)  0 (0%)
  memory                     70Mi (0%)   170Mi (2%)
  ephemeral-storage          0 (0%)      0 (0%)
  hugepages-1Gi              0 (0%)      0 (0%)
  hugepages-2Mi              0 (0%)      0 (0%)
  attachable-volumes-gce-pd  0           0

سأحاول زيادة مستوى سجل المجدول الآن ...

لا يحتوي pod yaml في الواقع على تسامح node-role.kubernetes.io/master . لذلك لا ينبغي أن يكون قد تم تحديده في المعلم.

مرحبا! نحن نواجه نفس المشكلة. ومع ذلك ، نرى نفس المشكلة مع عمليات النشر ، حيث نستخدم مضاد التقارب للتأكد من جدولة حجرة على كل عقدة أو محدد جراب يستهدف العقدة المحددة.
كان مجرد إنشاء جراب مع محدد عقدة محدد لمطابقة اسم مضيف العقدة الفاشلة كافياً لإحداث فشل في الجدولة. كان يقول أن 5 عقد لا تطابق المحدد ، ولكن لا شيء عن السادس. إعادة تشغيل المجدول يحل المشكلة. يبدو أن شيئًا ما يتم تخزينه مؤقتًا حول تلك العقدة ويمنع الجدولة على العقدة.
كما قال أشخاص آخرون من قبل ، ليس لدينا أي شيء في السجل عن الفشل.

قمنا بتجريد النشر الفاشل إلى الحد الأدنى (لقد أزلنا الملوثات على السيد الذي فشل):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
      restartPolicy: Always
      schedulerName: default-scheduler
      nodeSelector:
        kubernetes.io/hostname: master-2

كنا نواجه نفس المشكلة عندما كان السيد ملوثًا ، وكان النشر هو التسامح مع التلوث. لذلك لا يبدو أنه مرتبط بالشجعان أو التسامح أو التقارب / عدم التقارب بشكل خاص. عندما يبدأ الفشل في الحدوث ، لا يمكن جدولة أي شيء يستهدف العقدة المحددة. نرى المشكلة في 1.18.2 حتى 1.18.5 (لم نحاول مع 1.18.0 أو .1)

كان مجرد إنشاء جراب مع محدد عقدة تم تعيينه لمطابقة اسم مضيف العقدة الفاشلة كافياً للتسبب في فشل الجدولة

هل يمكنك توضيح ما إذا كان قد بدأ بالفشل بعد إنشاء مثل هذا الكبسولة أم قبل ذلك؟ أفترض أن هذه العقدة لم يكن لها عيب لا يتسامح معه الكبسولة.

nodo سيساعد في التكاثر. هل يمكنك إلقاء نظرة على رمز NodeSelector؟ قد تحتاج إلى إضافة سطور تسجيل إضافية أثناء الاختبار. يمكنك أيضًا طباعة ذاكرة التخزين المؤقت.

  • احصل على PID الخاص بـ kube-Scheduler: $ pidof kube-scheduler
  • مشغل تفريغ قائمة الانتظار: $ sudo kill -SIGUSR2 <pid> . لاحظ أن هذا لن يقتل عملية الجدولة.
  • ثم في سجل المجدول ، ابحث عن السلاسل "Dump of cached NodeInfo" ، و "Dump of Scheduling Queue" و "Cache Comparer بدأت".

/ أولوية حرجة - عاجلة

/ إلغاء تعيين

لقد رأينا بالفعل بعض البرامج المساعدة والنشر عالقة في "قيد الانتظار" قبل أن نحاول نشر نشر الاختبار هذا ، لذا فقد فشل بالفعل. وأزيلت العيوب من العقدة.
في الوقت الحالي ، فقدنا البيئة التي كان يحدث فيها ذلك لأننا اضطررنا إلى إعادة تشغيل العقد حتى لا تظهر المشكلة بعد الآن. بمجرد أن نتكاثر ، سنحاول العودة بمزيد من المعلومات

الرجاء القيام بذلك. لقد حاولت إعادة إنتاج هذا في الماضي دون نجاح. أنا مهتم أكثر بأول حالة فشل. ربما لا يزال مرتبطًا بالتلوث.

لقد أعدنا إنتاج المشكلة. قمت بتشغيل الأمر الذي طلبته ، ها هي المعلومات:

I0716 14:47:52.768362       1 factory.go:462] Unable to schedule default/test-deployment-558f47bbbb-4rt5t: no fit: 0/6 nodes are available: 5 node(s) didn't match node selector.; waiting
I0716 14:47:52.768683       1 scheduler.go:776] Updating pod condition for default/test-deployment-558f47bbbb-4rt5t to (PodScheduled==False, Reason=Unschedulable)
I0716 14:47:53.018781       1 httplog.go:90] verb="GET" URI="/healthz" latency=299.172µs resp=200 UserAgent="kube-probe/1.18" srcIP="127.0.0.1:57258": 
I0716 14:47:59.469828       1 comparer.go:42] cache comparer started
I0716 14:47:59.470936       1 comparer.go:67] cache comparer finished
I0716 14:47:59.471038       1 dumper.go:47] Dump of cached NodeInfo
I0716 14:47:59.471484       1 dumper.go:49] 
Node name: master-0-bug
Requested Resources: {MilliCPU:1100 Memory:52428800 EphemeralStorage:0 AllowedPodNumber:0 ScalarResources:map[]}
Allocatable Resources:{MilliCPU:2000 Memory:3033427968 EphemeralStorage:19290208634 AllowedPodNumber:110 ScalarResources:map[hugepages-1Gi:0 hugepages-2Mi:0]}
Scheduled Pods(number: 9):
...
I0716 14:47:59.472623       1 dumper.go:60] Dump of scheduling queue:
name: coredns-cd64c8d7c-29zjq, namespace: kube-system, uid: 938e8827-5d17-4db9-ac04-d229baf4534a, phase: Pending, nominated node: 
name: test-deployment-558f47bbbb-4rt5t, namespace: default, uid: fa19fda9-c8d6-4ffe-b248-8ddd24ed5310, phase: Pending, nominated node: 

للأسف لا يبدو أن هذا يساعد

تفريغ ذاكرة التخزين المؤقت من أجل التصحيح ، ولن يغير أي شيء. هل يمكنك تضمين المكب من فضلك؟

أيضًا ، بافتراض أن هذا كان الخطأ الأول ، هل يمكنك تضمين pod yaml و node؟

هذا إلى حد كبير كل شيء تم إلقاؤه ، لقد أزلت للتو العقد الأخرى. لم يكن هذا هو الخطأ الأول ، ولكن يمكنك رؤية جراب coredns في مكب النفايات ، وكان هذا هو الخطأ الأول. لست متأكدًا مما تطلبه أيضًا في مكب النفايات.
سأحضر اليامل

شكرًا ، لم أدرك أنك قمت بقص العقدة والجزء ذي الصلة.

هل يمكنك تضمين القرون المجدولة لتلك العقدة بالرغم من ذلك؟ فقط في حالة وجود خطأ في حسابات استخدام الموارد.

Requested Resources: {MilliCPU:1100 Memory:52428800 EphemeralStorage:0 AllowedPodNumber:0 ScalarResources:map[]}

هذا AllowedPodNumber: 0 يبدو غريبًا.

فيما يلي البودات الأخرى الموجودة على تلك العقدة:
` name: kube-controller-manager-master-0-bug, namespace: kube-system, uid: 095eebb0-4752-419b-aac7-245e5bc436b8, phase: Running, nominated node: name: kube-proxy-xwf6h, namespace: kube-system, uid: 16552eaf-9eb8-4584-ba3c-7dff6ce92592, phase: Running, nominated node: name: kube-apiserver-master-0-bug, namespace: kube-system, uid: 1d338e26-b0bc-4cef-9bad-86b7dd2b2385, phase: Running, nominated node: name: kube-multus-ds-amd64-tpkm8, namespace: kube-system, uid: d50c0c7f-599c-41d5-a029-b43352a4f5b8, phase: Running, nominated node: name: openstack-cloud-controller-manager-wrb8n, namespace: kube-system, uid: 17aeb589-84a1-4416-a701-db6d8ef60591, phase: Running, nominated node: name: kube-scheduler-master-0-bug, namespace: kube-system, uid: 52469084-3122-4e99-92f6-453e512b640f, phase: Running, nominated node: name: subport-controller-28j9v, namespace: kube-system, uid: a5a07ac8-763a-4ff2-bdae-91c6e9e95698, phase: Running, nominated node: name: csi-cinder-controllerplugin-0, namespace: kube-system, uid: 8b16d6c8-a871-454e-98a3-0aa545f9c9d0, phase: Running, nominated node: name: calico-node-d899t, namespace: kube-system, uid: e3672030-53b1-4356-a5df-0f4afd6b9237, phase: Running, nominated node:

سمحت جميع العقد بتعيين PodNumber على 0 في الموارد المطلوبة في التفريغ ، لكن العقد الأخرى قابلة للجدولة

عقدة يامل:

apiVersion: v1
kind: Node
metadata:
  annotations:
    kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
    node.alpha.kubernetes.io/ttl: "0"
    volumes.kubernetes.io/controller-managed-attach-detach: "true"
  creationTimestamp: "2020-07-16T09:59:48Z"
  labels:
    beta.kubernetes.io/arch: amd64
    beta.kubernetes.io/instance-type: 54019dbc-10d7-409c-8338-5556f61a9371
    beta.kubernetes.io/os: linux
    failure-domain.beta.kubernetes.io/region: regionOne
    failure-domain.beta.kubernetes.io/zone: nova
    kubernetes.io/arch: amd64
    kubernetes.io/hostname: master-0-bug
    kubernetes.io/os: linux
    node-role.kubernetes.io/master: ""
    node.kubernetes.io/instance-type: 54019dbc-10d7-409c-8338-5556f61a9371
    node.uuid: 00324054-405e-4fae-a3bf-d8509d511ded
    node.uuid_source: cloud-init
    topology.kubernetes.io/region: regionOne
    topology.kubernetes.io/zone: nova
  name: master-0-bug
  resourceVersion: "85697"
  selfLink: /api/v1/nodes/master-0-bug
  uid: 629b6ef3-3c76-455b-8b6b-196c4754fb0e
spec:
  podCIDR: 192.168.0.0/24
  podCIDRs:
  - 192.168.0.0/24
  providerID: openstack:///00324054-405e-4fae-a3bf-d8509d511ded
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
status:
  addresses:
  - address: 10.0.10.14
    type: InternalIP
  - address: master-0-bug
    type: Hostname
  allocatable:
    cpu: "2"
    ephemeral-storage: "19290208634"
    hugepages-1Gi: "0"
    hugepages-2Mi: "0"
    memory: 2962332Ki
    pods: "110"
  capacity:
    cpu: "2"
    ephemeral-storage: 20931216Ki
    hugepages-1Gi: "0"
    hugepages-2Mi: "0"
    memory: 3064732Ki
    pods: "110"
  conditions:
  - lastHeartbeatTime: "2020-07-16T10:02:20Z"
    lastTransitionTime: "2020-07-16T10:02:20Z"
    message: Calico is running on this node
    reason: CalicoIsUp
    status: "False"
    type: NetworkUnavailable
  - lastHeartbeatTime: "2020-07-16T15:46:11Z"
    lastTransitionTime: "2020-07-16T09:59:43Z"
    message: kubelet has sufficient memory available
    reason: KubeletHasSufficientMemory
    status: "False"
    type: MemoryPressure
  - lastHeartbeatTime: "2020-07-16T15:46:11Z"
    lastTransitionTime: "2020-07-16T09:59:43Z"
    message: kubelet has no disk pressure
    reason: KubeletHasNoDiskPressure
    status: "False"
    type: DiskPressure
  - lastHeartbeatTime: "2020-07-16T15:46:11Z"
    lastTransitionTime: "2020-07-16T09:59:43Z"
    message: kubelet has sufficient PID available
    reason: KubeletHasSufficientPID
    status: "False"
    type: PIDPressure
  - lastHeartbeatTime: "2020-07-16T15:46:11Z"
    lastTransitionTime: "2020-07-16T10:19:44Z"
    message: kubelet is posting ready status. AppArmor enabled
    reason: KubeletReady
    status: "True"
    type: Ready
  daemonEndpoints:
    kubeletEndpoint:
      Port: 10250
  nodeInfo:
    architecture: amd64
    bootID: fe410ed3-2825-4f94-a9f9-08dc5e6a955e
    containerRuntimeVersion: docker://19.3.11
    kernelVersion: 4.12.14-197.45-default
    kubeProxyVersion: v1.18.5
    kubeletVersion: v1.18.5
    machineID: 00324054405e4faea3bfd8509d511ded
    operatingSystem: linux
    systemUUID: 00324054-405e-4fae-a3bf-d8509d511ded

والجراب:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2020-07-16T10:13:35Z"
  generateName: pm-node-exporter-
  labels:
    controller-revision-hash: 6466d9c7b
    pod-template-generation: "1"
  name: pm-node-exporter-mn9vj
  namespace: monitoring
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: DaemonSet
    name: pm-node-exporter
    uid: 5855a26f-a57e-4b0e-93f2-461c19c477e1
  resourceVersion: "5239"
  selfLink: /api/v1/namespaces/monitoring/pods/pm-node-exporter-mn9vj
  uid: 0db09c9c-1618-4454-94fa-138e55e5ebd7
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchFields:
          - key: metadata.name
            operator: In
            values:
            - master-0-bug
  containers:
  - args:
    - --path.procfs=/host/proc
    - --path.sysfs=/host/sys
    image: ***
    imagePullPolicy: IfNotPresent
    livenessProbe:
      failureThreshold: 3
      httpGet:
        path: /
        port: 9100
        scheme: HTTP
      initialDelaySeconds: 5
      periodSeconds: 5
      successThreshold: 1
      timeoutSeconds: 1
    name: pm-node-exporter
    ports:
    - containerPort: 9100
      hostPort: 9100
      name: metrics
      protocol: TCP
    resources:
      limits:
        cpu: 200m
        memory: 150Mi
      requests:
        cpu: 100m
        memory: 100Mi
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /host/proc
      name: proc
      readOnly: true
    - mountPath: /host/sys
      name: sys
      readOnly: true
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: pm-node-exporter-token-csllf
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  hostNetwork: true
  hostPID: true
  nodeSelector:
    node-role.kubernetes.io/master: ""
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: pm-node-exporter
  serviceAccountName: pm-node-exporter
  terminationGracePeriodSeconds: 30
  tolerations:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/disk-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/memory-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/pid-pressure
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/unschedulable
    operator: Exists
  - effect: NoSchedule
    key: node.kubernetes.io/network-unavailable
    operator: Exists
  volumes:
  - hostPath:
      path: /proc
      type: ""
    name: proc
  - hostPath:
      path: /sys
      type: ""
    name: sys
  - name: pm-node-exporter-token-csllf
    secret:
      defaultMode: 420
      secretName: pm-node-exporter-token-csllf
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2020-07-16T10:13:35Z"
    message: '0/6 nodes are available: 2 node(s) didn''t have free ports for the requested
      pod ports, 3 node(s) didn''t match node selector.'
    reason: Unschedulable
    status: "False"
    type: PodScheduled
  phase: Pending
  qosClass: Burstable

شكرا جزيلا على كل المعلومات. nodo هل يمكنك أخذها؟

نحاول أيضًا مع https://github.com/Nordix/kubernetes/commit/5c00cdf195fa61316f963f59e73c6cafc2ad9bdc الآن ، للحصول على مزيد من المعلومات

/مساعدة

maelk لا تتردد في أخذ هذا وإرسال PR إذا وجدت الخطأ. من المحتمل أن تكون أسطر السجل التي أضفتها مفيدة. خلاف ذلك ، سأفتح أبوابها للمساهمين.

alculquicondor :
تم وضع علامة على هذا الطلب على أنه يحتاج إلى مساعدة من أحد المساهمين.

يرجى التأكد من أن الطلب يلبي المتطلبات المذكورة هنا .

إذا لم يعد هذا الطلب يلبي هذه المتطلبات ، فيمكن إزالة التصنيف
بالتعليق باستخدام الأمر /remove-help .

ردًا على هذا :

/مساعدة

maelk لا تتردد في أخذ هذا وإرسال PR إذا وجدت الخطأ. من المحتمل أن تكون أسطر السجل التي أضفتها مفيدة. خلاف ذلك ، سأفتح أبوابها للمساهمين.

تعليمات للتفاعل معي باستخدام تعليقات العلاقات العامة متوفرة هنا . إذا كانت لديك أسئلة أو اقتراحات تتعلق بسلوكي ، فالرجاء رفع قضية ضد

/تعيين

maelk هل هناك أي شيء محدد للتوقيت عند حدوث هذه المشكلة لأول مرة؟ على سبيل المثال ، هل يحدث ذلك مباشرة بعد بدء العقدة؟

لا ، هناك بعض البودات التي يتم جدولتها وتعمل بشكل جيد. ولكن بمجرد حدوث المشكلة ، لا يمكن جدولة أي من.

تقليل الأولوية حتى نحصل على حالة قابلة للتكرار.

تمكنا من إعادة إنتاج الخطأ باستخدام برنامج جدولة يحتوي على إدخالات سجل إضافية. ما نراه هو أن أحد الأسياد يختفي تمامًا من قائمة العقد التي يتم تكرارها من خلال. يمكننا أن نرى أن العملية تبدأ بـ 6 عقد (من اللقطة):

I0720 13:58:28.246507       1 generic_scheduler.go:441] Looking for a node for kube-system/coredns-cd64c8d7c-tcxbq, going through []*nodeinfo.NodeInfo{(*nodeinfo.NodeInfo)(0xc000326a90), (*nodeinfo.NodeInfo)(0xc000952000), (*nodeinfo.NodeInfo)(0xc0007d08f0), (*nodeinfo.NodeInfo)(0xc0004f35f0), (*nodeinfo.NodeInfo)(0xc000607040), (*nodeinfo.NodeInfo)(0xc000952000)}

ولكن بعد ذلك ، يمكننا أن نرى أنه يكرر أكثر من 5 عقد فقط ، ثم نحصل على:

I0720 13:58:28.247420       1 generic_scheduler.go:505] pod kube-system/coredns-cd64c8d7c-tcxbq : processed 5 nodes, 0 fit

لذلك تتم إزالة إحدى العقد من قائمة العقد المحتملة. للأسف ، لم يكن لدينا ما يكفي من عمليات تسجيل الدخول في بداية العملية ، لكننا سنحاول الحصول على المزيد.

مراجع التعليمات البرمجية حسب سطر السجل:

  1. https://github.com/Nordix/kubernetes/commit/5c00cdf195fa61316f963f59e73c6cafc2ad9bdc#diff -c237cdd9e4cb201118ca380732d7f361R441
  2. https://github.com/Nordix/kubernetes/commit/5c00cdf195fa61316f963f59e73c6cafc2ad9bdc#diff -c237cdd9e4cb201118ca380732d7f361R505

maelk
هل رأيت أي سطور لـ %v/%v on node %v, too many nodes fit ؟

وإلا ، هل يمكنك التحقق من وجود أخطاء على workqueue.ParallelizeUntil(ctx, 16, len(allNodes), checkNode) ؟

لا ، لم يظهر هذا السجل. أعتقد أيضًا أنه قد يكون لدينا مشكلة في الموازاة أو أن العقدة تمت تصفيتها مسبقًا. إذا فشلت مع وجود خطأ هنا: https://github.com/Nordix/kubernetes/commit/5c00cdf195fa61316f963f59e73c6cafc2ad9bdc#diff -c237cdd9e4cb201118ca380732d7f361R464 سأكون مرئيًا أكثر في السجلات حول afaik وظيفة والتوازي.

لقد أدركت للتو أن عقدة واحدة تمر عبر التصفية مرتين!

السجلات هي:

I0720 13:58:28.246507       1 generic_scheduler.go:441] Looking for a node for kube-system/coredns-cd64c8d7c-tcxbq, going through []*nodeinfo.NodeInfo{(*nodeinfo.NodeInfo)(0xc000326a90), (*nodeinfo.NodeInfo)(0xc000952000), (*nodeinfo.NodeInfo)(0xc0007d08f0), (*nodeinfo.NodeInfo)(0xc0004f35f0), (*nodeinfo.NodeInfo)(0xc000607040), (*nodeinfo.NodeInfo)(0xc000952000)}
I0720 13:58:28.246793       1 generic_scheduler.go:469] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-60846k0y-scheduler, fits: false, status: &v1alpha1.Status{code:3, reasons:[]string{"node(s) didn't match node selector"}}
I0720 13:58:28.246970       1 generic_scheduler.go:483] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-60846k0y-scheduler : status is not success
I0720 13:58:28.246819       1 taint_toleration.go:71] Checking taints for pod kube-system/coredns-cd64c8d7c-tcxbq for node master-0-scheduler : taints : []v1.Taint{v1.Taint{Key:"node-role.kubernetes.io/master", Value:"", Effect:"NoSchedule", TimeAdded:(*v1.Time)(nil)}} and tolerations: []v1.Toleration{v1.Toleration{Key:"node-role.kubernetes.io/master", Operator:"Exists", Value:"", Effect:"NoSchedule", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"CriticalAddonsOnly", Operator:"Exists", Value:"", Effect:"NoSchedule", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"node-role.kubernetes.io/master", Operator:"Exists", Value:"", Effect:"NoExecute", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"node-role.kubernetes.io/not-ready", Operator:"Exists", Value:"", Effect:"NoSchedule", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"node.kubernetes.io/not-ready", Operator:"Exists", Value:"", Effect:"NoExecute", TolerationSeconds:(*int64)(0xc000d40d90)}, v1.Toleration{Key:"node.kubernetes.io/unreachable", Operator:"Exists", Value:"", Effect:"NoExecute", TolerationSeconds:(*int64)(0xc000d40db0)}}
I0720 13:58:28.247019       1 taint_toleration.go:71] Checking taints for pod kube-system/coredns-cd64c8d7c-tcxbq for node master-2-scheduler : taints : []v1.Taint{v1.Taint{Key:"node-role.kubernetes.io/master", Value:"", Effect:"NoSchedule", TimeAdded:(*v1.Time)(nil)}} and tolerations: []v1.Toleration{v1.Toleration{Key:"node-role.kubernetes.io/master", Operator:"Exists", Value:"", Effect:"NoSchedule", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"CriticalAddonsOnly", Operator:"Exists", Value:"", Effect:"NoSchedule", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"node-role.kubernetes.io/master", Operator:"Exists", Value:"", Effect:"NoExecute", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"node-role.kubernetes.io/not-ready", Operator:"Exists", Value:"", Effect:"NoSchedule", TolerationSeconds:(*int64)(nil)}, v1.Toleration{Key:"node.kubernetes.io/not-ready", Operator:"Exists", Value:"", Effect:"NoExecute", TolerationSeconds:(*int64)(0xc000d40d90)}, v1.Toleration{Key:"node.kubernetes.io/unreachable", Operator:"Exists", Value:"", Effect:"NoExecute", TolerationSeconds:(*int64)(0xc000d40db0)}}
I0720 13:58:28.247144       1 generic_scheduler.go:469] pod kube-system/coredns-cd64c8d7c-tcxbq on node master-2-scheduler, fits: false, status: &v1alpha1.Status{code:2, reasons:[]string{"node(s) didn't match pod affinity/anti-affinity", "node(s) didn't satisfy existing pods anti-affinity rules"}}
I0720 13:58:28.247172       1 generic_scheduler.go:483] pod kube-system/coredns-cd64c8d7c-tcxbq on node master-2-scheduler : status is not success
I0720 13:58:28.247210       1 generic_scheduler.go:469] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-7dt1xd4k-scheduler, fits: false, status: &v1alpha1.Status{code:3, reasons:[]string{"node(s) didn't match node selector"}}
I0720 13:58:28.247231       1 generic_scheduler.go:483] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-7dt1xd4k-scheduler : status is not success
I0720 13:58:28.247206       1 generic_scheduler.go:469] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-60846k0y-scheduler, fits: false, status: &v1alpha1.Status{code:3, reasons:[]string{"node(s) didn't match node selector"}}
I0720 13:58:28.247297       1 generic_scheduler.go:483] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-60846k0y-scheduler : status is not success
I0720 13:58:28.247246       1 generic_scheduler.go:469] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-hyk0hg7r-scheduler, fits: false, status: &v1alpha1.Status{code:3, reasons:[]string{"node(s) didn't match node selector"}}
I0720 13:58:28.247340       1 generic_scheduler.go:483] pod kube-system/coredns-cd64c8d7c-tcxbq on node worker-pool1-hyk0hg7r-scheduler : status is not success
I0720 13:58:28.247147       1 generic_scheduler.go:469] pod kube-system/coredns-cd64c8d7c-tcxbq on node master-0-scheduler, fits: false, status: &v1alpha1.Status{code:2, reasons:[]string{"node(s) didn't match pod affinity/anti-affinity", "node(s) didn't satisfy existing pods anti-affinity rules"}}
I0720 13:58:28.247375       1 generic_scheduler.go:483] pod kube-system/coredns-cd64c8d7c-tcxbq on node master-0-scheduler : status is not success
I0720 13:58:28.247420       1 generic_scheduler.go:505] pod kube-system/coredns-cd64c8d7c-tcxbq : processed 5 nodes, 0 fit
I0720 13:58:28.247461       1 generic_scheduler.go:430] pod kube-system/coredns-cd64c8d7c-tcxbq After scheduling, filtered: []*v1.Node{}, filtered nodes: v1alpha1.NodeToStatusMap{"master-0-scheduler":(*v1alpha1.Status)(0xc000d824a0), "master-2-scheduler":(*v1alpha1.Status)(0xc000b736c0), "worker-pool1-60846k0y-scheduler":(*v1alpha1.Status)(0xc000d825a0), "worker-pool1-7dt1xd4k-scheduler":(*v1alpha1.Status)(0xc000b737e0), "worker-pool1-hyk0hg7r-scheduler":(*v1alpha1.Status)(0xc000b738c0)}
I0720 13:58:28.247527       1 generic_scheduler.go:185] Pod kube-system/coredns-cd64c8d7c-tcxbq failed scheduling:
  nodes snapshot: &cache.Snapshot{nodeInfoMap:map[string]*nodeinfo.NodeInfo{"master-0-scheduler":(*nodeinfo.NodeInfo)(0xc000607040), "master-1-scheduler":(*nodeinfo.NodeInfo)(0xc0001071e0), "master-2-scheduler":(*nodeinfo.NodeInfo)(0xc000326a90), "worker-pool1-60846k0y-scheduler":(*nodeinfo.NodeInfo)(0xc000952000), "worker-pool1-7dt1xd4k-scheduler":(*nodeinfo.NodeInfo)(0xc0007d08f0), "worker-pool1-hyk0hg7r-scheduler":(*nodeinfo.NodeInfo)(0xc0004f35f0)}, nodeInfoList:[]*nodeinfo.NodeInfo{(*nodeinfo.NodeInfo)(0xc000326a90), (*nodeinfo.NodeInfo)(0xc000952000), (*nodeinfo.NodeInfo)(0xc0007d08f0), (*nodeinfo.NodeInfo)(0xc0004f35f0), (*nodeinfo.NodeInfo)(0xc000607040), (*nodeinfo.NodeInfo)(0xc000952000)}, havePodsWithAffinityNodeInfoList:[]*nodeinfo.NodeInfo{(*nodeinfo.NodeInfo)(0xc000326a90), (*nodeinfo.NodeInfo)(0xc000607040)}, generation:857} 
  statuses: v1alpha1.NodeToStatusMap{"master-0-scheduler":(*v1alpha1.Status)(0xc000d824a0), "master-2-scheduler":(*v1alpha1.Status)(0xc000b736c0), "worker-pool1-60846k0y-scheduler":(*v1alpha1.Status)(0xc000d825a0), "worker-pool1-7dt1xd4k-scheduler":(*v1alpha1.Status)(0xc000b737e0), "worker-pool1-hyk0hg7r-scheduler":(*v1alpha1.Status)(0xc000b738c0)} 

كما يمكنك أن ترى عقدة العمال- pool1-60846k0y- مجدول يمر مرتين من خلال التصفية

لا ، لم يظهر هذا السجل. أعتقد أيضًا أنه قد يكون لدينا مشكلة في الموازاة أو أن العقدة تمت تصفيتها مسبقًا. إذا كان هناك خطأ هنا: Nordix @ 5c00cdf # diff -c237cdd9e4cb201118ca380732d7f361R464 سيكون مرئيًا في سجلات afaik ، لذلك سأحاول إضافة المزيد من إدخالات التصحيح حول الوظيفة والتوازي على وجه التحديد.

نعم ، سيظهر خطأ هناك كخطأ جدولة في أحداث البود.

لقد أدركت للتو أن عقدة واحدة تمر عبر التصفية مرتين!

أنا بصراحة لا أعتقد أن الموازاة بها أخطاء (لا تزال تستحق التحقق) ، ولكن قد تكون هذه علامة على فشلنا في إنشاء لقطة من ذاكرة التخزين المؤقت (كما رأينا من ذاكرة التخزين المؤقت ، ذاكرة التخزين المؤقت صحيحة) ، عن طريق إضافة عقدة مرتين. نظرًا لأن الحالات عبارة عن خريطة ، فمن المنطقي أننا "نرى" فقط 5 عقد في سطر السجل الأخير.

هذا هو الكود (نصيحة من 1.18) https://github.com/kubernetes/kubernetes/blob/ec73e191f47b7992c2f40fadf1389446d6661d6d/pkg/scheduler/internal/cache/cache.go#L203

سم مكعب @ ahg-g

سأحاول إضافة الكثير من السجلات في جزء ذاكرة التخزين المؤقت من المجدول ، خاصة حول إضافة العقدة وتحديثها ، وحول اللقطة. ومع ذلك ، من السطر الأخير من السجلات ، يمكنك أن ترى أن اللقطة صحيحة بالفعل ، وتحتوي على جميع العقد ، لذلك يبدو أن كل ما يحدث يحدث لاحقًا ، عند العمل على تلك اللقطة

مخبأ! = لقطة

ذاكرة التخزين المؤقت هي الشيء الحي الذي يتم تحديثه من الأحداث. يتم تحديث اللقطة (من ذاكرة التخزين المؤقت) قبل كل دورة جدولة لـ "قفل" الحالة. أضفنا تحسينات لجعل هذه العملية الأخيرة في أسرع وقت ممكن. من الممكن أن يكون الخطأ موجودًا.

شكراmaelk! هذا مفيد جدا. تشير سجلاتك إلى أن (*nodeinfo.NodeInfo)(0xc000952000) مكرر في القائمة بالفعل على https://github.com/Nordix/kubernetes/commit/5c00cdf195fa61316f963f59e73c6cafc2ad9bdc#diff -c237cdd9e4cb201118ca380732d7f361R441 قبل أن يتم تنفيذ أي كود موازي. هذا يعني بالفعل أنه مكرر قبل تحديث اللقطة.

في الواقع ، يأتي ذلك من اللقطة ، التي تحدث قبل رسالة السجل هذه: https://github.com/Nordix/kubernetes/commit/5c00cdf195fa61316f963f59e73c6cafc2ad9bdc#diff -c237cdd9e4cb201118ca380732d7f361R161. لذلك يبدو أن محتوى اللقطة يحتوي على نسخة مكررة ، لأنه يأتي من https://github.com/Nordix/kubernetes/commit/5c00cdf195fa61316f963f59e73c6cafc2ad9bdc#diff -c237cdd9e4cb201118ca380732d7f361R436

صحيح. قصدت أنه تم تكرارها بالفعل قبل انتهاء تحديث اللقطة.

صحيح. قصدت أنه تم تكرارها بالفعل قبل انتهاء تحديث اللقطة.

لا ، يتم تحديث اللقطة في بداية دورة الجدولة. الخطأ إما أثناء تحديث اللقطة أو قبل ذلك. لكن ذاكرة التخزين المؤقت صحيحة ، وفقًا للتفريغ في https://github.com/kubernetes/kubernetes/issues/91601#issuecomment -659465008

تحرير: قرأتها بشكل خاطئ ، ولم أر كلمة "انتهاء" :)

تم إجراء لقطة تحديث تحسين العلاقات العامة في 1.18: https://github.com/kubernetes/kubernetes/pull/85738 و https://github.com/kubernetes/kubernetes/pull/86919

أتساءل عما إذا كانت شجرة العقدة بها أيضًا سجلات مكررة

أتساءل عما إذا كانت شجرة العقدة بها أيضًا سجلات مكررة

maelk هل يمكنك إظهار ملف تفريغ للقائمة الكاملة للعقد في ذاكرة التخزين المؤقت؟

نحن لا نضيف / نزيل عناصر من NodeInfoList ، إما أن ننشئ القائمة الكاملة من الشجرة أم لا ، لذلك إذا كانت هناك نسخ مكررة ، فمن المحتمل أن تأتي من الشجرة ، على ما أعتقد.

فقط للتوضيح:
1) تحتوي المجموعة على 6 عقد (بما في ذلك العقد الرئيسية)
2) لم يتم فحص العقدة التي من المفترض أن تستضيف البود على الإطلاق (لا يوجد سطر سجل يشير إلى ذلك) ، مما قد يعني أنها ليست في NodeInfoList على الإطلاق
3) يحتوي NodeInfoList على 6 عقد ، لكن إحداها مكررة

أتساءل عما إذا كانت شجرة العقدة بها أيضًا سجلات مكررة

maelk هل يمكنك إظهار ملف تفريغ للقائمة الكاملة للعقد في ذاكرة التخزين المؤقت؟

سيكون تفريغ كل شجرة عقدة وقائمة وخريطة أمرًا رائعًا.

سأعمل على الحصول على هؤلاء. في غضون ذلك ، تحديث صغير. يمكننا أن نرى في السجلات:

I0720 13:37:30.530980       1 node_tree.go:100] Removed node "worker-pool1-60846k0y-scheduler" in group "" from NodeTree
I0720 13:37:30.531136       1 node_tree.go:86] Added node "worker-pool1-60846k0y-scheduler" in group "regionOne:\x00:nova" to NodeTree

وهذه هي النقطة بالضبط عندما تختفي العقدة المفقودة. آخر حدث في السجلات كان الساعة 13:37:24. في الجدولة التالية ، اختفت العقدة المفقودة. لذلك يبدو أن الخطأ موجود في / يتبع تحديث node_tree. تمر جميع العقد بهذا التحديث ، فقط هذا العامل 608 هو آخر واحد يمر به.

عند تفريغ ذاكرة التخزين المؤقت (مع SIGUSR2) ، يتم سرد جميع العقد الستة هناك ، مع تشغيل البودات على العقد ، دون تكرار أو فقدان العقد.

سنمنحه تجربة جديدة مع تصحيح أخطاء مضاف حول وظيفة اللقطة: https://github.com/Nordix/kubernetes/commit/53279fb06536558f9a91836c771b182791153791

تمت إزالة العقدة "worker-pool1-60846k0y-Scheduler" في المجموعة "" من NodeTree

مثير للاهتمام ، أعتقد أن الإزالة / الإضافة يتم تشغيلها بواسطة استدعاء updateNode. مفتاح المنطقة مفقود عند الإزالة ، ولكنه موجود في الإضافة ، لذا كان التحديث يضيف بشكل أساسي تسميات المنطقة والمنطقة؟

هل لديك سجلات جدولة أخرى متعلقة بهذه العقدة؟

نحاول إعادة إنتاج الخطأ مع التسجيل المضاف. سأعود عندما يكون لدي المزيد من المعلومات

سأعمل على الحصول على هؤلاء. في غضون ذلك ، تحديث صغير. يمكننا أن نرى في السجلات:

I0720 13:37:30.530980       1 node_tree.go:100] Removed node "worker-pool1-60846k0y-scheduler" in group "" from NodeTree
I0720 13:37:30.531136       1 node_tree.go:86] Added node "worker-pool1-60846k0y-scheduler" in group "regionOne:\x00:nova" to NodeTree

سأشير إلى أن هذه العقدة هي العقدة التي تتكرر. maelk ، هل رأيت رسائل مماثلة لعقد أخرى أم لا على الإطلاق؟ مثل @ ahg-g ، يجب أن يكون هذا متوقعًا عندما تتلقى العقدة تسميات طبولوجيا الخاصة بها لأول مرة.

نعم ، لقد حدث ذلك لجميع العقد ، وهو متوقع. من قبيل المصادفة أن هذه العقدة على وجه التحديد هي آخر عقدة تم تحديثها ، وفي ذلك الوقت المحدد تختفي العقدة الأخرى

هل حصلت على سجلات التحديث للعقدة المفقودة؟

هل حصلت على سجلات التحديث للعقدة المفقودة؟

لول ، كان فقط يكتب هذا السؤال.

ربما يكون الخطأ هو حذف المنطقة بأكملها من الشجرة قبل إزالة جميع العقد.

فقط للتوضيح ، أنا لا أنظر إلى الكود شخصيًا ، أنا فقط أحاول التأكد من أن لدينا كل المعلومات. وأعتقد أنه مع ما لدينا الآن ، يجب أن نكون قادرين على اكتشاف الخطأ. لا تتردد في إرسال تقارير العلاقات العامة وأفضل بكثير إذا كان بإمكانك تقديم اختبار وحدة يفشل.

هل حصلت على سجلات التحديث للعقدة المفقودة؟

نعم ، يُظهر أنه تم تحديث المنطقة لتلك العقدة المفقودة. يوجد إدخال سجل لجميع العقد

لأكون صادقًا ، ما زلت لا أملك أدنى فكرة عن سبب الخطأ ، ولكن إذا اقتربنا من اكتشافه ، فسأرسل اختبارًا للعلاقات العامة أو اختبارات الوحدة.

نعم ، يُظهر أنه تم تحديث المنطقة لتلك العقدة المفقودة. يوجد إدخال سجل لجميع العقد

إذا كان الأمر كذلك ، فأعتقد أن هذا هو "النقطة الدقيقة التي تختفي فيها العقدة المفقودة". قد لا تكون مترابطة. دعنا ننتظر السجلات الجديدة. سيكون من الرائع أن تتمكن من مشاركة جميع سجلات المجدول التي تحصل عليها في ملف.

سأفعل عندما نتكاثر مع التسجيل الجديد. من خلال تلك الموجودة ، يمكننا أن نرى بالفعل أن جدولة البودات مباشرة بعد هذا التحديث هي أول عملية تفشل. لكنه لا يعطي معلومات كافية لمعرفة ما حدث بينهما ، لذا ترقبوا ...

maelk هل رأيت رسالة تبدأ بـ snapshot state is not consistent في سجلات المجدول؟

هل سيكون من الممكن بالنسبة لك توفير سجلات جدولة كاملة؟

لا ، هذه الرسالة غير موجودة. يمكنني تقديم ملف سجل مخطط لأسفل (لتجنب التكرار) ، ولكن دعنا ننتظر أولاً حتى نحصل على الإخراج مع المزيد من السجلات حول اللقطة

لقد وجدت الخطأ. تكمن المشكلة في وظيفة nodeTree next () ، التي لا تُرجع قائمة بجميع العقد في بعض الحالات. https://github.com/kubernetes/kubernetes/blob/release-1.18/pkg/scheduler/internal/cache/node_tree.go#L147

يكون مرئيًا إذا أضفت ما يلي هنا: https://github.com/kubernetes/kubernetes/blob/release-1.18/pkg/scheduler/internal/cache/node_tree_test.go#L443

{
    name:           "add nodes to a new and to an exhausted zone",
    nodesToAdd:     append(allNodes[5:9], allNodes[3]),
    nodesToRemove:  nil,
    operations:     []string{"add", "add", "next", "next", "add", "add", "add", "next", "next", "next", "next"},
    expectedOutput: []string{"node-6", "node-7", "node-3", "node-8", "node-6", "node-7"},
},

المشكلة الرئيسية هي أنه عند إضافة عقدة ، لا تكون الفهارس عند 0 لبعض المناطق. لكي يحدث هذا ، يجب أن يكون لديك منطقتان على الأقل ، إحداهما أقصر من الأخرى ، والأخرى الأطول بها فهرس غير مضبوط على 0 عند استدعاء الوظيفة التالية لأول مرة.

الإصلاح الذي ذهبت إليه هو إعادة تعيين الفهرس قبل الاتصال التالي () في المرة الأولى. فتحت العلاقات العامة لإظهار الإصلاح الخاص بي. بالطبع هو ضد الإصدار 1.18 لأن هذا هو ما كنت أعمل عليه ، لكنه في الغالب لمناقشة كيفية إصلاحه (أو ربما إصلاح الوظيفة () التالية نفسها). يمكنني فتح العلاقات العامة المناسبة للسيد والقيام بعمليات backports إذا لزم الأمر بعد ذلك.

لقد لاحظت نفس المشكلة مع التكرار. لكنني فشلت في ربط ذلك بنسخة مكررة في اللقطة. هل تمكنت من إنشاء سيناريو حيث سيحدث ذلك ،maelk؟

نعم ، يمكنك تشغيله في اختبارات الوحدة عن طريق إضافة الكود الصغير الذي أضعه

أنا الآن أعمل على إضافة حالة اختبار للقطة ، للتأكد من اختبارها بشكل صحيح.

كبير حتى igraecao للمساعدة في إعادة إنتاج المشكلة وتشغيل الاختبارات في

شكرا لكم جميعا لتصحيح هذه المشكلة سيئة السمعة. تعد إعادة تعيين الفهرس قبل إنشاء القائمة أمرًا آمنًا ، لذلك أعتقد أننا يجب أن نتبع ذلك مع التصحيحات 1.18 و 1.19 ، وأن يكون لدينا إصلاح مناسب في الفرع الرئيسي.

تم تغيير الغرض من الوظيفة next مع إدخال NodeInfoList ، ولذا يمكننا بالتأكيد تبسيطها وربما تغييرها إلى toList ، وهي وظيفة تنشئ قائمة من الشجرة وتبدأ ببساطة من البداية في كل مرة.

أفهم المشكلة الآن: حساب ما إذا كانت المنطقة مستنفدة أم لا خطأ لأنه لا يأخذ في الاعتبار المكان الذي بدأنا فيه عملية "UpdateSnapshot" هذه في كل منطقة. ونعم ، سيكون مرئيًا فقط مع المناطق غير المستوية.

عمل رائع اكتشاف هذاmaelk!

أعتقد أن لدينا نفس المشكلة في الإصدارات القديمة. ومع ذلك ، فإنه يخفي حقيقة أننا نقوم بشجرة تمر في كل مرة. بينما في 1.18 نقوم بتصوير النتيجة حتى تحدث تغييرات في الشجرة.

الآن بعد أن تم تنفيذ إستراتيجية round-robin في generic_scheduler.go ، قد نكون على ما يرام بمجرد إعادة تعيين جميع العدادات قبل UpdateSnapshot ، كما تفعل العلاقات العامة الخاصة بك.

https://github.com/kubernetes/kubernetes/blob/02cf58102a61b6d1e021e256381ff750573ce55d/pkg/scheduler/core/generic_scheduler.go#L357

فقط لمضاعفة التحقق من @ ahg-g ، يجب أن يكون هذا جيدًا حتى في مجموعة تم إضافة / إزالة العقد الجديدة طوال الوقت ، أليس كذلك؟

شكرًا maelk على اكتشاف السبب الجذري!

تم تغيير الغرض من الوظيفة التالية مع إدخال NodeInfoList ، وبالتالي يمكننا بالتأكيد تبسيطها وربما تغييرها إلى القائمة ، وهي وظيفة تنشئ قائمة من الشجرة وتبدأ ببساطة من البداية في كل مرة.

بالنظر إلى أن cache.nodeTree.next() لا يُستدعى إلا في بناء snapshot nodeInfoList ، أعتقد أنه من الآمن أيضًا إزالة الفهارس (كل من zoneIndex و nodeIndex) من بنية nodeTree. بدلاً من ذلك ، ابتكر دالة nodeIterator() للتكرار عبر المنطقة / العقدة بطريقة دائرية.

راجع للشغل: يوجد خطأ إملائي في https://github.com/kubernetes/kubernetes/issues/91601#issuecomment -662663090 ، يجب أن تكون الحالة:

{
    name:           "add nodes to a new and to an exhausted zone",
    nodesToAdd:     append(allNodes[6:9], allNodes[3]),
    nodesToRemove:  nil,
    operations:     []string{"add", "add", "next", "next", "add", "add", "next", "next", "next", "next"},
    expectedOutput: []string{"node-6", "node-7", "node-3", "node-8", "node-6", "node-7"},
    // with codecase on master and 1.18, its output is [node-6 node-7 node-3 node-8 node-6 node-3]
},

فقط لمضاعفة التحقق من @ ahg-g ، يجب أن يكون هذا جيدًا حتى في مجموعة تم إضافة / إزالة العقد الجديدة طوال الوقت ، أليس كذلك؟

أفترض أنك تتحدث عن المنطق في generic_scheduler.go ، إذا كان الأمر كذلك ، فلا يهم كثيرًا إذا تمت إضافة العقد أو إزالتها ، والشيء الرئيسي الذي نحتاج إلى تجنبه هو التكرار على العقد بنفس الترتيب في كل مرة نقوم بجدولة حجرة ، نحتاج فقط إلى تقريب جيد للتكرار على العقد عبر القرون.

بالنظر إلى أن cache.nodeTree.next () يُستدعى فقط في بناء nodeInfoList node ، أعتقد أنه من الآمن أيضًا إزالة الفهارس (كل من zoneIndex و nodeIndex) من بنية nodeTree. بدلاً من ذلك ، ابتكر وظيفة nodeIterator () بسيطة للتكرار من خلال منطقتها / عقدة بطريقة round robin.

نعم ، نحتاج فقط إلى التكرار عبر جميع المناطق / العقد بنفس الترتيب في كل مرة.

لقد قمت بتحديث العلاقات العامة باختبار وحدة لوظيفة تحديث قائمة اللقطات ، لهذا الخطأ على وجه التحديد. يمكنني أيضًا الاهتمام بإعادة هيكلة الوظيفة التالية () للتكرار عبر المناطق والعقد بدون جولة روبن ، وبالتالي إزالة المشكلة.

شكرًا ، يبدو جيدًا ، ولكن لا يزال يتعين علينا التكرار بين المناطق بنفس الطريقة التي نفعلها الآن ، وهذا حسب التصميم.

أنا لا أفهم حقًا ما تعنيه هنا. هل الأمر يتعلق بترتيب العقد ولا يزال يتعين علينا التنقل بين المناطق أو يمكننا سرد جميع العقد في المنطقة ، منطقة تلو الأخرى؟ لنفترض أن لديك منطقتين من عقدتين لكل منهما ، في أي ترتيب تتوقعهما ، أم أنها مهمة على الإطلاق؟

الترتيب مهم ، نحتاج إلى التبديل بين المناطق أثناء إنشاء القائمة. إذا كان لديك منطقتان من عقدتين كل منهما z1: {n11, n12} و z2: {n21, n22} ، فيجب أن تكون القائمة {n11, n21, n12, n22}

حسنًا ، شكرًا ، سأفكر فيه. هل يمكننا في غضون ذلك المضي قدما في الإصلاح السريع؟ راجع للشغل ، بعض الاختبارات تفشل فيها ، لكني لست متأكدًا من علاقة ذلك بعلاقاتي العامة

هذه رقائق. يرجى إرسال التصحيح إلى 1.18 أيضًا.

حسنا سأفعل. شكر

{
  name:           "add nodes to a new and to an exhausted zone",
  nodesToAdd:     append(allNodes[5:9], allNodes[3]),
  nodesToRemove:  nil,
  operations:     []string{"add", "add", "next", "next", "add", "add", "add", "next", "next", "next", "next"},
  expectedOutput: []string{"node-6", "node-7", "node-3", "node-8", "node-6", "node-7"},
},

maelk ، هل تقصد أن هذا الاختبار يتجاهل "العقدة -5"؟

لقد وجدت بعد إصلاح الملحق في https://github.com/kubernetes/kubernetes/pull/93516 ، يمكن تكرار نتيجة الاختبار جميع العقد:

{
            name:           "add nodes to a new and to an exhausted zone",
            nodesToAdd:     append(append(make([]*v1.Node, 0), allNodes[5:9]...), allNodes[3]),
            nodesToRemove:  nil,
            operations:     []string{"add", "add", "next", "next", "add", "add", "add", "next", "next", "next", "next"},
            expectedOutput: []string{"node-5", "node-6", "node-3", "node-7", "node-8", "node-5"},
},

يمكن تكرار العقدة -5 ، 6 ، 7 ، 8 ، 3.

سامحني إذا أساء فهم شيء هنا.

نعم ، لقد كان عن قصد ، بناءً على ما كان موجودًا ، لكن يمكنني أن أرى كيف يمكن أن يكون هذا غامضًا ، لذا من الأفضل أن تجعله يتصرف بطريقة أوضح. شكرا على التصحيح.

إلى أي مدى تعتقد أن هذا الخطأ كان موجودًا؟ 1.17؟ 1.16؟ لقد رأيت للتو نفس المشكلة بالضبط في 1.17 على AWS وأدى إعادة تشغيل العقدة غير المجدولة إلى حل المشكلة.

judgeaxl هل يمكنك تقديم المزيد من التفاصيل؟ سطور السجل ، وتفريغ ذاكرة التخزين المؤقت ، وما إلى ذلك ، حتى نتمكن من تحديد ما إذا كانت المشكلة هي نفسها.

كما أشرت في https://github.com/kubernetes/kubernetes/issues/91601#issuecomment -662746695 ، أعتقد أن هذا الخطأ كان موجودًا في الإصدارات القديمة ، لكن تفكيري هو أنه عابر.

maelk هل ستتمكن من التحقيق؟

يرجى أيضًا مشاركة توزيع العقد في المناطق.

alculquicondor للأسف لا أستطيع في هذه المرحلة. آسف.

alculquicondor آسف ، لقد

/ retitle لا يتم أخذ بعض العقد في الاعتبار في الجدولة عند وجود خلل في المنطقة

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات