-
Notifications
You must be signed in to change notification settings - Fork 39.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add options for mounting SCSI or NVMe local SSD though Block or Filesystem and do all of that with UUID #53466
Conversation
cc @msau42 |
/ok-to-test |
/release-note-none |
cluster/common.sh
Outdated
@@ -679,6 +679,8 @@ PROMETHEUS_TO_SD_ENDPOINT: $(yaml-quote ${PROMETHEUS_TO_SD_ENDPOINT:-}) | |||
PROMETHEUS_TO_SD_PREFIX: $(yaml-quote ${PROMETHEUS_TO_SD_PREFIX:-}) | |||
ENABLE_PROMETHEUS_TO_SD: $(yaml-quote ${ENABLE_PROMETHEUS_TO_SD:-false}) | |||
ENABLE_POD_PRIORITY: $(yaml-quote ${ENABLE_POD_PRIORITY:-}) | |||
NODE_LOCAL_SSDS: $(yaml-quote ${NODE_LOCAL_SSDS:-0}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hm is this the right place to add this? This is a GCE specific variable, but the file is not GCE specific
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not actually sure. I can't find any other scripts that seem to set env variables on the node, this looks like the only one to me. Could you point me to an alternative or something else I should be looking for?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh I think I see now. Before, the configure-vm script didn't need NODE_LOCAL_SSDS, but now it does. Yes, this is the right place to copy over env vars
cluster/gce/config-default.sh
Outdated
@@ -36,6 +36,7 @@ MASTER_ROOT_DISK_SIZE=${MASTER_ROOT_DISK_SIZE:-$(get-master-root-disk-size)} | |||
NODE_DISK_TYPE=${NODE_DISK_TYPE:-pd-standard} | |||
NODE_DISK_SIZE=${NODE_DISK_SIZE:-100GB} | |||
NODE_LOCAL_SSDS=${NODE_LOCAL_SSDS:-0} | |||
NODE_LOCAL_SSDS_EXT=${NODE_LOCAL_SSDS_EXT:-""} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add comments to describe what the variable means, and the format of the values
cluster/gce/gci/configure-helper.sh
Outdated
chmod +w ${ssdmap} | ||
fi | ||
|
||
# each line looks like "${device} persistant-uuid" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
persistent
cluster/gce/gci/configure-helper.sh
Outdated
# Get the real UUID of the device | ||
item=$(readlink -f ${device} | cut -d '/' -f 3) | ||
myuuid=$(ls -l /dev/disk/by-uuid/ | grep ${item} | tr -s ' ' | cut -d ' ' -f 9) | ||
mountpoint="/mnt/disks/by-uuid/google-local-ssds-${interface,,}-fs/local-ssd-${myuuid}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you make this path a constant since we use it a few times in this file
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do you mean just make "/mnt/disks/by-uuid/google-local-ssds" a const var like mntprefix or something?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes
cluster/gce/gci/configure-helper.sh
Outdated
mkdir -p "${mountpoint}" | ||
echo "Mounting '${device}' at '${mountpoint}'" | ||
mount -o discard,defaults "${device}" "${mountpoint}" | ||
chmod a+w ${mountpoint} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need to do this considering that it wasn't done previously?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe this was done previously on a mount:
chmod a+w ${ssdmount} |
cluster/gce/gci/configure-helper.sh
Outdated
format=$3 | ||
|
||
if [[ ${format,,} == "fs" ]]; then | ||
safe-format-and-mount-by-interface ${ssd} ${interface,,} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What if we call safe-format-and-mount like before, and then a new function that does the bind mount to the uuid path?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this method is more natural for if we plan to eventually deprecate the "old" mount points. We would just have to delete the bind-mounting section as opposed to reversing the logic when the backwards compatibility is removed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think we'll be able to deprecate it anytime soon. We'll have to support both types of users. Those that want to use hostpath and needs the paths to be consistent across nodes, and those that want Local PVs which needs all the paths to be unique.
/retest |
cluster/common.sh
Outdated
@@ -679,6 +679,8 @@ PROMETHEUS_TO_SD_ENDPOINT: $(yaml-quote ${PROMETHEUS_TO_SD_ENDPOINT:-}) | |||
PROMETHEUS_TO_SD_PREFIX: $(yaml-quote ${PROMETHEUS_TO_SD_PREFIX:-}) | |||
ENABLE_PROMETHEUS_TO_SD: $(yaml-quote ${ENABLE_PROMETHEUS_TO_SD:-false}) | |||
ENABLE_POD_PRIORITY: $(yaml-quote ${ENABLE_POD_PRIORITY:-}) | |||
NODE_LOCAL_SSDS: $(yaml-quote ${NODE_LOCAL_SSDS:-0}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh I think I see now. Before, the configure-vm script didn't need NODE_LOCAL_SSDS, but now it does. Yes, this is the right place to copy over env vars
cluster/gce/gci/configure-helper.sh
Outdated
format=$2 | ||
|
||
total=0 | ||
if [[ ! -z ${NODE_LOCAL_SSDS_EXT} ]]; then |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add a comment describe the format of the value?
cluster/gce/gci/configure-helper.sh
Outdated
# Get the real UUID of the device | ||
item=$(readlink -f ${device} | cut -d '/' -f 3) | ||
myuuid=$(ls -l /dev/disk/by-uuid/ | grep ${item} | tr -s ' ' | cut -d ' ' -f 9) | ||
mountpoint="/mnt/disks/by-uuid/google-local-ssds-${interface,,}-fs/local-ssd-${myuuid}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes
/assign |
addressed comments and added tests. |
cluster/gce/gci/configure-helper.sh
Outdated
@@ -91,7 +93,7 @@ function get-local-disk-num() { | |||
function safe-block-symlink(){ | |||
device=$1 | |||
interface=$2 | |||
mkdir -p "/mnt/disks/by-uuid/google-local-ssds-${interface,,}-block" | |||
mkdir -p "${UUID_MNT_PREFIX}-${interface,,}-block" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you handle lowercasing $interface when we're parsing the args?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i mean very technically none of these ever need to be lower cased because they just come from some hardcoded "scsi" "fs" strings. I'll remove them all.
@@ -54,6 +55,8 @@ const ( | |||
DirectoryLocalVolumeType LocalVolumeType = "dir" | |||
// creates a tmpfs and mounts it | |||
TmpfsLocalVolumeType LocalVolumeType = "tmpfs" | |||
// tests based on local ssd at /mnt/disks/by-uuid/ | |||
GCELocalSSDVolumeType LocalVolumeType = "gcessd" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe call it "gce-localssd-scsi-fs"
|
||
Context("when two pods mount a local volume at the same time", func() { | ||
BeforeEach(func() { | ||
framework.SkipUnlessLocalSSDExists("scsi", "fs", config.node0) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We only want to skip if the type == GCELocalSSDVolumeType.
Ditto everywhere else
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In that case if we want to keep the tests as they are they will not "skip" the test perse, just skip the part that involves localSSD. The test will still show up as "passed" when running because it just wont do the localSSD part.
Alternatively I could split out the tests so that it does localSSD seperately and actually "skips" the test so it is more clear as to what is happening when you run them.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmmm I wonder if it's possible to restructure the tests so that there is an It() for each type.
testDirName := "local-volume-test-" + string(uuid.NewUUID()) | ||
hostDir := filepath.Join(hostBase, testDirName) | ||
var hostDir string | ||
if localVolumeType == GCELocalSSDVolumeType { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe the setup and cleanup methods can be abstracted out into an interface for each supported LocalVolumeType
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Im not sure what you mean by abstracting them out into an interface. Do you mean to have multiple methods for setup and cleanup (one for each volume type)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I mean define an interface with Setup and Teardown methods. And have each volume type implement that interface with their own methods.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm actually not really sure how to do that since localVolumeType aren't actually different "types" but are actually just strings so you can't really distinguish them for interface methods. They are all of type "LocalVolumeType". Any documentation on what you're suggesting here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You could have a map with key = local volume type string, value = setup and teardown methods
cluster/gce/gci/configure-helper.sh
Outdated
fi | ||
|
||
sym="${UUID_MNT_PREFIX}-${interface,,}-block/local-ssd-${myuuid}" | ||
# dont make the exact directory first or else symlink goes 1 directory down |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you explain this comment? i'm not understanding it
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you make the directory with "mkdir" before doing a symlink to that directory, it actually symlinks to "inside" the directory instead of "to" the directory. I've updated the comment to:
Do not "mkdir -p ${sym}" as that will cause unintended symlink behavior
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok yeah that's correct. Symlinks are files, not directories.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
that explains a lot
cluster/gce/gci/configure-helper.sh
Outdated
@@ -140,6 +241,8 @@ function find-master-pd { | |||
MASTER_PD_DEVICE="/dev/disk/by-id/${relative_path}" | |||
} | |||
|
|||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove
cluster/gce/util.sh
Outdated
for ssdgroup in "${ssdgroups[@]}" | ||
do | ||
IFS="," read -r -a ssdopts <<< ${ssdgroup} | ||
for i in $(seq ${ssdopts[0]}); do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What happens if the user misformats these variables? (like maybe only includes 1 out of the 3 values)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it just kinda "goes with it" and tries its best, an invalid array access here will basically just return the empty string. Should I add some validation?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think some validation would be good, so that we don't accidentally create more local SSDs than the user intended. Actually, there was a bug a few months ago where "seq 0" returns "1 0" on mac, so it actually created 2 local SSDs instead of 0. We should make sure we don't hit the same issue here.
I guess if the local ssd interface is malformed, then the instance creation should fail with invalid argument.
cluster/gce/gci/configure-helper.sh
Outdated
@@ -66,8 +68,57 @@ function create-dirs { | |||
fi | |||
} | |||
|
|||
# Formats the given device ($1) if needed and mounts it at given mount point | |||
# ($2). | |||
function get-local-disk-num() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add a comment as to what this function does
cluster/gce/gci/configure-helper.sh
Outdated
function ensure-local-ssds() { | ||
get-local-disk-num "scsi" "fs" | ||
scsifsnum=${total} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you can combine these two lines
cluster/gce/gci/configure-helper.sh
Outdated
function ensure-local-ssds() { | ||
get-local-disk-num "scsi" "fs" | ||
scsifsnum=${total} | ||
scsifsnum=$((scsifsnum+NODE_LOCAL_SSDS)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is going to break GKE because GKE doesn't set NODE_LOCAL_SSDS, so scsifsnum will be 0.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do they still provision localssds without setting that env var?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, GKE creates the instances differently than the cluster/gce/util.sh script.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We may need to do something like:
- First setup all the block devices
- The remainder is for filesystem
cluster/gce/gci/configure-helper.sh
Outdated
# Formats the given device ($1) if needed and mounts it at given mount point | ||
# ($2). | ||
function get-local-disk-num() { | ||
interface=$1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you prefix all local variables with "local"
addressed all comments. |
cluster/gce/gci/configure-helper.sh
Outdated
local interface=$1 | ||
local format=$2 | ||
|
||
total=0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you give this a more distinct name to minimize variable name collisions
cluster/gce/gci/configure-helper.sh
Outdated
fi | ||
|
||
# each line looks like "${device} persistent-uuid" | ||
if [[ ! -z $(cat ${ssdmap} | grep ${device}) ]]; then |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You could just do grep $device $ssdmap.
I would add a space after device, the handle the case where you have 2 devices and the first is a substring of the second.
cluster/gce/gci/configure-helper.sh
Outdated
udevadm settle | ||
|
||
# Get the real UUID of the device | ||
local item=$(readlink -f ${device} | cut -d '/' -f 3) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you add a comment at each step what the expected output format is?
cluster/gce/gci/configure-helper.sh
Outdated
if [[ ${format} == "fs" ]]; then | ||
if [[ ${interface} == "scsi" ]]; then | ||
local scsinum=`echo ${ssd} | sed -e 's/\/dev\/disk\/by-id\/google-local-ssd-\([0-9]*\)/\1/'` | ||
local mountpoint="/mnt/disks/ssd${scsinum}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is only going to be local to this if block?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think local restricts only to function blocks. So this is technically valid. Would it look better in some other way?
I dont know if bash has the concept of variable declaration without initialization so i couldn't do:
local scsinum;
at some earlier point.
cluster/gce/gci/configure-helper.sh
Outdated
function ensure-local-ssds() { | ||
get-local-disk-num "scsi" "block" | ||
local scsiblocknum=${total} | ||
local i=0 | ||
for ssd in /dev/disk/by-id/google-local-ssd-*; do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we sort this list to ensure that we process the disks in the same order?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The ${ssd} will already be sorted by default. I do remember why i decided to do "fs" disks first now though, now the disk numbers will make even less sense because they would start with the numbers after block storage.
Ex. We have 2 block and 2 fs devices
google-local-ssd-[0,1] are block,
then when we mount the fs devices we will have them mounted at:
/mnt/disks/ssd2 /mnt/disks/ssd3
And if we include nvme devices in the mix they might not even be increasing by 1 each time...
Can be solved by re-indexing them to start at 0 and monotonically increment. But then the numbers are no longer 1-1 from /dev/disks to /mnt/disks
all comments addressed and nvme support added |
Comments from other PR addressed. |
ab91a2e
to
0215c4c
Compare
/retest |
LGTM except a couple of real comments and some nits. |
…disks/by-uuid/, set up ability to have unformatted disk symlinked in /dev/disk/by-uuid/. Added tests. Preserved backwards compatibility.
a76df6d
to
0282582
Compare
addressed your comments @zmerlynn |
/retest |
1 similar comment
/retest |
/lgtm
/approve
…On Wed, Nov 15, 2017 at 1:26 PM, David Zhu ***@***.***> wrote:
/retest
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#53466 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AEtqgMpoOoNJbCbc-kuzdif_YADF3oVCks5s21bxgaJpZM4PuVU3>
.
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: davidz627, msau42, zmerlynn Associated issue: 51431 The full list of commands accepted by this bot can be found here.
Needs approval from an approver in each of these OWNERS Files:
You can indicate your approval by writing |
/test all [submit-queue is verifying that this PR is safe to merge] |
Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions here. |
This seems to have broken all GKE tests. https://k8s-testgrid.appspot.com/google-gke#gci-gke Last success: https://k8s-gubernator.appspot.com/build/kubernetes-jenkins/logs/ci-kubernetes-e2e-gci-gke/18380 First failure: https://k8s-gubernator.appspot.com/build/kubernetes-jenkins/logs/ci-kubernetes-e2e-gci-gke/18381 |
I'm running gke-gci on the revert. #55889 |
I'm curious why this is affecting gke and not gce. |
# Format of this variable will be "#,scsi/nvme,block/fs" you can specify multiple | ||
# configurations by seperating them by a semi-colon ex. "2,scsi,fs;1,nvme,block" | ||
# is a request for 2 SCSI formatted and mounted SSDs and 1 NVMe block device SSD. | ||
NODE_LOCAL_SSDS_EXT=${NODE_LOCAL_SSDS_EXT:-""} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if it's because on gce it's defaulted to "", but on GKE it's unset.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah I found this error in the master logs:
/home/kubernetes/bin/configure-helper.sh: line 98: NODE_LOCAL_SSDS_EXT: unbound variable
We keep running into this every time a new var is added, because GKE does not use config-default.sh
at all, and configure-helper.sh
uses nounset
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@enisoc how has this been fixed in the past? I was just going to add a 'NODE_LOCAL_SSDS_EXT=${NODE_LOCAL_SSDS_EXT:-""}' to configure-helper.sh but it feels like maybe there might be a better solution
Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Revert "Add options for mounting SCSI or NVMe local SSD though Block or Filesystem and do all of that with UUID" Reverts #53466 @mindprince @davidz627
local format="${2}" | ||
|
||
localdisknum=0 | ||
if [[ ! -z "${NODE_LOCAL_SSDS_EXT}" ]]; then |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
add a :- to this, e.g. "${NODE_LOCAL_SSDS_EXT:-}"
safe-format-and-mount "${ssd}" "${mountpoint}" | ||
# We only do the bindmount if users are using the new local ssd request method | ||
# see https://github.com/kubernetes/kubernetes/pull/53466#discussion_r146431894 | ||
if [[ ! -z "${NODE_LOCAL_SSDS_EXT}" ]]; then |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
:- here as well
@@ -37,6 +39,11 @@ else | |||
exit 1 | |||
fi | |||
|
|||
if [[ ${NODE_LOCAL_SSDS} -ge 1 ]] && [[ ! -z ${NODE_LOCAL_SSDS_EXT} ]] ; then |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
:- here as well
@@ -587,6 +617,19 @@ function create-node-template() { | |||
fi | |||
|
|||
local local_ssds="" | |||
local_ssd_ext_count=0 | |||
if [[ ! -z ${NODE_LOCAL_SSDS_EXT-""} ]]; then |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
instead of -""
, use :-
Automatic merge from submit-queue (batch tested with PRs 54824, 55911, 55730, 55979, 55961). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Add options for mounting SCSI or NVMe local SSD though Block or Filesystem and do all of that with UUID Fixes: #51431 Fixed version of: #53466 Mount SCSI local SSD by UUID in /mnt/disks/by-uuid/, also allows for users to request and mount NVMe disks. Both types of disks will be accessible either through block or file-system. I have confirmed that it is no longer crashing when nodes are initialized on GKE.
Fixes: #51431
Mount SCSI local SSD by UUID in /mnt/disks/by-uuid/, also allows for users to request and mount NVMe disks. Both types of disks will be accessable either through block or filesystem
To see code in progress for NVMe and block support see working branch: https://github.com/davidz627/kubernetes/tree/localExt