Academy and Foundation unixmens | Your skills, Your future
2.3K subscribers
6.68K photos
1.39K videos
1.24K files
6.17K links
@unixmens_support
@yashar_esm
[email protected]
یک کانال علمی تکنولوژی
فلسفه متن باز-گنو/لینوکس-امنیت - اقتصاد
دیجیتال
Technology-driven -بیزینس های مبتنی بر تکنولوژی
Enterprise open source
ارایه دهنده راهکارهای ارتقای سازمانی - فردی - تیمی
Download Telegram
ا. GitLab Kubernetes Agent چیست؟

ا. GitLab Kubernetes Agent یک کامپوننت نرم‌افزاری است که داخل کلاستر Kubernetes نصب می‌شود و به صورت دوطرفه (bi-directional) با GitLab ارتباط برقرار می‌کند.
برخلاف روش قدیمی (integration با استفاده از kubeconfig یا API مستقیم)، این Agent یک کانال ارتباطی امن و پایدار بین GitLab و کلاستر ایجاد می‌کند

وظایف و قابلیت‌های اصلی

1. ارتباط امن و پایدار با کلاستر

بجای اینکه GitLab از بیرون به API کلاستر دسترسی داشته باشد (که خطرناک است)، Agent در داخل کلاستر اجرا شده و خودش ارتباط امن (TLS + gRPC) را با GitLab برقرار می‌کند.



2. GitOps (Declarative Deployments)

ا. Agent می‌تواند تغییرات تعریف‌شده در ریپازیتوری GitLab (مثل manifestها و Helm chartها) را به‌طور خودکار با وضعیت کلاستر هماهنگ کند.

یعنی وقتی شما کدی را commit کنید که شامل تغییر در Kubernetes manifests باشد، Agent این تغییرات را به کلاستر اعمال می‌کند.



3. CI/CD Integration

امکان اجرای jobهای CI/CD که نیاز به ارتباط با کلاستر دارند (مثل deploy، تست E2E، security scans).

دسترسی به کلاستر بدون نیاز به اشتراک‌گذاری kubeconfig در pipeline.



4. Cluster Observability

ا. Agent اطلاعات وضعیت کلاستر (nodes, pods, workloads) را به GitLab گزارش می‌دهد.

این کار امکان monitoring و visualization مستقیم از داخل GitLab UI را فراهم می‌کند.



5. Multi-cluster Management

با یک GitLab می‌توان چندین کلاستر را مدیریت کرد (Dev, Staging, Prod).

هر کلاستر ایجنت خودش را دارد و در GitLab به‌عنوان یک entity مجزا دیده می‌شود.



6. Policy Enforcement و Security

می‌توان policyهایی تعریف کرد (مثلاً فقط برخی namespaceها یا resourceها قابل دسترسی باشند).

این باعث می‌شود امنیت نسبت به روش قدیمی kubeconfig خیلی بالاتر باشد.

مشکلات روش kubeconfig قدیمی نسبت به GitLab Kubernetes Agent

امنیت :
نیاز به ذخیره kubeconfig در GitLab (ریسک نشت) ارتباط gRPC امن از داخل کلاستر
ا. GitOps محدود : پشتیبانی کامل (Pull-based deployment)
مقیاس‌پذیری سخت : (برای چندین کلاستر) اما در اجنت ساده تر است . (هر کلاستر Agent خودش را دارد)
ا Observability محدود : اما در اجنت یکپارچه با GitLab UI
مدیریت Policy دستی و پشتیبانی داخلی

#devops #gitlab #kubernetes #k8s #grpc #security #linux #cluster

https://t.iss.one/unixmens
👍2
Academy and Foundation unixmens | Your skills, Your future
Photo
When we say Linux knowledge is very important, the reasons are both technical and strategic. This importance can be explained in a few layers:

The basic infrastructure of the IT and Cloud world :

More than 90% of large Internet services (from Google and Facebook to Amazon and Netflix) run on Linux.

The dominant operating system is in public schools such as AWS, GCP and Azure Linux.

Most important databases (MySQL, postgresql, mongodb, oracle DB works better on Linux)

Security and control :

Linux is the open source (Open Source); That is, it has transparency in the code and the security audit capability.

Low -level security tools and hardness (such as Selinux, Apparmor, iPTables, Nftables ,cgroup , namespace) are more powerful in Linux.

