Setup spark cluster in air gapped (offline) environment
Below is a step‐by‐step guide to installing ইলুম in an offline (air‐gapped) environment. This guide is written to be agnostic to your Kubernetes distribution and covers both approaches for managing container images—using কন্টেইনার (সঙ্গে সিটিআর টুল) বা ডকার . নির্দেশাবলী অনুমান করে যে আপনার আছে:
- প্রয়োজনীয় হেলম চার্ট এবং ধারক চিত্রগুলি ডাউনলোড করতে একটি ইন্টারনেট-সংযুক্ত ওয়ার্কস্টেশন।
- অনলাইন ওয়ার্কস্টেশন থেকে আপনার অফলাইন পরিবেশে ফাইল স্থানান্তর করার জন্য একটি পদ্ধতি (যেমন একটি USB ড্রাইভ বা অভ্যন্তরীণ ফাইল সার্ভার)।
- আপনার অফলাইন পরিবেশে একটি ওয়ার্কিং কুবারনেটস ক্লাস্টার (যে কোনও বিতরণ)।
- আপনার অফলাইন ক্লাস্টারের সাথে সংযোগ করতে হেলম ইনস্টল এবং কনফিগার করা হয়েছে।
প্রক্রিয়াটি এই পদক্ষেপগুলিতে বিভক্ত:
1.1. ইলাম হেলম চার্ট ডাউনলোড করুন
ইলাম চার্ট একটি পাবলিক হেলম সংগ্রহস্থলের মাধ্যমে সরবরাহ করা হয়, চালান:
রেপো যোগ করুন https://charts.ilum.cloud
হেলম রেপো আপডেট
হেলম পুল ইলুম / ইলুম # (আপনি <desired_version> একটি ইলুম সংস্করণ নির্দিষ্ট করতে --সংস্করণ যুক্ত করতে পারেন)
এটি একটি ফাইল তৈরি করবে ilum-<version>.tgz .
টিপ: You can extract and modify the chart’s
মূল্যবোধ.ইয়ামলপরে যদি আপনি ইমেজ রিপোজিটরি রেফারেন্স পরিবর্তন করতে চান।
1.2. প্রয়োজনীয় কন্টেইনার ইমেজ সনাক্ত এবং ডাউনলোড করুন
নীচে চিত্রগুলির তালিকা (ইলুমের সংস্করণ 6.3.0):
অ্যাপাচি / সুপারসেট: ডকারাইজবিটনামি/গিট:2.48.1বিটনামি / পোস্টগ্রেএসকিউএল: 16কার্লচিত্র / কার্ল: 8.5.0docker.io/bitnami/minio:2023.12.23-debian-11-r3docker.io/bitnami/os-shell:11-debian-11-r72docker.io/bitnami/postgresql:16.1.0-debian-11-r25docker.io/bitnami/redis:7.0.10-debian-11-r4docker.io/ilum/mongodb:6.0.5গিটিইএ/গিটিইএ:১.২২.৩ইলাম / এয়ারফ্লো: 2.9.3আইএলইউএম / কোর: 6.3.0ইলাম / মৌচাক: 3.1.3ইলুম / কিউবি: 1.10.0-স্পার্কআইএলইউএম / লিভি-প্রক্সি: 6.3.0ইলুম/মার্কেজ:০.৪৯.০ইলুম/মঙ্গোডব:৬.০.৫আইএলইউএম / স্পার্ক: 3.5.3-ডেল্টাইলাম / স্পার্ক-লঞ্চার: স্পার্ক -3.5.3আইএলইউএম / স্পার্কম্যাজিক: 0.22.0আইএলইউএম / সুপারসেট: 4.1.0আইএলইউএম / ইউআই: 6.3.0registry.k8s.io/git-sync/git-sync:v4.1.0
1.3. প্রতিটি চিত্র টারবল হিসাবে সংরক্ষণ করুন
আপনি এই প্রক্রিয়াটি স্ক্রিপ্ট করতে পারেন। উদাহরণস্বরূপ, নামের একটি ফাইল তৈরি করুন pull_and_save.sh :
#!/বিন/বাশ
চিত্র=(
"অ্যাপাচি / সুপারসেট: ডকারাইজ"
"বিটনামি / গিট: 2.48.1"
"বিটনামি / পোস্টগ্রেএসকিউএল: 16"
"কার্লমেজস / কার্ল: 8.5.0"
"docker.io/bitnami/minio:2023.12.23-debian-11-r3"
"docker.io/bitnami/os-shell:11-debian-11-r72"
"docker.io/bitnami/postgresql:16.1.0-debian-11-r25"
"docker.io/bitnami/redis:7.0.10-debian-11-r4"
"docker.io/ilum/mongodb:6.0.5"
"গীতা/গীতা: ১.২২.৩"
"আইএলইউএম / এয়ারফ্লো: 2.9.3"
"আইএলইউএম / কোর: 6.3.0"
"ইলাম / হাইভ: 3.1.3"
"ইলুম / কিউবি: 1.10.0-স্পার্ক"
"আইএলইউএম / লিভি-প্রক্সি: 6.3.0"
"ইলুম / মার্কেজ: 0.49.0"
"ইলুম / মঙ্গোডব: 6.0.5"
"আইএলইউএম / স্পার্ক: 3.5.3-ডেল্টা"
"আইএলইউএম / স্পার্ক-লঞ্চার: স্পার্ক -3.5.3"
"আইএলইউএম / স্পার্কম্যাজিক: 0.22.0"
"আইএলইউএম / সুপারসেট: 4.1.0"
"আইএলইউএম / ইউআই: 6.3.0"
"registry.k8s.io/git-sync/git-sync:v4.1.0"
)
"${IMAGES[@]}" এ চিত্রের জন্য; কি
প্রতিধ্বনি "$image টানা..."
ডকার টানুন "$image"
filename=$(প্রতিধ্বনি "$image" | tr '/:' '__')
প্রতিধ্বনি "$image থেকে ${filename}.tar সংরক্ষণ করা হচ্ছে ..."
ডকার "$image" সংরক্ষণ করুন -ও "${filename}.tar"
করা হয়েছে
স্ক্রিপ্ট চালান:
chmod +x pull_and_save.sh
./pull_and_save.sh
এটি একটি সেট তৈরি করে .tar আপনার চিত্রগুলি ধারণকারী ফাইলগুলি।
2. অফলাইন পরিবেশে নিদর্শনগুলি স্থানান্তর করুন
আপনার অনলাইন মেশিন থেকে অফলাইন পরিবেশে নিম্নলিখিতগুলি অনুলিপি করতে আপনার পছন্দসই পদ্ধতি (ইউএসবি ড্রাইভ, অভ্যন্তরীণ ফাইল সার্ভার, এসসিপি ইত্যাদি) ব্যবহার করুন:
- হেলম চার্ট প্যাকেজ (উদাঃ,
ilum-<version>.tgz) - সমস্ত চিত্র টারবল (উদাঃ,
apache_superset_dockerize.tar,ilum_hive_3.1.3.tar, ইত্যাদি)
3. আপনার ধারক রানটাইম মধ্যে ইমেজ লোড করুন
স্থানীয় রেজিস্ট্রি ব্যবহার করার সময়, আপনি don’t needপ্রতিটি নোডে ম্যানুয়ালি চিত্রগুলি লোড করতে। পরিবর্তে, আপনি এগুলি আপনার স্থানীয় রেজিস্ট্রিতে ধাক্কা দিতে পারেন এবং তারপরে সমস্ত নোড প্রয়োজন অনুসারে রেজিস্ট্রি থেকে চিত্রগুলি টানবে। নীচে চিত্রগুলি আপনার রেজিস্ট্রিতে ধাক্কা দেওয়ার আগে প্রস্তুত করার জন্য নির্দেশাবলী রয়েছে।
বিকল্প এ: পাত্রে ব্যবহার করা (সঙ্গে সিটিআর )
3A.1. ইমেজ টারবল আমদানি করুন (এক মেশিনে)
আপনার স্থানীয় রেজিস্ট্রি অ্যাক্সেস করতে পারে এমন একটি মেশিনে টারবল (গুলি) আমদানি করুন:
Sudo CTR -n k8s.io ইমেজ import/path/to/<image_tarball>.tar
উদাহরণস্বরূপ:
sudo CTR -n k8s.io চিত্র আমদানি /opt/offline-images/ilum_hive_3.1.3.tar
3A.2. স্থানীয় রেজিস্ট্রির জন্য চিত্রটি ট্যাগ করুন
Tag the image with your local registry’s endpoint (for example, if your registry is accessible at লোকালহোস্ট:5000 ):
সুডো সিটিআর -এন k8s.io চিত্র ট্যাগ আইএলইউএম / হাইভ: 3.1.3 লোকালহোস্ট: 5000 / আইএলইউএম / হাইভ: 3.1.3
3A.3. স্থানীয় রেজিস্ট্রিতে ছবিটি পুশ করুন
ট্যাগ করা চিত্রটি পুশ করুন:
সুডো সিটিআর -এন k8s.io চিত্রগুলি ধাক্কা --প্লেইন-এইচটিটিপি লোকালহোস্ট: 5000 / আইএলইউএম / হাইভ: 3.1.3
(ব্যবহার করুন --প্লেইন-এইচটিটিপি যদি আপনার রেজিস্ট্রি টিএলএস ছাড়াই কনফিগার করা থাকে))
বিকল্প বি: ডকার ব্যবহার করে
3B.1. ইমেজ টারবল লোড করুন (যদি প্রয়োজন হয়)
আপনি যদি ধাক্কা দেওয়ার আগে স্থানীয়ভাবে যাচাই করতে চান (ঐচ্ছিক), আপনি আপনার অ্যাডমিন মেশিনে একটি চিত্র লোড করতে পারেন:
ডকার লোড -আই / পাথ / টু / <image_tarball>.tar
উদাহরণস্বরূপ:
ডকার লোড -i / ওপিটি / অফলাইন-চিত্র / ilum_hive_3.1.3.tar
3B.2. আপনার স্থানীয় রেজিস্ট্রির জন্য চিত্রটি ট্যাগ করুন
ডকার ট্যাগ ilum/Hive:3.1.3 localhost:5000/ilum/Hive:3.1.3
3B.3. ছবিটি স্থানীয় রেজিস্ট্রিতে পুশ করুন
ডকার পুশ লোকালহোস্ট: 5000 / আইএলএম / হাইভ: 3.1.3
নোট: চিত্রগুলি একবার আপনার স্থানীয় রেজিস্ট্রিতে এলে আপনার ক্লাস্টারের প্রতিটি নোড প্রয়োজনের সময় সেগুলি স্বয়ংক্রিয়ভাবে টানতে পারে। প্রতিটি নোডে চিত্রগুলি প্রাক-লোড করার প্রয়োজন নেই।
4. পছন্দসই বিকল্প: একটি স্থানীয় ইমেজ রেজিস্ট্রি সেট আপ করুন
স্থানীয় রেজিস্ট্রি ব্যবহার করা অত্যন্ত সুপারিশ করা হয় কারণ এটি চিত্র পরিচালনাকে সহজ করে তোলে এবং বৃহত্তর বা গতিশীল ক্লাস্টারগুলির জন্য ভালভাবে স্কেল করে। যদিও আপনি ব্যবহার করে একটি বেসিক রেজিস্ট্রি চালাতে পারবেন নিবন্ধন:2 , যেমন শক্তিশালী বিকল্প বিবেচনা করুন বন্দর , নেক্সাস রিপোজিটরি ম্যানেজার, বা কোয়ে। উদাহরণস্বরূপ বন্দর offers role‑based access control, vulnerability scanning, image replication, and a user-friendly web UI.
গুরুত্বপূর্ণ: নিশ্চিত করুন যে আপনি যে কোনও রেজিস্ট্রি চয়ন করেছেন তা একটি সংযুক্ত স্থায়ী ভলিউম (বা স্থায়ী স্টোরেজ) দিয়ে কনফিগার করা হয়েছে। এটি গ্যারান্টি দেয় যে রেজিস্ট্রি ধারকটি পুনরায় চালু বা আপডেট করা হলেও আপনার চিত্রগুলি উপলব্ধ থাকবে।
উদাহরণ: স্থায়ী স্টোরেজ (ডকার) সহ একটি বেসিক রেজিস্ট্রি সেট আপ করা
-
রেজিস্ট্রি ডেটার জন্য একটি ডিরেক্টরি তৈরি করুন:
এমকেডিআইআর -পি / ওপিটি / রেজিস্ট্রি-ডেটা -
একটি ভলিউম সঙ্গে রেজিস্ট্রি ধারক চালান:
ডকার রান -ডি \
-পি 5000:5000 \
--নাম রেজিস্ট্রি \
-ভি / ওপিটি / রেজিস্ট্রি-ডেটা: / ভার / লিব / রেজিস্ট্রি \
নিবন্ধন:2
উদাহরণ: হারবার ব্যবহার করে
For a more robust solution, download Harbor’s offline installer from the হারবার গিটহাব রিলিজ পৃষ্ঠা এবং প্রদত্ত ডকুমেন্টেশন অনুসরণ করুন। হারবার আপনাকে তার ইনস্টলেশনের অংশ হিসাবে স্থায়ী স্টোরেজ (ভলিউম ব্যবহার করে) কনফিগার করতে হবে।
5. স্থানীয় রেজিস্ট্রি ব্যবহার করতে হেলম চার্ট আপডেট করুন
সেটা নিশ্চিত করার জন্য ইলুম পাবলিক সংগ্রহস্থলগুলির পরিবর্তে আপনার স্থানীয় রেজিস্ট্রি থেকে চিত্রগুলি টানুন, হেলম চার্টে চিত্র সংগ্রহস্থলের রেফারেন্সগুলি আপডেট করুন। উদাহরণস্বরূপ, যদি ডিফল্ট মানগুলি থাকে:
ইলুম-কোর :
প্রতিচ্ছবি : "আইএলইউএম / কোর: 6.3.0"
এটি এতে পরিবর্তন করুন:
ইলুম-কোর :
প্রতিচ্ছবি : "লোকালহোস্ট: 5000 / আইএলইউএম / কোর: 6.3.0"
You can either edit the chart’s default মূল্যবোধ.ইয়ামল অথবা একটি ওভাররাইড ফাইল সরবরাহ করুন। উদাহরণস্বরূপ, তৈরি করুন local-registry-values.yaml :
ইলুম-কোর :
প্রতিচ্ছবি : "লোকালহোস্ট: 5000 / আইএলইউএম / কোর: 6.3.0"
ইলুম-ইউআই :
প্রতিচ্ছবি : "লোকালহোস্ট: 5000 / আইএলইউএম / ইউআই: 6.3.0"
ilum-livy-proxy :
প্রতিচ্ছবি : "লোকালহোস্ট: 5000 / আইএলইউএম / লিভি-প্রক্সি: 6.3.0"
# অন্যান্য উপাদানগুলির জন্য অনুরূপ ওভাররাইড যুক্ত করুন (উদাঃ, আইলাম / এয়ারফ্লো, আইলাম / মৌচাক ইত্যাদি)
তারপরে ব্যবহার করে ইনস্টল (বা আপগ্রেড) করুন:
Helm install ilum /path/to/ilum-<version>.tgz --namespace ilum --create-namespace -f local-registry-values.yaml
6. হেলম ব্যবহার করে ইলাম ইনস্টল করুন
নিশ্চিত করুন আপনার Kubeconfig আপনার অফলাইন ক্লাস্টারের জন্য কনফিগার করা হয়েছে, তারপরে হেলম চার্ট ইনস্টল করুন:
হেলম ইনস্টল ইলুম / পাথ / টু / আইলুম-<version>.টিজিজেড --নামস্থান ইলুম --ক্রিয়েট-নেমস্পেস
(আপনি যদি একটি ব্যবহার করেন তবে ওভাররাইড ফাইলটি অন্তর্ভুক্ত করুন))
7. যাচাই করুন এবং সমস্যা সমাধান করুন
7.1. স্থাপনা যাচাই করুন
-
হেলম রিলিজের স্থিতি পরীক্ষা করুন:
হেলম স্ট্যাটাস ইলুম --নামস্পেস ইলুম -
পডের তালিকা করুন:
Kubectl get pods -n ilum -
পড ইমেজ রেফারেন্সগুলি পরিদর্শন করুন:
উদাহরণস্বরূপ:
Kubectl বর্ণনা pod <pod_name> -n ilum | grep চিত্র:নিশ্চিত করুন যে চিত্রের পথগুলি আপনার স্থানীয় রেজিস্ট্রিকে উল্লেখ করে (উদাঃ,
লোকালহোস্ট:5000/ইলুম/হাইভ: 3.1.3).
7.2. সমস্যা সমাধান
- ImagePullBackOff ত্রুটি:
যাচাই করুন যে চিত্রগুলি স্থানীয় রেজিস্ট্রিতে উপলব্ধ এবং সমস্ত নোড রেজিস্ট্রি অ্যাক্সেস করতে পারে। - রেজিস্ট্রি অ্যাক্সেস:
আপনার নোডগুলিতে কোনও প্রয়োজনীয় অনিরাপদ রেজিস্ট্রি সেটিংস (যদি এইচটিটিপি ব্যবহার করে) কনফিগার করা থাকে তা নিশ্চিত করুন। - স্থায়ী স্টোরেজ:
Confirm that the local registry’s data directory is correctly mounted so that images persist across container restarts.
Apache Spark on Kubernetes in an Air-Gapped Environment – Extended Technical Overview.
When deploying Apache Spark on Kubernetes in an air-gapped environment, which means Spark’s driver and executor processes are all running as containerized processes, 100% managed within boxes devoid of any public connectivity. All the container images and dependencies along with the configuration files get hosted internally and they do not need external network access.
এই পরিবেশে, আমরা কুবারনেটগুলিতে কনটেইনারাইজড অ্যাপ্লিকেশন হিসাবে স্পার্ক উপাদানগুলি স্থাপন করি। স্পার্ক ড্রাইভার এবং এক্সিকিউটর হল পড। সময়সূচী, সংস্থান বরাদ্দ এবং স্কেলিং কুবারনেটস (বা কে 8 এস) দিয়ে পরিচালিত হয়। সেটআপটি মসৃণ এবং নির্ভরযোগ্য কার্যকারিতার জন্য রিসোর্স সীমা, অনুভূমিক পড অটোস্কেলিং, নোড নির্বাচক ইত্যাদির মতো কুবারনেটের বৈশিষ্ট্য ব্যবহার করে।
A local image registry is a key part of the architecture. Instead of having to load images yourself on every node, you push them into a registry that is within your infrastructure. Regardless of whether you’ve done a basic deployment with নিবন্ধন:2 বা হারবারের একটি পূর্ণাঙ্গ ইনস্টলেশন, রেজিস্ট্রিটি পুনরায় চালু / আপডেটের পরে চিত্রগুলি ধরে রাখতে অবিরাম স্টোরেজ দ্বারা সমর্থিত হতে হবে। যখন চিত্রগুলি রেজিস্ট্রিতে থাকে, পৃথক নোডগুলি চাহিদা অনুসারে তাদের টানতে পারে।
Networking and security are also critical. An air gapped environment has network policies that allow or deny communication of pods. These policies limit interactions only to the components that need them with the help of Kubernetes’ own security controls (like role-based access control, service accounts, etc.). Configuring this way will not only protect your cluster but also comply with rules to that may have no ingress.
এই কাঠামোটি জটিল কাজের জন্য অনুমতি দেয়, যেমন স্পার্ক কোর, স্পার্ক এসকিউএল, স্পার্ক স্ট্রিমিং এবং এমএললিব অ্যাপ্লিকেশন। যেমন সরঞ্জাম সহ কুবেক্টল , হেলম, এবং প্রমিথিউস এবং গ্রাফানার মতো লগিং সমাধানগুলি, কুবারনেটস স্পার্কের সাথে অত্যন্ত সংহত, স্থাপনা এবং ডিবাগিংকে সহজ করে তোলে।
অন্য কথায়, আপনি একদিকে অর্কেস্ট্রেশন এবং অন্যদিকে একটি সুরক্ষিত, স্কেলযোগ্য অবকাঠামোর সাথে কনটেইনারাইজেশন একত্রিত করতে সক্ষম হবেন।