Skip to content

Commit 1d54365

Browse files
committed
Add restart for kube-proxy
1 parent 1962ebd commit 1d54365

File tree

2 files changed

+92
-4
lines changed

2 files changed

+92
-4
lines changed

pkg/minikube/bootstrapper/kubeadm/kubeadm.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ networking:
8383
serviceSubnet: {{.ServiceCIDR}}
8484
etcd:
8585
dataDir: {{.EtcdDataDir}}
86+
nodeName: {{.NodeName}}
8687
`
8788

8889
func NewKubeadmBootstrapper(api libmachine.API) (*KubeadmBootstrapper, error) {
@@ -198,18 +199,16 @@ func addAddons(files *[]assets.CopyableFile) error {
198199
func (k *KubeadmBootstrapper) RestartCluster(k8s bootstrapper.KubernetesConfig) error {
199200
restoreTmpl := `
200201
sudo kubeadm alpha phase certs all --config {{.KubeadmConfigFile}} &&
201-
sudo /usr/bin/kubeadm alpha phase kubeconfig all --config {{.KubeadmConfigFile}} --node-name {{.NodeName}} &&
202+
sudo /usr/bin/kubeadm alpha phase kubeconfig all --config {{.KubeadmConfigFile}} &&
202203
sudo /usr/bin/kubeadm alpha phase controlplane all --config {{.KubeadmConfigFile}} &&
203204
sudo /usr/bin/kubeadm alpha phase etcd local --config {{.KubeadmConfigFile}}
204205
`
205206
t := template.Must(template.New("restoreTmpl").Parse(restoreTmpl))
206207

207208
opts := struct {
208209
KubeadmConfigFile string
209-
NodeName string
210210
}{
211211
KubeadmConfigFile: constants.KubeadmConfigFile,
212-
NodeName: k8s.NodeName,
213212
}
214213

215214
b := bytes.Buffer{}
@@ -221,6 +220,10 @@ func (k *KubeadmBootstrapper) RestartCluster(k8s bootstrapper.KubernetesConfig)
221220
return errors.Wrapf(err, "running cmd: %s", b.String())
222221
}
223222

223+
if err := restartKubeProxy(k8s); err != nil {
224+
return errors.Wrap(err, "restarting kube-proxy")
225+
}
226+
224227
return nil
225228
}
226229

@@ -297,13 +300,15 @@ func (k *KubeadmBootstrapper) generateConfig(k8s bootstrapper.KubernetesConfig)
297300
APIServerPort int
298301
KubernetesVersion string
299302
EtcdDataDir string
303+
NodeName string
300304
}{
301305
CertDir: util.DefaultCertPath,
302306
ServiceCIDR: util.DefaultInsecureRegistry,
303307
AdvertiseAddress: k8s.NodeIP,
304308
APIServerPort: util.APIServerPort,
305309
KubernetesVersion: k8s.KubernetesVersion,
306310
EtcdDataDir: "/data", //TODO(r2d4): change to something else persisted
311+
NodeName: k8s.NodeName,
307312
}
308313

309314
b := bytes.Buffer{}
@@ -318,7 +323,7 @@ func maybeDownloadAndCache(binary, version string) (string, error) {
318323
targetDir := constants.MakeMiniPath("cache", version)
319324
targetFilepath := filepath.Join(targetDir, binary)
320325

321-
_, err := os.Stat(targetDir)
326+
_, err := os.Stat(targetFilepath)
322327
// If it exists, do no verification and continue
323328
if err == nil {
324329
return targetFilepath, nil

pkg/minikube/bootstrapper/kubeadm/util.go

+83
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,22 @@ limitations under the License.
1717
package kubeadm
1818

1919
import (
20+
"bytes"
2021
"encoding/json"
22+
"html/template"
2123

2224
"github.com/pkg/errors"
2325
apierrs "k8s.io/apimachinery/pkg/api/errors"
2426
"k8s.io/apimachinery/pkg/apis/meta/v1"
27+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28+
"k8s.io/apimachinery/pkg/labels"
2529
"k8s.io/apimachinery/pkg/types"
2630
"k8s.io/apimachinery/pkg/util/strategicpatch"
2731
clientv1 "k8s.io/client-go/pkg/api/v1"
2832
rbacv1beta1 "k8s.io/client-go/pkg/apis/rbac/v1beta1"
33+
"k8s.io/minikube/pkg/minikube/bootstrapper"
2934
"k8s.io/minikube/pkg/minikube/service"
35+
"k8s.io/minikube/pkg/util"
3036
)
3137

3238
const masterTaint = "node-role.kubernetes.io/master"
@@ -107,3 +113,80 @@ func elevateKubeSystemPrivileges() error {
107113
}
108114
return nil
109115
}
116+
117+
const (
118+
kubeconfigConf = "kubeconfig.conf"
119+
kubeProxyConfigmapTmpl = `apiVersion: v1
120+
kind: Config
121+
clusters:
122+
- cluster:
123+
certificate-authority: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
124+
server: https://{{.AdvertiseAddress}}:{{.APIServerPort}}
125+
name: default
126+
contexts:
127+
- context:
128+
cluster: default
129+
namespace: default
130+
user: default
131+
name: default
132+
current-context: default
133+
users:
134+
- name: default
135+
user:
136+
tokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
137+
`
138+
)
139+
140+
func restartKubeProxy(k8s bootstrapper.KubernetesConfig) error {
141+
client, err := util.GetClient()
142+
if err != nil {
143+
return errors.Wrap(err, "getting k8s client")
144+
}
145+
146+
selector := labels.SelectorFromSet(labels.Set(map[string]string{"k8s-app": "kube-proxy"}))
147+
if err := util.WaitForPodsWithLabelRunning(client, "kube-system", selector); err != nil {
148+
return errors.Wrap(err, "waiting for kube-proxy to be up for configmap update")
149+
}
150+
151+
cfgMap, err := client.CoreV1().ConfigMaps("kube-system").Get("kube-proxy", metav1.GetOptions{})
152+
if err != nil {
153+
return errors.Wrap(err, "getting kube-proxy configmap")
154+
}
155+
156+
t := template.Must(template.New("kubeProxyTmpl").Parse(kubeProxyConfigmapTmpl))
157+
opts := struct {
158+
AdvertiseAddress string
159+
APIServerPort int
160+
}{
161+
AdvertiseAddress: k8s.NodeIP,
162+
APIServerPort: util.APIServerPort,
163+
}
164+
165+
kubeconfig := bytes.Buffer{}
166+
if err := t.Execute(&kubeconfig, opts); err != nil {
167+
return errors.Wrap(err, "executing kube proxy configmap template")
168+
}
169+
170+
data := map[string]string{
171+
kubeconfigConf: kubeconfig.String(),
172+
}
173+
174+
cfgMap.Data = data
175+
if _, err := client.CoreV1().ConfigMaps("kube-system").Update(cfgMap); err != nil {
176+
return errors.Wrap(err, "updating configmap")
177+
}
178+
179+
pods, err := client.CoreV1().Pods("kube-system").List(metav1.ListOptions{
180+
LabelSelector: "k8s-app=kube-proxy",
181+
})
182+
if err != nil {
183+
return errors.Wrap(err, "listing kube-proxy pods")
184+
}
185+
for _, pod := range pods.Items {
186+
if err := client.CoreV1().Pods(pod.Namespace).Delete(pod.Name, &metav1.DeleteOptions{}); err != nil {
187+
return errors.Wrapf(err, "deleting pod %+v", pod)
188+
}
189+
}
190+
191+
return nil
192+
}

0 commit comments

Comments
 (0)