<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های behnam.hasanbeygi</title>
        <link>https://virgool.io/feed/@behnam.hasanbeygi</link>
        <description>MLOps and data science @ AIFA team</description>
        <language>fa</language>
        <pubDate>2026-06-16 11:36:06</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/176005/avatar/G6Uk0q.png?height=120&amp;width=120</url>
            <title>behnam.hasanbeygi</title>
            <link>https://virgool.io/@behnam.hasanbeygi</link>
        </image>

                    <item>
                <title>nfs-subdir-external-provisioner</title>
                <link>https://virgool.io/@behnam.hasanbeygi/nfs-subdir-external-provisioner-ee69aqilcr4c</link>
                <description>سلام خسته نباشیدایشالا تو این زمان کرونا تو صحت و سلامتی باشیدامروز میخوام راجب nfs dynamic provisioning kubernetes صحبت کنم!خیلی ها مدیریت storage براشون یک امر حیاتی محسوب میشه و واقعا هم حیاتی هست چون که مربوط به ذخیره سازی دیتا میشه !چندین راه برای ایجاد یک storage پایدار وجود داره به عنوان مثال ceph rook و glusterfs و nfs تو این مقاله سعی میکنم ساده ترینشون که همون nfs هست رو توضیح بدم !نیازمندی ها:یک کلاستر kubernetes یک Nfs سرور نصب NFS server بر روی centosدر حالت root این عملیات انجام بدیدابتدا پکیج nfs رو نصب کنیدyum install nfs-utilsبعد از نصب پکیج nfs یک دایرکتوری به اسم دلخواه تون تشکیل بدید (این دایرکتوری رو به عنوان یک path میخوایید export کنید)mkdir -p /kube/dataبعد بهش permissons رو میدی برای نوشتن و خوندن و...(تو حالت پروداکشن یکم دقت کنید رو این permission ها )chmod -R 755 /kube/datachown nfsnobody:nfsnobody /kube/dataبعد از ساخت شدن این دایرکتوری و دادن permissions حالا نوبت به export کردن این path میشه !فایل vim /etc/exports این کانفیگ رو تو این فایل قرار بدید /kube/data	*(rw,sync,no_subtree_check,no_root_squash,no_all_squash,insecure)بعد wq و خروج!خب الان nfs سرور رو راه اندازی کنیدsystemctl enable nfs-server --nowاین کامند رو اجرا کنید exportfs -ravباید این خروجی رو ببینید!exporting *:/kube/dataخب تا اینجا nfs server رو راه اندازی کردید و اگر میخوایید اون رو تست کنید رو یک سرور دیگه این تست انجام بدید رو centos yum install -y nfs-utilsmount -f nfs NFS_IP_SERVER:/kube/data /mntکه باید mount  بشه بعد از اینکه mount شد اون رو unmount کنیدunmount /mntروی ubuntu apt-get install nfs-commonmount -f nfs NFS_IP_SERVER:/kube/dataو بعدش دوباره اون رو unmount کنیدخب اگر هیچ کدوم از مراحل error دریافت نکردید همه چی حله اگر error ی دیدید بهم بگید تا هم راهنمایی تون و هم این متن رو اصلاح کنم!اجرای pods nfs-client-provisioner رو کلاستر kubernetestمن از github nfs-subdir-external-provisionig استفاده کردم و برای اینکه سردرگمی به وجود نیاد فایل های مورد نیاز برای راه اندازی این deployment روی git خودم قرار میدم که دسترسی سریع داشته باشید !این repo رو clone کنید و بعدش این فایل ها رو روی کلاستر اعمال کنیدhttps://github.com/Behnamhb/nfs-provisioningاولین فایلkubectl -f create rbac.yamlاگه فایل رو بررسی کنید اطلاعات مربوط به service account ,cluster rolebinding .. وجود داره که مربوط به سطح دسترسی هاست.فایل بعدی که باید ساخته بشه classkubectl create -f class.yamlکه این یک storage class ساخته میشه که اسمش هست managed-nfs-storageتوضیحش اینه که با add کردن این storage به deployment خودتون و استفاده ازش به صورت اتوماتیک برای شما pv ساخته و bound میشه !مرحله سوم اینه که باید deployment ادد کنید !این مرحله یک فرق اساسی با مراحل قبلی داره به این صورت که باید شما file دیپلویمنت یک تغییراتی بدید !میایید اخر فایل بعد ازenv این متغییرات ها رو میبینید - name: NFS_SERVERاندازه یا value این فایل الان10.3.243.101 هست شما اون به IP NFS سرور خودتون تغییر بدید.NFS_PATHاون رو به دایرکتوری که ساختید تغییر بدید /kube/dataتو قسمت پایین که volumes هم هست این دو تا رو تغییر بدید به IP و PATH که باهاش nfs رو راه اندازی کردیدحالا تو این مرحله که تغییرات اعمال شد.kubectl -f create deployment.yamlپاد رو ادد کنید به کلاستر.بعد از ساخته شدن container رو status running حالا یک pvc تست میسازیم که ببینیم ایا کار میکنه یا نهتو همون git repo یک فایل به اسم test-pvc.yaml قرار داده شده که ۵۰۰ مگ برای ما فضا رو درست میکنه شما باید در این حالت بعد از اعمال این فایل رو کلاستر ببینید که هم pvc تشکیل شده هم به صورت اتوماتیک pv تشکیل شده هم اینکه اگر رو pvc اطلاعات بریزید باید روی nfs server اطلاعات رو ببینید! اگه به فایل test-pvc.yaml هم دقت کنید که میبینید که storage class که اینجا مشخص شده همونmanaged-nfs-storage هستش kubectl create -f test-pvc.yamlبعد از اون با زدن کامند kubectl get pv,pvc باید هم pvc , pv رو ببینید که تشکیل شده اگر به  nfs سرور هم نگاه کنید تو فایل /kube/datapvc1-pvcتشکیل شده که یعنی اینکه کار تمام است و همه چی اوکی!خسته نباشید سوالی بود بپرسید من همیشه هستم!</description>
                <category>behnam.hasanbeygi</category>
                <author>behnam.hasanbeygi</author>
                <pubDate>Sun, 25 Apr 2021 00:48:00 +0430</pubDate>
            </item>
                    <item>
                <title>HPA in kubernetes</title>
                <link>https://virgool.io/@behnam.hasanbeygi/hpa-in-kubernetes-guwqhez1qpdh</link>
                <description>سلام خسته نباشید!میخوام امروز راجب horizontal pod autoscaler صحبت کنم و یک اموزش مختصری هم برای شما قرار بدم!مفهوم HPA چی هست!؟شما تصور کنید در ساعت به خصوصی از شبانه روز مقدار load که وارد میشه برای web application که دارید افزایش پیدا میکنه مثلا در ساعت ۸ شب که کارمندا برگشتن خونه میخوان قسط هاشون از طریق یک web application پرداخت کنن مقدار load که به این web application وارد میشه جواب گوی این همه request یا درخواست نیست پس بنابراین web app داون میشه ۵۰۲ ظاهر میشه! در بقیه طول شبانه روز شاید این سیستم جواب گوی درخواست ها باشه ولی تو یک زمان های خاصی حالا به دلیل درخواست زیاد web app شما از میدان به خارج میشه شاید فکر کنید مشکل از کد شماست! نه اینجور نیست!یکی از سرویس های جذاب kubernetes این قابلیت برای شما فراهم میکنه که بر اساس میزان بالا رفتن استفاده pod ها از cpu یا memory تعداد pod ها یا web application شما رو افزایش و کاهش میده به صورت dynamic.شما باید اول تو ذهنتون تصور کنید چی میخوایید و چطوری بهش دست پیدا کنید!شما میخوایید به صورت اتوماتیک مقدار pod های که دارید افزایش پیدا کنه و سپس کاهش پیدا کنه !!پس شما باید یه سیستمی رو پیاده سازی کنید که میزان استفاده pod ها از cpu و RAM بهتون نشون بده و بعدش یک trigger بزارید که اگر از این حد مقدار استفاده از cpu یا RAM توسط pod بیشتر شد مقدار replica یا pod های شما رو افزایش بده!نیازمندی ها:یک کلاستر kubernetes کامند kubectlمرحله ی اول:تو این مرحله باید یک ابزار رو روی کلاستر نصب کنید که به شما میزان RAM و CPU استفاده شده توسط pod رو نشون بده!دو تا ابزار وجود داره یکی heapster و دیگری kubernetes-metricبه دلیل اینکه kubernetes-metric جدید تر و heapster یه جورای deprecated شده ما از k-metrics استفاده میکنیم!توی repository خودم به ادرس زیر https://github.com/Behnamhb/kubernetes.gitتو این repo سه تا فایل رو مشاهده میکنید components.yamlhpa.yamlnginx-deployment.yamlبا کامند زیر kubernetes-metric توی کلاستر خودتون فعال کنیدkubectl create -f components.yamlچند لحظه صبر کنید تا image pull بشه و بعد command زیر رو اجرا کنkubectl top nodesباید خروجی شبیه به عکس زیر بهت بده initial componentsمرحله ی دوم ! تو این مرحله باید یک deployment برای web app خودتون بنویسیدمن به طور مثال من یک deployment برای nginx نوشتم بدین شکل!apiVersion: apps/v1kind: Deploymentmetadata:name: nginxlabels:app: nginxspec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginxresources:limits:cpu : 100mrequests:cpu: 100mمهم ترین قسمت این deployment خط های اخر که شما میای محدودیتی رو برای استفاده ی pod از مقدار cpu سرورت میکنی که اینجا من ۱۰۰m رو انتخاب کردمبا کامند زیر این deployment روی کلاستر پیاده سازی کنیدkubectl create -f nginx-deployment.yamlو بعد از ساخته شدن یک pod حالا میریم برای مرحله ی بعدمرحله ی سوم !تو این قسمت میای hpa.yaml رو پیاده سازی میکنی!apiVersion: autoscaling/v1kind: HorizontalPodAutoscalermetadata:name: nginxspec:maxReplicas: 5minReplicas: 1scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: nginxtargetCPUUtilizationPercentage: 20تو این yaml فایل ما اومدیم یک kind تشکیل دادیم از نوع HorizontalPodAutoscaler که اسم هست nginx و چیزی که مد نظر ما هست اینه که حداقل ۱ pod در حال اجرا باشهmin و حداکثر ۵ تا pod در حالتی که load رو webapp زیاد هست افزایش پیدا بکنه max یعنی گستره ای بین ۱ تا ۵ تا pod رو براتون اجرا میکنه! تو این قسمت targetCPUUtilizationPercentage یک trigger تعریف کردیم که میگه اگر مجموع مصرف cpu بیش تر از ۲۰ درصد بشه تعداد pod ها رو افزایش میده و مرحله به مرحله به ۵ تا میرسونه!با کامند زیر hpa روی کلاستر اعمال کنیدkubectl create -f hpa.yaml مرحله ی اخرتست کردن این موضوع به این شکل که باید از یک command به اسم siege استفاده کنید که روی web app تون load ریخته بشه!اولین یک سرویس بنویسید که این deployment بتونه دیده بشه یا به قول معروف یک راهی داشته باشه به جهانkubectl expose deploy nginx --port 80 --type NodePortوقتی سرویس ساخته شد یک پورت اختصاص داده میشه به این deployment که اون رو اگر روی browser تون چک کنید بایدwelcome nginx رو بتونید ببینید!حالا اگر IP هر کدوم از worker هاتون رو با port مورد نظر(برای من اینجا ۳۲۵۷۴ به صورت رندوم ساخته میشه ) توی browser چک کنید بایدwelcome رو ببینید!خب قبل از load ریختن چک میکنیم مقدار pod هامون که تعدادش چندتاستحالا این command رو اجرا میکنیم برای ریختن load روی deploymentاگر کامند siege رو ندارید اون رو نصب کنید apt-get install siegeyum install siegesiege -q -c 5 -t 3m http://IP:PORTحالا چک کنید ببینید مقدار pod های شما افزایش پیدا میکنه !تعداد replicas رو نگاه کنید که ۴ عدد و به ۵ هم میرسه ! اون target دقت کنید عدد سمت چپ مربوط به load کلی که بر روی cpu افتاده از طرف pod و عدد سمت راست همون مقدار ۲۰ درصدی که تعیین کردیم برای افزایش یا کاهش pod هاو بعد از حدود ۵ دقیقه از تموم شدن command siege باید تعداد pod ها به همون عدد ۱ برگرده به این صورتامیدوارم که خوشتون اومده باشه :)هر سوالی نظری و انتقادی داشتید با کمال میل میپذیرم و راه های پیدا کردن من هم ساده س behnam hasanbeygiرو تو گوگل بنویسید لینکدین من نمایش داده میشه !</description>
                <category>behnam.hasanbeygi</category>
                <author>behnam.hasanbeygi</author>
                <pubDate>Tue, 23 Mar 2021 01:05:27 +0430</pubDate>
            </item>
                    <item>
                <title>راه اندازی cluser kubernetes در Docker</title>
                <link>https://virgool.io/@behnam.hasanbeygi/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-cluser-kubernetes-%D8%AF%D8%B1-docker-xiehfjgzlp8q</link>
                <description>سلام خسته نباشیدسال نو رو به همه تون تبریک میگم(زمانی که این مقاله رو می نویسم عید سال ۱۴۰۰ هستش)راه اندازی یک کلاستر kubernetes شاید برای خیلی ها مشکل باشه تو این مقاله سعی کردم به سریع ترین حالت ممکن این کار رو به شما نشون بدم!توجه : این کلاستر صرفا برای یادگیری kubernetes است و اصلا برای محیط production توصیه نمی شود!نیازمندی ها:من روی ubuntu 18:04 هستم ولی شما میتونید از بقیه سیستم عامل های که وجود داره استفاده کنیدنصب Docker نصب زبان go نصب کامند kindیک اینترنت قوی چون که image که دانلود میشه حداقل ۱.۱۷ گیگ حجمش:(خب مستقیما میریم سر اصل مطلب اول شما باید Docker نصب کنید چون این مقاله راجب این موضوع نیست فقط به این بسنده میکنیم که لینک های مربوط به نصب Docker رو برای شما قرار میدیم بر اساس مراحل داخل سایت خود Docker پیش برید مطمنا میتونید این کار رو انجام بدید:)https://docs.docker.com/engine/install/از بین لیستی که وجود داره میتونید سیستم عامل مورد نظر خودتون رو پیدا کنید و شروع به نصب کنید به طور مثال سیستم عامل من ubuntu 18:04 برای همین من ubuntu رو انتخاب میکنم و ادامه مراحل رو پیش میرمبعد از نصب Docker نوبت به نصب زبان Go میرسه زبان برنامه نویسی Go رو میتونید از لینک زیر  دانلود کنید حالا برای هر سیستم عاملی که مورد نظر شماست https://golang.org/doc/installباز هم تاکید میکنم بر اساس اینکه من دارم از لینوکس استفاده میکنم مراحل نصب لینوکس رو پیش می گیرم!فایل tar زبانGo رو دانلود میکنم سپس تو /usr/local انتقالش میدم بدین شکلsudo tar xzvf go1.16.2.linux-amd64.tar.gz
