Skip to content

Commit 6fa2f52

Browse files
committed
Add windows driver installation support
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.
1 parent ac1f8c0 commit 6fa2f52

24 files changed

+398
-58
lines changed

deploy/kubernetes/base/node.yaml

+3-55
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,14 @@ spec:
1515
# Host network must be used for interaction with Workload Identity in GKE
1616
# since it replaces GCE Metadata Server with GKE Metadata Server. Remove
1717
# this requirement when issue is resolved and before any exposure of
18-
# metrics ports.
19-
hostNetwork: true
18+
# metrics ports. But hostNetwork is not working for Windodws, might be an issue
19+
# when deploying on GKE windows node. See related issue https://buganizer.corp.google.com/issues/156382455
20+
# hostNetwork: true
2021
priorityClassName: csi-gce-pd-node
2122
serviceAccountName: csi-gce-pd-node-sa
2223
containers:
2324
- name: csi-driver-registrar
2425
image: gke.gcr.io/csi-node-driver-registrar
25-
args:
26-
- "--v=5"
27-
- "--csi-address=/csi/csi.sock"
28-
- "--kubelet-registration-path=/var/lib/kubelet/plugins/pd.csi.storage.gke.io/csi.sock"
29-
lifecycle:
30-
preStop:
31-
exec:
32-
command: ["/bin/sh", "-c", "rm -rf /registration/pd.csi.storage.gke.io /registration/pd.csi.storage.gke.io-reg.sock"]
3326
env:
3427
- name: KUBE_NODE_NAME
3528
valueFrom:
@@ -41,34 +34,11 @@ spec:
4134
- name: registration-dir
4235
mountPath: /registration
4336
- name: gce-pd-driver
44-
securityContext:
45-
privileged: true
46-
# Don't change base image without changing pdImagePlaceholder in
47-
# test/k8s-integration/main.go
4837
image: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
4938
args:
5039
- "--v=5"
5140
- "--endpoint=unix:/csi/csi.sock"
5241
volumeMounts:
53-
- name: kubelet-dir
54-
mountPath: /var/lib/kubelet
55-
mountPropagation: "Bidirectional"
56-
- name: plugin-dir
57-
mountPath: /csi
58-
- name: device-dir
59-
mountPath: /dev
60-
# The following mounts are required to trigger host udevadm from
61-
# container
62-
- name: udev-rules-etc
63-
mountPath: /etc/udev
64-
- name: udev-rules-lib
65-
mountPath: /lib/udev
66-
- name: udev-socket
67-
mountPath: /run/udev
68-
- name: sys
69-
mountPath: /sys
70-
nodeSelector:
71-
kubernetes.io/os: linux
7242
volumes:
7343
- name: registration-dir
7444
hostPath:
@@ -82,28 +52,6 @@ spec:
8252
hostPath:
8353
path: /var/lib/kubelet/plugins/pd.csi.storage.gke.io/
8454
type: DirectoryOrCreate
85-
- name: device-dir
86-
hostPath:
87-
path: /dev
88-
type: Directory
89-
# The following mounts are required to trigger host udevadm from
90-
# container
91-
- name: udev-rules-etc
92-
hostPath:
93-
path: /etc/udev
94-
type: Directory
95-
- name: udev-rules-lib
96-
hostPath:
97-
path: /lib/udev
98-
type: Directory
99-
- name: udev-socket
100-
hostPath:
101-
path: /run/udev
102-
type: Directory
103-
- name: sys
104-
hostPath:
105-
path: /sys
106-
type: Directory
10755
# https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
10856
# See "special case". This will tolerate everything. Node component should
10957
# be scheduled on all nodes.

deploy/kubernetes/delete-driver.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ set -o errexit
1313
readonly NAMESPACE="${GCE_PD_DRIVER_NAMESPACE:-gce-pd-csi-driver}"
1414
readonly DEPLOY_VERSION="${GCE_PD_DRIVER_VERSION:-stable}"
1515
readonly PKGDIR="${GOPATH}/src/sigs.k8s.io/gcp-compute-persistent-disk-csi-driver"
16+
readonly OS="${OS:-linux}"
1617
source "${PKGDIR}/deploy/common.sh"
1718

1819
ensure_kustomize
1920

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

2324
if [[ ${NAMESPACE} != "" && ${NAMESPACE} != "default" ]] && \

deploy/kubernetes/deploy-driver.sh

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ set -x
1919
readonly NAMESPACE="${GCE_PD_DRIVER_NAMESPACE:-gce-pd-csi-driver}"
2020
readonly DEPLOY_VERSION="${GCE_PD_DRIVER_VERSION:-stable}"
2121
readonly PKGDIR="${GOPATH}/src/sigs.k8s.io/gcp-compute-persistent-disk-csi-driver"
22+
readonly OS="${OS:-linux}"
2223
source "${PKGDIR}/deploy/common.sh"
2324

