In the last few posts I’ve been doing a lot of stuff with ASP.NET core services and clients within Kubernetes and whilst you’ve seen it’s not too hard to create a docker container/image out of services and clients, deploy to the local registry and then deploy using Kubernetes scripts, after a while you’re likely to find this tedious and want to wrap everything into a shell/batch script – an alternative is to use Project Tye.
What is Project Tye?
I recommend checking out
The basics are Project Tye can be used to take .NET projects, turn them into docker images and generate the deployments to k8s with a single command. Also Project Tye allows us to undeploy with a single command also .
Installing Project Tye
I’m using a remote Ubuntu server to run my Kubernetes cluster, so we’ll need to ensure that .NET 3.1 SDK is installed (hopefully Tye will work with 5.0 in the near future but for the current release I needed .NET 3.1.x installed.
To check your current list of SDK’s run
dotnet --list-sdks
Next up you need to run the dotnet tool to install Tye, using
dotnet tool install -g Microsoft.Tye --version "0.7.0-alpha.21279.2"
Obviously change the version to whatever the latest build is – that was the latest available as of 6th June 2021.
The tool will be deployed to
- Linux – $HOME/.dotnet/tools
- Windows – %USERPROFILE%\.dotnet\tools
Running Project Tye
It’s as simple as running the following command in your solution folder
tye deploy --interactive
This is the interactive version and you’ll be prompted to supply the registry you wish to push your docker images to, as we’re using localhost:32000, remember to set that as your registry, or better still we can create a tye.yaml file with configuration for Project Tye within the solution folder, here’s an example
name: myapp registry: localhost:32000 services: - name: frontend project: frontend/razordemo.csproj - name: backend project: backend/weatherservice.csproj
Now with this in place we can just run
tye deploy
If you want to create a default tye.yaml file then run
tye init
Project Tye will now build our docker images, push to localhost:3200 and then generate deployments, services etc. within Kubernetes based upon the configuration. Check out the JSON schema for the Tye configuration file tye-schema.json for all the current options.
Now you’ve deployed everything and it’s up and running, but Tye also includes environment configurations, for example
env: - name: DOTNET_LOGGING__CONSOLE__DISABLECOLORS value: 'true' - name: ASPNETCORE_URLS value: 'http://*' - name: PORT value: '80' - name: SERVICE__RAZORDEMO__PROTOCOL value: http - name: SERVICE__RAZORDEMO__PORT value: '80' - name: SERVICE__RAZORDEMO__HOST value: razordemo - name: SERVICE__WEATHERSERVICE__PROTOCOL value: http - name: SERVICE__WEATHERSERVICE__PORT value: '80' - name: SERVICE__WEATHERSERVICE__HOST value: weatherservice
Just add the following NuGet package to your project(s)
<PackageReference Include="Microsoft.Tye.Extensions.Configuration" Version="0.2.0-*" />
and then you can interact with the configuration using the TyeConfigurationExtensions classes from that package. For example using the following
client.BaseAddress = Configuration.GetServiceUri("weatherservice");
Ingress
You can also include ingress configuration within your tye.yaml, for example
ingress: - name: ingress # bindings: # - port: 8080 rules: - path: / service: razordemo
however, as an Ingress might be shared across services/applications this will not be undeployed using the undeploy command, so not to affect potentially other applications, you can force it to be undeployed using
kubectl delete -f https://aka.ms/tye/ingress/deploy
See Ingress for more information on Tye and Ingress.
Dependencies
Along with our solution/projects we can also deploy dependencies as part of the deployment, for example if we need to also deploy a redis cache, dapr or other images. Just add the dependency to the tye.yaml like this
- name: redis image: redis bindings: - port: 6379