Posts

Resin Dice, Chapter One: The Masters Arrive

Image
I've decided to start logging my resin dice casting journey here, mostly so future-me has something to look back on when I inevitably mess something up and need to figure out what went wrong. Consider this the "before I knew better" baseline post. Why dice casting I've been wanting to get into resin dice for a while now. Part of it is just the maker itch, I like having my hands on a physical project when so much of my day is spent in front of a screen. But there's a practical reason too: I'm getting older, and reading dice across the table is getting harder than it used to be. I wanted a set big enough that I'm not squinting to tell if that's an 8 or a 0 from across the table. The idea really clicked at GenCon this year. The Limithron folks had a set they'd made for Pirate Borg with some larger dice, and I really liked how they felt in hand. That planted the seed, but a class I took later that same con is what actually got the project moving. T...

Stationeers 10 Day Challenge Run 1

Image
It's been a while since I blogged, so I'm trying to get started small to see if I want to continue doing it.  And since I'm on Christmas vacation, I figured I'd try something different.   I've really enjoyed playing the game Stationeers, but I've noticed that there is a certain point in the game that I start losing interest.  I love the early game parts where I'm really focused on stabilizing things and not dying, so I'm trying out some simple, time limited runs in Stationeers of 10 sols in length.  I want to see how far I get and if I'm able to increase how much I'm able to get accomplished. So, I was able to build up a small base with the basics.  I built up all the basic Printers. And a basic furnace and all the tier 1 alloys. I was alao able to build a small station battery, heavy cable between the solar panels (with solar tracking), and an upright wind turbine.  I was able to get upgraded tool and mining belts, and mining backpack and upgrad...

Removing Phantom Container Volume in vSphere 6.7u3

