Skip to content

Commit 47ebb3a

Browse files
authored
Merge pull request #527 from sozercan/external-cp
External cloud provider
2 parents 9fb2f9e + 673ae47 commit 47ebb3a

File tree

4 files changed

+475
-0
lines changed

4 files changed

+475
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# External Cloud Provider
2+
3+
To deploy a cluster using [external cloud provider](https://github.com/kubernetes-sigs/cloud-provider-azure), create a cluster configuration with the [external cloud provider template](../../templates/cluster-template-external-cloud-provider.yaml).
4+
5+
After control plane is up and running, deploy external cloud provider components (`cloud-controller-manager` and `cloud-node-manager`) using:
6+
7+
```bash
8+
kubectl --kubeconfig=./${CLUSTER_NAME}.kubeconfig \
9+
apply -f templates/addons/cloud-controller-manager.yaml
10+
```
11+
12+
```bash
13+
kubectl --kubeconfig=./${CLUSTER_NAME}.kubeconfig \
14+
apply -f templates/addons/cloud-node-manager.yaml
15+
```
16+
17+
After components are deployed, you should see following pods in `Running` state:
18+
19+
```bash
20+
kube-system cloud-controller-manager 1/1 Running 0 41s
21+
kube-system cloud-node-manager-5pklx 1/1 Running 0 26s
22+
kube-system cloud-node-manager-hbbqt 1/1 Running 0 30s
23+
kube-system cloud-node-manager-mfsdg 1/1 Running 0 39s
24+
kube-system cloud-node-manager-qrz74 1/1 Running 0 24s
25+
```
Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
apiVersion: v1
2+
kind: ServiceAccount
3+
metadata:
4+
name: cloud-controller-manager
5+
namespace: kube-system
6+
---
7+
apiVersion: rbac.authorization.k8s.io/v1
8+
kind: ClusterRole
9+
metadata:
10+
name: system:cloud-controller-manager
11+
annotations:
12+
rbac.authorization.kubernetes.io/autoupdate: "true"
13+
labels:
14+
k8s-app: cloud-controller-manager
15+
rules:
16+
- apiGroups:
17+
- ""
18+
resources:
19+
- events
20+
verbs:
21+
- create
22+
- patch
23+
- update
24+
- apiGroups:
25+
- ""
26+
resources:
27+
- nodes
28+
verbs:
29+
- "*"
30+
- apiGroups:
31+
- ""
32+
resources:
33+
- nodes/status
34+
verbs:
35+
- patch
36+
- apiGroups:
37+
- ""
38+
resources:
39+
- services
40+
verbs:
41+
- list
42+
- patch
43+
- update
44+
- watch
45+
- apiGroups:
46+
- ""
47+
resources:
48+
- services/status
49+
verbs:
50+
- list
51+
- patch
52+
- update
53+
- watch
54+
- apiGroups:
55+
- ""
56+
resources:
57+
- serviceaccounts
58+
verbs:
59+
- create
60+
- get
61+
- list
62+
- watch
63+
- update
64+
- apiGroups:
65+
- ""
66+
resources:
67+
- persistentvolumes
68+
verbs:
69+
- get
70+
- list
71+
- update
72+
- watch
73+
- apiGroups:
74+
- ""
75+
resources:
76+
- endpoints
77+
verbs:
78+
- create
79+
- get
80+
- list
81+
- watch
82+
- update
83+
- apiGroups:
84+
- ""
85+
resources:
86+
- secrets
87+
verbs:
88+
- get
89+
- list
90+
- watch
91+
- apiGroups:
92+
- coordination.k8s.io
93+
resources:
94+
- leases
95+
verbs:
96+
- get
97+
- create
98+
- update
99+
---
100+
kind: ClusterRoleBinding
101+
apiVersion: rbac.authorization.k8s.io/v1
102+
metadata:
103+
name: system:cloud-controller-manager
104+
roleRef:
105+
apiGroup: rbac.authorization.k8s.io
106+
kind: ClusterRole
107+
name: system:cloud-controller-manager
108+
subjects:
109+
- kind: ServiceAccount
110+
name: cloud-controller-manager
111+
namespace: kube-system
112+
- kind: User
113+
name: cloud-controller-manager
114+
---
115+
apiVersion: rbac.authorization.k8s.io/v1
116+
kind: RoleBinding
117+
metadata:
118+
name: system:cloud-controller-manager:extension-apiserver-authentication-reader
119+
namespace: kube-system
120+
roleRef:
121+
apiGroup: rbac.authorization.k8s.io
122+
kind: Role
123+
name: extension-apiserver-authentication-reader
124+
subjects:
125+
- kind: ServiceAccount
126+
name: cloud-controller-manager
127+
namespace: kube-system
128+
- apiGroup: ""
129+
kind: User
130+
name: cloud-controller-manager
131+
---
132+
apiVersion: v1
133+
kind: Pod
134+
metadata:
135+
name: cloud-controller-manager
136+
namespace: kube-system
137+
labels:
138+
tier: control-plane
139+
component: cloud-controller-manager
140+
spec:
141+
priorityClassName: system-node-critical
142+
hostNetwork: true
143+
nodeSelector:
144+
node-role.kubernetes.io/master: ""
145+
tolerations:
146+
- key: node.cloudprovider.kubernetes.io/uninitialized
147+
value: "true"
148+
effect: NoSchedule
149+
- key: node-role.kubernetes.io/master
150+
effect: NoSchedule
151+
serviceAccountName: cloud-controller-manager
152+
containers:
153+
- name: cloud-controller-manager
154+
image: mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v0.5.0
155+
imagePullPolicy: IfNotPresent
156+
command: ["cloud-controller-manager"]
157+
args:
158+
- --allocate-node-cidrs=false
159+
- --cloud-config=/etc/kubernetes/azure.json
160+
- --cloud-provider=azure
161+
- --cluster-cidr=192.168.0.0/16
162+
- --configure-cloud-routes=true
163+
- --controllers=*
164+
- --leader-elect=true
165+
- --route-reconciliation-period=10s
166+
- --v=2
167+
- --profiling=false
168+
resources:
169+
requests:
170+
cpu: 100m
171+
memory: 128Mi
172+
limits:
173+
cpu: "4"
174+
memory: 2Gi
175+
volumeMounts:
176+
- name: etc-kubernetes
177+
mountPath: /etc/kubernetes
178+
- name: etc-ssl
179+
mountPath: /etc/ssl
180+
readOnly: true
181+
volumes:
182+
- name: etc-kubernetes
183+
hostPath:
184+
path: /etc/kubernetes
185+
- name: etc-ssl
186+
hostPath:
187+
path: /etc/ssl
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
apiVersion: v1
2+
kind: ServiceAccount
3+
metadata:
4+
labels:
5+
k8s-app: cloud-node-manager
6+
name: cloud-node-manager
7+
namespace: kube-system
8+
---
9+
kind: ClusterRole
10+
apiVersion: rbac.authorization.k8s.io/v1
11+
metadata:
12+
name: cloud-node-manager
13+
labels:
14+
k8s-app: cloud-node-manager
15+
rules:
16+
- apiGroups: [""]
17+
resources: ["nodes"]
18+
verbs: ["watch", "list", "get", "update", "patch"]
19+
---
20+
apiVersion: rbac.authorization.k8s.io/v1
21+
kind: ClusterRoleBinding
22+
metadata:
23+
name: cloud-node-manager
24+
labels:
25+
k8s-app: cloud-node-manager
26+
roleRef:
27+
apiGroup: rbac.authorization.k8s.io
28+
kind: ClusterRole
29+
name: cloud-node-manager
30+
subjects:
31+
- kind: ServiceAccount
32+
name: cloud-node-manager
33+
namespace: kube-system
34+
---
35+
apiVersion: apps/v1
36+
kind: DaemonSet
37+
metadata:
38+
name: cloud-node-manager
39+
namespace: kube-system
40+
labels:
41+
component: cloud-node-manager
42+
spec:
43+
selector:
44+
matchLabels:
45+
k8s-app: cloud-node-manager
46+
template:
47+
metadata:
48+
labels:
49+
k8s-app: cloud-node-manager
50+
annotations:
51+
cluster-autoscaler.kubernetes.io/daemonset-pod: "true"
52+
spec:
53+
priorityClassName: system-node-critical
54+
serviceAccountName: cloud-node-manager
55+
hostNetwork: true # required to fetch correct hostname
56+
nodeSelector:
57+
kubernetes.io/os: linux
58+
tolerations:
59+
- key: CriticalAddonsOnly
60+
operator: Exists
61+
- key: node-role.kubernetes.io/master
62+
effect: NoSchedule
63+
- operator: "Exists"
64+
effect: NoExecute
65+
- operator: "Exists"
66+
effect: NoSchedule
67+
containers:
68+
- name: cloud-node-manager
69+
image: mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v0.5.0
70+
imagePullPolicy: IfNotPresent
71+
command:
72+
- cloud-node-manager
73+
- --node-name=$(NODE_NAME)
74+
env:
75+
- name: NODE_NAME
76+
valueFrom:
77+
fieldRef:
78+
fieldPath: spec.nodeName
79+
resources:
80+
requests:
81+
cpu: 50m
82+
memory: 50Mi
83+
limits:
84+
cpu: 2000m
85+
memory: 512Mi

0 commit comments

Comments
 (0)