Skip to content

Commit 93a6ad5

Browse files
authored
Fix flatcar scripts (#3627)
Signed-off-by: Artiom Diomin <[email protected]>
1 parent 1dc6741 commit 93a6ad5

15 files changed

+372
-648
lines changed

pkg/scripts/os_amzn_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func TestAmazonLinuxScript(t *testing.T) {
4242
},
4343
{
4444
name: "install all with proxy",
45-
cluster: genCluster(withDefaultAssetConfiguration, withProxy("http://proxy.tld")),
45+
cluster: genCluster(withDefaultAssetConfiguration, withProxy("http://proxy.aws")),
4646
params: Params{Kubeadm: true, Kubectl: true, Kubelet: true},
4747
},
4848
{

pkg/scripts/os_flatcar.go

Lines changed: 44 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -32,29 +32,42 @@ source /etc/kubeone/proxy-env
3232
{{ template "sysctl-k8s" . }}
3333
{{ template "journald-config" }}
3434
35+
{{- with .KUBERNETES_CNI_VERSION }}
3536
sudo mkdir -p /opt/bin /opt/cni/bin /etc/kubernetes/pki /etc/kubernetes/manifests
36-
curl -L "https://github.com/containernetworking/plugins/releases/download/v{{ .KUBERNETES_CNI_VERSION }}/cni-plugins-linux-${HOST_ARCH}-v{{ .KUBERNETES_CNI_VERSION }}.tgz" |
37+
curl -L "https://github.com/containernetworking/plugins/releases/download/v{{ . }}/cni-plugins-linux-${HOST_ARCH}-v{{ . }}.tgz" |
3738
sudo tar -C /opt/cni/bin -xz
38-
39-
RELEASE="v{{ .KUBERNETES_VERSION }}"
40-
CRI_TOOLS_RELEASE="v{{ .CRITOOLS_VERSION }}"
41-
39+
{{- end }}
40+
{{- with .CRITOOLS_VERSION }}
41+
CRI_TOOLS_RELEASE="v{{ . }}"
4242
curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRI_TOOLS_RELEASE}/crictl-${CRI_TOOLS_RELEASE}-linux-${HOST_ARCH}.tar.gz |
4343
sudo tar -C /opt/bin -xz
44+
{{- end }}
4445
45-
{{ if .INSTALL_CONTAINERD }}
46+
{{- if .INSTALL_CONTAINERD }}
4647
{{ template "flatcar-containerd" . }}
47-
{{ end }}
48+
{{- end }}
49+
binaries=()
50+
{{- with .KUBELET }}
51+
binaries+=('kubelet')
52+
{{- end }}
53+
{{- with .KUBECTL }}
54+
binaries+=('kubectl')
55+
{{- end }}
56+
{{- with .KUBEADM }}
57+
binaries+=('kubeadm')
58+
{{- end }}
4859
49-
cd /opt/bin
50-
k8s_rel_baseurl=https://dl.k8s.io
51-
for binary in kubeadm kubelet kubectl; do
52-
curl -L --output /tmp/$binary \
53-
$k8s_rel_baseurl/${RELEASE}/bin/linux/${HOST_ARCH}/$binary
54-
sudo install --owner=0 --group=0 --mode=0755 /tmp/$binary /opt/bin/$binary
55-
rm /tmp/$binary
60+
RELEASE="v{{ .KUBERNETES_VERSION }}"
61+
for binary in "${binaries[@]}" ; do
62+
curl \
63+
--location \
64+
--output "/tmp/${binary}" \
65+
"https://dl.k8s.io/release/${RELEASE}/bin/linux/${HOST_ARCH}/${binary}"
66+
sudo install --owner=0 --group=0 --mode=0755 "/tmp/${binary}" "/opt/bin/${binary}"
67+
rm "/tmp/${binary}"
5668
done
5769
70+
{{- with .KUBELET }}
5871
cat <<EOF | sudo tee /etc/systemd/system/kubelet.service
5972
[Unit]
6073
Description=kubelet: The Kubernetes Node Agent
@@ -88,6 +101,11 @@ EOF
88101
89102
sudo systemctl daemon-reload
90103
sudo systemctl enable --now kubelet
104+
{{- end }}
105+
106+
{{- if or .FORCE .KUBELET }}
107+
sudo systemctl restart kubelet
108+
{{- end }}
91109
`
92110

93111
removeBinariesFlatcarScriptTemplate = `
@@ -99,95 +117,25 @@ sudo rm -rf /opt/cni /opt/bin/kubeadm /opt/bin/kubectl /opt/bin/kubelet
99117
sudo rm -f /etc/systemd/system/kubelet.service /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
100118
# Reload systemd
101119
sudo systemctl daemon-reload
102-
`
103-
104-
upgradeKubeadmAndCNIFlatcarScriptTemplate = `
105-
{{ template "detect-host-cpu-architecture" }}
106-
107-
{{- if .INSTALL_CONTAINERD -}}
108-
{{ template "flatcar-containerd" . }}
109-
{{ end }}
110-
111-
source /etc/kubeone/proxy-env
112-
113-
sudo mkdir -p /opt/cni/bin
114-
curl -L "https://github.com/containernetworking/plugins/releases/download/v{{ .KUBERNETES_CNI_VERSION }}/cni-plugins-linux-${HOST_ARCH}-v{{ .KUBERNETES_CNI_VERSION }}.tgz" |
115-
sudo tar -C /opt/cni/bin -xz
116-
117-
RELEASE="v{{ .KUBERNETES_VERSION }}"
118-
119-
sudo mkdir -p /var/tmp/kube-binaries
120-
cd /var/tmp/kube-binaries
121-
sudo curl -L --remote-name-all \
122-
https://dl.k8s.io/${RELEASE}/bin/linux/${HOST_ARCH}/kubeadm
123-
124-
sudo mkdir -p /opt/bin
125-
cd /opt/bin
126-
sudo mv /var/tmp/kube-binaries/kubeadm .
127-
sudo chmod +x kubeadm
128-
`
129-
130-
upgradeKubeletAndKubectlFlatcarScriptTemplate = `
131-
source /etc/kubeone/proxy-env
132-
133-
{{ template "detect-host-cpu-architecture" }}
134-
135-
{{- if .INSTALL_CONTAINERD -}}
136-
{{ template "flatcar-containerd" . }}
137-
{{ end }}
138-
139-
RELEASE="v{{ .KUBERNETES_VERSION }}"
140-
sudo mkdir -p /var/tmp/kube-binaries
141-
cd /var/tmp/kube-binaries
142-
sudo curl -L --remote-name-all \
143-
https://dl.k8s.io/${RELEASE}/bin/linux/${HOST_ARCH}/{kubelet,kubectl}
144-
sudo mkdir -p /opt/bin
145-
cd /opt/bin
146-
sudo systemctl stop kubelet
147-
sudo mv /var/tmp/kube-binaries/{kubelet,kubectl} .
148-
sudo chmod +x {kubelet,kubectl}
149-
150-
cat <<EOF | sudo tee /etc/systemd/system/kubelet.service
151-
[Unit]
152-
Description=kubelet: The Kubernetes Node Agent
153-
Documentation=https://kubernetes.io/docs/home/
154-
Wants=network-online.target
155-
After=network-online.target
156-
157-
[Service]
158-
ExecStart=/opt/bin/kubelet
159-
Restart=always
160-
StartLimitInterval=0
161-
RestartSec=10
162-
163-
[Install]
164-
WantedBy=multi-user.target
165-
EOF
166-
167-
sudo mkdir -p /etc/systemd/system/kubelet.service.d
168-
cat <<EOF | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
169-
[Service]
170-
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
171-
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
172-
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
173-
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
174-
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
175-
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
176-
EnvironmentFile=-/etc/default/kubelet
177-
ExecStart=
178-
ExecStart=/opt/bin/kubelet \$KUBELET_KUBECONFIG_ARGS \$KUBELET_CONFIG_ARGS \$KUBELET_KUBEADM_ARGS \$KUBELET_EXTRA_ARGS
179-
EOF
180-
181-
sudo systemctl daemon-reload
182-
sudo systemctl start kubelet
183120
`
184121
)
185122

186-
func KubeadmFlatcar(cluster *kubeoneapi.KubeOneCluster) (string, error) {
123+
func FlatcarScript(cluster *kubeoneapi.KubeOneCluster, params Params) (string, error) {
124+
proxy := cluster.Proxy.HTTPS
125+
if proxy == "" {
126+
proxy = cluster.Proxy.HTTP
127+
}
128+
187129
data := Data{
130+
"UPGRADE": params.Upgrade,
131+
"KUBELET": params.Kubelet,
132+
"KUBECTL": params.Kubectl,
133+
"KUBEADM": params.Kubeadm,
134+
"FORCE": params.Force,
188135
"KUBERNETES_VERSION": cluster.Versions.Kubernetes,
189136
"KUBERNETES_CNI_VERSION": defaultKubernetesCNIVersion,
190137
"CRITOOLS_VERSION": criToolsVersion(cluster),
138+
"PROXY": proxy,
191139
"INSTALL_CONTAINERD": cluster.ContainerRuntime.Containerd,
192140
"IPV6_ENABLED": cluster.ClusterNetwork.HasIPv6(),
193141
}
@@ -207,37 +155,6 @@ func RemoveBinariesFlatcar() (string, error) {
207155
return result, fail.Runtime(err, "rendering removeBinariesFlatcarScriptTemplate script")
208156
}
209157

210-
func UpgradeKubeadmAndCNIFlatcar(cluster *kubeoneapi.KubeOneCluster) (string, error) {
211-
data := Data{
212-
"KUBERNETES_VERSION": cluster.Versions.Kubernetes,
213-
"KUBERNETES_CNI_VERSION": defaultKubernetesCNIVersion,
214-
"INSTALL_CONTAINERD": cluster.ContainerRuntime.Containerd,
215-
}
216-
217-
if err := containerruntime.UpdateDataMap(cluster, data); err != nil {
218-
return "", err
219-
}
220-
221-
result, err := Render(upgradeKubeadmAndCNIFlatcarScriptTemplate, data)
222-
223-
return result, fail.Runtime(err, "rendering upgradeKubeadmAndCNIFlatcarScriptTemplate script")
224-
}
225-
226-
func UpgradeKubernetesBinariesFlatcar(cluster *kubeoneapi.KubeOneCluster) (string, error) {
227-
data := Data{
228-
"KUBERNETES_VERSION": cluster.Versions.Kubernetes,
229-
"INSTALL_CONTAINERD": cluster.ContainerRuntime.Containerd,
230-
}
231-
232-
if err := containerruntime.UpdateDataMap(cluster, data); err != nil {
233-
return "", err
234-
}
235-
236-
result, err := Render(upgradeKubeletAndKubectlFlatcarScriptTemplate, data)
237-
238-
return result, fail.Runtime(err, "rendering upgradeKubeletAndKubectlFlatcarScriptTemplate script")
239-
}
240-
241158
const defaultKubernetesCNIVersion = "1.3.0"
242159

243160
func criToolsVersion(cluster *kubeoneapi.KubeOneCluster) string {

pkg/scripts/os_flatcar_test.go

Lines changed: 28 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -17,66 +17,56 @@ limitations under the License.
1717
package scripts
1818

1919
import (
20-
"errors"
2120
"testing"
2221

2322
kubeoneapi "k8c.io/kubeone/pkg/apis/kubeone"
2423
"k8c.io/kubeone/pkg/testhelper"
2524
)
2625

27-
func TestKubeadmFlatcar(t *testing.T) {
28-
t.Parallel()
29-
30-
type args struct {
31-
cluster kubeoneapi.KubeOneCluster
32-
}
26+
func TestFlatcarScript(t *testing.T) {
3327
tests := []struct {
34-
name string
35-
args args
36-
err error
28+
name string
29+
cluster kubeoneapi.KubeOneCluster
30+
params Params
31+
wantErr bool
3732
}{
3833
{
39-
name: "force",
40-
args: args{
41-
cluster: genCluster(),
42-
},
34+
name: "install all",
35+
cluster: genCluster(),
36+
params: Params{Kubeadm: true, Kubectl: true, Kubelet: true},
4337
},
4438
{
45-
name: "overwrite registry",
46-
args: args{
47-
cluster: genCluster(
48-
withRegistry("127.0.0.1:5000"),
49-
),
50-
},
39+
name: "install all with force",
40+
cluster: genCluster(),
41+
params: Params{Force: true, Kubeadm: true, Kubectl: true, Kubelet: true},
5142
},
5243
{
53-
name: "with containerd",
54-
args: args{
55-
cluster: genCluster(),
56-
},
44+
name: "install all with proxy",
45+
cluster: genCluster(withProxy("http://proxy.tld")),
46+
params: Params{Kubeadm: true, Kubectl: true, Kubelet: true},
5747
},
5848
{
59-
name: "with containerd with insecure registry",
60-
args: args{
61-
cluster: genCluster(
62-
withInsecureRegistry("127.0.0.1:5000"),
63-
),
64-
},
49+
name: "upgrade kubeadm and kubectl",
50+
cluster: genCluster(),
51+
params: Params{Upgrade: true, Kubeadm: true, Kubectl: true},
6552
},
6653
{
67-
name: "with cilium",
68-
args: args{
69-
cluster: genCluster(withCiliumCNI),
70-
},
54+
name: "upgrade kubeadm and kubectl with force",
55+
cluster: genCluster(),
56+
params: Params{Force: true, Upgrade: true, Kubeadm: true, Kubectl: true},
57+
},
58+
{
59+
name: "upgrade kubelet",
60+
cluster: genCluster(),
61+
params: Params{Upgrade: true, Kubelet: true},
7162
},
7263
}
7364

7465
for _, tt := range tests {
7566
t.Run(tt.name, func(t *testing.T) {
76-
t.Parallel()
77-
got, err := KubeadmFlatcar(&tt.args.cluster)
78-
if !errors.Is(err, tt.err) {
79-
t.Errorf("KubeadmFlatcar() error = %v, wantErr %v", err, tt.err)
67+
got, err := FlatcarScript(&tt.cluster, tt.params)
68+
if (err != nil) != tt.wantErr {
69+
t.Errorf("FlatcarScript() error = %v, wantErr %v", err, tt.wantErr)
8070

8171
return
8272
}
@@ -87,8 +77,6 @@ func TestKubeadmFlatcar(t *testing.T) {
8777
}
8878

8979
func TestRemoveBinariesFlatcar(t *testing.T) {
90-
t.Parallel()
91-
9280
got, err := RemoveBinariesFlatcar()
9381
if err != nil {
9482
t.Errorf("RemoveBinariesFlatcar() error = %v", err)
@@ -98,37 +86,3 @@ func TestRemoveBinariesFlatcar(t *testing.T) {
9886

9987
testhelper.DiffOutput(t, testhelper.FSGoldenName(t), got, *updateFlag)
10088
}
101-
102-
func TestUpgradeKubeadmAndCNIFlatcar(t *testing.T) {
103-
t.Parallel()
104-
105-
c := genCluster(
106-
withKubeVersion("1.26.0"),
107-
withInsecureRegistry("127.0.0.1:5000"),
108-
)
109-
got, err := UpgradeKubeadmAndCNIFlatcar(&c)
110-
if err != nil {
111-
t.Errorf("UpgradeKubeadmAndCNIFlatcar() error = %v", err)
112-
113-
return
114-
}
115-
116-
testhelper.DiffOutput(t, testhelper.FSGoldenName(t), got, *updateFlag)
117-
}
118-
119-
func TestUpgradeKubeletAndKubectlFlatcar(t *testing.T) {
120-
t.Parallel()
121-
122-
c := genCluster(
123-
withKubeVersion("1.26.0"),
124-
withInsecureRegistry("127.0.0.1:5000"),
125-
)
126-
got, err := UpgradeKubernetesBinariesFlatcar(&c)
127-
if err != nil {
128-
t.Errorf("UpgradeKubeletAndKubectlFlatcar() error = %v", err)
129-
130-
return
131-
}
132-
133-
testhelper.DiffOutput(t, testhelper.FSGoldenName(t), got, *updateFlag)
134-
}

0 commit comments

Comments
 (0)