# Tanzu - TAP at first glance 時間:2023/04/11 10:00~12:00 講師:VMware Tim/Timmy 目標:執行TAP InnerLoop,並在本機電腦安裝相依套件 ## 安裝 k8s 相關環境套件 相關軟體放在 V:\科室資料夾\資訊室\不分組\52_TANZU\ ### 安裝 Docker Desktop BIOS 的 hypervisor 要啟用 1. With WSL(如要安裝WSL2則WIN10的組建要19041和更新版本) https://learn.microsoft.com/zh-tw/windows/wsl/install 2. With HyperV ### 安裝 Tilt 1. 解壓縮 tilt.0.32.0.windows.x86_64.zip 2. 目錄加到 search path ![](https://i.imgur.com/nbbcCgj.png) ### 安裝 Kubectl 將 kubectl-windows-v1.24.9+vmware.exe\kubectl.exe 加到 search path ![](https://i.imgur.com/vuvkRYA.png) ### 測試是否可以連到 K8s 環境 1. 在自已的家目錄(如:C:\Users\13766\)下新增一個資料夾 ```cmd > md .kube ``` ![](https://i.imgur.com/KgbFAq1.png) 2. 將一份 k8s 環境的設定檔複制到 .kube 資料夾 複製 config 到 .kube 目錄下 ![](https://i.imgur.com/gftV9TK.png) 3. 測試一下是否可以看的到 pod ```cmd > kubectl get po -A ``` ![](https://i.imgur.com/j5ykBZ4.png) 4. tap-dev 是開發用的 namespace ```cmd > kubectl get po -n tap-dev ``` ![](https://i.imgur.com/SMYpIdo.png) ## 安裝開發相關環境套件 ### 安裝 tanzu cli 解壓縮 tanzu-framework-windows-amd64-v0.25.4.1.zip ![](https://i.imgur.com/tQRABKZ.png) ![](https://i.imgur.com/oelOMb5.png) 將 cli\core\v0.25.4\tanzu-core-windows_amd64.exe 重新命名為 tanzu.exe,並加到 search path ![](https://i.imgur.com/syTgPqA.png) 新增環境變數 TANZU_CLI_NO_INIT = True ![](https://i.imgur.com/eKvSqIG.png) ![](https://i.imgur.com/SLIlAWe.png) tanzu plugin list ```text NAME DESCRIPTION SCOPE DISCOVERY VERSION STATUS login Login to the platform Standalone default v0.25.4 not installed management-cluster Kubernetes management-cluster operations Standalone default v0.25.4 not installed package Tanzu package management Standalone default v0.25.4 not installed pinniped-auth Pinniped authentication operations (usually not directly invoked) Standalone default v0.25.4 not installed secret Tanzu secret management Standalone default v0.25.4 not installed telemetry Configure cluster-wide telemetry settings Standalone default v0.25.4 not installed ``` 使用 tanzu cli 安裝 plugin ```cmd > tanzu plugin install --local cli all # tanzu plugin install --local C:\tools\cli all ``` ```text PS C:\Users\13766> tanzu plugin install --local C:\tools\cli all Installing plugin 'accelerator:v1.4.0' Installing plugin 'apps:v0.10.0' Installing plugin 'insight:v1.4.2' Installing plugin 'package:v0.25.4' Installing plugin 'secret:v0.25.4' Installing plugin 'services:v0.5.0' ✔ successfully installed 'all' plugin ``` 安裝後多了一些 plugin ```text PS C:\Users\13766> tanzu plugin list NAME DESCRIPTION SCOPE DISCOVERY VERSION STATUS login Login to the platform Standalone default v0.25.4 not installed management-cluster Kubernetes management-cluster operations Standalone default v0.25.4 not installed package Tanzu package management Standalone default v0.25.4 installed pinniped-auth Pinniped authentication operations (usually not directly invoked) Standalone default v0.25.4 not installed secret Tanzu secret management Standalone default v0.25.4 installed telemetry Configure cluster-wide telemetry settings Standalone default v0.25.4 not installed apps Applications on Kubernetes Standalone v0.10.0 installed insight post & query image, package, source, and vulnerability data Standalone v1.4.2 installed services Commands for working with service instances, classes and claims Standalone v0.5.0 installed accelerator Manage accelerators in a Kubernetes cluster Standalone v1.4.0 installed ``` ![](https://i.imgur.com/TVwyR7f.png) ### 安裝 vscode plugin,共 4 個套件 1. redhat.java-1.17.2023040704@win32-x64.vsix 2. redhat.vscode-yaml-1.12.2.vsix 3. vscjava.vscode-java-debug-0.49.2023032407.vsix 4. tanzu-vscode-extension-0.13.0.vsix (offline install) 名稱: Debugger for Java 識別碼: vscjava.vscode-java-debug 描述: A lightweight Java debugger for Visual Studio Code 版本: 0.49.1 發行者: Microsoft VS Marketplace 連結: https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug 名稱: Language Support for Java(TM) by Red Hat 識別碼: redhat.java 描述: Java Linting, Intellisense, formatting, refactoring, Maven/Gradle support and more... 版本: 1.17.2023040704 發行者: Red Hat VS Marketplace 連結: https://marketplace.visualstudio.com/items?itemName=redhat.java 名稱: YAML 識別碼: redhat.vscode-yaml 描述: YAML Language Support by Red Hat, with built-in Kubernetes syntax support 版本: 1.12.2 發行者: Red Hat VS Marketplace 連結: https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml 名稱: Tanzu Developer Tools 識別碼: VMware.tanzu 描述: Rapid app development on Kubernetes using the Tanzu Application Platform 版本: 0.13.0 發行者: VMware ![](https://i.imgur.com/75sQIwu.png) ![](https://i.imgur.com/I4PSMGO.png) ### 調整 plugin 設定 + tanzu plugin ![](https://i.imgur.com/Rf74Nri.png) "tanzu.enableLiveHover": true "tanzu.namespace": "tap-dev" "tanzu.sourceImage": "harbordev.cych.org.tw/liveupdate/12477" + extension: java ![](https://i.imgur.com/lPjQg7N.png) 關鍵字:server "java.server.launchMode": "Standard" https://learn.microsoft.com/zh-tw/java/openjdk/download ### 安裝 Java + #Install OpenJDK https://learn.microsoft.com/en-us/java/openjdk/download or + winget install Microsoft.OpenJDK.17 https://learn.microsoft.com/zh-tw/windows/package-manager/winget/ ![](https://i.imgur.com/9Wx12hw.png) ![](https://i.imgur.com/J96caei.png) ![](https://i.imgur.com/zUVAzmX.png) ![](https://i.imgur.com/mdeMLTN.png) ## 用個測試程式來驗證一下 程式放在 weatherforecast-steeltoe\,複製回來用 VSCode 開啟專案 ### 修改部署設定檔 將所有 `weatherforecast-steeltoe` 的名字改成自己的專案名字 `weatherforecast-steeltoe-13766` 修改 **config\workload.yaml** ```yaml=workload.yaml apiVersion: carto.run/v1alpha1 kind: Workload metadata: name: weatherforecast-steeltoe-13766 labels: apps.tanzu.vmware.com/workload-type: web app.kubernetes.io/part-of: weatherforecast-steeltoe-13766 tanzu.app.live.view: "true" tanzu.app.live.view.application.flavours: steeltoe tanzu.app.live.view.application.name: weatherforecast-steeltoe-13766 spec: params: - name: buildServiceBindings value: - kind: Secret name: nuget-config - name: annotations value: autoscaling.knative.dev/minScale: "1" source: git: url: https://github.com/timwangvmw/dotnet ref: branch: main ``` ![](https://i.imgur.com/dv0xc1n.png) 修改 **Tiltfile** ```python SOURCE_IMAGE = os.getenv("SOURCE_IMAGE", default='your-registry.io/project/steeltoe-weatherforecast-source') # update registry LOCAL_PATH = os.getenv("LOCAL_PATH", default='.') NAMESPACE = os.getenv("NAMESPACE", default='default') OUTPUT_TO_NULL_COMMAND = os.getenv("OUTPUT_TO_NULL_COMMAND", default=' > /dev/null ') NAME = "weatherforecast-steeltoe-13766" local_resource( 'build --no-restore', 'dotnet publish -c Debug -o ./bin/out', deps=['.'], ignore=['./obj', './bin', './.vscode', './out'], ) k8s_custom_deploy( NAME, apply_cmd="tanzu apps workload apply -f config/workload.yaml --update-strategy replace --debug --live-update" + " --local-path " + LOCAL_PATH + " --source-image " + SOURCE_IMAGE + " --build-env BP_DEBUG_ENABLED=true" + " --namespace " + NAMESPACE + " --yes --registry-ca-cert ca-harbor.crt" + OUTPUT_TO_NULL_COMMAND + " && kubectl get workload " + NAME + " --namespace " + NAMESPACE + " -o yaml", delete_cmd="tanzu apps workload delete " + NAME + " --namespace " + NAMESPACE + " --yes", deps=['./bin'], container_selector='workload', live_update=[ sync('./bin', '/workspace') ] ) k8s_resource(NAME, port_forwards=["8080:8080"], extra_pod_selectors=[{'carto.run/workload-name': 'weatherforecast-steeltoe-13766', 'app.kubernetes.io/component': 'run'}]) allow_k8s_contexts('wld01-dev-admin@wld01-dev') # update the context ``` ![](https://i.imgur.com/ZXai6uc.png) ### 試 Run 在 Tiltfile 按右鍵 -> **Live Update start** 因為沒有 docker login 所以會失敗 ![](https://i.imgur.com/dwZ8HDD.png) 失敗了 ![](https://i.imgur.com/BNiLb5P.png) ### 安裝憑證 ca-harbor.crt 安裝完憑證需要重啟 docker desktop 每次重啟 docker desktop 都要做一次 docker login 直接點2下 ca-harbor.crt 就可以安裝憑證,一直按下一步到完成安裝 ![](https://i.imgur.com/6xmTbEf.png) 完成 ![](https://i.imgur.com/aKiyPRg.png) ### 執行 docker login ```cmd D:\proj\weatherforecast-steeltoe>docker login harbordev.cych.org.tw Username: admin Password: Login Succeeded ``` 帳號/密碼之後會在給 ![](https://i.imgur.com/Xzkbwce.png) 只要 docker desktop 重啟,就要做一次 docker login 的動件 ![](https://i.imgur.com/HkDPKqG.png) ### 看一下開發環境中有那些 workload ```cmd C:\Users\13766>tanzu app workload list -n tap-dev NAME TYPE APP READY AGE weatherforecast-steeltoe-06481 web weatherforecast-steeltoe-06481 HealthyConditionRule 6m53s weatherforecast-steeltoe-12382 web weatherforecast-steeltoe-12382 Ready 7m1s weatherforecast-steeltoe-12477 web weatherforecast-steeltoe-12477 Ready 118s weatherforecast-steeltoe-13766 web weatherforecast-steeltoe-13766 HealthyConditionRule 7m23s weatherforecast-steeltoe-admin13752 web weatherforecast-steeltoe-admin13752 Ready 6m22s ``` ### 再執行一次 Live Update start 可以用瀏覽器去看,從網址看起來是 localhost,其實底層有做 port forward 所以實際是是連到 tanzudev.cych.org.tw Tilt started on http://localhost:10350/ v0.32.0, built 2023-03-13 Initial Build Loading Tiltfile at: D:\proj\weatherforecast-steeltoe\Tiltfile Successfully loaded Tiltfile (2.2132ms) ### 停止 workload ![](https://i.imgur.com/cGfOhe1.png) ## 後記 ### InnerLoop 的階段 1. 在本機,打包 source code 成 OCI 格式,藉由 docker push 到 harbor 2. 在遠端,抓取 source code 給 TBS 建置成映像檔,最後 deploy 到 tanzudev.cych.org.tw 環境 ### 認證資訊 1. k8s context 要換成非 admin 2. docker login 要換成 robot account 3. 要安裝 tanzudev 的 ca ### 工程師隨手 ![](https://i.imgur.com/ugpw8Ji.png)