تقرير الشوائب
إصدار kubeadm (استخدم kubeadm version
): 1.9.0
البيئة :
kubectl version
): 1.9.0uname -a
): Linux 4.9.35-v7 +عند تنفيذ kubeadm init
يظهر الخطأ [ERROR Swap]: running with swap on is not supported. Please disable swap
. الإصلاح المقترح هو استخدام علم kubelet بشكل أساسي:
kubeadm reset
echo 'Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"' >> /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
systemctl daemon-reload
systemctl restart kubelet
kubeadm init
لكن في النهاية ، الخطأ لا يزال قائما. ربما تكون هذه مشكلة في Kubelet بدلاً من ذلك أو ربما أخطأت في تكوين شيء ما ...
إذا قمت بتعيين علامة kubelet ، فأنت بأمان للقيام بذلك kubeadm init --ignore-preflight-errors Swap
، لكنني أوصيك بإيقاف تشغيل المبادلة بدلاً من ذلك ، حيث ستنتقل إلى منطقة غير مدعومة هنا.
لا حاجة لإعادة فتح هذا ولكن ما زلت أشعر أن هذا أمر بديهي بعض الشيء. إذا قمت بتعيين علامة kubelet ، فأنا أتوقع أنني لست بحاجة إلى تجاهل أخطاء الاختبار المبدئي. إذا لم يتم تمرير --ignore-preflight-errors
، تظل رسالة الخطأ كما هي سواء تم تمكين علامة kubelet أم لا ، وهذا أمر مضلل.
ما هو الأمر لإيقاف المبادلة؟
swapoff -a
صحيح أن swapoff -a
هو حل سحري في معظم الحالات ، ومع ذلك ، قد تتطلب بعض إعدادات k8s مبادلة بالفعل. على سبيل المثال ، لدي جهاز افتراضي صغير جدًا ورخيص مع ذاكرة وصول عشوائي بسعة 1 جيجابايت فقط ، والتي أستخدمها في GitLab Runner الشخصي الذي نادرًا ما يتعامل مع مهام CI / CD القصيرة. إذا قمت بزيادة حجم الجهاز ، فسأدفع أكثر لمورد خاملاً بنسبة 99٪. إذا قمت بتعطيل المبادلة ، فقد يتعطل npm install
والنصوص البرمجية الأخرى داخل البودات لأنها تتطلب قدرًا كبيرًا من الذاكرة ، على الرغم من فترات زمنية قصيرة. وبالتالي ، فإن الكتلة المكونة من عقدة واحدة kubeadm
مع مخطط عداء gitlab والمبادلة هي أفضل ما يناسبني.
إليك كيف يمكنني تشغيل الكتلة الصغيرة الخاصة بي:
UPD: ينطبق الحل البديل أدناه على k8s 1.10- فقط - لـ 1.11+ راجع https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ (TLDR: يمكنك تحديد kubeletConfiguration:\n failSwapOn: false
in kubeadm الخاص بك config.yaml
ثم kubeadm init --config config.yaml --ignore-preflight-errors Swap
).
kubeadm reset
## ↓ see explanation below
sed -i '9s/^/Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"\n/' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
systemctl daemon-reload
systemctl restart kubelet
echo "
kind: MasterConfiguration
apiVersion: kubeadm.k8s.io/v1alpha1
api:
bindPort: ${K8S_API_PORT}
apiServerCertSANs: ${K8S_API_EXTRA_HOSTS}
" > /tmp/config.yaml
kubeadm init --config /tmp/config.yaml --ignore-preflight-errors Swap
## make possible to run workload on master
kubectl taint nodes --all node-role.kubernetes.io/master-
تنطبق الفقرات أدناه على k8s 1.10- فقط
سبب استخدامي sed -i '9s/^/...
بدلاً من echo 'Environment="..."' >> ...
كما ذكر من قبل cjdcordeiro هو أنه في الحالة الأخيرة ، تم 10-kubeadm.conf
بترتيب خاطئ:
...
Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ$
Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"
نظرًا لأن KUBELET_EXTRA_ARGS
ظهر بعد ExecStart
، بدا الأمر وكأنه لم يرتفع. مع sed -i '9s/^/...
، ينتهي الملف /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
هكذا ويعمل:
...
Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"
Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ$
سيكون من الرائع أن يكون تمكين المبادلة في kubeadm أسهل من الآن - فهذا من شأنه أن يوفر على الأشخاص في جميع أنحاء العالم ساعات. كان عمل الكتلة المصغرة الخاصة بي بعد الترقية إلى 1.8 يمثل ألمًا حقيقيًا لأنني عديم الخبرة في إدارة Linux وأعتقد أنه سيكون أمرًا رائعًا إذا لم يضطر الآخرون إلى اتخاذ نفس المسار. سيبدو الحل المثالي مثل IMO:
echo "
kind: MasterConfiguration
apiVersion: kubeadm.k8s.io/v1alpha1
kubeletConfiguration:
allowSwap: true
" > /tmp/config.yaml
kubeadm init --config /tmp/config.yaml
بطبيعة الحال ، يجب أن يظل تمكين المقايضة حالة مميزة لأنه قد يؤدي إلى حدوث مشاكل في كثير من الظروف. ومع ذلك ، سيكون من الرائع أن يكون لدى مستخدمي kubeadm خيار. حتى ذلك الحين ، سيكون أمرًا رائعًا إذا كانت هناك مشكلة مفتوحة حول تمكين المبادلة.
+1 لوجود خيار لعلامة "ميزة" تجريبية / ألفا / إلخ لتمكين المبادلة التي تضيفها إلى قائمة kubeadm في kubelet.service.d وتعطيل فحص ما قبل الرحلة. بالتأكيد حالة استثنائية ، تمت الموافقة عليها ، لكن سيكون من الجيد لو كان الأمر أسهل.
(ومع ذلك ، فإن البحث في Google والقدرة على العثور بسرعة على هذه المشكلة يساعدان كثيرًا.)
انظر ذات الصلة: https://github.com/kubernetes/kubernetes/issues/53533
لقد أوقفت المبادلة الخاصة بي ولكن ما زلت أتلقى هذا الخطأ.
فقط للتسجيل ، على الأقل في نظام قائم على ubuntu ، أعتقد أن المكان لإضافة علامة _-- fail-swap-on = false_ في _ / etc / default / kubelet_ file ؛ ليس في ملف أسيوط _systemd_ نفسه.
فقط للتسجيل ، على الأقل في نظام قائم على ubuntu ، أعتقد أن المكان لإضافة --fail-swap-on = false flag موجود في / etc / default / kubelet file ؛ ليس في ملف أسيوط systemd نفسه.
بالنسبة لـ 1.11+ هذا صحيح.
لتعطيله نهائيًا ، فقط أدخل <strong i="5">@reboot</strong> /sbin/swapoff -a
مع فاصل أسطر في النهاية في sudo crontab -e
.
تم الاختبار على Ubuntu 16.04 و 18.04.
التعليق الأكثر فائدة
swapoff -a