Skip to content

Commit

Permalink
Add windows driver installation support
Browse files Browse the repository at this point in the history
This PR adds windows driver support. It adds a windows base dir to
install base yaml files. It also adds a windows alpha kustomization
file. To install driver for windows, first set env
NODE_OS=windows and GCE_PD_DRIVER_VERSION=alpha and run
deploy/kubernetes/deploy-driver.sh script.

This PR also reorgnize the dir structure for linux version. Now under
overlay, we have a linux and a windows dir. Under each of them, we have
alpha, stable, etc. Currently windows only has alpha version.
  • Loading branch information
jingxu97 committed May 28, 2020
1 parent ac1f8c0 commit 998782b
Show file tree
Hide file tree
Showing 23 changed files with 225 additions and 67 deletions.
56 changes: 3 additions & 53 deletions deploy/kubernetes/base/node.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,14 @@ spec:
# Host network must be used for interaction with Workload Identity in GKE
# since it replaces GCE Metadata Server with GKE Metadata Server. Remove
# this requirement when issue is resolved and before any exposure of
# metrics ports.
hostNetwork: true
# metrics ports. But hostNetwork is not working for Windows, might be an issue
# when deploying on GKE Windows node.
# hostNetwork: true
priorityClassName: csi-gce-pd-node
serviceAccountName: csi-gce-pd-node-sa
containers:
- name: csi-driver-registrar
image: gke.gcr.io/csi-node-driver-registrar
args:
- "--v=5"
- "--csi-address=/csi/csi.sock"
- "--kubelet-registration-path=/var/lib/kubelet/plugins/pd.csi.storage.gke.io/csi.sock"
lifecycle:
preStop:
exec:
command: ["/bin/sh", "-c", "rm -rf /registration/pd.csi.storage.gke.io /registration/pd.csi.storage.gke.io-reg.sock"]
env:
- name: KUBE_NODE_NAME
valueFrom:
Expand All @@ -41,34 +34,13 @@ spec:
- name: registration-dir
mountPath: /registration
- name: gce-pd-driver
securityContext:
privileged: true
# Don't change base image without changing pdImagePlaceholder in
# test/k8s-integration/main.go
image: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
args:
- "--v=5"
- "--endpoint=unix:/csi/csi.sock"
volumeMounts:
- name: kubelet-dir
mountPath: /var/lib/kubelet
mountPropagation: "Bidirectional"
- name: plugin-dir
mountPath: /csi
- name: device-dir
mountPath: /dev
# The following mounts are required to trigger host udevadm from
# container
- name: udev-rules-etc
mountPath: /etc/udev
- name: udev-rules-lib
mountPath: /lib/udev
- name: udev-socket
mountPath: /run/udev
- name: sys
mountPath: /sys
nodeSelector:
kubernetes.io/os: linux
volumes:
- name: registration-dir
hostPath:
Expand All @@ -82,28 +54,6 @@ spec:
hostPath:
path: /var/lib/kubelet/plugins/pd.csi.storage.gke.io/
type: DirectoryOrCreate
- name: device-dir
hostPath:
path: /dev
type: Directory
# The following mounts are required to trigger host udevadm from
# container
- name: udev-rules-etc
hostPath:
path: /etc/udev
type: Directory
- name: udev-rules-lib
hostPath:
path: /lib/udev
type: Directory
- name: udev-socket
hostPath:
path: /run/udev
type: Directory
- name: sys
hostPath:
path: /sys
type: Directory
# https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
# See "special case". This will tolerate everything. Node component should
# be scheduled on all nodes.
Expand Down
3 changes: 2 additions & 1 deletion deploy/kubernetes/delete-driver.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@ set -o errexit
readonly NAMESPACE="${GCE_PD_DRIVER_NAMESPACE:-gce-pd-csi-driver}"
readonly DEPLOY_VERSION="${GCE_PD_DRIVER_VERSION:-stable}"
readonly PKGDIR="${GOPATH}/src/sigs.k8s.io/gcp-compute-persistent-disk-csi-driver"
readonly OS="${OS:-linux}"
source "${PKGDIR}/deploy/common.sh"

ensure_kustomize

${KUSTOMIZE_PATH} build ${PKGDIR}/deploy/kubernetes/overlays/${DEPLOY_VERSION} | ${KUBECTL} delete -v="${VERBOSITY}" --ignore-not-found -f -
${KUSTOMIZE_PATH} build ${PKGDIR}/deploy/kubernetes/overlays/${OS}/${DEPLOY_VERSION} | ${KUBECTL} delete -v="${VERBOSITY}" --ignore-not-found -f -
${KUBECTL} delete secret cloud-sa -v="${VERBOSITY}" --ignore-not-found