A specialist who knows Linux can take full control of the system, not just superficial use.

Devops and Automation :


Almost all Devops (ANSIBLE, TERRAFORM, KUBERNETES, DOCKER, JENKINS) tools are born on Linux and have the best performance on Linux.

Scripting with Bash and combining it with Linux tools (Sed, AWK, GREP, etc.) is the main part of automation.

Network infrastructure and internet :

Vital Internet services (DNS, Web, Mail, Proxy, VPN) have been developed on the Linux platform.

For a network or security specialist, Linux knowledge means direct management of infrastructure service

Stability and scalability :

Linux is a scalable and stable operating system; From mobile (Android) to supercamapiers.

The world's top 5 superpowers work on Linux.

Engineering :

Linux teaches the user how the system works, not just how to use it.

This makes the person upgraded from the "simple user" to the "engineer and architect"
🔑 :
Linux knowledge is important because the cornerstone of the modern digital world, security, and organizational transformation is based on Linux.


#linux #devops #k8s #clustering #kernel
👍2
Academy and Foundation unixmens | Your skills, Your future
Photo
در دنیای امروزی، حجم ترافیک شبکه به شکل انفجاری در حال رشد است. از دیتاسنترهای ابری گرفته تا شبکه‌های 5G، نیاز به پردازش سریع بسته‌های شبکه، بدون تأخیر (low latency) و با ظرفیت بالا (high throughput)، بیش از هر زمان دیگری احساس می‌شود.

سخت‌افزارهای سنتی مثل ASICها و FPGAها قدرت بالایی در پردازش بسته دارند، اما انعطاف‌پذیری کمی دارند. در مقابل، سرورهای عمومی (COTS Servers) انعطاف‌پذیرند، ولی عملکرد پردازش بسته روی Kernel Networking Stack محدود است.

اینجاست که DPDK (Data Plane Development Kit) وارد می‌شود:
یک کتابخانه متن‌باز برای پردازش کارآمد بسته‌ها روی سرورهای عمومی.
ا DPDK چیست؟

در واقع DPDK مجموعه‌ای از کتابخانه‌ها و درایورهاست که امکان بای‌پس کردن کرنل (Kernel Bypass) و دسترسی مستقیم به سخت‌افزار شبکه را فراهم می‌کند.
(مراجعه شود به monolithic kernel و micro service kernel )
زبان توسعه: C

مجوز: BSD (کاملاً متن‌باز)

پشتیبانی: جامعه متن‌باز + شرکت‌هایی مثل Intel، Red Hat، Mellanox (NVIDIA)، Arm، Huawei، و غیره
معماری DPDK


معماری DPDK را می‌توان به چند لایه تقسیم کرد:

مدیریت سخت‌افزار (HW Management)

مدیریت حافظه، CPU، و دستگاه‌ها

تضمین سازگاری روی CPUها و کرنل‌های مختلف

درایورها (Poll Mode Drivers)

حذف وقفه‌ها (interrupts) و استفاده از polling برای دریافت/ارسال بسته‌ها

کاهش overhead کرنل

ساختار داده‌ها

mempool: مدیریت حافظه بهینه برای bufferها

mbuf: نمایش بسته شبکه به عنوان یک شیء سبک

3.4 کتابخانه‌های پردازش بسته

Ethernet, IP fragmentation, TCP segmentation

QoS, Crypto, Compression

Tunnels, Classification, Flow Offload

لایه کاربردی

اپلیکیشن‌های شبکه‌ای مثل VNFها، روتر مجازی، فایروال، SDN Controller

ویژگی‌های کلیدی

ا High Performance: میلیون‌ها PPS (Packet Per Second) روی سخت‌افزار عمومی

Low Latency: مناسب برای 5G، مالی (HFT)، و Real-time

ا Portability: سازگار با Linux، FreeBSD، و معماری‌های CPU مختلف

ا Extensible: امکان افزودن ماژول‌های پردازش سفارشی

اکوسیستم DPDK


اکوسیستم DPDK بسیار گسترده است و شامل بخش‌های زیر می‌شود:

پروژه‌ها و نرم‌افزارهای وابسته


ا Open vSwitch (OVS-DPDK): نسخه شتاب‌یافته OVS برای دیتاسنترها

ا VPP (Vector Packet Processing): محصول پروژه FD.io، جایگزین kernel stack

