Skip to content

Commit 8a277d6

Browse files
authored
Merge pull request #3 from nellyk/main
Update to latest kubernetes version supported & update CAPZ to latest version
2 parents 391726b + 7867e92 commit 8a277d6

12 files changed

+398
-86
lines changed

.github/workflows/helm-release.yml

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
name: Release Charts
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
jobs:
9+
release:
10+
# depending on default permission settings for your org (contents being read-only or read-write for workloads), you will have to add permissions
11+
# see: https://docs.github.com/en/actions/security-guides/automatic-token-authentication#modifying-the-permissions-for-the-github_token
12+
permissions:
13+
contents: write
14+
runs-on: ubuntu-latest
15+
steps:
16+
- name: Checkout
17+
uses: actions/checkout@v3
18+
with:
19+
fetch-depth: 0
20+
21+
- name: Configure Git
22+
run: |
23+
git config user.name "$GITHUB_ACTOR"
24+
git config user.email "[email protected]"
25+
26+
- name: Install Helm
27+
uses: azure/setup-helm@v3
28+
29+
- name: Run chart-releaser
30+
uses: helm/[email protected]
31+
env:
32+
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

README.md

+60-31
Original file line numberDiff line numberDiff line change
@@ -70,43 +70,52 @@ Create a KIND cluster:
7070
kind create cluster --name capi-helm
7171
```
7272

73+
Identity: Two ways to authenticate to Azure, using a Service Principal or Managed Identity.
74+
75+
use a Service Principal:
76+
7377
Create a secret to include the password of the Service Principal identity created in Azure
7478
This secret will be referenced by the AzureClusterIdentity used by the AzureCluster
7579

7680
```bash
7781
kubectl create secret generic "${AZURE_CLUSTER_IDENTITY_SECRET_NAME}" --from-literal=clientSecret="${AZURE_CLIENT_SECRET}"
7882
```
7983

80-
Initialize Cluster API and install Azure CAPZ provider version 0.5.3(uses alphav4 capi)
84+
Use Managed Identity(recommended):
85+
86+
- Follow the steps on this link to create a managed identity and assign it to the AKS cluster resource group <https://capz.sigs.k8s.io/topics/identities#user-assigned-managed-identity>
87+
88+
Initialize Cluster API and install Azure CAPZ provider version v1.13.1(uses v1beta1 capi)
8189

8290
```bash
83-
clusterctl init --infrastructure azure:v0.5.3
91+
clusterctl init --infrastructure azure
8492
```
8593

8694
Deploy a cluster with Helm (please customize parameters as required)
8795

88-
Requirement: SSH public key~/.ssh/id_rsa.pub, to create a key use command "ssh-keygen -t rsa"
96+
**Using Service Principal:**
8997

9098
```bash
9199
helm install capz1 charts/azure-managed-cluster/ \
92100
--namespace default \
93101
--set subscriptionID="${AZURE_SUBSCRIPTION_ID}" \
94102
--set identity.clientId="${AZURE_CLIENT_ID}" \
103+
--set identity.clientSecret="${AZURE_CLIENT_SECRET}" \
104+
--set identity.type=ServicePrincipal \
95105
--set identity.tenantId="${AZURE_TENANT_ID}" \
96106
--set cluster.resourceGroupName=aksclusters \
97107
--set cluster.nodeResourceGroupName=capz1 \
98108
--set cluster.name=aks1 \
99-
--set controlplane.sshPublicKey="$(cat ~/.ssh/id_rsa.pub)" \
100-
--set agentpools[0].name=capz1np0 \
101-
--set agentpools[0].mode=System \
102-
--set agentpools[0].nodecount=1 \
103-
--set agentpools[0].sku=Standard_B2s \
104-
--set agentpools[0].osDiskSizeGB=100 \
105-
--set agentpools[1].name=capz1np1 \
106-
--set agentpools[1].mode=User \
107-
--set agentpools[1].nodecount=1 \
108-
--set agentpools[1].sku=Standard_B2s \
109-
--set agentpools[1].osDiskSizeGB=100
109+
--set agentpools.0.name=capz1np0 \
110+
--set agentpools.0.nodecount=1 \
111+
--set agentpools.0.sku=Standard_B4ms \
112+
--set agentpools.0.osDiskSizeGB=100 \
113+
--set agentpools.0.mode=System \
114+
--set agentpools.1.name=capz1np1 \
115+
--set agentpools.1.nodecount=1 \
116+
--set agentpools.1.sku=Standard_B4ms \
117+
--set agentpools.1.osDiskSizeGB=10 \
118+
--set agentpools.1.mode=User
110119
```
111120

112121
or more simply (after you edit the values file with your own values):
@@ -116,10 +125,29 @@ helm install capz1 charts/azure-managed-cluster/ --values aks1.yaml \
116125
--namespace default \
117126
--set controlplane.sshPublicKey="$(cat ~/.ssh/id_rsa.pub)" \
118127
--set subscriptionID="${AZURE_SUBSCRIPTION_ID}" \
119-
--set identity.clientId="${AZURE_CLIENT_ID}" \
120-
--set identity.tenantId="${AZURE_TENANT_ID}"
128+
--set identity.clientID="${AZURE_CLIENT_ID}" \
129+
--set identity.tenantID="${AZURE_TENANT_ID}" \
130+
--set identity.clientSecret="${AZURE_CLIENT_SECRET}" \
131+
--set identity.type=ServicePrincipal
121132
```
122133

