|
| 1 | +--- |
| 2 | +title: Hello Minikube |
| 3 | +content_type: tutorial |
| 4 | +weight: 5 |
| 5 | +card: |
| 6 | + name: tutorials |
| 7 | + weight: 10 |
| 8 | +---a |
| 9 | + |
| 10 | +<!-- overview --> |
| 11 | + |
| 12 | +این آموزش به شما نشان میدهد که چگونه یک اپلیکیشن نمونه را با استفاده از Minikube روی Kubernetes اجرا کنید.در این آموزش، یک ایمیج Nginx استفاده شده است و برای بازگرداندن تمام درخواستها (Echo) استفاده میکند. |
| 13 | + |
| 14 | +## {{% heading "objectives" %}} |
| 15 | + |
| 16 | +* راه اندازی یک اپلیکیشن به صورت نمونه |
| 17 | +* اجرای برنامه |
| 18 | +* مشاهده خطا های ایجاد شده در برنامه |
| 19 | + |
| 20 | +## {{% heading "prerequisites" %}} |
| 21 | + |
| 22 | + |
| 23 | +این آموزش فرض میکند که شما قبلاً Minikube را راهاندازی کردهاید. |
| 24 | +.به مرحله مراجعه کنید برای دستورالعملهای نصب __Step 1__ in [minikube start](https://minikube.sigs.k8s.io/docs/start/) |
| 25 | +{{< note >}} |
| 26 | +فقط دستورالعملهای مربوط به مرحله ۱ (نصب) را انجام دهید __Step 1, Installation__.فقط دستورالعملهای مربوط به مرحله ۱ (نصب) را انجام دهید |
| 27 | +{{< /note >}} |
| 28 | + |
| 29 | +همچنین نیاز می باشد تا را نصب کنید `kubectl`. |
| 30 | + [Install tools](/docs/tasks/tools/#kubectl) لینک پیوست شده را برای نصب مشاهده کنید . |
| 31 | + |
| 32 | + |
| 33 | +<!-- lessoncontent --> |
| 34 | + |
| 35 | +## راه اندازی کلاستر minikube |
| 36 | + |
| 37 | +```shell |
| 38 | +minikube start |
| 39 | +``` |
| 40 | + |
| 41 | +## بازکردن داشبورد |
| 42 | + |
| 43 | +برای باز کردن داشبورد minikube می توانید از دو روش زیر استقاده نمایید : |
| 44 | + |
| 45 | +{{< tabs name="dashboard" >}} |
| 46 | +{{% tab name="Launch a browser" %}} |
| 47 | +ترمینال جدید باز کیند و دستور زیرا اجرا کنید: |
| 48 | +```shell |
| 49 | +# ترمینال جدید را باز کنید و دستور زیر را اجرا کنید . |
| 50 | +minikube dashboard |
| 51 | +``` |
| 52 | + |
| 53 | +حالا به ترمینال قبلی بروید که دستور minikube start را اجرا کرده بودید. `minikube start`. |
| 54 | + |
| 55 | +{{< note >}} |
| 56 | +دستور `dashboard` افزونهی داشبورد را فعال کرده و یک پراکسی (proxy) موقت را در مرورگر پیشفرض شما باز میکند. در این داشبورد میتوانید منابع Kubernetes مانند `Deployment` و `Service` ایجاد کنید. |
| 57 | + |
| 58 | +برای اینکه بدون باز شدن مستقیم مرورگر از طریق ترمینال، فقط آدرس URL داشبورد را دریافت کنید، به برگهی «URL copy and paste» مراجعه کنید. |
| 59 | + |
| 60 | +بهصورت پیشفرض، داشبورد تنها از طریق شبکه داخلی مجازی Kubernetes قابل دسترسی است. دستور `dashboard` یک پراکسی موقتی ایجاد میکند تا داشبورد را از بیرون شبکه Kubernetes نیز قابل دسترس کند. |
| 61 | + |
| 62 | +برای متوقف کردن پراکسی، کافیست کلیدهای `Ctrl+C` را بزنید تا از فرآیند خارج شوید. پس از خروج از دستور، داشبورد همچنان روی خوشهی Kubernetes اجرا میماند. شما میتوانید مجدداً دستور `dashboard` را اجرا کنید تا یک پراکسی جدید برای دسترسی به داشبورد بسازید. |
| 63 | +{{< /note >}} |
| 64 | + |
| 65 | +{{% /tab %}} |
| 66 | +{{% tab name="URL copy and paste" %}} |
| 67 | + |
| 68 | +اگر نمیخواهید Minikube بهطور خودکار مرورگر را باز کند، دستور `dashboard` را با فلگ `--url` اجرا کنید |
| 69 | + |
| 70 | +یک ترمینال **جدید** باز کنید و دستور زیر را اجرا کیند : |
| 71 | +```shell |
| 72 | +# ترمینال جدید بسازید و دستور زیرا اجرا نمایید |
| 73 | +minikube dashboard --url |
| 74 | +``` |
| 75 | + |
| 76 | +حالا میتوانید به ترمینالی که دستور `minikube start` را زدید برگردید |
| 77 | +{{% /tab %}} |
| 78 | +{{< /tabs >}} |
| 79 | + |
| 80 | +## ساخت Deployment |
| 81 | + |
| 82 | +[*Pod*](/docs/concepts/workloads/pods/) در داخل کوبرنتیز ، به مجموعه ای از یک یا چند container گویند ، یک پارچه شده اند برای اجرای دستوراتی از ادمین ها و نتورک به انها میرسد. POD در این سناریو فقط یک عدد می باشد . deployment های کوبرنتیز بررسی میکنند تا سلامت POD برقرار است یا نه ، اگر نبود به صورت خودکار راه اندازی مجدد میکنند . |
| 83 | +[*Deployment*](/docs/concepts/workloads/controllers/deployment/) ها راه پیشنهادی کوبرنتیز می باشند برای مدیریت POD ها. |
| 84 | + |
| 85 | + |
| 86 | +1. از دستور `kubectl create` استفاده کنید تا یک Deployment ایجاد کنید که مدیریت یک Pod را بر عهده دارد. |
| 87 | + |
| 88 | + ```shell |
| 89 | + # کانتینر webmaster را جهت تست اجرا نمایید: |
| 90 | + kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080 |
| 91 | + ``` |
| 92 | + |
| 93 | +1. مشاهده deployment ها: |
| 94 | + |
| 95 | + ```shell |
| 96 | + kubectl get deployments |
| 97 | + ``` |
| 98 | + |
| 99 | + نتیجه می بایست به شکل زیر باشد |
| 100 | + |
| 101 | + ``` |
| 102 | + NAME READY UP-TO-DATE AVAILABLE AGE |
| 103 | + hello-node 1/1 1 1 1m |
| 104 | + ``` |
| 105 | + |
| 106 | + (ممکن است مدتی طول بکشد تا Pod در دسترس قرار گیرد. اگر پیام "0/1" را مشاهده کردید، چند ثانیه بعد دوباره امتحان کنید.) |
| 107 | + |
| 108 | +1. مشاهده پاد ها: |
| 109 | + |
| 110 | + ```shell |
| 111 | + kubectl get pods |
| 112 | + ``` |
| 113 | + |
| 114 | + :نتیجه می بایست به شکل زیر باشد |
| 115 | + |
| 116 | + ``` |
| 117 | + NAME READY STATUS RESTARTS AGE |
| 118 | + hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m |
| 119 | + ``` |
| 120 | + |
| 121 | +1. :مشاهده رخداد ها |
| 122 | + |
| 123 | + ```shell |
| 124 | + kubectl get events |
| 125 | + ``` |
| 126 | + |
| 127 | +1. مشاهده تنظیمات `kubectl` : |
| 128 | + |
| 129 | + ```shell |
| 130 | + kubectl config view |
| 131 | + ``` |
| 132 | + |
| 133 | +1. برای مشاهدهی لاگهای اپلیکیشن در یک کانتینر داخل یک Pod، از دستور زیر استفاده کنید (نام Pod را با نامی که از دستور `kubectl get pods` به دست آوردهاید جایگزین کنید). |
| 134 | + |
| 135 | + {{< note >}} |
| 136 | + Replace `hello-node-5f76cf6ccf-br9b5` in the `kubectl logs` command with the name of the pod from the `kubectl get pods` command output. |
| 137 | + ارگومان `hello-node-5f76cf6ccf-br9b5` در مقابل دستور `kubectl logs` قرار دهید اسم POD `kubectl get pods` برداشته شده است. قبلا از طریق دستور |
| 138 | + {{< /note >}} |
| 139 | + |
| 140 | + ```shell |
| 141 | + kubectl logs hello-node-5f76cf6ccf-br9b5 |
| 142 | + ``` |
| 143 | + |
| 144 | + :نتیجه می بایست به شکل زیر باشد |
| 145 | + |
| 146 | + ``` |
| 147 | + I0911 09:19:26.677397 1 log.go:195] Started HTTP server on port 8080 |
| 148 | + I0911 09:19:26.677586 1 log.go:195] Started UDP server on port 8081 |
| 149 | + ``` |
| 150 | + |
| 151 | + |
| 152 | +{{< note >}} |
| 153 | +برای اطلاعات بیشتر از دستور `kubectl `لینک پیوست شده را مشاهده کنید [kubectl overview](/docs/reference/kubectl/). |
| 154 | +{{< /note >}} |
| 155 | + |
| 156 | +## ساخت سرویس |
| 157 | + |
| 158 | +بهصورت پیشفرض، Pod فقط از طریق آدرس IP داخلی خود درون کلاستر Kubernetes قابل دسترسی است. |
| 159 | +برای اینکه کانتینر `hello-node` از بیرون شبکهی مجازی Kubernetes قابل دسترسی باشد، باید Pod را بهعنوان یک سرویس Kubernetes [*Service*](/docs/concepts/services-networking/service/).منتشر (Expose) کنید. |
| 160 | + |
| 161 | +{{< warning >}} |
| 162 | +کانتینر agnhost دارای یک مسیر (endpoint) به نام `/shell` است که برای عیبیابی (debug) مفید است، اما در معرض خطر در صورت اتصال به اینترنت عمومی قرار دارد. |
| 163 | +این کانتینر را روی کلاستر هایی که به اینترنت متصل هستند یا کلاستر های تولیدی (production) اجرا نکنید. |
| 164 | + |
| 165 | +{{< /warning >}} |
| 166 | + |
| 167 | +1. 1. برای در دسترس قرار دادن Pod از طریق اینترنت عمومی، از دستور `kubectl expose` استفاده کنید: |
| 168 | + |
| 169 | + ```shell |
| 170 | + kubectl expose deployment hello-node --type=LoadBalancer --port=8080 |
| 171 | + ``` |
| 172 | + |
| 173 | + دستور `-type=LoadBalancer` به این معنی می باشد که میخواهید سرویس را به بیرون کلاستر دسترسی بدید |
| 174 | + |
| 175 | + کد اپلیکیشن داخل تصویر تست (test image) فقط روی پورت TCP شماره 8080 باز میشود. |
| 176 | +اگر با استفاده از دستور `kubectl expose` پورتی متفاوت را منتشر کرده باشید، کلاینتها نمیتوانند به آن پورت متصل شوند. |
| 177 | + |
| 178 | + |
| 179 | +2. مشاهده service ساخته شده: |
| 180 | + |
| 181 | + ```shell |
| 182 | + kubectl get services |
| 183 | + ``` |
| 184 | + |
| 185 | + نتیجه می بایست به شکل زیر باشد: |
| 186 | + |
| 187 | + ``` |
| 188 | + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
| 189 | + hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s |
| 190 | + kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m |
| 191 | + ``` |
| 192 | + |
| 193 | + در ارائهدهندگان خدمات ابری (Cloud Providers) که از Load Balancer پشتیبانی میکنند, |
| 194 | + آدرس IP خارجی برای دسترسی به Service اختصاص داده میشود. |
| 195 | + اما در Minikube، نوع سرویس `LoadBalancer` باعث میشود سرویس از طریق دستور زیر در دسترس باشد: `minikube service` |
| 196 | + |
| 197 | +3. دستور زیر را اجرا کنید: |
| 198 | + |
| 199 | + ```shell |
| 200 | + minikube service hello-node |
| 201 | + ``` |
| 202 | + |
| 203 | + با اجرای این دستور صفحه مرورگر باز میشود و جواب اپلیکشن را به شما نشان میدهد |
| 204 | + |
| 205 | +## فعال سازی اضافه ها(addons) |
| 206 | + |
| 207 | +The minikube tool includes a set of built-in {{< glossary_tooltip text="addons" term_id="addons" >}} that can be enabled, disabled and opened in the local Kubernetes environment. |
| 208 | +ابزار{{< glossary_tooltip text="addons" term_id="addons" >}} که میتواند در محییط کوبرنتیز فعالیا غیر فعال شود minikube شامل تعدادی ابزار داخلی می باشد که امکان |
| 209 | +1. لیست (addons) های در حال خاضر minikube پشتیبانی میکند: |
| 210 | + |
| 211 | + ```shell |
| 212 | + minikube addons list |
| 213 | + ``` |
| 214 | + |
| 215 | + نتیجه دستور به این شکل می باشد : |
| 216 | + |
| 217 | + ``` |
| 218 | + addon-manager: enabled |
| 219 | + dashboard: enabled |
| 220 | + default-storageclass: enabled |
| 221 | + efk: disabled |
| 222 | + freshpod: disabled |
| 223 | + gvisor: disabled |
| 224 | + helm-tiller: disabled |
| 225 | + ingress: disabled |
| 226 | + ingress-dns: disabled |
| 227 | + logviewer: disabled |
| 228 | + metrics-server: disabled |
| 229 | + nvidia-driver-installer: disabled |
| 230 | + nvidia-gpu-device-plugin: disabled |
| 231 | + registry: disabled |
| 232 | + registry-creds: disabled |
| 233 | + storage-provisioner: enabled |
| 234 | + storage-provisioner-gluster: disabled |
| 235 | + ``` |
| 236 | + |
| 237 | +1. برای مثال فعال سازی addon بر روی , `metrics-server`: |
| 238 | + |
| 239 | + ```shell |
| 240 | + minikube addons enable metrics-server |
| 241 | + ``` |
| 242 | + |
| 243 | + نتیجه دستور به این شکل می باشد : |
| 244 | + |
| 245 | + ``` |
| 246 | + The 'metrics-server' addon is enabled |
| 247 | + ``` |
| 248 | + |
| 249 | +1. مشاهده pod,services که از طریق addons نصب شده است: |
| 250 | + |
| 251 | + ```shell |
| 252 | + kubectl get pod,svc -n kube-system |
| 253 | + ``` |
| 254 | + |
| 255 | + نتیجه دستور به این شکل می باشد : |
| 256 | + |
| 257 | + ``` |
| 258 | + NAME READY STATUS RESTARTS AGE |
| 259 | + pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m |
| 260 | + pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m |
| 261 | + pod/metrics-server-67fb648c5 1/1 Running 0 26s |
| 262 | + pod/etcd-minikube 1/1 Running 0 34m |
| 263 | + pod/influxdb-grafana-b29w8 2/2 Running 0 26s |
| 264 | + pod/kube-addon-manager-minikube 1/1 Running 0 34m |
| 265 | + pod/kube-apiserver-minikube 1/1 Running 0 34m |
| 266 | + pod/kube-controller-manager-minikube 1/1 Running 0 34m |
| 267 | + pod/kube-proxy-rnlps 1/1 Running 0 34m |
| 268 | + pod/kube-scheduler-minikube 1/1 Running 0 34m |
| 269 | + pod/storage-provisioner 1/1 Running 0 34m |
| 270 | +
|
| 271 | + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
| 272 | + service/metrics-server ClusterIP 10.96.241.45 <none> 80/TCP 26s |
| 273 | + service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m |
| 274 | + service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s |
| 275 | + service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s |
| 276 | + ``` |
| 277 | + |
| 278 | +1. نیجه سرویس بررسی میکینیم `metrics-server`: |
| 279 | + |
| 280 | + ```shell |
| 281 | + kubectl top pods |
| 282 | + ``` |
| 283 | + |
| 284 | + نتیجه دستور به این شکل می باشد : |
| 285 | + |
| 286 | + ``` |
| 287 | + NAME CPU(cores) MEMORY(bytes) |
| 288 | + hello-node-ccf4b9788-4jn97 1m 6Mi |
| 289 | + ``` |
| 290 | + |
| 291 | + اگر پیام زیر را مشاهده کردید ، بعد از چند دقیقه مجدد بررسی کنید: |
| 292 | + |
| 293 | + ``` |
| 294 | + error: Metrics API not available |
| 295 | + ``` |
| 296 | + |
| 297 | +1. غیرفال کردن `metrics-server`: |
| 298 | + |
| 299 | + ```shell |
| 300 | + minikube addons disable metrics-server |
| 301 | + ``` |
| 302 | + |
| 303 | + نتیجه به این شکل می باشد : |
| 304 | + |
| 305 | + ``` |
| 306 | + metrics-server was successfully disabled |
| 307 | + ``` |
| 308 | + |
| 309 | +## پاک کردن پروژه |
| 310 | + |
| 311 | +بعد از مشاهده نتیاج ، میتونید از با دستورات زیر منبعی که داخل کلاستر ساختید را پاک کنید: |
| 312 | + |
| 313 | +```shell |
| 314 | +kubectl delete service hello-node |
| 315 | +kubectl delete deployment hello-node |
| 316 | +``` |
| 317 | + |
| 318 | +Stop the Minikube cluster |
| 319 | + |
| 320 | +```shell |
| 321 | +minikube stop |
| 322 | +``` |
| 323 | + |
| 324 | +درصوت تمایل میتوانید کلاستر minikube را غیر فعال نمایید : |
| 325 | + |
| 326 | +```shell |
| 327 | +# Optional |
| 328 | +minikube delete |
| 329 | +``` |
| 330 | + |
| 331 | +اکر میخواهید بیشتر با minikube کار کنید ، نیازی به پاک کردن کلاستر نمی باشد . |
| 332 | + |
| 333 | +## نتیجه گیری: |
| 334 | + |
| 335 | +این صفحه جنبههای اولیه برای راهاندازی یک کلاستر Minikube را پوشش داد.اکنون آمادهاید تا اپلیکیشنهای خود را مستقر (Deploy) کنید |
| 336 | + |
| 337 | +## {{% heading "whatsnext" %}} |
| 338 | + |
| 339 | + |
| 340 | +* منابع _[deploy your first app on Kubernetes with kubectl](/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/)_. |
| 341 | +* بیشتر راجبش یادبگیرید [Deployment objects](/docs/concepts/workloads/controllers/deployment/). |
| 342 | +* بیشتر راجبش یادبگیرید [Deploying applications](/docs/tasks/run-application/run-stateless-application-deployment/). |
| 343 | +* بیشتر راجبش یادبگیرید [Service objects](/docs/concepts/services-networking/service/). |
| 344 | + |
| 345 | + |
0 commit comments