sudo mv go /usr/local
و بعدش باید PATH  این کامند رو به shell لینوکس خودم معرفی کنم تا بتونه از اون استفاده کنه!export PATH=$PATH:/usr/local/go/binو بعد از این کار اگر command which go رو اجر کنم باید خروجی /usr/local/go/bin/goبدین شکل رو ببینم!خب تا این قسمت ما هم Docker نصب کردیم و هم زبان Go!مرحله بعد اجرای کامندی به اسم kind !به ادرس GitHub kubernetes-sigs/kind میریم و بقیه مراحل رو از اونجام انجام میدیم! https://github.com/kubernetes-sigs/kindتو این قسمت README رو با دقت بخونید یک ساختار به خصوص توضیح داده برای نصب کامند Kind If you have go (1.11+) and docker installed GO111MODULE=&quot;on&quot; go get sigs.k8s.io/kind@v0.10.0کامند زیر باید اجرا کنید GO111MODULE=&quot;on&quot; go get sigs.k8s.io/kind@v0.10.0تو این قسمت گفته که اگر ورژن go شما بالاتر از ۱.۱۱ و Docker رو هم اگر نصب کردید همه چیز اوکی و اون کامند رو اگر اجرا کنید یک دایرکتوری رو برای شما دانلود میکنه و در همون دایرکتوری که قرار دارید جایگذاری میکنه مثلا اگر شما در home خودتون هستید بعد از دانلود کامل پکیج و ها و فایل ها یک دایرکتوری رو میتونید ببینید به اسم go داخل دایرکتوری go دو تا ساب دایرکتوری میتونی ببینی به اسم bin and pkg برای اجرای کامند kind مثل زمانی که برای go اومدی PATH رو export کردی باز باید این کار رو انجام بدی مثلا من دایرکتوری رو در home خودم دانلود کردم پس به این صورت میشه /home/behnam/goexport PATH=$PATH:/home/behnam/go/binو به این کار PATH مربوط به کامند kind رو به shell خودم export میکنم و بعد از اجرای which kindباید خروجی زیر رو ببینم /home/behnam/go/bin/kindو حالا که همه مراحل طی شد از قدرت کامند kind استفاده میکنم برای ایجاد کلاسترم!با زدن کامند رو به رو میتونم یک cluster تک node که master هستش رو ایجاد کنم!kind create cluster و باید صبر کنید تا image رو دانلود کنه بعد از دانلود کردن و تموم شدن مراحل شما یک kubernetes تک node دارید کامند kubectl  رو نصب کنید https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/بعد از نصب kubectl با کامند رو به رو میتونید cluster رو خودتون نگاه کنیدkubectl cluster-infokubectl get nodes -o wide kubectl get pods -Aحالا شما میخوایید یک کلاستر بسازید که یک master و چندین worker داشته باشه!برای همین باید شما config مربوط به چیزی که میخوایید رو به کامند kind بدید که بتونه براتون یک کلاستر سه master و سه worker تحویل بده!کلاستر قبلی که ساخته بودید رو پاک کنیدkind delete clusterبه URL زیر برید اونجا config های متنوعی میبیند که من یکی از config ها رو به صورتی اختصاصی خودم تغییر دادم و براتون اینجام قرار میدم!https://kind.sigs.k8s.io/docs/user/configuration/یک فایل به اسم kind-config.yaml تشکیل بدید و این config رو اونجام قرار بدید !kind: ClusterapiVersion: kind.x-k8s.io/v1alpha4nodes:- role: control-plane- role: control-plane- role: control-plane- role: worker- role: worker- role: worker https://virgool.io/p/xiehfjgzlp8q/edit#  https://virgool.io/p/xiehfjgzlp8q/edit#Whilethesewillnotaddmorerealcomputecapacityand  https://virgool.io/p/xiehfjgzlp8q/edit#havelimitedisolation,thiscanbeusefulfortesting  https://virgool.io/p/xiehfjgzlp8q/edit#rollingupdatesetc.  https://virgool.io/p/xiehfjgzlp8q/edit#  https://virgool.io/p/xiehfjgzlp8q/edit#TheAPI-serverandothercontrolplanecomponentswillbe  https://virgool.io/p/xiehfjgzlp8q/edit#onthecontrol-planenode.  https://virgool.io/p/xiehfjgzlp8q/edit#  https://virgool.io/p/xiehfjgzlp8q/edit#Youprobablydon&#039;tneedthisunlessyouaretestingKubernetesitself. خب باید این config رو به کامند kind بدید با سویچ --configkind create cluster --config kind-config.yamlبا این حرکت شما یه کلاستر سه master و سه worker خواهید داشتدقت کنید این کلاستر برای حالت Development و یادگیری هستش و اصلا برای production توصیه نمیشه !</description>
                <category>behnam.hasanbeygi</category>
                <author>behnam.hasanbeygi</author>
                <pubDate>Sun, 21 Mar 2021 03:31:24 +0330</pubDate>
            </item>
            </channel>
</rss>