Skip to content

Commit ce33f75

Browse files
feat: added services controller
1 parent eac70f9 commit ce33f75

File tree

4 files changed

+69
-4
lines changed

4 files changed

+69
-4
lines changed

.idea/vcs.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

controller/controller.go

Lines changed: 67 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package controller
22

33
import (
4+
"context"
45
"fmt"
6+
appsv1 "k8s.io/api/apps/v1"
7+
corev1 "k8s.io/api/core/v1"
8+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
59
"k8s.io/apimachinery/pkg/util/wait"
610
appsInformer "k8s.io/client-go/informers/apps/v1"
711
"k8s.io/client-go/kubernetes"
@@ -29,8 +33,8 @@ func NewController(clientset kubernetes.Interface, depinfomer appsInformer.Deplo
2933

3034
depinfomer.Informer().AddEventHandler(
3135
cache.ResourceEventHandlerFuncs{
32-
AddFunc: handleAdd,
33-
DeleteFunc: handleDel,
36+
AddFunc: c.handleAdd,
37+
DeleteFunc: c.handleDel,
3438
})
3539
return c
3640
}
@@ -46,13 +50,72 @@ func (c *controller) Run(ch <-chan struct{}) {
4650
}
4751

4852
func (c *controller) worker() {
53+
for c.processItem() {
4954

55+
}
56+
}
57+
58+
func (c *controller) processItem() bool {
59+
item, shutdown := c.queue.Get()
60+
61+
if shutdown {
62+
return false
63+
}
64+
key, err := cache.MetaNamespaceKeyFunc(item)
65+
if err != nil {
66+
fmt.Printf("key and err, %s\n", err.Error())
67+
}
68+
namespace, name, err := cache.SplitMetaNamespaceKey(key)
69+
if err != nil {
70+
fmt.Printf("spliting namespace and name, %s\n", err.Error())
71+
}
72+
err = c.syncDeployment(namespace, name)
73+
if err != nil {
74+
fmt.Printf("sync deployment, %s\n", err.Error())
75+
return false
76+
}
77+
return true
5078
}
5179

52-
func handleAdd(obj interface{}) {
80+
func (c *controller) syncDeployment(ns, name string) error {
81+
ctx := context.Background()
82+
dep, err := c.depLister.Deployments(ns).Get(name)
83+
if err != nil {
84+
fmt.Printf("getting deployment from lister %s\n", err.Error())
85+
}
86+
service := corev1.Service{
87+
ObjectMeta: metav1.ObjectMeta{
88+
Name: dep.Name,
89+
Namespace: ns,
90+
},
91+
Spec: corev1.ServiceSpec{
92+
Selector: depLabels(*dep),
93+
Ports: []corev1.ServicePort{
94+
{
95+
Name: "http",
96+
Port: 80,
97+
},
98+
},
99+
},
100+
}
101+
102+
_, err = c.clientset.CoreV1().Services(ns).Create(ctx, &service, metav1.CreateOptions{})
103+
if err != nil {
104+
fmt.Printf("sync deployment, %s\n", err.Error())
105+
}
106+
107+
return nil
108+
}
109+
110+
func depLabels(dep appsv1.Deployment) map[string]string {
111+
return dep.Spec.Template.Labels
112+
}
113+
func (c *controller) handleAdd(obj interface{}) {
53114
fmt.Println("hello add is called")
115+
c.queue.Add(obj)
54116
}
55117

56-
func handleDel(obj interface{}) {
118+
func (c *controller) handleDel(obj interface{}) {
57119
fmt.Println("hello del is called")
120+
c.queue.Add(obj)
58121
}

k8s-custom-controller

608 Bytes
Binary file not shown.

main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ func main() {
3636
}
3737

3838
ch := make(chan struct{})
39+
// factory
3940
factory := informers.NewSharedInformerFactory(clientset, 10*time.Minute)
4041
c := controller.NewController(clientset, factory.Apps().V1().Deployments())
4142
factory.Start(ch)

0 commit comments

Comments
 (0)