134+
**Using Managed Identity**
135+
136+
NB: Ensure the AZURE_USER_ASSIGNED_IDENTITY_RESOURCE_ID is set by getting the resource id of the managed identity created in Azure
137+
138+
139+
```bash
140+
141+
helm install capz1 charts/azure-managed-cluster/ \
142+
--namespace default \
143+
--set subscriptionID="${AZURE_SUBSCRIPTION_ID}" \
144+
--set identity.clientID="${AZURE_CLIENT_ID}" \
145+
--set identity.tenantID="${AZURE_TENANT_ID}" \
146+
--set identity.type=UserAssignedMSI \
147+
--set identity.resourceID="${AZURE_USER_ASSIGNED_IDENTITY_RESOURCE_ID}"
148+
149+
150+
123151
Check the status with:
124152
```
125153
kubectl get cluster-api
@@ -129,7 +157,7 @@ kubectl logs -n capz-system -l control-plane=capz-controller-manager -c manager
129157
Get the credentials
130158
131159
```
132-
kubectl get secret {cluster-name}-kubeconfig -o yaml -o jsonpath={.data.value} | base64 --decode > aks1.kubeconfig
160+
kubectl get secret capi-helm-kubeconfig -o yaml -o jsonpath={.data.value} | base64 --decode > aks1.kubeconfig
133161
```
134162
135163
Test the cluster!
@@ -148,22 +176,22 @@ kubectl create namespace default2
148176
helm install capz2 charts/azure-managed-cluster/ \
149177
--namespace default2 \
150178
--set subscriptionID="${AZURE_SUBSCRIPTION_ID}" \
151-
--set identity.clientId="${AZURE_CLIENT_ID}" \
152-
--set identity.tenantId="${AZURE_TENANT_ID}" \
179+
--set identity.clientID="${AZURE_CLIENT_ID}" \
180+
--set identity.tenantID="${AZURE_TENANT_ID}" \]=
153181
--set cluster.resourceGroupName=aksclusters \
154182
--set cluster.nodeResourceGroupName=capz2 \
155183
--set cluster.name=aks2 \
156184
--set controlplane.sshPublicKey="$(cat ~/.ssh/id_rsa.pub)" \
157-
--set agentpools[0].name=capz2np0 \
158-
--set agentpools[0].mode=System \
159-
--set agentpools[0].nodecount=1 \
160-
--set agentpools[0].sku=Standard_B2s \
161-
--set agentpools[0].osDiskSizeGB=100 \
162-
--set agentpools[1].name=capz2np1 \
163-
--set agentpools[1].mode=User \
164-
--set agentpools[1].nodecount=1 \
165-
--set agentpools[1].sku=Standard_B2s \
166-
--set agentpools[1].osDiskSizeGB=100
185+
--set agentpools.0.name=capz2np0 \
186+
--set agentpools.0.nodecount=1 \
187+
--set agentpools.0.sku=Standard_B2s \
188+
--set agentpools.0.osDiskSizeGB=100 \
189+
--set agentpools.0.mode=System \
190+
--set agentpools.1.name=capz2np1 \
191+
--set agentpools.1.nodecount=1 \
192+
--set agentpools.1.sku=Standard_B2s \
193+
--set agentpools.1.osDiskSizeGB=10 \
194+
--set agentpools.1.mode=User
167195
```
168196

169197
or more simply (after you edit the values file with your own values):
@@ -173,8 +201,8 @@ helm install capz2 charts/azure-managed-cluster/ --values aks2.yaml \
173201
--namespace default2 \
174202
--set controlplane.sshPublicKey="$(cat ~/.ssh/id_rsa.pub)" \
175203
--set subscriptionID="${AZURE_SUBSCRIPTION_ID}" \
176-
--set identity.clientId="${AZURE_CLIENT_ID}" \
177-
--set identity.tenantId="${AZURE_TENANT_ID}"
204+
--set identity.clientID="${AZURE_CLIENT_ID}" \
205+
--set identity.tenantID"${AZURE_TENANT_ID}"
178206
```
179207

