Skip to content

Commit 0751387

Browse files
authored
Merge pull request #15 from bzub/bootkube
Bootkube Integration
2 parents 972cb96 + 221233e commit 0751387

File tree

5 files changed

+192
-0
lines changed

5 files changed

+192
-0
lines changed

Documentation/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Kube-router Documentation
2+
3+
## Getting Started
4+
5+
- [General Setup](/README.md#getting-started)
6+
- [Bootkube Deployment](bootkube.md)

Documentation/bootkube.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# Bootkube Integration
2+
3+
The following instructions and examples demonstrate how to create a new
4+
[Bootkube](https://github.com/kubernetes-incubator/bootkube) provisioned
5+
Kubernetes cluster using kube-router in place of kube-proxy and flannel.
6+
7+
## Asset Creation
8+
9+
Follow the
10+
[documentation](https://github.com/kubernetes-incubator/bootkube#guides) for
11+
your environment and setup arguments for `bootkube render`.
12+
13+
For example:
14+
```
15+
bootkube render --asset-dir=${PWD}/assets --api-servers=https://kube-api-dev.zbrbdl:443 --api-server-alt-names=DNS=kube-api-dev.zbrbdl --etcd-servers="http://127.0.0.1:2379"
16+
Writing asset: /home/bzub/assets/manifests/kube-scheduler.yaml
17+
Writing asset: /home/bzub/assets/manifests/kube-scheduler-disruption.yaml
18+
Writing asset: /home/bzub/assets/manifests/kube-controller-manager-disruption.yaml
19+
Writing asset: /home/bzub/assets/manifests/kube-dns-deployment.yaml
20+
Writing asset: /home/bzub/assets/manifests/pod-checkpointer.yaml
21+
Writing asset: /home/bzub/assets/manifests/kube-flannel.yaml
22+
Writing asset: /home/bzub/assets/manifests/kube-system-rbac-role-binding.yaml
23+
Writing asset: /home/bzub/assets/manifests/kube-controller-manager.yaml
24+
Writing asset: /home/bzub/assets/manifests/kube-apiserver.yaml
25+
Writing asset: /home/bzub/assets/manifests/kube-proxy.yaml
26+
Writing asset: /home/bzub/assets/manifests/kube-flannel-cfg.yaml
27+
Writing asset: /home/bzub/assets/manifests/kube-dns-svc.yaml
28+
Writing asset: /home/bzub/assets/bootstrap-manifests/bootstrap-apiserver.yaml
29+
Writing asset: /home/bzub/assets/bootstrap-manifests/bootstrap-controller-manager.yaml
30+
Writing asset: /home/bzub/assets/bootstrap-manifests/bootstrap-scheduler.yaml
31+
Writing asset: /home/bzub/assets/tls/ca.key
32+
Writing asset: /home/bzub/assets/tls/ca.crt
33+
Writing asset: /home/bzub/assets/tls/apiserver.key
34+
Writing asset: /home/bzub/assets/tls/apiserver.crt
35+
Writing asset: /home/bzub/assets/tls/service-account.key
36+
Writing asset: /home/bzub/assets/tls/service-account.pub
37+
Writing asset: /home/bzub/assets/tls/kubelet.key
38+
Writing asset: /home/bzub/assets/tls/kubelet.crt
39+
Writing asset: /home/bzub/assets/auth/kubeconfig
40+
Writing asset: /home/bzub/assets/manifests/kube-apiserver-secret.yaml
41+
Writing asset: /home/bzub/assets/manifests/kube-controller-manager-secret.yaml
42+
```
43+
44+
## Kube-router Installation
45+
46+
Next move/delete the manifests for kube-proxy and flannel from
47+
`assets/manifests` and replace them with the
48+
[kube-router.yaml](/contrib/bootkube/kube-router.yaml) and
49+
[kube-router-cfg.yaml](/contrib/bootkube/kube-router-cfg.yaml) files provided in
50+
this repo.
51+
```
52+
rm assets/manifests/kube-flannel{,-cfg}.yaml assets/manifests/kube-proxy.yaml
53+
curl -L https://raw.githubusercontent.com/cloudnativelabs/kube-router/bootkube/contrib/bootkube/kube-router-cfg.yaml -o assets/manifests/kube-router-cfg.yaml
54+
curl -L https://raw.githubusercontent.com/cloudnativelabs/kube-router/bootkube/contrib/bootkube/kube-router.yaml -o assets/manifests/kube-router.yaml
55+
```
56+
57+
## Cluster Startup
58+
59+
Finally, proceed by following the Bootkube documentation, which generally
60+
involves starting Kubelet and running `bootkube start` referring to your assets
61+
directory on a new Kubernetes node.
62+
63+
After starting multiple master nodes, our example cluster looks like this:
64+
```
65+
$ kubectl -n kube-system get pods,services
66+
NAME READY STATUS RESTARTS AGE IP NODE
67+
po/kube-apiserver-gztjp 1/1 Running 0 15h 10.10.3.2 node2-dev.zbrbdl
68+
po/kube-apiserver-h55t7 1/1 Running 0 15h 10.10.3.3 node3-dev.zbrbdl
69+
po/kube-apiserver-qn5xm 1/1 Running 2 15h 10.10.3.1 node1-dev.zbrbdl
70+
po/kube-controller-manager-3052101514-kp121 1/1 Running 1 15h 10.2.0.5 node1-dev.zbrbdl
71+
po/kube-controller-manager-3052101514-n4q9p 1/1 Running 2 15h 10.2.0.6 node1-dev.zbrbdl
72+
po/kube-dns-2431531914-pr9lg 3/3 Running 0 15h 10.2.0.3 node1-dev.zbrbdl
73+
po/kube-router-ckdj1 1/1 Running 15 15h 10.10.3.3 node3-dev.zbrbdl
74+
po/kube-router-dcgbr 1/1 Running 15 15h 10.10.3.1 node1-dev.zbrbdl
75+
po/kube-router-n0vcn 1/1 Running 15 15h 10.10.3.2 node2-dev.zbrbdl
76+
po/kube-scheduler-2172662190-g4q3w 1/1 Running 4 15h 10.2.0.2 node1-dev.zbrbdl
77+
po/kube-scheduler-2172662190-hcq3t 1/1 Running 2 15h 10.2.0.4 node1-dev.zbrbdl
78+
po/pod-checkpointer-jlfsv 1/1 Running 0 15h 10.10.3.1 node1-dev.zbrbdl
79+
po/pod-checkpointer-jlfsv-node1-dev.zbrbdl 1/1 Running 0 15h 10.10.3.1 node1-dev.zbrbdl
80+
po/pod-checkpointer-lhckt 1/1 Running 0 15h 10.10.3.3 node3-dev.zbrbdl
81+
po/pod-checkpointer-lhckt-node3-dev.zbrbdl 1/1 Running 0 15h 10.10.3.3 node3-dev.zbrbdl
82+
po/pod-checkpointer-tsbkh 1/1 Running 0 15h 10.10.3.2 node2-dev.zbrbdl
83+
po/pod-checkpointer-tsbkh-node2-dev.zbrbdl 1/1 Running 0 15h 10.10.3.2 node2-dev.zbrbdl
84+
85+
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
86+
svc/kube-dns 10.3.0.10 <none> 53/UDP,53/TCP 15h k8s-app=kube-dns
87+
```

contrib/bootkube/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../Documentation/bootkube.md
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: kube-router-cfg
5+
namespace: kube-system
6+
labels:
7+
tier: node
8+
k8s-app: kube-router
9+
data:
10+
cni-conf.json: |
11+
{
12+
"name":"kubernetes",
13+
"type":"bridge",
14+
"bridge":"kube-bridge",
15+
"isDefaultGateway":true,
16+
"ipam": {
17+
"type":"host-local"
18+
}
19+
}

contrib/bootkube/kube-router.yaml

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
apiVersion: extensions/v1beta1
2+
kind: DaemonSet
3+
metadata:
4+
labels:
5+
k8s-app: kube-router
6+
tier: node
7+
name: kube-router
8+
namespace: kube-system
9+
spec:
10+
template:
11+
metadata:
12+
labels:
13+
k8s-app: kube-router
14+
tier: node
15+
annotations:
16+
scheduler.alpha.kubernetes.io/critical-pod: ''
17+
pod.beta.kubernetes.io/init-containers: '[
18+
{
19+
"name": "install-cni",
20+
"image": "busybox",
21+
"command": [ "/bin/sh", "-c", "set -e -x; if [ ! -f /etc/cni/net.d/10-kuberouter.conf ]; then TMP=/etc/cni/net.d/.tmp-kuberouter-cfg; cp /etc/kube-router/cni-conf.json ${TMP}; mv ${TMP} /etc/cni/net.d/10-kuberouter.conf; fi" ],
22+
"volumeMounts": [
23+
{
24+
"name": "cni",
25+
"mountPath": "/etc/cni/net.d"
26+
},
27+
{
28+
"name": "kube-router-cfg",
29+
"mountPath": "/etc/kube-router"
30+
}
31+
]
32+
}
33+
]'
34+
spec:
35+
containers:
36+
- name: kube-router
37+
image: cloudnativelabs/kube-router
38+
imagePullPolicy: Always
39+
args:
40+
- --run-router=true
41+
- --run-firewall=true
42+
- --run-service-proxy=true
43+
- --kubeconfig=/etc/kubernetes/kubeconfig
44+
env:
45+
- name: NODE_NAME
46+
valueFrom:
47+
fieldRef:
48+
fieldPath: spec.nodeName
49+
securityContext:
50+
privileged: true
51+
volumeMounts:
52+
- name: lib-modules
53+
mountPath: /lib/modules
54+
readOnly: true
55+
- name: cni
56+
mountPath: /etc/cni/net.d
57+
- name: kubeconfig
58+
mountPath: /etc/kubernetes/kubeconfig
59+
readOnly: true
60+
hostNetwork: true
61+
tolerations:
62+
- key: CriticalAddonsOnly
63+
operator: Exists
64+
- effect: NoSchedule
65+
key: node-role.kubernetes.io/master
66+
operator: Exists
67+
volumes:
68+
- hostPath:
69+
path: /lib/modules
70+
name: lib-modules
71+
- hostPath:
72+
path: /etc/kubernetes/cni/net.d
73+
name: cni
74+
- name: kubeconfig
75+
hostPath:
76+
path: /etc/kubernetes/kubeconfig
77+
- name: kube-router-cfg
78+
configMap:
79+
name: kube-router-cfg

0 commit comments

Comments
 (0)