if [[ ${NAMESPACE} != "" && ${NAMESPACE} != "default" ]] && \
Expand Down
3 changes: 2 additions & 1 deletion deploy/kubernetes/deploy-driver.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ set -x
readonly NAMESPACE="${GCE_PD_DRIVER_NAMESPACE:-gce-pd-csi-driver}"
readonly DEPLOY_VERSION="${GCE_PD_DRIVER_VERSION:-stable}"
readonly PKGDIR="${GOPATH}/src/sigs.k8s.io/gcp-compute-persistent-disk-csi-driver"
readonly OS="${OS:-linux}"
source "${PKGDIR}/deploy/common.sh"

print_usage()
Expand Down Expand Up @@ -95,6 +96,6 @@ fi
${KUBECTL} version

readonly tmp_spec=/tmp/gcp-compute-persistent-disk-csi-driver-specs-generated.yaml
${KUSTOMIZE_PATH} build ${PKGDIR}/deploy/kubernetes/overlays/${DEPLOY_VERSION} | tee $tmp_spec
${KUSTOMIZE_PATH} build ${PKGDIR}/deploy/kubernetes/overlays/${OS}/${DEPLOY_VERSION} | tee $tmp_spec
${KUBECTL} apply -v="${VERBOSITY}" -f $tmp_spec

File renamed without changes.
8 changes: 8 additions & 0 deletions deploy/kubernetes/overlays/linux/base/enableHostNetwork.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: csi-gce-pd-node
spec:
template:
spec:
hostNetwork: true
67 changes: 67 additions & 0 deletions deploy/kubernetes/overlays/linux/base/gcepd.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: csi-gce-pd-node
spec:
template:
spec:
nodeSelector:
kubernetes.io/os: linux
containers:
- name: gce-pd-driver
image: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
securityContext:
privileged: true
volumeMounts:
- name: kubelet-dir
mountPath: /var/lib/kubelet
mountPropagation: "Bidirectional"
- name: plugin-dir
mountPath: /csi
- name: device-dir
mountPath: /dev
# The following mounts are required to trigger host udevadm from
# container
- name: udev-rules-etc
mountPath: /etc/udev
- name: udev-rules-lib
mountPath: /lib/udev
- name: udev-socket
mountPath: /run/udev
- name: sys
mountPath: /sys
volumes:
- name: registration-dir
hostPath:
path: /var/lib/kubelet/plugins_registry/
type: Directory
- name: kubelet-dir
hostPath:
path: /var/lib/kubelet
type: Directory
- name: plugin-dir
hostPath:
path: /var/lib/kubelet/plugins/pd.csi.storage.gke.io/
type: DirectoryOrCreate
- name: device-dir
hostPath:
path: /dev
type: Directory
# The following mounts are required to trigger host udevadm from
# container
- name: udev-rules-etc
hostPath:
path: /etc/udev
type: Directory
- name: udev-rules-lib
hostPath:
path: /lib/udev
type: Directory
- name: udev-socket
hostPath:
path: /run/udev
type: Directory
- name: sys
hostPath:
path: /sys
type: Directory
29 changes: 29 additions & 0 deletions deploy/kubernetes/overlays/linux/base/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../../base
patchesStrategicMerge:
- enableHostNetwork.yaml
- gcepd.yaml
- noderegistrar.yaml
images:
- name: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
# Don't change stable image without changing pdImagePlaceholder in
# test/k8s-integration/main.go
newName: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
newTag: "v0.7.0-gke.0"
- name: gke.gcr.io/csi-provisioner
newName: gke.gcr.io/csi-provisioner
newTag: "v1.5.0-gke.0"
- name: gke.gcr.io/csi-attacher
newName: gke.gcr.io/csi-attacher
newTag: "v2.1.1-gke.0"
- name: gke.gcr.io/csi-node-driver-registrar
newName: gke.gcr.io/csi-node-driver-registrar
newTag: "v1.2.0-gke.0"
- name: gke.gcr.io/csi-resizer
newName: gke.gcr.io/csi-resizer
newTag: "v0.4.0-gke.0"
- name: gke.gcr.io/csi-snapshotter
newName: gke.gcr.io/csi-snapshotter
newTag: "v2.1.1-gke.0"
13 changes: 13 additions & 0 deletions deploy/kubernetes/overlays/linux/base/noderegistrar.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: csi-gce-pd-node
spec:
template:
spec:
containers:
- name: csi-driver-registrar
args:
- "--v=5"
- "--csi-address=/csi/csi.sock"
- "--kubelet-registration-path=/var/lib/kubelet/plugins/pd.csi.storage.gke.io/csi.sock"
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,4 @@ BROKEN AT ANY TIME
This is the absolute cutting edge development Driver, it is intended for testing
and development only and can have vast differences in
functionality/behavior/configuration. Use only to try the newest features that
are not guaranteed to work yet.

