CSE: Kubernetes لأولئك الموجودين في vCloud

CSE: Kubernetes لأولئك الموجودين في vCloud
مرحبا بالجميع!

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

كانت هناك أسباب كثيرة لذلك، لكن قصتنا لا تتعلق بالهوليفار.

لم يكن لدينا خيار كبير فيما يتعلق بقاعدة البنية التحتية. مدير vCloud ومدير vCloud. اخترنا الأحدث وقررنا البدء.

مرة أخرى، من خلال النظر في "الطريق الصعب"، توصلت بسرعة إلى استنتاج مفاده أن هناك حاجة بالأمس إلى أداة لأتمتة العمليات الأساسية على الأقل، مثل النشر والتحجيم. أدى الغوص العميق في Google إلى إلقاء الضوء على منتج مثل VMware Container Service Extension (CSE) - وهو منتج مفتوح المصدر يسمح لك بأتمتة إنشاء مجموعات k8s وحجمها لتلك الموجودة في vCloud.

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

لبدء استخدامه، تحتاج إلى حساب مسؤول في مؤسسة vCloud وشبكة موجهة تم إنشاؤها مسبقًا للمجموعة (أثناء عملية النشر، تحتاج إلى الوصول إلى الإنترنت من هذه الشبكة، ولا تنس تكوين جدار الحماية/NAT). المخاطبة لا يهم. في هذا المثال، لنأخذ 10.0.240.0/24

CSE: Kubernetes لأولئك الموجودين في vCloud

نظرًا لأنه بعد الإنشاء، ستحتاج المجموعة إلى الإدارة بطريقة ما، فمن المستحسن أن يكون لديك VPN مع التوجيه إلى الشبكة التي تم إنشاؤها. نحن نستخدم شبكة SSL VPN قياسية تم تكوينها على Edge Gateway الخاص بمؤسستنا.

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

يتطلب العميل تثبيت إصدار Python 3.7.3 والإصدارات الأحدث وتثبيت الوحدة vcd-cli، فلنقم بتثبيت كليهما.

pip3 install vcd-cli

pip3 install container-service-extension

بعد التثبيت، نتحقق من إصدار CSE ونحصل على ما يلي:

# vcd cse version
Error: No such command "cse".

غير متوقع، ولكن قابل للإصلاح. كما اتضح فيما بعد، يجب إرفاق CSE كوحدة نمطية بـ vcd-cli.
للقيام بذلك، يجب عليك أولاً تسجيل الدخول إلى vcd-cli في مؤسستنا:

# vcd login MyCloud.provider.com org-dev admin
Password: 
admin logged in, org: 'org-dev', vdc: 'org-dev_vDC01'

بعد ذلك، سيقوم vcd-cli بإنشاء ملف التكوين ~/.vcd-cli/profiles.yaml
في النهاية عليك إضافة ما يلي:

extensions:
  - container_service_extension.client.cse

ثم نتحقق مرة أخرى:

# vcd cse version
CSE, Container Service Extension for VMware vCloud Director, version 2.5.0

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

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

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

دعنا نحاول البدء في إنشاء مجموعة:

vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~/.ssh/id_rsa.pub --nodes 3 --enable-nfs

إذا حصلنا على خطأ خطأ: انتهت صلاحية الجلسة أو لم يقوم المستخدم بتسجيل الدخول. الرجاء إعادة تسجيل الدخول. - قم بتسجيل الدخول مرة أخرى إلى vcd-cli إلى vCloud كما هو موضح أعلاه وحاول مرة أخرى.

هذه المرة كل شيء على ما يرام وبدأت مهمة إنشاء المجموعة.

cluster operation: Creating cluster vApp 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) from template 'photon-v2_k8-1.12_weave-2.3.0' (revision 1)

سيستغرق إكمال المهمة حوالي 20 دقيقة، وفي هذه الأثناء، دعونا نلقي نظرة على معلمات الإطلاق الأساسية.

