Skip to content

Commit

Permalink
restart envoy pods at boot
Browse files Browse the repository at this point in the history
  • Loading branch information
mate4st committed Dec 4, 2022
1 parent 28c8a42 commit c521da9
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 5 deletions.
45 changes: 41 additions & 4 deletions cmd/manager/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,25 @@ limitations under the License.
package main

import (
"context"
"flag"
"os"
"time"

"github.com/spf13/pflag"
kubelbk8ciov1alpha1 "k8c.io/kubelb/pkg/api/kubelb.k8c.io/v1alpha1"
"k8c.io/kubelb/pkg/controllers/manager"
"k8c.io/kubelb/pkg/envoy"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
"k8s.io/klog/v2"
"k8s.io/klog/v2/klogr"
"os"
ctrl "sigs.k8s.io/controller-runtime"
ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"

kubelbk8ciov1alpha1 "k8c.io/kubelb/pkg/api/kubelb.k8c.io/v1alpha1"
"k8c.io/kubelb/pkg/controllers/manager"
"k8c.io/kubelb/pkg/envoy"
"k8c.io/kubelb/pkg/kubelb"
// +kubebuilder:scaffold:imports
)

Expand Down Expand Up @@ -120,6 +127,36 @@ func main() {

// +kubebuilder:scaffold:builder

//restart existing envoy pods to reset their snapshot version
go func() {
client := mgr.GetClient()

//wait for the controller to come up
time.Sleep(20 * time.Second)

var pods corev1.PodList
err = client.List(context.Background(), &pods, &ctrlclient.ListOptions{})
if err != nil {
setupLog.Error(err, "unable to list pods")
os.Exit(1)
}

for _, pod := range pods.Items {

value, ok := pod.ObjectMeta.Labels[kubelb.LabelAppKubernetesManagedBy]
if !ok || value != kubelb.LabelControllerName {
continue
}

setupLog.Info("resetting envoy", "pod", pod.Name)

err = client.Delete(context.Background(), &pod, &ctrlclient.DeleteOptions{})
if err != nil {
setupLog.Error(err, "failed to restart", "pod", pod.Name)
}
}
}()

setupLog.Info("starting manager")
if err := mgr.Start(ctx); err != nil {
setupLog.Error(err, "problem running manager")
Expand Down
8 changes: 8 additions & 0 deletions config/manager/rbac/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ metadata:
creationTimestamp: null
name: manager-role
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- delete
- list
- watch
- apiGroups:
- ""
resources:
Expand Down
5 changes: 4 additions & 1 deletion pkg/controllers/manager/tcploadbalancer_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ type TCPLoadBalancerReconciler struct {
// +kubebuilder:rbac:groups=kubelb.k8c.io,resources=tcploadbalancers/status,verbs=get;update;patch
// +kubebuilder:rbac:groups="",resources=services,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups="apps",resources=deployments,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups="",resources=pods,verbs=list;watch;delete

func (r *TCPLoadBalancerReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
log := ctrl.LoggerFrom(ctx)
Expand Down Expand Up @@ -190,6 +191,8 @@ func (r *TCPLoadBalancerReconciler) reconcileDeployment(ctx context.Context, tcp
})
}

deployment.Labels = map[string]string{kubelb.LabelAppKubernetesName: tcpLoadBalancer.Name, kubelb.LabelAppKubernetesManagedBy: kubelb.LabelControllerName}

deployment.Spec.Replicas = &replicas
deployment.Spec.Selector = &v1.LabelSelector{
MatchLabels: map[string]string{kubelb.LabelAppKubernetesName: tcpLoadBalancer.Name},
Expand All @@ -198,7 +201,7 @@ func (r *TCPLoadBalancerReconciler) reconcileDeployment(ctx context.Context, tcp
deployment.Spec.Template.ObjectMeta = v1.ObjectMeta{
Name: tcpLoadBalancer.Name,
Namespace: tcpLoadBalancer.Namespace,
Labels: map[string]string{kubelb.LabelAppKubernetesName: tcpLoadBalancer.Name},
Labels: map[string]string{kubelb.LabelAppKubernetesName: tcpLoadBalancer.Name, kubelb.LabelAppKubernetesManagedBy: kubelb.LabelControllerName},
}

var containers []corev1.Container
Expand Down
1 change: 1 addition & 0 deletions pkg/kubelb/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (

const LabelOriginNamespace = "kubelb.k8c.io/origin-ns"
const LabelOriginName = "kubelb.k8c.io/origin-name"
const LabelControllerName = "kubelb"

const LabelAppKubernetesName = "app.kubernetes.io/name" //mysql
const LabelAppKubernetesInstance = "app.kubernetes.io/instance" //mysql-abcxzy"
Expand Down

0 comments on commit c521da9

Please sign in to comment.