180208
Clean up:
@@ -184,5 +212,6 @@ helm delete capz1
184212
helm delete capz2 -n default2
185213
kubectl delete namespace default2
186214

215+
kind delete clusters capi
187216
kind delete clusters capi-helm
188217
```

aks1.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ controlplane:
3030
sshPublicKey: ""
3131

3232
## Kubernetes version
33-
kubernetes_version: "v1.21.2"
33+
kubernetes_version: "v1.28.3"
3434

3535
## Network policy, "calico" (for kubenet and azurecni) or "azure" (for azureCNI)
3636
networkPolicy: "calico"

aks2.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ controlplane:
3030
sshPublicKey: ""
3131

3232
## Kubernetes version
33-
kubernetes_version: "v1.21.2"
33+
kubernetes_version: "v1.28.3"
3434

3535
## Network policy, "calico" (for kubenet and azurecni) or "azure" (for azureCNI)
3636
networkPolicy: "calico"

article.md

+13-8
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,22 @@ Ready to roll! Deploy your first cluster with Helm:
3535
helm install capz1 charts/azure-managed-cluster/ \
3636
--set subscriptionID=12c7e9d6-967e-40c8-8b3e-4659a4ada3ef \
3737
--set cluster.resourceGroupName=aksclusters \
38+
--set cluster.location=westeurope \
39+
--set cluster.kubernetesVersion=v1.28.3 \
3840
--set cluster.nodeResourceGroupName=capz1 \
3941
--set cluster.name=aks1 \
4042
--set controlplane.sshPublicKey="$(cat ~/.ssh/id_rsa.pub)" \
41-
--set agentpools[0].name=capz1np0 \
42-
--set agentpools[0].nodecount=1 \
43-
--set agentpools[0].sku=Standard_B4ms \
44-
--set agentpools[0].osDiskSizeGB=100 \
45-
--set agentpools[1].name=capz1np1 \
46-
--set agentpools[1].nodecount=1 \
47-
--set agentpools[1].sku=Standard_B4ms \
48-
--set agentpools[1].osDiskSizeGB=10
43+
--set agentpools.0.name=capz1np0 \
44+
--set agentpools.0.nodecount=1 \
45+
--set agentpools.0.sku=Standard_B4ms \
46+
--set agentpools.0.osDiskSizeGB=100 \
47+
--set agentpools.0.mode=System \
48+
--set agentpools.1.name=capz1np1 \
49+
--set agentpools.1.nodecount=1 \
50+
--set agentpools.1.sku=Standard_B4ms \
51+
--set agentpools.1.osDiskSizeGB=10 \
52+
--set agentpools.1.mode=User
53+
4954

5055
If you like you can use a values.yaml file:
5156

Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1-
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4
1+
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
22
kind: AzureClusterIdentity
33
metadata:
44
labels:
55
clusterctl.cluster.x-k8s.io/move-hierarchy: "true"
66
name: {{ $.Values.identity.clusterIdentityName }}
77
spec:
8-
allowedNamespaces: {}
9-
clientID: {{ $.Values.identity.clientId }}
8+
allowedNamespaces:
9+
list:
10+
- {{ $.Values.identity.clusterIdentitySecretNamespace }}
1011
clientSecret:
1112
name: {{ $.Values.identity.clusterIdentitySecretName }}
1213
namespace: {{ $.Values.identity.clusterIdentitySecretNamespace }}
13-
tenantID: {{ $.Values.identity.tenantId }}
14-
type: ServicePrincipal
14+
clientID: {{ $.Values.identity.clientID }}
15+
tenantID: {{ $.Values.identity.tenantID }}
16+
type: {{ $.Values.identity.type }}
17+
resourceID: {{ $.Values.identity.resourceID }}

charts/azure-managed-cluster/templates/agentpool.yaml

+45-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,53 @@
11
{{- range $agentpools := .Values.agentpools }}
2-
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4
2+
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
33
kind: AzureManagedMachinePool
44
metadata:
55
name: {{ $agentpools.name }}
66
spec:
7-
mode: {{ $agentpools.mode }}
7+
name: {{ $agentpools.name }}
8+
scaling:
9+
minSize: {{ $agentpools.scaling.minSize }}
10+
maxSize: {{ $agentpools.scaling.maxSize }}
11+
additionalTags:
12+
{{- range $additionalTags := $agentpools.additionalTags }}
13+
{{ $additionalTags.key }}: {{ $additionalTags.value }}
14+
{{- end }}
815
osDiskSizeGB: {{ $agentpools.osDiskSizeGB }}
916
sku: {{ $agentpools.sku }}
17+
availabilityZones:
18+
{{- range $agentpools.availabilityZones }}
19+
- {{ . | quote }}
20+
{{- end }}
21+
nodeLabels:
22+
{{- range $nodeLabels := $agentpools.nodeLabels }}
23+
{{ $nodeLabels.key }}: {{ $nodeLabels.value }}
24+
{{- end }}
25+
taints:
26+
{{- range $taints := $agentpools.taints }}
27+
- key: {{ $taints.key }}
28+
value: {{ $taints.value }}
29+
effect: {{ $taints.effect }}
30+
{{- end }}
31+
mode: {{ $agentpools.mode }}
32+
maxPods: {{ $agentpools.maxPods }}
33+
osDiskType : {{ $agentpools.osDiskType }}
34+
enableUltraSSD : {{ $agentpools.enableUltraSSD }}
35+
osType : {{ $agentpools.osType }}
36+
enableNodePublicIP : {{ $agentpools.enableNodePublicIP }}
37+
nodePublicIPPrefixID : {{ $agentpools.nodePublicIPPrefixID }}
38+
scaleSetPriority : {{ $agentpools.scaleSetPriority }}
39+
scaleDownMode : {{ $agentpools.scaleDownMode }}
40+
spotMaxPrice : {{ $agentpools.spotMaxPrice }}
41+
kubeletConfig : {{ $agentpools.kubeletConfig }}
42+
kubeletDiskType : {{ $agentpools.kubeletDiskType }}
43+
linuxOSConfig : {{ $agentpools.linuxOSConfig }}
44+
subnetName : {{ $agentpools.subnetName }}
45+
enableFIPS : {{ $agentpools.enableFIPS }}
46+
enableEncryptionAtHost : {{ $agentpools.enableEncryptionAtHost }}
47+
48+
1049
---
11-
apiVersion: cluster.x-k8s.io/v1alpha4
50+
apiVersion: cluster.x-k8s.io/v1beta1
1251
kind: MachinePool
1352
metadata:
1453
name: {{ $agentpools.name }}
@@ -22,10 +61,11 @@ spec:
2261
dataSecretName: ""
2362
clusterName: {{ $.Values.cluster.name }}
2463
infrastructureRef:
25-
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha4
64+
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
2665
kind: AzureManagedMachinePool
2766
name: {{ $agentpools.name }}
2867
namespace: {{ $.Release.Namespace }}
2968
version: {{ $.Values.controlplane.kubernetes_version }}
3069
---
31-
{{- end }}
70+
{{- end }}
71+

0 commit comments

Comments
 (0)