—الشبكة — الشبكة التي أنشأناها سابقًا.
—ssh-key — المفاتيح التي أنشأناها، والتي سيتم كتابتها في العقد العنقودية
—nodes n — عدد العقد العاملة في المجموعة. سيكون هناك دائمًا مفتاح رئيسي واحد، وهذا أحد قيود CSE
—enable-nfs — قم بإنشاء عقدة إضافية لمشاركات NFS ضمن وحدات التخزين المستمرة. إنه خيار دواسة قليلاً، وسنعود إلى ضبط ما يفعله بعد قليل.

وفي الوقت نفسه، في vCloud، يمكنك مراقبة إنشاء المجموعة بشكل مرئي
CSE: Kubernetes لأولئك الموجودين في vCloud

بمجرد الانتهاء من مهمة إنشاء المجموعة، تصبح جاهزة للاستخدام.

دعونا نتحقق من صحة النشر باستخدام الأمر معلومات الكتلة vcd cse MyCluster

CSE: Kubernetes لأولئك الموجودين في vCloud

بعد ذلك نحتاج إلى الحصول على تكوين المجموعة لاستخدامه kubectl

# vcd cse cluster config MyCluster > ./.kube/config

ويمكنك التحقق من حالة المجموعة باستخدامها:

CSE: Kubernetes لأولئك الموجودين في vCloud

في هذه المرحلة، يمكن اعتبار المجموعة تعمل بشكل مشروط، إن لم يكن للقصة ذات المجلدات المستمرة. وبما أننا نستخدم vCloud، فلن نتمكن من استخدام vSphere Provider. خيار --enable-nfs تم تصميمه للتخفيف من هذا الإزعاج، لكنه لم ينجح بشكل كامل. التعديل اليدوي مطلوب.

للبدء، تحتاج عقدتنا إلى إنشاء قرص مستقل منفصل في vCloud. وهذا يضمن أن بياناتنا لن تختفي مع المجموعة إذا تم حذفها. قم أيضًا بتوصيل القرص بـ NFS

# vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares'
# vcd vapp attach mycluster nfsd-9604 nfs-shares-1

بعد ذلك، ننتقل عبر ssh (هل أنشأت المفاتيح بالفعل؟) إلى عقدة NFS الخاصة بنا ونقوم أخيرًا بتوصيل القرص:

root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 100GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name     Flags
 1      0.00GB  100GB  100GB               primary

(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Creating filesystem with 24413696 4k blocks and 6111232 inodes
Filesystem UUID: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

قم بإنشاء دليل للبيانات وقم بتثبيت قسم جديد هناك:

mkdir /export
echo '/dev/sdb1  /export   ext4  defaults   0 0' >> /etc/fstab
mount -a

لنقم بإنشاء خمسة أقسام اختبارية ومشاركتها مع المجموعة:

>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Добавим это в конец файла
/export/vol1 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol2 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol3 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol4 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol5 *(rw,sync,no_root_squash,no_subtree_check)
#:wq! ;)
#Далее - экспортируем разделы
>exportfs -r

بعد كل هذا السحر، يمكننا إنشاء PV وPVC في مجموعتنا مثل هذا:
مراسل:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # Same IP as the NFS host we ssh'ed to earlier.
    server: 10.150.200.22
    path: "/export/vol1"
EOF

بولي كلوريد الفينيل:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 10Gi
EOF

وهنا تنتهي قصة خلق العنقود الواحد وتبدأ قصة دورة حياته. كمكافأة، هناك أمران مفيدان لـ CSE يسمحان لك أحيانًا بحفظ الموارد أو عدم حفظها:

#Увеличиваем размер кластера до 8 воркер нод
>cse cluster resize MyCluster --network k8s_cluster_net --nodes 8

#Выводим ненужные ноды из кластера с их последующим удалением
>vcd cse node delete MyCluster node-1a2v node-6685 --yes

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

المصدر: www.habr.com

إضافة تعليق