ا Snort & Suricata (IDS/IPS): نسخه‌های بهینه‌سازی‌شده با DPDK

ا TRex Traffic Generator: ابزار تولید ترافیک پرقدرت مبتنی بر DPDK

صنعت و کاربردها

ا NFV (Network Function Virtualization): شتاب‌دهی VNFs روی سرورهای COTS

ا Telco/5G: Core Network، Baseband و Packet Core

ا Cloud & Data Center: بهبود عملکرد SDN و NFV

ا Security: شتاب‌دهی فایروال‌ها، VPNها، و ابزارهای رمزنگاری

رقبا و مکمل‌ها

ا eBPF / XDP (Linux Kernel): پردازش بسته درون کرنل

ا SmartNIC / FPGA: سخت‌افزارهای تخصصی با قابلیت offload

ا P4 / programmable switches: برنامه‌نویسی مستقیم روی ASIC

مزایا و چالش‌ها

مزایا

پردازش بسته با کارایی بالا روی سخت‌افزار عمومی

متن‌باز بودن و حمایت جامعه بزرگ

کاهش نیاز به سخت‌افزار اختصاصی گران‌قیمت

انعطاف‌پذیری برای توسعه اپلیکیشن‌های سفارشی

چالش‌ها

نیاز به Pinned CPU cores → مصرف منابع زیاد

پیچیدگی برنامه‌نویسی (C سطح پایین)

مناسب‌تر برای محیط‌های user space → ادغام با کرنل سخت‌تر است

بهینه‌سازی دقیق لازم دارد (NUMA, Cache, HugePages)

آینده DPDK

ادغام بیشتر با SmartNICs و programmable hardware

ترکیب با eBPF/XDP برای انعطاف‌پذیری بالاتر

استفاده گسترده‌تر در 5G Core, Edge Computing, و Cloud-native Networking

تمرکز روی energy efficiency برای کاهش مصرف CPU


#linux #kernel #sdn #cloud #devops #ebpf #dpdk

https://t.iss.one/unixmens
رشد سریع دیتاسنترهای ابری، شبکه‌های 5G و سرویس‌های Cloud-native، نیاز به پردازش پرسرعت بسته‌های شبکه بیش از هر زمان دیگری اهمیت پیدا کرده است. روش سنتی مبتنی بر Kernel Networking Stack به دلیل overhead بالا، پاسخگوی نیازهای امروزی نیست.

برای رفع این مشکل دو رویکرد اصلی مطرح شده‌اند:

ا DPDK (Data Plane Development Kit): رویکرد Kernel bypass در User Space

ا eBPF/XDP (extended Berkeley Packet Filter): پردازش انعطاف‌پذیر در Kernel Space
اینجا به بررسی هر یک میپردازیم :

معماری و فلسفه طراحیeBPF

ا eBPF یک مکانیزم درون‌هسته‌ای (in-kernel) است که به برنامه‌ها اجازه می‌دهد کدهای کوچک و امن را در کرنل لینوکس اجرا کنند. فلسفه اصلی آن انعطاف‌پذیری و قابلیت مشاهده (observability) است. eBPF به کاربران اجازه می‌دهد بدون تغییر در کرنل، منطق دلخواه خود را در سطح شبکه، امنیت و مانیتورینگ اضافه کنند. برنامه‌های eBPF در محیطی ایزوله (sandbox) اجرا می‌شوند و توسط verifier کرنل اعتبارسنجی می‌شوند تا مانع ایجاد مشکلات پایداری شوند.



ا DPDK یک مجموعه کتابخانه و درایور است که هدف اصلی آن حداکثرسازی سرعت پردازش بسته‌ها در فضای کاربر (user space) است. فلسفه آن مبتنی بر دور زدن کرنل و حذف لایه‌های سربار مانند socket و interrupt است. DPDK با استفاده از تکنیک‌هایی مانند polling و zero-copy، پردازش بسته‌ها را به شکل مستقیم از NIC (کارت شبکه) به فضای کاربر منتقل می‌کند.

عملکرد و کارایی

ا eBPF بیشتر بر روی انعطاف‌پذیری و قابلیت برنامه‌ریزی تمرکز دارد. این یعنی می‌توان بدون نوشتن ماژول کرنل، سیاست‌های پیچیده فایروال، ردیابی جریان‌ها و ابزارهای observability مانند bcc یا Cilium را ساخت. از نظر کارایی، سرعت آن مناسب است اما به دلیل وجود در کرنل، همچنان محدودیت‌هایی دارد.