APPROXIMATE CHANGELOG in latest:
* Topology
* RePD
* Volume ID Format Changed
* Node ID Format Changed
* Parameter "zone" Removed
are not guaranteed to work yet.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
- ../base
images:
- name: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
newName: gcr.io/gke-release-staging/gcp-compute-persistent-disk-csi-driver
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
- ../base
images:
- name: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
newName: gcr.io/gke-release-staging/gcp-compute-persistent-disk-csi-driver
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
- ../base
images:
- name: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
# Don't change stable image without changing pdImagePlaceholder in
Expand Down
46 changes: 46 additions & 0 deletions deploy/kubernetes/overlays/windows/dev/gcepd.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: csi-gce-pd-node
spec:
template:
spec:
nodeSelector:
kubernetes.io/os: windows
containers:
- name: gce-pd-driver
image: gke.gcr.io/gcp-compute-persistent-disk-csi-driver-win
volumeMounts:
- name: kubelet-dir
mountPath: C:\var\lib\kubelet
mountPropagation: "None"
- name: plugin-dir
mountPath: C:\csi
- name: csi-proxy-disk-pipe
mountPath: \\.\pipe\csi-proxy-disk-v1alpha1
- name: csi-proxy-volume-pipe
mountPath: \\.\pipe\csi-proxy-volume-v1alpha1
- name: csi-proxy-filesystem-pipe
mountPath: \\.\pipe\csi-proxy-filesystem-v1alpha1
volumes:
- name: csi-proxy-disk-pipe
hostPath:
path: \\.\pipe\csi-proxy-disk-v1alpha1
type: ""
- name: csi-proxy-volume-pipe
hostPath:
path: \\.\pipe\csi-proxy-volume-v1alpha1
type: ""
- name: csi-proxy-filesystem-pipe
hostPath:
path: \\.\pipe\csi-proxy-filesystem-v1alpha1
type: ""
- name: registration-dir
hostPath:
path: C:\var\lib\kubelet\plugins_registry\
- name: kubelet-dir
hostPath:
path: C:\var\lib\kubelet\
- name: plugin-dir
hostPath:
path: C:\var\lib\kubelet\plugins\pd.csi.storage.gke.io\
33 changes: 33 additions & 0 deletions deploy/kubernetes/overlays/windows/dev/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../../base
patchesStrategicMerge:
- gcepd.yaml
- noderegistrar.yaml
images:
- name: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
# Don't change stable image without changing pdImagePlaceholder in
# test/k8s-integration/main.go
newName: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
newTag: "v0.7.0-gke.0"
- name: gke.gcr.io/gcp-compute-persistent-disk-csi-driver-win
# Temporarly set to the private repo. Will swtich to public one
# once it is available.
newName: gcr.io/jing-k8s-dev/gce-pd-windows-2019
newTag: "0.2.0"
- name: gke.gcr.io/csi-provisioner
newName: gke.gcr.io/csi-provisioner
newTag: "v1.5.0-gke.0"
- name: gke.gcr.io/csi-attacher
newName: gke.gcr.io/csi-attacher
newTag: "v2.1.1-gke.0"
- name: gke.gcr.io/csi-node-driver-registrar
newName: gcr.io/k8s-staging-csi/csi-node-driver-registrar
newTag: "amd64-windows-v20200428-v1.3.0-26-g510710d5"
- name: gke.gcr.io/csi-resizer
newName: gke.gcr.io/csi-resizer
newTag: "v0.4.0-gke.0"
- name: gke.gcr.io/csi-snapshotter
newName: gke.gcr.io/csi-snapshotter
newTag: "v2.1.1-gke.0"
17 changes: 17 additions & 0 deletions deploy/kubernetes/overlays/windows/dev/noderegistrar.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: csi-gce-pd-node
spec:
template:
spec:
containers:
- name: csi-driver-registrar
args:
- --v=5
- --csi-address=unix://C:\\csi\\csi.sock
- --kubelet-registration-path=C:\\var\\lib\\kubelet\\plugins\\pd.csi.storage.gke.io\\csi.sock
lifecycle:
preStop:
exec:
command: ["cmd", "/c", "del C:\\registration\\pd.csi.storage.gke.io-reg.sock"]
2 changes: 1 addition & 1 deletion test/k8s-integration/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
)

func getOverlayDir(pkgDir, deployOverlayName string) string {
return filepath.Join(pkgDir, "deploy", "kubernetes", "overlays", deployOverlayName)
return filepath.Join(pkgDir, "deploy", "kubernetes", "overlays", "linux", deployOverlayName)
}

func installDriver(goPath, pkgDir, stagingImage, stagingVersion, deployOverlayName string, doDriverBuild bool) error {
Expand Down

0 comments on commit 998782b

Please sign in to comment.