Skip to content

Commit 8ab2b8e

Browse files
committed
Merge version v0.8.0
2 parents c181314 + f974696 commit 8ab2b8e

18 files changed

+480
-210
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Deploy Kubernetes in Kubernetes using Helm
2626

2727
```bash
2828
helm repo add kvaps https://kvaps.github.io/charts
29-
helm install foo kvaps/kubernetes --version 0.7.0 \
29+
helm install foo kvaps/kubernetes --version 0.8.0 \
3030
--namespace foo \
3131
--create-namespace \
3232
--set persistence.storageClassName=local-path

deploy/helm/kubernetes/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: kubernetes
22
description: Production-Grade Container Scheduling and Management
3-
version: 0.7.0
3+
version: 0.8.0
44
appVersion: 1.19.3
55
icon: https://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Kubernetes_logo_without_workmark.svg/723px-Kubernetes_logo_without_workmark.svg.png
66
keywords:

deploy/helm/kubernetes/scripts/configure-cluster.sh

Lines changed: 34 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,15 @@
11
#!/bin/sh
22
set -e
33
set -x
4-
5-
# ------------------------------------------------------------------------------
6-
# Setup environment
7-
# ------------------------------------------------------------------------------
8-
9-
mkdir -p /etc/kubernetes/pki
10-
ln -sf /pki/apiserver-etcd-client/tls.crt /etc/kubernetes/pki/apiserver-etcd-client.crt
11-
ln -sf /pki/apiserver-etcd-client/tls.key /etc/kubernetes/pki/apiserver-etcd-client.key
12-
ln -sf /pki/apiserver-kubelet-client/tls.crt /etc/kubernetes/pki/apiserver-kubelet-client.crt
13-
ln -sf /pki/apiserver-kubelet-client/tls.key /etc/kubernetes/pki/apiserver-kubelet-client.key
14-
ln -sf /pki/apiserver/tls.crt /etc/kubernetes/pki/apiserver.crt
15-
ln -sf /pki/apiserver/tls.key /etc/kubernetes/pki/apiserver.key
16-
ln -sf /pki/ca/tls.crt /etc/kubernetes/pki/ca.crt
17-
ln -sf /pki/ca/tls.key /etc/kubernetes/pki/ca.key
18-
ln -sf /pki/front-proxy-ca/tls.key /etc/kubernetes/pki/front-proxy-ca.crt
19-
ln -sf /pki/front-proxy-ca/tls.crt /etc/kubernetes/pki/front-proxy-ca.key
20-
ln -sf /pki/front-proxy-client/tls.key /etc/kubernetes/pki/front-proxy-client.crt
21-
ln -sf /pki/front-proxy-client/tls.crt /etc/kubernetes/pki/front-proxy-client.key
4+
ENDPOINT=$(awk -F'[ "]+' '$1 == "controlPlaneEndpoint:" {print $2}' /config/kubeadmcfg.yaml)
225

236
# ------------------------------------------------------------------------------
247
# Update secrets and component configs
258
# ------------------------------------------------------------------------------
269

27-
cat >kubeadmcfg.yaml <<EOT
28-
apiVersion: "kubeadm.k8s.io/v1beta2"
29-
kind: ClusterConfiguration
30-
imageRepository: k8s.gcr.io
31-
controlPlaneEndpoint: "${FULL_NAME}-apiserver:6443"
32-
EOT
33-
34-
{{- if .Values.apiServer.enabled }}{{"\n"}}
35-
# generate sa key
36-
if ! kubectl get secret "${FULL_NAME}-pki-sa" >/dev/null; then
37-
kubeadm init phase certs sa
38-
kubectl create secret generic "${FULL_NAME}-pki-sa" --from-file=/etc/kubernetes/pki/sa.pub --from-file=/etc/kubernetes/pki/sa.key
39-
fi
40-
{{- end }}
41-
42-
# generate cluster-admin kubeconfig
43-
rm -f /etc/kubernetes/admin.conf
44-
kubeadm init phase kubeconfig admin --config kubeadmcfg.yaml
45-
kubectl --kubeconfig=/etc/kubernetes/admin.conf config set-cluster kubernetes --server "https://${FULL_NAME}-apiserver:6443"
46-
kubectl create secret generic "${FULL_NAME}-admin-conf" --from-file=/etc/kubernetes/admin.conf --dry-run=client -o yaml | kubectl apply -f -
47-
48-
{{- if .Values.controllerManager.enabled }}{{"\n"}}
49-
# generate controller-manager kubeconfig
50-
rm -f /etc/kubernetes/controller-manager.conf
51-
kubeadm init phase kubeconfig controller-manager --config kubeadmcfg.yaml
52-
kubectl --kubeconfig=/etc/kubernetes/controller-manager.conf config set-cluster kubernetes --server "https://${FULL_NAME}-apiserver:6443"
53-
kubectl create secret generic "${FULL_NAME}-controller-manager-conf" --from-file=/etc/kubernetes/controller-manager.conf --dry-run=client -o yaml | kubectl apply -f -
54-
{{- end }}
55-
56-
{{- if .Values.scheduler.enabled }}{{"\n"}}
57-
# generate scheduler kubeconfig
58-
rm -f /etc/kubernetes/scheduler.conf
59-
kubeadm init phase kubeconfig scheduler --config kubeadmcfg.yaml
60-
kubectl --kubeconfig=/etc/kubernetes/scheduler.conf config set-cluster kubernetes --server "https://${FULL_NAME}-apiserver:6443"
61-
kubectl create secret generic "${FULL_NAME}-scheduler-conf" --from-file=/etc/kubernetes/scheduler.conf --dry-run=client -o yaml | kubectl apply -f -
62-
{{- end }}
63-
64-
{{- if .Values.konnectivityServer.enabled }}{{"\n"}}
65-
# generate konnectivity-server kubeconfig
66-
openssl req -subj "/CN=system:konnectivity-server" -new -newkey rsa:2048 -nodes -out konnectivity.csr -keyout konnectivity.key -out konnectivity.csr
67-
openssl x509 -req -in konnectivity.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out konnectivity.crt -days 375 -sha256
68-
kubectl --kubeconfig /etc/kubernetes/konnectivity-server.conf config set-credentials system:konnectivity-server --client-certificate konnectivity.crt --client-key konnectivity.key --embed-certs=true
69-
kubectl --kubeconfig /etc/kubernetes/konnectivity-server.conf config set-cluster kubernetes --server "https://${FULL_NAME}-apiserver:6443" --certificate-authority /etc/kubernetes/pki/ca.crt --embed-certs=true
70-
kubectl --kubeconfig /etc/kubernetes/konnectivity-server.conf config set-context system:konnectivity-server@kubernetes --cluster kubernetes --user system:konnectivity-server
71-
kubectl --kubeconfig /etc/kubernetes/konnectivity-server.conf config use-context system:konnectivity-server@kubernetes
72-
kubectl create secret generic "${FULL_NAME}-konnectivity-server-conf" --from-file=/etc/kubernetes/konnectivity-server.conf --dry-run=client -o yaml | kubectl apply -f -
73-
{{- end }}
74-
7510
# wait for cluster
76-
echo "Waiting for api-server endpoint ${FULL_NAME}-apiserver:6443..."
77-
until kubectl --kubeconfig /etc/kubernetes/admin.conf cluster-info >/dev/null 2>/dev/null; do
11+
echo "Waiting for api-server endpoint ${ENDPOINT}..."
12+
until kubectl cluster-info >/dev/null 2>/dev/null; do
7813
sleep 1
7914
done
8015

@@ -84,53 +19,72 @@ done
8419
export KUBECONFIG=/etc/kubernetes/admin.conf
8520

8621
# upload configuration
22+
# TODO: https://github.com/kvaps/kubernetes-in-kubernetes/issues/6
8723
kubeadm init phase upload-config kubeadm --config /config/kubeadmcfg.yaml
88-
kubectl --kubeconfig /etc/kubernetes/admin.conf patch configmap -n kube-system kubeadm-config \
24+
kubectl patch configmap -n kube-system kubeadm-config \
8925
-p '{"data":{"ClusterStatus":"apiEndpoints: {}\napiVersion: kubeadm.k8s.io/v1beta2\nkind: ClusterStatus"}}'
9026

9127
# upload configuration
28+
# TODO: https://github.com/kvaps/kubernetes-in-kubernetes/issues/5
9229
kubeadm init phase upload-config kubelet --config /config/kubeadmcfg.yaml -v1 2>&1 |
9330
while read line; do echo "$line" | grep 'Preserving the CRISocket information for the control-plane node' && killall kubeadm || echo "$line"; done
9431

9532
# setup bootstrap-tokens
33+
# TODO: https://github.com/kvaps/kubernetes-in-kubernetes/issues/7
9634
kubeadm init phase bootstrap-token --config /config/kubeadmcfg.yaml --skip-token-print
9735

9836
# correct apiserver address for the external clients
99-
tmp="$(mktemp -d)"
100-
kubectl --kubeconfig "$tmp/kubeconfig" config set clusters..server "https://${CONTROL_PLANE_ENDPOINT:-${FULL_NAME}-apiserver:6443}"
101-
kubectl --kubeconfig "$tmp/kubeconfig" config set clusters..certificate-authority-data "$(base64 /etc/kubernetes/pki/ca.crt | tr -d '\n')"
102-
kubectl create configmap cluster-info --from-file="$tmp/kubeconfig" --dry-run=client -o yaml | kubectl --kubeconfig /etc/kubernetes/admin.conf apply -n kube-public -f -
103-
rm -rf "$tmp"
37+
kubectl apply -n kube-public -f - <<EOT
38+
apiVersion: v1
39+
kind: ConfigMap
40+
metadata:
41+
name: cluster-info
42+
data:
43+
kubeconfig: |
44+
apiVersion: v1
45+
clusters:
46+
- cluster:
47+
certificate-authority-data: $(base64 /pki/admin-client/ca.crt | tr -d '\n')
48+
server: https://${ENDPOINT}
49+
name: ""
50+
contexts: null
51+
current-context: ""
52+
kind: Config
53+
preferences: {}
54+
users: null
55+
EOT
10456

10557
{{- if .Values.konnectivityServer.enabled }}{{"\n"}}
10658
# install konnectivity server
107-
kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f /manifests/konnectivity-server-rbac.yaml
59+
kubectl apply -f /manifests/konnectivity-server-rbac.yaml
10860
{{- else }}{{"\n"}}
109-
kubectl --kubeconfig /etc/kubernetes/admin.conf delete clusterrolebinding/system:konnectivity-server 2>/dev/null || true
61+
kubectl delete clusterrolebinding/system:konnectivity-server 2>/dev/null || true
11062
{{- end }}
11163

11264
{{- if .Values.konnectivityAgent.enabled }}{{"\n"}}
11365
# install konnectivity agent
114-
kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f /manifests/konnectivity-agent-deployment.yaml -f /manifests/konnectivity-agent-rbac.yaml
66+
kubectl apply -f /manifests/konnectivity-agent-deployment.yaml -f /manifests/konnectivity-agent-rbac.yaml
11567
{{- else }}{{"\n"}}
11668
# uninstall konnectivity agent
117-
kubectl --kubeconfig /etc/kubernetes/admin.conf -n kube-system delete deployment/konnectivity-agent serviceaccount/konnectivity-agent 2>/dev/null || true
69+
kubectl -n kube-system delete deployment/konnectivity-agent serviceaccount/konnectivity-agent 2>/dev/null || true
11870
{{- end }}
11971

12072
{{- if .Values.coredns.enabled }}{{"\n"}}
12173
# install coredns addon
74+
# TODO: https://github.com/kvaps/kubernetes-in-kubernetes/issues/3
12275
kubeadm init phase addon coredns --config /config/kubeadmcfg.yaml
12376
{{- else }}{{"\n"}}
12477
# uninstall coredns addon
125-
kubectl --kubeconfig /etc/kubernetes/admin.conf -n kube-system delete configmap/coredns deployment/coredns 2>/dev/null || true
78+
kubectl -n kube-system delete configmap/coredns deployment/coredns 2>/dev/null || true
12679
{{- end }}
12780

12881
{{- if .Values.kubeProxy.enabled }}{{"\n"}}
12982
# install kube-proxy addon
83+
# TODO: https://github.com/kvaps/kubernetes-in-kubernetes/issues/4
13084
kubeadm init phase addon kube-proxy --config /config/kubeadmcfg.yaml
13185
{{- else }}{{"\n"}}
13286
# uninstall kube-proxy addon
133-
kubectl --kubeconfig /etc/kubernetes/admin.conf -n kube-system delete configmap/kube-proxy daemonset/kube-proxy 2>/dev/null || true
87+
kubectl -n kube-system delete configmap/kube-proxy daemonset/kube-proxy 2>/dev/null || true
13488
{{- end }}
13589

13690
{{- with .Values.extraManifests }}{{"\n"}}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{{- if .Values.admin.enabled }}
2+
{{- $fullName := include "kubernetes.fullname" . -}}
3+
---
4+
apiVersion: v1
5+
kind: ConfigMap
6+
metadata:
7+
name: {{ $fullName }}-admin-conf
8+
data:
9+
admin.conf: |
10+
apiVersion: v1
11+
clusters:
12+
- cluster:
13+
certificate-authority: /pki/admin-client/ca.crt
14+
server: https://{{ $fullName }}-apiserver:{{ .Values.apiServer.service.port }}
15+
name: default-cluster
16+
contexts:
17+
- context:
18+
cluster: default-cluster
19+
namespace: default
20+
user: default-auth
21+
name: default-context
22+
current-context: default-context
23+
kind: Config
24+
preferences: {}
25+
users:
26+
- name: default-auth
27+
user:
28+
client-certificate: /pki/admin-client/tls.crt
29+
client-key: /pki/admin-client/tls.key
30+
{{- end }}

deploy/helm/kubernetes/templates/admin-deployment.yaml

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ spec:
5656
{{- end }}
5757
imagePullPolicy: {{ .Values.admin.image.PullPolicy }}
5858
name: admin
59-
livenessProbe:
59+
readinessProbe:
6060
exec:
6161
command:
6262
- kubectl
@@ -71,25 +71,56 @@ spec:
7171
env:
7272
- name: KUBECONFIG
7373
value: "/etc/kubernetes/admin.conf"
74-
- name: FULL_NAME
75-
value: "{{ $fullName }}"
7674
{{- with .Values.admin.extraEnv }}
7775
{{- toYaml . | nindent 8 }}
7876
{{- end }}
7977
volumeMounts:
8078
- mountPath: /etc/kubernetes/
8179
name: kubeconfig
8280
readOnly: true
81+
- mountPath: /pki/admin-client
82+
name: pki-admin-client
83+
- mountPath: /scripts
84+
name: scripts
85+
{{- if or .Values.extraManifests .Values.konnectivityServer.enabled .Values.konnectivityAgent.enabled }}
86+
- mountPath: /manifests
87+
name: manifests
88+
{{- end }}
89+
- mountPath: /config
90+
name: config
8391
{{- with .Values.admin.extraVolumeMounts }}
8492
{{- toYaml . | nindent 8 }}
8593
{{- end }}
8694
{{- with .Values.admin.sidecars }}
8795
{{- toYaml . | nindent 6 }}
8896
{{- end }}
8997
volumes:
90-
- secret:
91-
secretName: "{{ $fullName }}-admin-conf"
98+
- configMap:
99+
name: "{{ $fullName }}-admin-conf"
92100
name: kubeconfig
101+
- secret:
102+
secretName: "{{ $fullName }}-pki-admin-client"
103+
name: pki-admin-client
104+
- name: scripts
105+
configMap:
106+
name: "{{ $fullName }}-kubeadm-scripts"
107+
defaultMode: 0777
108+
{{- if or .Values.extraManifests .Values.konnectivityServer.enabled .Values.konnectivityAgent.enabled }}
109+
- name: manifests
110+
projected:
111+
sources:
112+
{{- if or .Values.extraManifests }}
113+
- secret:
114+
name: "{{ $fullName }}-extra-manifests"
115+
{{- end }}
116+
{{- if or .Values.konnectivityServer.enabled .Values.konnectivityAgent.enabled }}
117+
- configMap:
118+
name: "{{ $fullName }}-konnectivity-manifests"
119+
{{- end }}
120+
{{- end }}
121+
- name: config
122+
configMap:
123+
name: "{{ $fullName }}-kubeadm-config"
93124
{{- with .Values.admin.extraVolumes }}
94125
{{- toYaml . | nindent 6 }}
95126
{{- end }}

deploy/helm/kubernetes/templates/apiserver-deployment.yaml

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ spec:
5656
- --allow-privileged=true
5757
- --authorization-mode=Node,RBAC
5858
- --bind-address=0.0.0.0
59-
- --client-ca-file=/pki/apiserver/ca.crt
59+
- --client-ca-file=/pki/apiserver-server/ca.crt
6060
- --enable-admission-plugins=NodeRestriction
6161
- --enable-bootstrap-token-auth=true
6262
- --etcd-cafile=/pki/apiserver-etcd-client/ca.crt
@@ -75,14 +75,14 @@ spec:
7575
- --requestheader-group-headers=X-Remote-Group
7676
- --requestheader-username-headers=X-Remote-User
7777
- --secure-port={{ .Values.apiServer.port }}
78-
- --service-account-key-file=/pki/sa/sa.pub
78+
- --service-account-key-file=/pki/sa/tls.crt
7979
- --service-cluster-ip-range={{ .Values.apiServer.serviceClusterIPRange }}
80-
- --tls-cert-file=/pki/apiserver/tls.crt
81-
- --tls-private-key-file=/pki/apiserver/tls.key
80+
- --tls-cert-file=/pki/apiserver-server/tls.crt
81+
- --tls-private-key-file=/pki/apiserver-server/tls.key
8282
- --egress-selector-config-file=/etc/kubernetes/egress-selector-configuration.yaml
8383
{{- if .Values.konnectivityAgent.enabled }}{{"\n"}}
8484
- --service-account-issuer=api
85-
- --service-account-signing-key-file=/pki/sa/sa.key
85+
- --service-account-signing-key-file=/pki/sa/tls.key
8686
- --api-audiences=system:konnectivity-server
8787
{{- end }}
8888
{{- if not (hasKey .Values.apiServer.extraArgs "advertise-address") }}
@@ -120,8 +120,8 @@ spec:
120120
name: apiserver-config
121121
- mountPath: /pki/front-proxy-client
122122
name: pki-front-proxy-client
123-
- mountPath: /pki/apiserver
124-
name: pki-apiserver
123+
- mountPath: /pki/apiserver-server
124+
name: pki-apiserver-server
125125
- mountPath: /pki/apiserver-etcd-client
126126
name: pki-apiserver-etcd-client
127127
- mountPath: /pki/apiserver-kubelet-client
@@ -146,17 +146,14 @@ spec:
146146
secretName: "{{ $fullName }}-pki-front-proxy-client"
147147
name: pki-front-proxy-client
148148
- secret:
149-
secretName: "{{ $fullName }}-pki-apiserver"
150-
name: pki-apiserver
149+
secretName: "{{ $fullName }}-pki-apiserver-server"
150+
name: pki-apiserver-server
151151
- secret:
152152
secretName: "{{ $fullName }}-pki-apiserver-etcd-client"
153153
name: pki-apiserver-etcd-client
154154
- secret:
155155
secretName: "{{ $fullName }}-pki-apiserver-kubelet-client"
156156
name: pki-apiserver-kubelet-client
157-
- secret:
158-
secretName: "{{ $fullName }}-pki-ca"
159-
name: pki-ca
160157
- secret:
161158
secretName: "{{ $fullName }}-pki-sa"
162159
name: pki-sa
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{{- if .Values.controllerManager.enabled }}
2+
{{- $fullName := include "kubernetes.fullname" . -}}
3+
---
4+
apiVersion: v1
5+
kind: ConfigMap
6+
metadata:
7+
name: {{ $fullName }}-controller-manager-conf
8+
data:
9+
controller-manager.conf: |
10+
apiVersion: v1
11+
clusters:
12+
- cluster:
13+
certificate-authority: /pki/controller-manager-client/ca.crt
14+
server: https://{{ $fullName }}-apiserver:{{ .Values.apiServer.service.port }}
15+
name: default-cluster
16+
contexts:
17+
- context:
18+
cluster: default-cluster
19+
namespace: default
20+
user: default-auth
21+
name: default-context
22+
current-context: default-context
23+
kind: Config
24+
preferences: {}
25+
users:
26+
- name: default-auth
27+
user:
28+
client-certificate: /pki/controller-manager-client/tls.crt
29+
client-key: /pki/controller-manager-client/tls.key
30+
{{- end }}

0 commit comments

Comments
 (0)