ا DPDK برای عملکرد خام (raw performance) طراحی شده است. در سیستم‌هایی که نیاز به میلیون‌ها بسته در ثانیه (Mpps) وجود دارد، DPDK انتخاب بهتری است. اما این سرعت با مصرف بالاتر منابع CPU و پیچیدگی بیشتر توسعه همراه است.

سطح پیاده‌سازی و توسعه

ا eBPF توسعه‌دهندگان را قادر می‌سازد با استفاده از زبان C یا LLVM-based زبان‌ها، کدهای کوچک و قابل بررسی تولید کنند. توسعه آن ساده‌تر است زیرا مستقیماً با کرنل لینوکس ادغام شده و نیاز به مدیریت مستقیم منابع سخت‌افزاری ندارد.

ا DPDK توسعه‌دهنده را ملزم می‌کند که با سطح پایین‌تری از سخت‌افزار و پردازش بسته‌ها کار کند. برنامه‌نویسی با DPDK نیازمند درک عمیق از معماری CPU، حافظه و NIC است.

کاربردها eBPF

ساخت فایروال‌های مدرن مانند Cilium در Kubernetes.

مانیتورینگ شبکه، سیستم و عملکرد برنامه‌ها (مانند bpftrace).

امنیت در سطح هسته با قابلیت مشاهده دقیق رفتار برنامه‌ها.

ابزارهای observability برای Cloud-native environments.

DPDK

ساخت سیستم‌های SDN و NFV با کارایی بالا.

استفاده در فایروال‌ها، load balancerها و IDS/IPS با نیاز به throughput بسیار بالا.

محیط‌هایی که latency و jitter باید حداقل باشد، مانند مخابرات و 5G core.

زیرساخت‌های دیتاسنتر با پردازش میلیون‌ها بسته در ثانیه.

مزایا و محدودیت‌ها

ا eBPF مزایای بزرگی مانند سادگی توسعه، امنیت، قابلیت ترکیب با ابزارهای موجود لینوکس و عدم نیاز به bypass کرنل دارد. محدودیت اصلی آن، کارایی پایین‌تر نسبت به DPDK در بارهای بسیار سنگین است.

ا DPDK در کارایی بی‌نظیر است اما توسعه پیچیده‌تر، نیاز به منابع CPU بالا، و مدیریت دشوارتر دارد. همچنین برخلاف eBPF، tightly coupled با کرنل نیست و قابلیت observability گسترده ارائه نمی‌دهد.


مکمل بودن

ا eBPF و DPDK الزاماً رقیب مستقیم نیستند. در بسیاری از معماری‌های مدرن، این دو مکمل هم هستند:

ا eBPF: برای مشاهده‌پذیری (observability)، مانیتورینگ، امنیت و کنترل.

ا DPDK: برای دیتاپلین پرسرعت و پردازش سنگین بسته‌ها


#linux #kernel #devops #kubernetes #ebpf #dpdk


https://t.iss.one/unixmens
2
Academy and Foundation unixmens | Your skills, Your future
https://www.linkedin.com/posts/yashar-esmaildokht_google-borg-kubernetes-ugcPost-7238515381378666496-IuDf?utm_source=share&utm_medium=member_android
ابزار Kubernetes و چالش‌های آن: چرا ترکیب OpenShift/KubeSphere با KubeVirt بهترین گزینه برای سازمان‌هاست؟

مقدمه

بسیاری تصور می‌کنند گوگل از Kubernetes در زیرساخت داخلی خود استفاده می‌کند. در حالی که واقعیت این است که گوگل همچنان از سیستم‌های پیشرفته‌تر خود یعنی Borg و Omega بهره می‌برد؛ زیرا این سیستم‌ها برای مدیریت دیتاسنترهای عظیم گوگل طراحی شده‌اند و در مقیاس‌های فراتر از Kubernetes کارایی بالاتری دارند. Kubernetes در واقع بر اساس تجربیات همان پروژه‌ها ساخته شد و به صورت متن‌باز ارائه گردید تا جامعه جهانی از آن استفاده کند.

