ما حدث : لقد قمنا بترقية 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
كما ترون ، تفتقد معظم مجموعات الشياطين إلى جراب واحد
البيئة :
kubectl version
): 1.18.3cat /etc/os-release
): debian busteruname -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 جنو / لينكس/ جدولة سيج
هل يمكنك توفير yaml الكامل للعقدة ، و daemonset ، ونموذج pod ، ومساحة الاسم المحتوية كما تم استردادها من الخادم؟
العقدة:
https://gist.github.com/zetaab/2a7e8d3fe6cb42a617e17abc0fa375f7
الشيطان:
https://gist.github.com/zetaab/31bb406c8bd622b3017bf4f468d0154f
جراب سبيل المثال (العمل):
https://gist.github.com/zetaab/814871bec6f2879e371f5bbdc6f2e978
مثال للحجرة (بدون جدولة):
https://gist.github.com/zetaab/f3488d65486c745af78dbe2e6173fd42
مساحة الاسم:
https://gist.github.com/zetaab/4625b759f4e21b50757c79e5072cd7d9
جدول مجموعات 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.
"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 غير متطابقة ، لكنها لا تخبر أي شيء عن التاسعة (التي تم الاعتراف بها في الحدث السابق).
لذلك يذكر الحدث:
في النهاية ، لم يتم تشغيل جراب الاختبار في العقدة المطابقة بسبب العيوب ، ولكن هذه قصة أخرى (وكان يجب أن تكون هي الحالة بالفعل في الحدث الأول).
كانت محاولة "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
.
هذه هي الأحداث:
الأحداث:
اكتب سبب العمر من الرسالة
------ ---- -------
فشل التحذير
فشل التحذير
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؟ قد تحتاج إلى إضافة سطور تسجيل إضافية أثناء الاختبار. يمكنك أيضًا طباعة ذاكرة التخزين المؤقت.
$ pidof kube-scheduler
$ sudo kill -SIGUSR2 <pid>
. لاحظ أن هذا لن يقتل عملية الجدولة./ أولوية حرجة - عاجلة
/ إلغاء تعيين
لقد رأينا بالفعل بعض البرامج المساعدة والنشر عالقة في "قيد الانتظار" قبل أن نحاول نشر نشر الاختبار هذا ، لذا فقد فشل بالفعل. وأزيلت العيوب من العقدة.
في الوقت الحالي ، فقدنا البيئة التي كان يحدث فيها ذلك لأننا اضطررنا إلى إعادة تشغيل العقد حتى لا تظهر المشكلة بعد الآن. بمجرد أن نتكاثر ، سنحاول العودة بمزيد من المعلومات
الرجاء القيام بذلك. لقد حاولت إعادة إنتاج هذا في الماضي دون نجاح. أنا مهتم أكثر بأول حالة فشل. ربما لا يزال مرتبطًا بالتلوث.
لقد أعدنا إنتاج المشكلة. قمت بتشغيل الأمر الذي طلبته ، ها هي المعلومات:
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
لذلك تتم إزالة إحدى العقد من قائمة العقد المحتملة. للأسف ، لم يكن لدينا ما يكفي من عمليات تسجيل الدخول في بداية العملية ، لكننا سنحاول الحصول على المزيد.
مراجع التعليمات البرمجية حسب سطر السجل:
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 ، كما تفعل العلاقات العامة الخاصة بك.
فقط لمضاعفة التحقق من @ 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 لا يتم أخذ بعض العقد في الاعتبار في الجدولة عند وجود خلل في المنطقة
التعليق الأكثر فائدة
أنا الآن أعمل على إضافة حالة اختبار للقطة ، للتأكد من اختبارها بشكل صحيح.