2425
print_usage()
@@ -51,7 +52,7 @@ function check_service_account()
5152
# Grepping for a line with client email returning anything quoted after the colon
5253
readonly IAM_NAME=$(grep -Po '"client_email": *\K"[^"]*"' ${GCE_PD_SA_DIR}/cloud-sa.json | tr -d '"')
5354
readonly PROJECT=$(grep -Po '"project_id": *\K"[^"]*"' ${GCE_PD_SA_DIR}/cloud-sa.json | tr -d '"')
54-
readonly GOTTEN_BIND_ROLES=$(gcloud projects get-iam-policy ${PROJECT} --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members:${IAM_NAME}")
55+
readonly GOTTEN_BIND_ROLES=$(gcloud projects get-iam-policy $PROJECT --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members:${IAM_NAME}")
5556
readonly BIND_ROLES=$(get_needed_roles)
5657
MISSING_ROLES=false
5758
for role in ${BIND_ROLES}
@@ -95,6 +96,6 @@ fi
9596
${KUBECTL} version
9697

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

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
WARNING: DO NOT USE THE ALPHA VERSION OF THE DRIVER FOR PRODUCTION
2+
3+
Alpha features are unsupported and may be unstable and have breaking changes across releases.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
apiVersion: kustomize.config.k8s.io/v1beta1
2+
kind: Kustomization
3+
bases:
4+
- ../stable
5+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
kind: DaemonSet
2+
apiVersion: apps/v1
3+
metadata:
4+
name: csi-gce-pd-node
5+
spec:
6+
template:
7+
spec:
8+
hostNetwork: true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
kind: DaemonSet
2+
apiVersion: apps/v1
3+
metadata:
4+
name: csi-gce-pd-node
5+
spec:
6+
template:
7+
spec:
8+
containers:
9+
- name: gce-pd-driver
10+
image: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
11+
securityContext:
12+
privileged: true
13+
volumeMounts:
14+
- name: kubelet-dir
15+
mountPath: /var/lib/kubelet
16+
mountPropagation: "Bidirectional"
17+
- name: plugin-dir
18+
mountPath: /csi
19+
- name: device-dir
20+
mountPath: /dev
21+
# The following mounts are required to trigger host udevadm from
22+
# container
23+
- name: udev-rules-etc
24+
mountPath: /etc/udev
25+
- name: udev-rules-lib
26+
mountPath: /lib/udev
27+
- name: udev-socket
28+
mountPath: /run/udev
29+
- name: sys
30+
mountPath: /sys
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
apiVersion: kustomize.config.k8s.io/v1beta1
2+
kind: Kustomization
3+
bases:
4+
- ../../../base
5+
patchesStrategicMerge:
6+
- enableHostNetwork.yaml
7+
- gcepd.yaml
8+
- noderegistrar.yaml
9+
- volumes.yaml
10+
images:
11+
- name: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
12+
# Don't change stable image without changing pdImagePlaceholder in
13+
# test/k8s-integration/main.go
14+
newName: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
15+
newTag: "v0.7.0-gke.0"
16+
- name: gke.gcr.io/csi-provisioner
17+
newName: gke.gcr.io/csi-provisioner
18+
newTag: "v1.5.0-gke.0"
19+
- name: gke.gcr.io/csi-attacher
20+
newName: gke.gcr.io/csi-attacher
21+
newTag: "v2.1.1-gke.0"
22+
- name: gke.gcr.io/csi-node-driver-registrar
23+
newName: gke.gcr.io/csi-node-driver-registrar
24+
newTag: "v1.2.0-gke.0"
25+
- name: gke.gcr.io/csi-resizer
26+
newName: gke.gcr.io/csi-resizer
27+
newTag: "v0.4.0-gke.0"
28+
- name: gke.gcr.io/csi-snapshotter
29+
newName: gke.gcr.io/csi-snapshotter
30+
newTag: "v2.1.1-gke.0"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
kind: DaemonSet
2+
apiVersion: apps/v1
3+
metadata:
4+
name: csi-gce-pd-node
5+
spec:
6+
template:
7+
spec:
8+
containers:
9+
- name: csi-driver-registrar
10+
args:
11+
- "--v=5"
12+
- "--csi-address=/csi/csi.sock"
13+
- "--kubelet-registration-path=/var/lib/kubelet/plugins/pd.csi.storage.gke.io/csi.sock"
14+
lifecycle:
15+
preStop:
16+
exec:
17+
command: ["/bin/sh", "-c", "rm -rf /registration/pd.csi.storage.gke.io /registration/pd.csi.storage.gke.io-reg.sock"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
kind: DaemonSet
2+
apiVersion: apps/v1
3+
metadata:
4+
name: csi-gce-pd-node
5+
spec:
6+
template:
7+
spec:
8+
nodeSelector:
9+
kubernetes.io/os: linux
10+
volumes:
11+
- name: registration-dir
12+
hostPath:
13+
path: /var/lib/kubelet/plugins_registry/
14+
type: Directory
15+
- name: kubelet-dir
16+
hostPath:
17+
path: /var/lib/kubelet
18+
type: Directory
19+
- name: plugin-dir
20+
hostPath:
21+
path: /var/lib/kubelet/plugins/pd.csi.storage.gke.io/
22+
type: DirectoryOrCreate
23+
- name: device-dir
24+
hostPath:
25+
path: /dev
26+
type: Directory
27+
# The following mounts are required to trigger host udevadm from
28+
# container
29+
- name: udev-rules-etc
30+
hostPath:
31+
path: /etc/udev
32+
type: Directory
33+
- name: udev-rules-lib
34+
hostPath:
35+
path: /lib/udev
36+
type: Directory
37+
- name: udev-socket
38+
hostPath:
39+
path: /run/udev
40+
type: Directory
41+
- name: sys
42+
hostPath:
43+
path: /sys
44+
type: Directory
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
WARNING: DO NOT USE THE STAGING-LATEST VERSION OF THE DRIVER FOR PRODUCTION
2+
DISCLAIMER: THE LATEST IMAGE IS CONSTANTLY CHANGING WITH DEVELOPMENT AND CAN BE
3+
BROKEN AT ANY TIME
4+
5+
This is the absolute cutting edge development Driver, it is intended for testing
6+
and development only and can have vast differences in
7+
functionality/behavior/configuration. Use only to try the newest features that
8+
are not guaranteed to work yet.
9+
10+
APPROXIMATE CHANGELOG in latest:
11+
* Topology
12+
* RePD
13+
* Volume ID Format Changed
14+
* Node ID Format Changed
15+
* Parameter "zone" Removed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
kind: StatefulSet
2+
apiVersion: apps/v1
3+
metadata:
4+
name: csi-gce-pd-controller
5+
spec:
6+
template:
7+
spec:
8+
containers:
9+
- name: gce-pd-driver
10+
imagePullPolicy: Always
11+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: kustomize.config.k8s.io/v1beta1
2+
kind: Kustomization
3+
bases:
4+
- ../alpha
5+
patches:
6+
- controller_always_pull.yaml
7+
- node_always_pull.yaml
8+
images:
9+
# Replace this with your private image names and tags
10+
- name: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
11+
newName: gcr.io/dyzz-csi-staging/csi/gce-pd-driver
12+
newTag: "latest"
13+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
kind: DaemonSet
2+
apiVersion: apps/v1
3+
metadata:
4+
name: csi-gce-pd-node
5+
spec:
6+
template:
7+
spec:
8+
containers:
9+
- name: gce-pd-driver
10+
imagePullPolicy: Always
11+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
These overlays are intended to be only used by prow for CI testing.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
apiVersion: kustomize.config.k8s.io/v1beta1
2+
kind: Kustomization
3+
bases:
4+
- ../base
5+
images:
6+
- name: gke.gcr.io/gcp-compute-persistent-disk-csi-driver
7+
newName: gcr.io/gke-release-staging/gcp-compute-persistent-disk-csi-driver
8+
newTag: "latest"
9+
- name: gke.gcr.io/csi-provisioner
10+
newName: quay.io/k8scsi/csi-provisioner
11+
newTag: "canary"
12+
- name: gke.gcr.io/csi-attacher
13+
newName: quay.io/k8scsi/csi-attacher
14+
newTag: "canary"
15+
- name: gke.gcr.io/csi-node-driver-registrar
16+
newName: quay.io/k8scsi/csi-node-driver-registrar
17+
newTag: "canary"
18+
- name: gke.gcr.io/csi-resizer
19+
newName: quay.io/k8scsi/csi-resizer
20+
newTag: "canary"
21+
- name: gke.gcr.io/csi-snapshotter
22+
newName: quay.io/k8scsi/csi-snapshotter
23+
newTag: "canary"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
These overlays are intended to be only used by prow for CI testing.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# for external-provisioner
2+
- op: add
3+
path: /spec/template/spec/containers/0/args/-
4+
value: "--metrics-address=:22011"
5+
6+
# for external-attacher
7+
- op: add
8+
path: /spec/template/spec/containers/1/args/-
9+
value: "--metrics-address=:22012"
10+
11+
# for external-resizer
12+
- op: add
13+
path: /spec/template/spec/containers/2/args/-
14+
value: "--metrics-address=:22013"
15+
16+
# for external-snapshotter
17+
- op: add
18+
path: /spec/template/spec/containers/3/args/-
19+
value: "--metrics-address=:22014"

0 commit comments

Comments
 (0)