Browse Source
GCP Persistent Disk CSI Driver deployment (#5857)
GCP Persistent Disk CSI Driver deployment (#5857)
* GCP Persistent Disk CSI Driver deployment * Fix MD lint * Fix Yaml lintpull/5862/head
Ali Sanhaji
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 603 additions and 1 deletions
Split View
Diff Options
-
77docs/gcp-pd-csi.md
-
10inventory/sample/group_vars/all/gcp.yml
-
2inventory/sample/group_vars/k8s-cluster/k8s-cluster.yml
-
7roles/download/defaults/main.yml
-
3roles/kubernetes-apps/csi_driver/gcp_pd/defaults/main.yml
-
49roles/kubernetes-apps/csi_driver/gcp_pd/tasks/main.yml
-
74roles/kubernetes-apps/csi_driver/gcp_pd/templates/gcp-pd-csi-controller.yml.j2
-
8roles/kubernetes-apps/csi_driver/gcp_pd/templates/gcp-pd-csi-cred-secret.yml.j2
-
111roles/kubernetes-apps/csi_driver/gcp_pd/templates/gcp-pd-csi-node.yml.j2
-
200roles/kubernetes-apps/csi_driver/gcp_pd/templates/gcp-pd-csi-setup.yml.j2
-
8roles/kubernetes-apps/meta/main.yml
-
8roles/kubernetes-apps/persistent_volumes/gcp-pd-csi/defaults/main.yml
-
19roles/kubernetes-apps/persistent_volumes/gcp-pd-csi/tasks/main.yml
-
20roles/kubernetes-apps/persistent_volumes/gcp-pd-csi/templates/gcp-pd-csi-storage-class.yml.j2
-
7roles/kubernetes-apps/persistent_volumes/meta/main.yml
-
1roles/kubespray-defaults/defaults/main.yaml
@ -0,0 +1,77 @@ |
|||
# GCP Persistent Disk CSI Driver |
|||
|
|||
The GCP Persistent Disk CSI driver allows you to provision volumes for pods with a Kubernetes deployment over Google Cloud Platform. The CSI driver replaces to volume provioning done by the in-tree azure cloud provider which is deprecated. |
|||
|
|||
To deploy GCP Persistent Disk CSI driver, uncomment the `gcp_pd_csi_enabled` option in `group_vars/all/gcp.yml` and set it to `true`. |
|||
|
|||
## GCP Persistent Disk Storage Class |
|||
|
|||
If you want to deploy the GCP Persistent Disk storage class to provision volumes dynamically, you should set `persistent_volumes_enabled` in `group_vars/k8s-cluster/k8s-cluster.yml` to `true`. |
|||
|
|||
## GCP credentials |
|||
|
|||
In order for the CSI driver to provision disks, you need to create for it a service account on GCP with the appropriate permissions. |
|||
|
|||
Follow these steps to configure it: |
|||
|
|||
```ShellSession |
|||
# This will open a web page for you to authenticate |
|||
gcloud auth login |
|||
export PROJECT=nameofmyproject |
|||
gcloud config set project $PROJECT |
|||
|
|||
git clone https://github.com/kubernetes-sigs/gcp-compute-persistent-disk-csi-driver $GOPATH/src/sigs.k8s.io/gcp-compute-persistent-disk-csi-driver |
|||
|
|||
export GCE_PD_SA_NAME=my-gce-pd-csi-sa |
|||
export GCE_PD_SA_DIR=/my/safe/credentials/directory |
|||
|
|||
./deploy/setup-project.sh |
|||
``` |
|||
|
|||
The above will create a file named `cloud-sa.json` in the specified `GCE_PD_SA_DIR`. This file contains the service account with the appropriate credentials for the CSI driver to perform actions on GCP to request disks for pods. |
|||
|
|||
You need to provide this file's path through the variable `gcp_pd_csi_sa_cred_file` in `inventory/mycluster/group_vars/all/gcp.yml` |
|||
|
|||
You can now deploy Kubernetes with Kubespray over GCP. |
|||
|
|||
## GCP PD CSI Driver test |
|||
|
|||
To test the dynamic provisioning using GCP PD CSI driver, make sure to have the storage class deployed (through persistent volumes), and apply the following manifest: |
|||
|
|||
```yml |
|||
--- |
|||
kind: PersistentVolumeClaim |
|||
apiVersion: v1 |
|||
metadata: |
|||
name: podpvc |
|||
spec: |
|||
accessModes: |
|||
- ReadWriteOnce |
|||
storageClassName: csi-gce-pd |
|||
resources: |
|||
requests: |
|||
storage: 1Gi |
|||
|
|||
--- |
|||
apiVersion: v1 |
|||
kind: Pod |
|||
metadata: |
|||
name: web-server |
|||
spec: |
|||
containers: |
|||
- name: web-server |
|||
image: nginx |
|||
volumeMounts: |
|||
- mountPath: /var/lib/www/html |
|||
name: mypvc |
|||
volumes: |
|||
- name: mypvc |
|||
persistentVolumeClaim: |
|||
claimName: podpvc |
|||
readOnly: false |
|||
``` |
|||
|
|||
## GCP PD documentation |
|||
|
|||
You can find the official GCP Persistent Disk CSI driver installation documentation here: [GCP PD CSI Driver](https://github.com/kubernetes-sigs/gcp-compute-persistent-disk-csi-driver/blob/master/docs/kubernetes/user-guides/driver-install.md |
|||
) |
@ -0,0 +1,10 @@ |
|||
## GCP compute Persistent Disk CSI Driver credentials and parameters |
|||
## See docs/gcp-pd-csi.md for information about the implementation |
|||
|
|||
## Specify the path to the file containing the service account credentials |
|||
# gcp_pd_csi_sa_cred_file: "/my/safe/credentials/directory/cloud-sa.json" |
|||
|
|||
## To enable GCP Persistent Disk CSI driver, uncomment below |
|||
# gcp_pd_csi_enabled: true |
|||
# gcp_pd_csi_controller_replicas: 1 |
|||
# gcp_pd_csi_driver_image_tag: "v0.7.0-gke.0" |
@ -0,0 +1,3 @@ |
|||
--- |
|||
gcp_pd_csi_controller_replicas: 1 |
|||
gcp_pd_csi_driver_image_tag: "v0.7.0-gke.0" |
@ -0,0 +1,49 @@ |
|||
--- |
|||
- name: GCP PD CSI Driver | Check if cloud-sa.json exists |
|||
fail: |
|||
msg: "Credentials file cloud-sa.json is mandatory" |
|||
when: gcp_pd_csi_sa_cred_file is not defined or not gcp_pd_csi_sa_cred_file |
|||
tags: gcp-pd-csi-driver |
|||
|
|||
- name: GCP PD CSI Driver | Copy GCP credentials file |
|||
copy: |
|||
src: "{{ gcp_pd_csi_sa_cred_file }}" |
|||
dest: "{{ kube_config_dir }}/cloud-sa.json" |
|||
group: "{{ kube_cert_group }}" |
|||
mode: 0640 |
|||
when: inventory_hostname == groups['kube-master'][0] |
|||
tags: gcp-pd-csi-driver |
|||
|
|||
- name: GCP PD CSI Driver | Get base64 cloud-sa.json |
|||
slurp: |
|||
src: "{{ kube_config_dir }}/cloud-sa.json" |
|||
register: gcp_cred_secret |
|||
when: inventory_hostname == groups['kube-master'][0] |
|||
tags: gcp-pd-csi-driver |
|||
|
|||
- name: GCP PD CSI Driver | Generate Manifests |
|||
template: |
|||
src: "{{ item.file }}.j2" |
|||
dest: "{{ kube_config_dir }}/{{ item.file }}" |
|||
with_items: |
|||
- {name: gcp-pd-csi-cred-secret, file: gcp-pd-csi-cred-secret.yml} |
|||
- {name: gcp-pd-csi-setup, file: gcp-pd-csi-setup.yml} |
|||
- {name: gcp-pd-csi-controller, file: gcp-pd-csi-controller.yml} |
|||
- {name: gcp-pd-csi-node, file: gcp-pd-csi-node.yml} |
|||
register: gcp_pd_csi_manifests |
|||
when: inventory_hostname == groups['kube-master'][0] |
|||
tags: gcp-pd-csi-driver |
|||
|
|||
- name: GCP PD CSI Driver | Apply Manifests |
|||
kube: |
|||
kubectl: "{{ bin_dir }}/kubectl" |
|||
filename: "{{ kube_config_dir }}/{{ item.item.file }}" |
|||
state: "latest" |
|||
with_items: |
|||
- "{{ gcp_pd_csi_manifests.results }}" |
|||
when: |
|||
- inventory_hostname == groups['kube-master'][0] |
|||
- not item is skipped |
|||
loop_control: |
|||
label: "{{ item.item.file }}" |
|||
tags: gcp-pd-csi-driver |
@ -0,0 +1,74 @@ |
|||
kind: StatefulSet |
|||
apiVersion: apps/v1 |
|||
metadata: |
|||
name: csi-gce-pd-controller |
|||
namespace: kube-system |
|||
spec: |
|||
serviceName: "csi-gce-pd" |
|||
replicas: {{ gcp_pd_csi_controller_replicas }} |
|||
selector: |
|||
matchLabels: |
|||
app: gcp-compute-persistent-disk-csi-driver |
|||
template: |
|||
metadata: |
|||
labels: |
|||
app: gcp-compute-persistent-disk-csi-driver |
|||
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 |
|||
serviceAccountName: csi-gce-pd-controller-sa |
|||
priorityClassName: csi-gce-pd-controller |
|||
containers: |
|||
- name: csi-provisioner |
|||
image: {{ gcp_pd_csi_image_repo }}/csi-provisioner:{{ gcp_pd_csi_provisioner_image_tag }} |
|||
args: |
|||
- "--v=5" |
|||
- "--csi-address=/csi/csi.sock" |
|||
- "--feature-gates=Topology=true" |
|||
# - "--run-controller-service=false" # disable the controller service of the CSI driver |
|||
# - "--run-node-service=false" # disable the node service of the CSI driver |
|||
volumeMounts: |
|||
- name: socket-dir |
|||
mountPath: /csi |
|||
- name: csi-attacher |
|||
image: {{ gcp_pd_csi_image_repo }}/csi-attacher:{{ gcp_pd_csi_attacher_image_tag }} |
|||
args: |
|||
- "--v=5" |
|||
- "--csi-address=/csi/csi.sock" |
|||
volumeMounts: |
|||
- name: socket-dir |
|||
mountPath: /csi |
|||
- name: csi-resizer |
|||
image: {{ gcp_pd_csi_image_repo }}/csi-resizer:{{ gcp_pd_csi_resizer_image_tag }} |
|||
args: |
|||
- "--v=5" |
|||
- "--csi-address=/csi/csi.sock" |
|||
volumeMounts: |
|||
- name: socket-dir |
|||
mountPath: /csi |
|||
- name: gce-pd-driver |
|||
# Don't change base image without changing pdImagePlaceholder in |
|||
# test/k8s-integration/main.go |
|||
image: {{ gcp_pd_csi_image_repo }}/gcp-compute-persistent-disk-csi-driver:{{ gcp_pd_csi_driver_image_tag }} |
|||
args: |
|||
- "--v=5" |
|||
- "--endpoint=unix:/csi/csi.sock" |
|||
env: |
|||
- name: GOOGLE_APPLICATION_CREDENTIALS |
|||
value: "/etc/cloud-sa/cloud-sa.json" |
|||
volumeMounts: |
|||
- name: socket-dir |
|||
mountPath: /csi |
|||
- name: cloud-sa-volume |
|||
readOnly: true |
|||
mountPath: "/etc/cloud-sa" |
|||
volumes: |
|||
- name: socket-dir |
|||
emptyDir: {} |
|||
- name: cloud-sa-volume |
|||
secret: |
|||
secretName: cloud-sa |
|||
volumeClaimTemplates: [] |
@ -0,0 +1,8 @@ |
|||
--- |
|||
kind: Secret |
|||
apiVersion: v1 |
|||
metadata: |
|||
name: cloud-sa |
|||
namespace: kube-system |
|||
data: |
|||
cloud-sa.json: {{ gcp_cred_secret.content }} |
@ -0,0 +1,111 @@ |
|||
kind: DaemonSet |
|||
apiVersion: apps/v1 |
|||
metadata: |
|||
name: csi-gce-pd-node |
|||
namespace: kube-system |
|||
spec: |
|||
selector: |
|||
matchLabels: |
|||
app: gcp-compute-persistent-disk-csi-driver |
|||
template: |
|||
metadata: |
|||
labels: |
|||
app: gcp-compute-persistent-disk-csi-driver |
|||
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 |
|||
priorityClassName: csi-gce-pd-node |
|||
serviceAccountName: csi-gce-pd-node-sa |
|||
containers: |
|||
- name: csi-driver-registrar |
|||
image: {{ gcp_pd_csi_image_repo }}/csi-node-driver-registrar:{{ gcp_pd_csi_registrar_image_tag }} |
|||
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: |
|||
fieldRef: |
|||
fieldPath: spec.nodeName |
|||
volumeMounts: |
|||
- name: plugin-dir |
|||
mountPath: /csi |
|||
- 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: {{ gcp_pd_csi_image_repo }}/gcp-compute-persistent-disk-csi-driver:{{ gcp_pd_csi_driver_image_tag }} |
|||
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: |
|||
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 |
|||
# https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ |
|||
# See "special case". This will tolerate everything. Node component should |
|||
# be scheduled on all nodes. |
|||
tolerations: |
|||
- operator: Exists |
@ -0,0 +1,200 @@ |
|||
##### Node Service Account, Roles, RoleBindings |
|||
apiVersion: v1 |
|||
kind: ServiceAccount |
|||
metadata: |
|||
name: csi-gce-pd-node-sa |
|||
namespace: kube-system |
|||
|
|||
--- |
|||
##### Controller Service Account, Roles, Rolebindings |
|||
apiVersion: v1 |
|||
kind: ServiceAccount |
|||
metadata: |
|||
name: csi-gce-pd-controller-sa |
|||
namespace: kube-system |
|||
|
|||
--- |
|||
# xref: https://github.com/kubernetes-csi/external-provisioner/blob/master/deploy/kubernetes/rbac.yaml |
|||
kind: ClusterRole |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
metadata: |
|||
name: csi-gce-pd-provisioner-role |
|||
rules: |
|||
- apiGroups: [""] |
|||
resources: ["persistentvolumes"] |
|||
verbs: ["get", "list", "watch", "create", "delete"] |
|||
- apiGroups: [""] |
|||
resources: ["persistentvolumeclaims"] |
|||
verbs: ["get", "list", "watch", "update"] |
|||
- apiGroups: ["storage.k8s.io"] |
|||
resources: ["storageclasses"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: [""] |
|||
resources: ["events"] |
|||
verbs: ["list", "watch", "create", "update", "patch"] |
|||
- apiGroups: ["storage.k8s.io"] |
|||
resources: ["csinodes"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: [""] |
|||
resources: ["nodes"] |
|||
verbs: ["get", "list", "watch"] |
|||
|
|||
--- |
|||
kind: ClusterRoleBinding |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
metadata: |
|||
name: csi-gce-pd-controller-provisioner-binding |
|||
subjects: |
|||
- kind: ServiceAccount |
|||
name: csi-gce-pd-controller-sa |
|||
namespace: kube-system |
|||
roleRef: |
|||
kind: ClusterRole |
|||
name: csi-gce-pd-provisioner-role |
|||
apiGroup: rbac.authorization.k8s.io |
|||
|
|||
--- |
|||
# xref: https://github.com/kubernetes-csi/external-attacher/blob/master/deploy/kubernetes/rbac.yaml |
|||
kind: ClusterRole |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
metadata: |
|||
name: csi-gce-pd-attacher-role |
|||
rules: |
|||
- apiGroups: [""] |
|||
resources: ["persistentvolumes"] |
|||
verbs: ["get", "list", "watch", "update", "patch"] |
|||
- apiGroups: [""] |
|||
resources: ["nodes"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: ["storage.k8s.io"] |
|||
resources: ["csinodes"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: ["storage.k8s.io"] |
|||
resources: ["volumeattachments"] |
|||
verbs: ["get", "list", "watch", "update", "patch"] |
|||
- apiGroups: ["storage.k8s.io"] |
|||
resources: ["volumeattachments/status"] |
|||
verbs: ["patch"] |
|||
--- |
|||
|
|||
kind: ClusterRoleBinding |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
metadata: |
|||
name: csi-gce-pd-controller-attacher-binding |
|||
subjects: |
|||
- kind: ServiceAccount |
|||
name: csi-gce-pd-controller-sa |
|||
namespace: kube-system |
|||
roleRef: |
|||
kind: ClusterRole |
|||
name: csi-gce-pd-attacher-role |
|||
apiGroup: rbac.authorization.k8s.io |
|||
|
|||
--- |
|||
|
|||
apiVersion: scheduling.k8s.io/v1 |
|||
kind: PriorityClass |
|||
metadata: |
|||
name: csi-gce-pd-controller |
|||
value: 900000000 |
|||
globalDefault: false |
|||
description: "This priority class should be used for the GCE PD CSI driver controller deployment only." |
|||
|
|||
--- |
|||
|
|||
apiVersion: scheduling.k8s.io/v1 |
|||
kind: PriorityClass |
|||
metadata: |
|||
name: csi-gce-pd-node |
|||
value: 900001000 |
|||
globalDefault: false |
|||
description: "This priority class should be used for the GCE PD CSI driver node deployment only." |
|||
|
|||
--- |
|||
|
|||
# Resizer must be able to work with PVCs, PVs, SCs. |
|||
kind: ClusterRole |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
metadata: |
|||
name: csi-gce-pd-resizer-role |
|||
rules: |
|||
- apiGroups: [""] |
|||
resources: ["persistentvolumes"] |
|||
verbs: ["get", "list", "watch", "update", "patch"] |
|||
- apiGroups: [""] |
|||
resources: ["persistentvolumeclaims"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: [""] |
|||
resources: ["persistentvolumeclaims/status"] |
|||
verbs: ["update", "patch"] |
|||
- apiGroups: [""] |
|||
resources: ["events"] |
|||
verbs: ["list", "watch", "create", "update", "patch"] |
|||
|
|||
--- |
|||
kind: ClusterRoleBinding |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
metadata: |
|||
name: csi-gce-pd-resizer-binding |
|||
subjects: |
|||
- kind: ServiceAccount |
|||
name: csi-gce-pd-controller-sa |
|||
namespace: kube-system |
|||
roleRef: |
|||
kind: ClusterRole |
|||
name: csi-gce-pd-resizer-role |
|||
apiGroup: rbac.authorization.k8s.io |
|||
|
|||
--- |
|||
apiVersion: policy/v1beta1 |
|||
kind: PodSecurityPolicy |
|||
metadata: |
|||
name: csi-gce-pd-node-psp |
|||
spec: |
|||
seLinux: |
|||
rule: RunAsAny |
|||
supplementalGroups: |
|||
rule: RunAsAny |
|||
runAsUser: |
|||
rule: RunAsAny |
|||
fsGroup: |
|||
rule: RunAsAny |
|||
privileged: true |
|||
volumes: |
|||
- '*' |
|||
hostNetwork: true |
|||
allowedHostPaths: |
|||
- pathPrefix: "/var/lib/kubelet/plugins_registry/" |
|||
- pathPrefix: "/var/lib/kubelet" |
|||
- pathPrefix: "/var/lib/kubelet/plugins/pd.csi.storage.gke.io/" |
|||
- pathPrefix: "/dev" |
|||
- pathPrefix: "/etc/udev" |
|||
- pathPrefix: "/lib/udev" |
|||
- pathPrefix: "/run/udev" |
|||
- pathPrefix: "/sys" |
|||
--- |
|||
|
|||
kind: ClusterRole |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
metadata: |
|||
name: csi-gce-pd-node-deploy |
|||
rules: |
|||
- apiGroups: ['policy'] |
|||
resources: ['podsecuritypolicies'] |
|||
verbs: ['use'] |
|||
resourceNames: |
|||
- csi-gce-pd-node-psp |
|||
--- |
|||
|
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: csi-gce-pd-node |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: csi-gce-pd-node-deploy |
|||
subjects: |
|||
- kind: ServiceAccount |
|||
name: csi-gce-pd-node-sa |
|||
namespace: kube-system |
@ -0,0 +1,8 @@ |
|||
--- |
|||
# Choose between pd-standard and pd-ssd |
|||
gcp_pd_csi_volume_type: pd-standard |
|||
gcp_pd_regional_replication_enabled: false |
|||
gcp_pd_restrict_zone_replication: false |
|||
gcp_pd_restricted_zones: |
|||
- europe-west1-b |
|||
- europe-west1-c |
@ -0,0 +1,19 @@ |
|||
--- |
|||
- name: Kubernetes Persistent Volumes | Copy GCP PD CSI Storage Class template |
|||
template: |
|||
src: "gcp-pd-csi-storage-class.yml.j2" |
|||
dest: "{{ kube_config_dir }}/gcp-pd-csi-storage-class.yml" |
|||
register: manifests |
|||
when: |
|||
- inventory_hostname == groups['kube-master'][0] |
|||
|
|||
- name: Kubernetes Persistent Volumes | Add GCP PD CSI Storage Class |
|||
kube: |
|||
name: gcp-pd-csi |
|||
kubectl: "{{ bin_dir }}/kubectl" |
|||
resource: StorageClass |
|||
filename: "{{ kube_config_dir }}/gcp-pd-csi-storage-class.yml" |
|||
state: "latest" |
|||
when: |
|||
- inventory_hostname == groups['kube-master'][0] |
|||
- manifests.changed |
@ -0,0 +1,20 @@ |
|||
apiVersion: storage.k8s.io/v1 |
|||
kind: StorageClass |
|||
metadata: |
|||
name: csi-gce-pd |
|||
provisioner: pd.csi.storage.gke.io |
|||
parameters: |
|||
type: {{ gcp_pd_csi_volume_type }} |
|||
{% if gcp_pd_regional_replication_enabled %} |
|||
replication-type: regional-pd |
|||
{% endif %} |
|||
volumeBindingMode: WaitForFirstConsumer |
|||
{% if gcp_pd_restrict_zone_replication %} |
|||
allowedTopologies: |
|||
- matchLabelExpressions: |
|||
- key: topology.gke.io/zone |
|||
values: |
|||
{% for value in gcp_pd_restricted_zones %} |
|||
- {{ value }} |
|||
{% endfor %} |
|||
{% endif %} |
Write
Preview
Loading…
Cancel
Save