Image
I've been playing around with Tanzu Kubernetes Grid on my vSphere 6.7u3 home lab setup, and so I've been creating and deleting clusters a lot lately. In browsing around vCenter, I noticed a new section in the Cluster and Datastore "Monitor" section called "Cloud Native Storage -> Container Volumes" that shows me all the persistent volumes that have been created with the more recent vSphere CSI Driver. Since I had been setting up my clusters with a default storage class like the following, I was now also able to visualize those volumes in the vCenter UI which is pretty neat: kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: vsphere-sc annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: csi.vsphere.vmware.com parameters: storagepolicyname: "k8s Storage Policy" fstype: ext3 The new CSI based plugin (https://github.com/kubernetes-sigs/vsphere-csi-driver/issues/251 ) allows you to sim...

Public IPs and PKS with NSX-T

PKS with NSX-T requires a number of "public" facing IPs for deployed Kubernetes clusters. "Public" in this case just means IPs that would be route-able on the network NSX-T is uplinked to. These IPs are pulled from the IP Pool defined as the "Floating IP Pool" in the PKS tile configuration in Pivotal Operations Manager. 1 IP to use for an SNAT rule for all the VMs for the k8s Cluster if those VMs are deployed in NAT mode 1 IP to use with a Virtual Server to front end the k8s Master Nodes 1 IP to use for an HTTP/S Ingress Virtual Server 1 IP to use for an SNAT rule for each namespace 1 IP to use with a Virtual Server for each LoadBalancer service provisioned So for each cluster PKS deploys you will consume at least the following (if in NAT mode): Type IP Addresses Cluster VMs SNAT 1 Master Node(s) Virtual Server 1 Ingress Virtual Server 1 SNAT for default, kube-public, kube-system, and pks-system namespaces 4 Total 7 On ...

Cleaning Up Stale PKS Kubernetes LoadBalancer IP allocations in NSX-T

I was working in a proof of concept environment using NSX-T where we didn't have a lot of IPs in the Floating IP pool for k8s clusters provisioned by PKS. We had two clusters deployed and we were trying to start up a few pods with a LoadBalancer service. The problem we hit was that the pods wouldn't startup, and were failing in the "Init" status. We weren't seeing enough details via kubectl , so we found the node that was trying to start the Pod's containers, and checked the kubelet.log for more details. Interestingly, we noticed some messages about NSX-T right before the pods failed. This got us thinking that although these particular pods didn't have any special initialization, NSX-T was doing some work to try and allocate resources for the Pod to expose it via a LoadBalancer service. On a hunch, I checked the NSX-T Manager, and went to Inventory -> Groups -> IP Pools section, and noticed that the Floating IP Pool had all the IPs allocated...

Strategies for Parsing Service Information In Cloud Foundry

Cloud Foundry’s service marketplace provides self-service access to a curated set of services that have their lifecycle automatically managed by the platform.  Part of the lifecycle of any service instance involved connecting that service to an application through a process called “binding”.  There are a variety of mechanisms that an application can use to lookup the information that a binding represents, and I’ll try to write up some of the best practices. When a service instance is bound to an application in Cloud Foundry, the connection information and credentials for that service instance get exposed to the application as a block of JSON in an environment variable called VCAP_SERVICES. The format of that JSON is similar to the following: { "service-short-name": [ { "binding_name": null, "credentials": { "service-specific-key1": "service-specific-value1", "service-specific-key2": ...

Local Troubleshooting Technique for CloudFoundry HWC Apps Running in Windows 2012R2

Cloud Foundry gives us a simple way to get Windows applications normally hosted in IIS to production quickly with the HWC Buildpack .  However, when the application fails to stage or run, it can be difficult to figure out what is going on.  You can actually run your application locally in a similar way to the way the HWC Buildpack would cause your application to run in Cloud Foundry by running the HWC executable locally against your app. The HWC Buildpack relies on the HWC project  to actually run your application in Cloud Foundry.  The HWC process uses Microsoft's Hostable Web Core to run a mini version of IIS in a process that your application is hosted in.  The HWC project creates releases of the executable  that you can download an run locally on your workstation. Before running HWC, you'll need to make sure your workstation has some pre-requisites installed.  If you go to the Running the Tests (Windows Only) section of the README.md in the HWC...

PowerCLI Script to Recover Pivotal Operations Manager VApp Settings

If you've read my previous blog post s, you know that I'm running a home vSphere lab on a shoestring budget with hardware that is "mostly" working "most" of the time. One of my NUC hosts locked up recently and I was noticing that my Pivotal Operations Manager VM for Cloud Foundry just wouldn't use the static IP address I had assigned to it at install. The networking settings are stored as VApp Options that you can set when you deploy the Operations Manager OVA. I figured that maybe the failure caused those settings to get out of sync, so I tried to update them again and save the updates, but I kept getting an error from vCenter Web Client say that it "Cannot complete operation due to concurrent modification by another operation." I thought something must be out of whack, so I removed the VM from inventory, and re-added it back. Of course when you do that you lose all the VApp options you had set, but you also lose the definition that...

Running RabbitMQ's PerfTest tool in CloudFoundry

I recently had to troubleshoot performance of an app running in Cloud Foundry (Pivotal CF specifically) trying to use RabbitMQ.  The RabbitMQ team provides a great benchmarking tool that we can use to validate performance of a RabbitMQ cluster, and we can use that tool inside a container running in Cloud Foundry. The following instructions assume you are using the CF CLI version 6.23.0+ (check with cf -v), and running against a Cloud Foundry that supports CC API v2.65.0+ (check with the cf target command after logging in to validate.) First, download the latest RabbitMQ PerfTest zip archive from the link in the above paragraph.  I used GitHub releases page for the project, and just grabbed the latest release. Next, paste the following contents into a file in the same directory as the ZIP file you downloaded called "manifest-rabbitperf.yml" (making sure to update the "path" part to reflect the actual name of the ZIP file you downloaded: --- applications: - nam...

Pushing Your First .NET Core 1.0 RTM Apps to Cloud Foundry and PCF Dev

Pushing a .NET Core 1.0 RTM application to Cloud Foundry is a fairly straightforward process. Follow the instructions at  https://www.microsoft.com/net/core to get your development machine installed with all the necessary binaries, and create the "Hello World" application as they show you on that page. Next, go to  https://docs.asp.net/en/latest/getting-started.html and either create a new project as that page shows you or modify your "Hello World" app from earlier using the instructions on that page.  Run your app locally per the last couple instructions on that page to make sure it works. Next, we need to make some slight tweaks to the application to work better with Cloud Foundry.  Follow the instructions at  https://github.com/cloudfoundry-community/dotnet-core-buildpack#using-samples-from-the-cli-samples-repository to add a dependency to your project.json to allow configuration of the Kestrel server via command line arguments.  You will ...

Recovering from vCenter Appliance Disk Errors on LVM Devices

Let's say you have a ghetto vSphere home lab. And let's say that you are running a vCenter Appliance to manage that home lab because you didn't want to devote a whole physical machine to that task because you are cheap. And let's say you are running a small storage server for that home lab that is hosting the disks for that vCenter Appliance. And let's say that that home storage server is running on a UPS, but _sometimes_ the power goes out for a little bit longer than your UPS can handle and you haven't had the time to configure that file server to shutdown the vSphere hosts before it shuts itself down. Everything comes back up after the power failure, but your vCenter Appliance VM is complaining about file system errors and won't boot.  How do you fix that? Well, the good news is that there are some great guides out there to get you part of the way to a solution.  I followed  http://www.opvizor.com/blog/vmware-vcenter-server-appliance-vcsa-filesy...

My Process for New Spring Projects

Image
I've been getting a lot of questions lately about how to start new Spring projects and what is the best approach.  I don't know if I have the best approach or not, but here is an approach that has worked well for me.  I think it is a pretty good way to get started and iterate on a project. With a new workstation,  I usually grab the latest versions I can get of Java , Git  CLI,  Spring Tool Suite , Gradle  CLI, and Node.js .  Grab the appropriate versions for your OS, and install each of them in turn. Next, make a directory to store your project code separate from your Eclipse workspace.  I like to create a "git" directory in my user directory to store my project code.  Trust me, you will find this useful later. After installing Spring Tool Suite, I add in support for Gradle by going to the "Help" -> "Dashboard" menu, and then clicking the "IDE Extensions" button in the "Manage" section of the resulting page.  Then, und...

Cold Smoked Salmon on the Big Green Egg

I didn't come up with these instructions, but I wanted to capture them for future reference. I have done hot smoked salmon on the BGE before, but I wanted to try my hand at cold smoking before the weather got too hot here.  We went to Harry's Farmers Market (basically a Whole Foods) to snag some really nice salmon.  It was a bit pricy for a piece of a filet, but we don't eat smoked salmon all that often.  I figured it was worth the splurge, so we got about a 1.5 lb piece of farm raised salmon. Based on my completely unscientific experiences with salmon, I tend to find that farm raised salmon has more fat.  To me, this fat tends to make for a more tender fish and lends a buttery flavor to the finished product.  I have read that the farm raised salmon tend to have a more rich diet than wild and this is the reason for the higher fat content.  Whatever the reason, the farm raised salmon I can get near me tends to be better than the wild salmon that I can get. A...

P.S. Don't Forget About .NET, Java, and Javascript!

Image
Analysis of Job Salary and Demand by Skill from gooroo.io Sure, to many developers, they aren't as "cutting-edge" as working with Ruby and they aren't as exciting as Python, or Go. By most measures though, .NET, Java and Javascript are still the leaders in terms of number of jobs available and the salaries those jobs command . This means that companies are still hiring like crazy for these skills. That means they are still creating and maintaining applications that use these technologies. This is why it is critically important for anyone creating a platform to run applications to be able to support all 3 of these top-tier languages and the services required by them. Cloud Foundry , the open source Platform as a Service project, has had great support for Java and Javascript (as well as Ruby, PHP, Python, Go and many other languages) for quite some time with its flexible Buildpack system. A huge hole in Cloud Foundry, however, has been support for .NET appli...

Cloud Foundry Buildpacks in Restricted Networks

Cloud Foundry provides a flexible system called "buildpacks" to handle applications that use different runtimes and frameworks. Traditionally, many buildpacks reach out to public sources on the internet for the various runtimes and other supporting binaries needed to support an application. In on-premise deployments on Cloud Foundry, however, it is quite common to limit the access of Cloud Foundry to the internet. One of the great things about buildpacks are that developers can pull them in without having to work with the Operations/Architecture teams.  Unfortunately, a more secured type of an environment can be problematic for many buildpacks. Luckily, there are some strategies you can employ to make custom buildpacks available for developers to use in a more protected deployment of Cloud Foundry. NAT/Transparent Proxy One simple strategy is to allow Cloud Foundry to have access to specific locations on the internet via NAT or some other sort of transparent proxy...

Ghetto Cloud Foundry Home Lab

Image
Over the past few months, I've been cobbling together my own Lab to be able to gain experience with Cloud Foundry.  Sure, I could have gone the much simpler route of bosh-lite , but I wanted to get a broader set of experience with the underlying IaaS layer in conjunction with working with Cloud Foundry. My lab hardware was purchased from various places (eBay, Fry's, etc) when I could get deals on it. Rocking the Ghetto Lab At a high level, the hardware looks like this: Machine CPU Memory Storage Notes HP Proliant ML350 G5 2x Intel Xeon CPU E5420 @ 2.50GHz 32 GB (Came with some disks, but mostly unused) vSphere Host 1, Added a 4 port Intel 82571EB Network Adapter HP Proliant ML350 G5 2x Intel Xeon CPU E5420 @ 2.50GHz 32 GB (Came with some disks, but mostly unused) vSphere Host 2, Added a 4 port Intel 82571EB Network Adapter Whitebox FreeNAS server Intel Celeron CPU G1610 @ 2.60GHz 16 GB 3x 240GB MLC SSDs, in a ZFS stripe set, plus spinning d...