اما نکته مهم اینجاست: Kubernetes در دنیای سازمانی امروز، با وجود قدرت و انعطاف‌پذیری بالا، همچنان چالش‌برانگیز است.

چرا Kubernetes چالش‌برانگیز است؟

پیچیدگی عملیاتی: نصب، مدیریت و نگهداری Kubernetes حتی برای تیم‌های حرفه‌ای آسان نیست.

نیاز به مهارت بالا: تیم‌ها باید دانش عمیق در مفاهیم Networking، Storage، Security و CI/CD داشته باشند.

چالش‌های امنیتی: به‌صورت پیش‌فرض امنیت Kubernetes در سطح Enterprise کافی نیست.

مدیریت چندخوشه‌ای (Multi-Cluster): برای سازمان‌های بزرگ به یک کابوس مدیریتی تبدیل می‌شود.

هزینه آموزش و یادگیری: ورود تیم‌های جدید زمان‌بر و پرهزینه است

چرا گوگل هنوز Borg و Omega را ترجیح می‌دهد؟

مقیاس‌پذیری فراتر از Kubernetes: در دیتاسنترهای گوگل که میلیون‌ها کانتینر اجرا می‌شود، Borg و Omega بهینه‌تر هستند.

ثبات و تجربه عملیاتی: گوگل بیش از یک دهه این سیستم‌ها را بهبود داده و آن‌ها را در بالاترین سطح تولیدی استفاده می‌کند.

کاستومایز اختصاصی: Borg و Omega کاملاً بر اساس نیازهای خاص گوگل طراحی شده‌اند، در حالی که Kubernetes یک پلتفرم عمومی برای جامعه جهانی است.

راه‌حل سازمان‌ها: OpenShift و KubeSphere

برای بیشتر سازمان‌ها، استفاده مستقیم از Kubernetes بدون ابزارهای تکمیلی منجر به مشکلات جدی می‌شود. اینجا است که OpenShift و KubeSphere وارد میدان می‌شوند:

OpenShift (Red Hat):

امنیت سازمانی قوی (SELinux، RBAC پیشرفته).

تجربه توسعه‌دهنده کامل (داشبورد، CI/CD داخلی).

پشتیبانی رسمی و Enterprise از سوی Red Hat/IBM.


KubeSphere:

نصب ساده و رابط کاربری کاربرپسند.

مدیریت چند خوشه‌ای (Multi-Cluster) با قابلیت‌های گسترده.

ماژول‌های آماده برای DevOps، نظارت، و Service Mesh.

انتخاب مناسب برای سازمان‌هایی که به سادگی و انعطاف نیاز دارند.

نقش KubeVirt: اتصال VMها و Containerها

یکی از مشکلات رایج سازمان‌ها این است که هنوز بارهای کاری Legacy (روی VMها) دارند.
با KubeVirt:

می‌توان ماشین‌های مجازی و کانتینرها را در یک بستر مشترک مدیریت کرد.

مهاجرت تدریجی از VM به Container بدون نیاز به دو پلتفرم جداگانه امکان‌پذیر می‌شود.

هزینه زیرساخت کاهش پیدا می‌کند و تیم‌ها فقط یک ابزار مدیریت نیاز دارند.


در حالی که گوگل همچنان برای دیتاسنترهای داخلی خود از Borg و Omega استفاده می‌کند، Kubernetes به عنوان استاندارد جهانی معرفی شده است. با این وجود، Kubernetes به‌تنهایی برای سازمان‌ها بسیار چالش‌برانگیز است.

