Skip to content

Commit b445b40

Browse files
authored
azure disks - 1 (#187)
* azure disks - 1 * +README for Azure
1 parent cee05f2 commit b445b40

File tree

6 files changed

+128
-8
lines changed

6 files changed

+128
-8
lines changed

venonactl/README.md

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,11 +189,63 @@ codefresh install runtime [options] \
189189
--set-value=Storage.AvailabilityZone=us-east-1d \
190190
--kube-node-selector=failure-domain.beta.kubernetes.io/zone=us-east-1d \
191191
[--set-value Storage.VolumeProvisioner.NodeSelector=kubernetes.io/role=master] \
192-
[--set-value Storage.AwsAccessKeyId=ABCDF --set-value Storage.AwsSecretAccessKey=ZYXWV] \
192+
[--set-value Storage.AwsAccessKeyId=ABCDF --set-value Storage.AwsSecretAccessKey=ZYXWV]\
193193
[--set-value=Storage.Encrypted=true] \
194194
[--set-value=Storage.KmsKeyId=<key id>]
195195
```
196196

197+
##### **Azure Disk**
198+
*Prerequisite:* volume provisioner (dind-volume-provisioner) should have permissions to create/delete/get Auzure Disks
199+
200+
Minimal iam Role for dind-volume-provisioner - dind-volume-provisioner-role.json:
201+
```json
202+
{
203+
"Name": "CodefreshDindVolumeProvisioner",
204+
"Description": "Perform create/delete/get disks",
205+
"IsCustom": true,
206+
"Actions": [
207+
"Microsoft.Compute/disks/read",
208+
"Microsoft.Compute/disks/write",
209+
"Microsoft.Compute/disks/delete"
210+
211+
],
212+
"AssignableScopes": ["/subscriptions/<your-subsripton_id>"]
213+
}
214+
```
215+
If you use AKS with managed [identities for node group](https://docs.microsoft.com/en-us/azure/aks/use-managed-identity), you can run the script below to assign CodefreshDindVolumeProvisioner role to aks node identity:
216+
```bash
217+
export ROLE_DEFINITIN_FILE=dind-volume-provisioner-role.json
218+
export SUBSCRIPTION_ID=$(az account show --query "id" | xargs echo )
219+
export RESOURCE_GROUP=codefresh-rt1
220+
export AKS_NAME=codefresh-rt1
221+
export LOCATION=$(az aks show -g $RESOURCE_GROUP -n $AKS_NAME --query location | xargs echo)
222+
export NODES_RESOURCE_GROUP=MC_${RESOURCE_GROUP}_${AKS_NAME}_${LOCATION}
223+
export NODE_SERVICE_PRINCIPAL=$(az aks show -g $RESOURCE_GROUP -n $AKS_NAME --query identityProfile.kubeletidentity.objectId | xargs echo)
224+
225+
az role definition create --role-definition @${ROLE_DEFINITIN_FILE}
226+
az role assignment create --assignee $NODE_SERVICE_PRINCIPAL --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$NODES_RESOURCE_GROUP --role CodefreshDindVolumeProvisioner
227+
```
228+
229+
Now create runner with `--set-value Storage.Backend=azuredisk --set Storage.VolumeProvisioner.MountAzureJson=true`:
230+
```
231+
codefresh runner init --set-value Storage.Backend=azuredisk --set Storage.VolumeProvisioner.MountAzureJson=true
232+
```
233+
Or using runner-values.yaml file like below:
234+
```yaml
235+
# CodefreshHost: https://g.codefresh.io
236+
# Token: ******
237+
# Namespace: default
238+
# Context: codefresh-rt1
239+
# RuntimeInCluster: true
240+
Storage:
241+
Backend: azuredisk
242+
VolumeProvisioner:
243+
MountAzureJson: true
244+
```
245+
```
246+
codefresh runner init --values runner-values.yaml
247+
```
248+
197249
#### Kubernetes RBAC
198250
Installation of Venona on Kubernetes cluster installing 2 groups of objects,
199251
Each one has own RBAC needs and therefore, created roles(and cluster-roles)

venonactl/hack/build-linux.sh

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
#!/bin/bash
22
set -e
3-
OUTFILE=$PWD/venonactl-linux
4-
go generate ${PWD}/hack/generate.go
5-
go fmt ${PWD}/pkg/obj/kubeobj/kubeobj.go
6-
go fmt ${PWD}/pkg/templates/kubernetes/templates.go
3+
DIR=$(realpath $(dirname $0)/..)
4+
OUTFILE=${DIR}/venonactl-linux
5+
go generate ${DIR}/hack/generate.go
6+
go fmt ${DIR}/pkg/obj/kubeobj/kubeobj.go
7+
go fmt ${DIR}/pkg/templates/kubernetes/templates.go
78

8-
GOOS=linux go build -gcflags=all="-N -l" -ldflags '-X github.com/codefresh-io/venona/venonactl/cmd.localDevFlow=true' -o $OUTFILE .
9+
GOOS=linux go build -gcflags=all="-N -l" -ldflags '-X github.com/codefresh-io/venona/venonactl/cmd.localDevFlow=true' -o $OUTFILE ${DIR}
910

1011
chmod +x $OUTFILE

venonactl/pkg/store/store.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ func (s *Values) BuildValues() map[string]interface{} {
138138
"Image": "codefresh/dind-volume-provisioner:v24",
139139
"NodeSelector": s.KubernetesAPI.NodeSelector,
140140
"Tolerations": s.KubernetesAPI.Tolerations,
141+
"MountAzureJson": false,
141142
},
142143
},
143144
"Monitor": map[string]interface{}{

venonactl/pkg/templates/kubernetes/deployment.dind-volume-provisioner.vp.yaml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,30 @@ spec:
6868
{{- if .Storage.GoogleServiceAccount }}
6969
- name: GOOGLE_APPLICATION_CREDENTIALS
7070
value: /etc/dind-volume-provisioner/credentials/google-service-account.json
71+
{{- end }}
72+
{{- if .Storage.VolumeProvisioner.MountAzureJson }}
73+
- name: AZURE_CREDENTIAL_FILE
74+
value: "/etc/kubernetes/azure.json"
75+
{{- end }}
7176
volumeMounts:
77+
{{- if .Storage.VolumeProvisioner.MountAzureJson }}
78+
- name: azure-json
79+
readOnly: true
80+
mountPath: "/etc/kubernetes/azure.json"
81+
{{- end }}
82+
{{- if .Storage.GoogleServiceAccount }}
7283
- name: credentials
7384
readOnly: true
7485
mountPath: "/etc/dind-volume-provisioner/credentials"
86+
{{- end }}
7587
volumes:
88+
{{- if .Storage.VolumeProvisioner.MountAzureJson }}
89+
- name: azure-json
90+
hostPath:
91+
path: /etc/kubernetes/azure.json
92+
type: File
93+
{{- end }}
94+
{{- if .Storage.GoogleServiceAccount }}
7695
- name: credentials
7796
secret:
7897
secretName: dind-volume-provisioner-{{ .AppName }}

venonactl/pkg/templates/kubernetes/storageclass.dind-volume-provisioner.vp.yaml

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,20 @@ parameters:
3434
{{ if .Storage.KmsKeyId }}
3535
# KMS Key ID
3636
kmsKeyId: {{ .Storage.KmsKeyId }}
37-
{{- end }}
37+
{{- end }}
38+
{{- else if or (eq .Storage.Backend "azuredisk") (eq .Storage.Backend "azuredisk-csi")}}
39+
## azuredisk or azuredisk-csi
40+
volumeBackend: {{ .Storage.Backend }}
41+
42+
kind: managed
43+
skuName: {{ .Storage.SkuName | default "Premium_LRS" }}
44+
fsType: {{ .Storage.FsType | default "ext4" }}
45+
cachingMode: {{ .Storage.CachingMode | default "None" }}
46+
{{- if .Storage.AzureLocation }}
47+
location: {{ .Storage.AzureLocation }}
48+
{{- end }}
49+
{{- if .Storage.AzureResourceGroup }}
50+
resourceGroup: {{ .Storage.AzureResourceGroup }}
51+
{{- end }}
3852
{{- end }}
3953
{{- end }}

venonactl/pkg/templates/kubernetes/templates.go

Lines changed: 34 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)