Skip to content

Commit a957d3a

Browse files
consolidate kubelet flags and remove kubeadm (#351)
1 parent d4f5e68 commit a957d3a

File tree

54 files changed

+5616
-2149
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+5616
-2149
lines changed

pkg/template/functions.go

Lines changed: 0 additions & 28 deletions
This file was deleted.

pkg/test/helper.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package test
2+
3+
import (
4+
"io/ioutil"
5+
"path/filepath"
6+
"testing"
7+
8+
"github.com/pmezard/go-difflib/difflib"
9+
)
10+
11+
func CompareOutput(t *testing.T, name, output string, update bool) {
12+
golden, err := filepath.Abs(filepath.Join("testdata", name+".golden"))
13+
if err != nil {
14+
t.Fatalf("failed to get absolute path to goldan file: %v", err)
15+
}
16+
if update {
17+
if err := ioutil.WriteFile(golden, []byte(output), 0644); err != nil {
18+
t.Fatalf("failed to write updated fixture: %v", err)
19+
}
20+
}
21+
expected, err := ioutil.ReadFile(golden)
22+
if err != nil {
23+
t.Fatalf("failed to read .golden file: %v", err)
24+
}
25+
26+
diff := difflib.UnifiedDiff{
27+
A: difflib.SplitLines(string(expected)),
28+
B: difflib.SplitLines(output),
29+
FromFile: "Fixture",
30+
ToFile: "Current",
31+
Context: 3,
32+
}
33+
diffStr, err := difflib.GetUnifiedDiffString(diff)
34+
if err != nil {
35+
t.Fatal(err)
36+
}
37+
38+
if diffStr != "" {
39+
t.Errorf("got diff between expected and actual result: \n%s\n", diffStr)
40+
}
41+
}

pkg/userdata/centos/testdata/kubelet-v1.10-aws.golden

Lines changed: 161 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,26 @@ write_files:
88
content: |
99
[Journal]
1010
SystemMaxUse=5G
11+
12+
13+
- path: "/etc/modules-load.d/k8s.conf"
14+
content: |
15+
ip_vs
16+
ip_vs_rr
17+
ip_vs_wrr
18+
ip_vs_sh
19+
nf_conntrack_ipv4
20+
1121

1222
- path: "/etc/sysctl.d/k8s.conf"
1323
content: |
1424
net.bridge.bridge-nf-call-ip6tables = 1
1525
net.bridge.bridge-nf-call-iptables = 1
1626
kernel.panic_on_oops = 1
1727
kernel.panic = 10
28+
net.ipv4.ip_forward = 1
1829
vm.overcommit_memory = 1
19-
20-
- path: "/etc/yum.repos.d/kubernetes.repo"
21-
content: |
22-
[kubernetes]
23-
name=Kubernetes
24-
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
25-
enabled=1
26-
gpgcheck=1
27-
repo_gpgcheck=1
28-
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
30+
2931

3032
- path: /etc/sysconfig/selinux
3133
content: |
@@ -41,72 +43,58 @@ write_files:
4143
# mls - Multi Level Security protection.
4244
SELINUXTYPE=targeted
4345

44-
- path: "/etc/sysconfig/kubelet-overwrite"
45-
content: |
46-
KUBELET_DNS_ARGS=
47-
KUBELET_EXTRA_ARGS=--authentication-token-webhook=true \
48-
--cloud-provider=aws \
49-
--cloud-config=/etc/kubernetes/cloud-config \
50-
--hostname-override=node1 \
51-
--read-only-port=0 \
52-
--protect-kernel-defaults=true \
53-
--cluster-dns= \
54-
--cluster-domain=cluster.local
55-
- path: "/etc/systemd/system/kubelet.service.d/20-extra.conf"
56-
content: |
57-
[Service]
58-
EnvironmentFile=/etc/sysconfig/kubelet
59-
60-
- path: "/etc/kubernetes/cloud-config"
61-
content: |
62-
{aws-config:true}
63-
64-
- path: "/usr/local/bin/setup"
65-
permissions: "0755"
46+
- path: "/opt/bin/setup"
47+
permissions: "0777"
6648
content: |
6749
#!/bin/bash
6850
set -xeuo pipefail
51+
6952
setenforce 0 || true
53+
54+
# As we added some modules and don't want to reboot, restart the service
55+
systemctl restart systemd-modules-load.service
7056
sysctl --system
7157

7258
yum install -y docker-1.13.1 \
73-
kubelet-1.10.2 \
74-
kubeadm-1.10.2 \
7559
ebtables \
7660
ethtool \
7761
nfs-utils \
7862
bash-completion \
79-
sudo
80-
81-
cp /etc/sysconfig/kubelet-overwrite /etc/sysconfig/kubelet
82-
83-
systemctl enable --now docker
84-
systemctl enable --now kubelet
85-
86-
if [[ ! -x /usr/local/bin/health-monitor.sh ]]; then
87-
curl -Lfo /usr/local/bin/health-monitor.sh \
88-
https://raw.githubusercontent.com/kubermatic/machine-controller/8b5b66e4910a6228dfaecccaa0a3b05ec4902f8e/pkg/userdata/scripts/health-monitor.sh
89-
chmod +x /usr/local/bin/health-monitor.sh
63+
sudo \
64+
socat \
65+
wget \
66+
curl \
67+
ipvsadm
68+
69+
#setup some common directories
70+
mkdir -p /opt/bin/
71+
mkdir -p /var/lib/calico
72+
mkdir -p /etc/kubernetes/manifests
73+
mkdir -p /etc/cni/net.d
74+
mkdir -p /opt/cni/bin
75+
76+
# cni
77+
if [ ! -f /opt/cni/bin/loopback ]; then
78+
curl -L https://github.com/containernetworking/plugins/releases/download/v0.6.0/cni-plugins-amd64-v0.6.0.tgz | tar -xvzC /opt/cni/bin -f -
9079
fi
91-
92-
if ! [[ -e /etc/kubernetes/pki/ca.crt ]]; then
93-
kubeadm join \
94-
--token my-token \
95-
--discovery-token-ca-cert-hash sha256:6caecce9fedcb55d4953d61a27dc6997361a2f226ad86d7e6004dde7526fc4b1 \
96-
--ignore-preflight-errors=CRI \
97-
server:443
80+
# kubelet
81+
if [ ! -f /opt/bin/kubelet ]; then
82+
curl -Lfo /opt/bin/kubelet https://storage.googleapis.com/kubernetes-release/release/v1.10.2/bin/linux/amd64/kubelet
83+
chmod +x /opt/bin/kubelet
9884
fi
99-
100-
if [[ ! -x /usr/local/bin/health-monitor.sh ]]; then
101-
curl -Lfo /usr/local/bin/health-monitor.sh \
102-
https://raw.githubusercontent.com/kubermatic/machine-controller/8b5b66e4910a6228dfaecccaa0a3b05ec4902f8e/pkg/userdata/scripts/health-monitor.sh
103-
chmod +x /usr/local/bin/health-monitor.sh
85+
86+
if [[ ! -x /opt/bin/health-monitor.sh ]]; then
87+
curl -Lfo /opt/bin/health-monitor.sh https://raw.githubusercontent.com/kubermatic/machine-controller/8b5b66e4910a6228dfaecccaa0a3b05ec4902f8e/pkg/userdata/scripts/health-monitor.sh
88+
chmod +x /opt/bin/health-monitor.sh
10489
fi
90+
10591

92+
systemctl enable --now docker
93+
systemctl enable --now kubelet
10694
systemctl enable --now --no-block kubelet-healthcheck.service
10795
systemctl enable --now --no-block docker-healthcheck.service
10896

109-
- path: "/usr/local/bin/supervise.sh"
97+
- path: "/opt/bin/supervise.sh"
11098
permissions: "0755"
11199
content: |
112100
#!/bin/bash
@@ -115,7 +103,108 @@ write_files:
115103
sleep 1
116104
done
117105

106+
- path: "/etc/systemd/system/kubelet.service"
107+
content: |
108+
[Unit]
109+
After=docker.service
110+
Requires=docker.service
111+
112+
Description=kubelet: The Kubernetes Node Agent
113+
Documentation=https://kubernetes.io/docs/home/
114+
115+
[Service]
116+
Restart=always
117+
StartLimitInterval=0
118+
RestartSec=10
119+
120+
Environment="PATH=/opt/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin/"
121+
122+
ExecStart=/opt/bin/kubelet $KUBELET_EXTRA_ARGS \
123+
--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \
124+
--kubeconfig=/etc/kubernetes/kubelet.conf \
125+
--pod-manifest-path=/etc/kubernetes/manifests \
126+
--allow-privileged=true \
127+
--network-plugin=cni \
128+
--cni-conf-dir=/etc/cni/net.d \
129+
--cni-bin-dir=/opt/cni/bin \
130+
--authorization-mode=Webhook \
131+
--client-ca-file=/etc/kubernetes/pki/ca.crt \
132+
--cadvisor-port=0 \
133+
--rotate-certificates=true \
134+
--cert-dir=/etc/kubernetes/pki \
135+
--authentication-token-webhook=true \
136+
--cloud-provider=aws \
137+
--cloud-config=/etc/kubernetes/cloud-config \
138+
--hostname-override=node1 \
139+
--read-only-port=0 \
140+
--exit-on-lock-contention \
141+
--lock-file=/tmp/kubelet.lock \
142+
--anonymous-auth=false \
143+
--protect-kernel-defaults=true \
144+
--cluster-dns= \
145+
--cluster-domain=cluster.local
146+
147+
[Install]
148+
WantedBy=multi-user.target
149+
150+
- path: "/etc/systemd/system/kubelet.service.d/extras.conf"
151+
content: |
152+
[Service]
153+
Environment="KUBELET_EXTRA_ARGS=--cgroup-driver=systemd"
154+
155+
- path: "/etc/kubernetes/cloud-config"
156+
content: |
157+
{aws-config:true}
158+
159+
- path: "/etc/kubernetes/bootstrap-kubelet.conf"
160+
content: |
161+
apiVersion: v1
162+
clusters:
163+
- cluster:
164+
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVXakNDQTBLZ0F3SUJBZ0lKQUxmUmxXc0k4WVFITUEwR0NTcUdTSWIzRFFFQkJRVUFNSHN4Q3pBSkJnTlYKQkFZVEFsVlRNUXN3Q1FZRFZRUUlFd0pEUVRFV01CUUdBMVVFQnhNTlUyRnVJRVp5WVc1amFYTmpiekVVTUJJRwpBMVVFQ2hNTFFuSmhaR1pwZEhwcGJtTXhFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREVkTUJzR0NTcUdTSWIzCkRRRUpBUllPWW5KaFpFQmtZVzVuWVM1amIyMHdIaGNOTVRRd056RTFNakEwTmpBMVdoY05NVGN3TlRBME1qQTAKTmpBMVdqQjdNUXN3Q1FZRFZRUUdFd0pWVXpFTE1Ba0dBMVVFQ0JNQ1EwRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMEp5WVdSbWFYUjZhVzVqTVJJd0VBWURWUVFERXdsc2IyTmhiR2h2CmMzUXhIVEFiQmdrcWhraUc5dzBCQ1FFV0RtSnlZV1JBWkdGdVoyRXVZMjl0TUlJQklqQU5CZ2txaGtpRzl3MEIKQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdDVmQWpwNGZUY2VrV1VUZnpzcDBreWloMU9ZYnNHTDBLWDFlUmJTUwpSOE9kMCs5UTYySHlueStHRndNVGI0QS9LVThtc3NvSHZjY2VTQUFid2ZieEZLLytzNTFUb2JxVW5PUlpyT29UClpqa1V5Z2J5WERTSzk5WUJiY1IxUGlwOHZ3TVRtNFhLdUx0Q2lnZUJCZGpqQVFkZ1VPMjhMRU5HbHNNbm1lWWsKSmZPRFZHblZtcjVMdGI5QU5BOElLeVRmc25ISjRpT0NTL1BsUGJVajJxN1lub1ZMcG9zVUJNbGdVYi9DeWtYMwptT29MYjR5SkpReUEvaVNUNlp4aUlFajM2RDR5V1o1bGc3WUpsK1VpaUJRSEdDblBkR3lpcHFWMDZleDBoZVlXCmNhaVc4TFdaU1VROTNqUStXVkNIOGhUN0RRTzFkbXN2VW1YbHEvSmVBbHdRL1FJREFRQUJvNEhnTUlIZE1CMEcKQTFVZERnUVdCQlJjQVJPdGhTNFA0VTd2VGZqQnlDNTY5UjdFNkRDQnJRWURWUjBqQklHbE1JR2lnQlJjQVJPdApoUzRQNFU3dlRmakJ5QzU2OVI3RTZLRi9wSDB3ZXpFTE1Ba0dBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ1RBa05CCk1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnBjMk52TVJRd0VnWURWUVFLRXd0Q2NtRmtabWwwZW1sdVl6RVMKTUJBR0ExVUVBeE1KYkc5allXeG9iM04wTVIwd0d3WUpLb1pJaHZjTkFRa0JGZzVpY21Ga1FHUmhibWRoTG1OdgpiWUlKQUxmUmxXc0k4WVFITUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBRzZoClU5ZjlzTkgwLzZvQmJHR3kyRVZVMFVnSVRVUUlyRldvOXJGa3JXNWsvWGtEalFtKzNsempUMGlHUjRJeEUvQW8KZVU2c1FodWE3d3JXZUZFbjQ3R0w5OGxuQ3NKZEQ3b1pOaEZtUTk1VGIvTG5EVWpzNVlqOWJyUDBOV3pYZllVNApVSzJabklOSlJjSnBCOGlSQ2FDeEU4RGRjVUYwWHFJRXE2cEEyNzJzbm9MbWlYTE12Tmwza1lFZG0ramU2dm9ECjU4U05WRVVzenR6UXlYbUpFaENwd1ZJMEE2UUNqelhqK3F2cG13M1paSGk4SndYZWk4WlpCTFRTRkJraThaN24Kc0g5QkJIMzgvU3pVbUFONFFIU1B5MWdqcW0wME9BRThOYVlEa2gvYnpFNGQ3bUxHR01XcC9XRTNLUFN1ODJIRgprUGU2WG9TYmlMbS9reGszMlQwPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t
165+
server: https://server:443
166+
name: ""
167+
contexts: []
168+
current-context: ""
169+
kind: Config
170+
preferences: {}
171+
users:
172+
- name: ""
173+
user:
174+
token: my-token
175+
176+
177+
- path: "/etc/kubernetes/pki/ca.crt"
178+
content: |
179+
-----BEGIN CERTIFICATE-----
180+
MIIEWjCCA0KgAwIBAgIJALfRlWsI8YQHMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNV
181+
BAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEUMBIG
182+
A1UEChMLQnJhZGZpdHppbmMxEjAQBgNVBAMTCWxvY2FsaG9zdDEdMBsGCSqGSIb3
183+
DQEJARYOYnJhZEBkYW5nYS5jb20wHhcNMTQwNzE1MjA0NjA1WhcNMTcwNTA0MjA0
184+
NjA1WjB7MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBG
185+
cmFuY2lzY28xFDASBgNVBAoTC0JyYWRmaXR6aW5jMRIwEAYDVQQDEwlsb2NhbGhv
186+
c3QxHTAbBgkqhkiG9w0BCQEWDmJyYWRAZGFuZ2EuY29tMIIBIjANBgkqhkiG9w0B
187+
AQEFAAOCAQ8AMIIBCgKCAQEAt5fAjp4fTcekWUTfzsp0kyih1OYbsGL0KX1eRbSS
188+
R8Od0+9Q62Hyny+GFwMTb4A/KU8mssoHvcceSAAbwfbxFK/+s51TobqUnORZrOoT
189+
ZjkUygbyXDSK99YBbcR1Pip8vwMTm4XKuLtCigeBBdjjAQdgUO28LENGlsMnmeYk
190+
JfODVGnVmr5Ltb9ANA8IKyTfsnHJ4iOCS/PlPbUj2q7YnoVLposUBMlgUb/CykX3
191+
mOoLb4yJJQyA/iST6ZxiIEj36D4yWZ5lg7YJl+UiiBQHGCnPdGyipqV06ex0heYW
192+
caiW8LWZSUQ93jQ+WVCH8hT7DQO1dmsvUmXlq/JeAlwQ/QIDAQABo4HgMIHdMB0G
193+
A1UdDgQWBBRcAROthS4P4U7vTfjByC569R7E6DCBrQYDVR0jBIGlMIGigBRcAROt
194+
hS4P4U7vTfjByC569R7E6KF/pH0wezELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNB
195+
MRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRQwEgYDVQQKEwtCcmFkZml0emluYzES
196+
MBAGA1UEAxMJbG9jYWxob3N0MR0wGwYJKoZIhvcNAQkBFg5icmFkQGRhbmdhLmNv
197+
bYIJALfRlWsI8YQHMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAG6h
198+
U9f9sNH0/6oBbGGy2EVU0UgITUQIrFWo9rFkrW5k/XkDjQm+3lzjT0iGR4IxE/Ao
199+
eU6sQhua7wrWeFEn47GL98lnCsJdD7oZNhFmQ95Tb/LnDUjs5Yj9brP0NWzXfYU4
200+
UK2ZnINJRcJpB8iRCaCxE8DdcUF0XqIEq6pA272snoLmiXLMvNl3kYEdm+je6voD
201+
58SNVEUsztzQyXmJEhCpwVI0A6QCjzXj+qvpmw3ZZHi8JwXei8ZZBLTSFBki8Z7n
202+
sH9BBH38/SzUmAN4QHSPy1gjqm00OAE8NaYDkh/bzE4d7mLGGMWp/WE3KPSu82HF
203+
kPe6XoSbiLm/kxk32T0=
204+
-----END CERTIFICATE-----
205+
118206
- path: "/etc/systemd/system/setup.service"
207+
permissions: "0644"
119208
content: |
120209
[Install]
121210
WantedBy=multi-user.target
@@ -127,33 +216,40 @@ write_files:
127216
[Service]
128217
Type=oneshot
129218
RemainAfterExit=true
130-
ExecStart=/usr/local/bin/supervise.sh /usr/local/bin/setup
219+
ExecStart=/opt/bin/supervise.sh /opt/bin/setup
220+
221+
- path: "/etc/profile.d/opt-bin-path.sh"
222+
permissions: "0644"
223+
content: |
224+
export PATH="/opt/bin:$PATH"
131225

132226
- path: /etc/systemd/system/kubelet-healthcheck.service
133227
permissions: "0644"
134228
content: |
135229
[Unit]
136230
Requires=kubelet.service
137231
After=kubelet.service
138-
232+
139233
[Service]
140-
ExecStart=/usr/local/bin/health-monitor.sh kubelet
141-
234+
ExecStart=/opt/bin/health-monitor.sh kubelet
235+
142236
[Install]
143237
WantedBy=multi-user.target
238+
144239

145240
- path: /etc/systemd/system/docker-healthcheck.service
146241
permissions: "0644"
147242
content: |
148243
[Unit]
149244
Requires=docker.service
150245
After=docker.service
151-
246+
152247
[Service]
153-
ExecStart=/usr/local/bin/health-monitor.sh container-runtime
154-
248+
ExecStart=/opt/bin/health-monitor.sh container-runtime
249+
155250
[Install]
156251
WantedBy=multi-user.target
252+
157253

158254
runcmd:
159255
- systemctl enable --now setup.service

0 commit comments

Comments
 (0)