راه‌حل درست برای ورود به دنیای Cloud-Native در سطح سازمانی، استفاده از پلتفرم‌های تکمیلی مثل OpenShift یا KubeSphere و ترکیب آن‌ها با KubeVirt است. این ترکیب نه‌تنها مشکلات پیچیدگی و امنیت را کاهش می‌دهد، بلکه امکان همگرایی کامل میان بارهای کاری سنتی (VM) و مدرن (Container) را فراهم می‌کند.
#kubernetes #devops #clustering #k8s #linux #security #google #borg #omega
https://t.iss.one/unixmens
👍2
Academy and Foundation unixmens | Your skills, Your future
دواپس دیگر یک نقش صرفاً فنی نیست؛ بلکه ترکیبی از فرهنگ، ابزار و تجربه‌های عملی است که به سازمان‌ها کمک می‌کند سرعت، کیفیت و پایداری را همزمان بهبود دهند. اما اینکه یک فرد از چه مسیری وارد این حوزه شود، تأثیر زیادی بر عمق و گستره مهارت‌های او خواهد داشت. به‌طور…
به‌عبارت دیگر، متخصص زیرساخت کسی است که هم شبکه را می‌شناسد، هم کدنویسی بلد است، هم از سیستم‌ها شناخت عمیق دارد، و هم می‌تواند کل این پازل را در قالب یک معماری منسجم کنار هم بچیند.
در واقع زیرساختی‌ها تنها مجری نیستند. به دلیل درک جامع خود، می‌توانند نقش مشاور استراتژیک ایفا کنند و راهکارهایی ارائه دهند که از نظر اقتصادی، امنیتی و عملیاتی بهترین نتیجه را برای سازمان به همراه داشته باشد.

اما چرا ؟

🔹 دلیلش ساده است:
وقتی سال‌ها با سیستم‌عامل، استوریج، دیتابیس، شبکه لینوکسی، HA، replication و tuning کار کرده‌ای، به‌صورت تجربی یاد می‌گیری که:

چطور منابع محدود (CPU, RAM, Disk I/O, Network) را بین سرویس‌ها طراحی و بهینه کنی.

چطور برای scalability، سیستم را افقی (scale-out) یا عمودی (scale-up) توسعه دهی.

چه الگوهایی برای High Availability و Fault Tolerance وجود دارد.

چطور داده را در مقیاس بالا توزیع و ایمن نگه دارد

تفاوت با بقیه مسیرها

برنامه‌نویس‌ها بیشتر روی design در سطح کد (Design Patterns, Microservices Architecture) تمرکز دارند، اما وقتی صحبت از زیرساخت و ظرفیت سیستم می‌شود، عمق لازم را ندارند.

متخصصان شبکه هم system design را معمولاً فقط در لایه‌ی ارتباطات می‌شناسند (topology، routing، segmentation) نه در کل stack.


اما متخصص زیرساخت، وقتی از system design صحبت می‌کند، یعنی دید End-to-End دارد:
از block storage و replication گرفته تا شبکه، دیتابیس و اپلیکیشن.

چرا این در DevOps مهم است؟

چون DevOps فقط ابزار نیست؛ DevOps یعنی طراحی یک سیستم پایدار، مقیاس‌پذیر و قابل‌اعتماد.

اگر system design بلد نباشی، صرفاً ابزارها را به هم می‌دوزی.

ولی اگر system design را بفهمی، ابزارها را بر اساس نیاز واقعی سیستم انتخاب و ترکیب می‌کنی.


به همین خاطر کسی که از زیرساخت آمده، معمولاً در تیم DevOps نقش معمار (Architect) را هم می‌تواند بر عهده بگیرد، در حالی که بقیه مسیرها بیشتر در نقش مجری یا توسعه‌دهنده باقی می‌مانند.



#devops #linux #infra #infrastructure #system #design #network #programmer #developer




https://t.iss.one/unixmens
دوستان دواپسی نکته ای را از یاد نبریم

دواپس نصب سریع ابزار ها نیست .
دواپس سرعت بخشیدن به کارهای تکراری و toil work هست
دواپس یعنی داشتن درک system design .
از یاد نبریم وقتی شغل هایی که مفهوم engineer را یدک میکشن . به معنای ، implementation ، problem solving, optimisation, upgradation هست .

این یعنی دانستن معماری ، تحلیل ، و درک ماهیت اجزا و قابلیت حل مشکلات هست .

هدف نصب و استقرار به جای ۱ ساعت در ۱۰ دقیقه و ندانستن اجزا و رفع اون نیست .

اون مورد سرعت و اتومیشن هم برای bcp و drp هست ، در واقع شناخت اجزای سیستم و قابلیت حل مسائل در شرایط حساس مانند BCP/DRP.


مهندس DevOps بودن، یعنی درک این که ارزش ما فقط در سرعت نصب ابزار نیست، بلکه در توانایی طراحی، تحلیل و حل مسائل پیچیده زیرساختی و سازمانی است.

وهمچنین درک ساختار در موضوعات operation , prosessing , tecnical بخش جدانشدنی از این مسیر است.


#devops #linux #culture #team

https://t.iss.one/unixmens