Skip to content

Commit dc25c6c

Browse files
authored
Merge pull request #125 from senthilrch/develop
PR for release v0.9.0
2 parents 2d6e94f + 679e7ba commit dc25c6c

38 files changed

+276
-203
lines changed

Makefile

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ ifndef OPERATOR_IMAGE_REPO
4343
endif
4444

4545
ifndef RELEASE_VERSION
46-
RELEASE_VERSION=v0.8.2
46+
RELEASE_VERSION=v0.9.0
4747
endif
4848

4949
ifndef DOCKER_VERSION
@@ -190,16 +190,22 @@ hack:
190190
deploy-using-yaml:
191191
-kubectl apply -f deploy/kubefledged-namespace.yaml
192192
kubectl apply -f deploy/kubefledged-crd.yaml
193-
kubectl apply -f deploy/kubefledged-serviceaccount.yaml
194-
kubectl apply -f deploy/kubefledged-clusterrole.yaml
195-
kubectl apply -f deploy/kubefledged-clusterrolebinding.yaml
193+
kubectl apply -f deploy/kubefledged-serviceaccount-controller.yaml
194+
kubectl apply -f deploy/kubefledged-clusterrole-controller.yaml
195+
kubectl apply -f deploy/kubefledged-clusterrolebinding-controller.yaml
196+
kubectl apply -f deploy/kubefledged-deployment-controller.yaml
197+
kubectl rollout status deployment kubefledged-controller -n kube-fledged --watch
198+
199+
deploy-webhook-server-using-yaml:
196200
-kubectl delete validatingwebhookconfigurations -l app=kubefledged
197201
kubectl apply -f deploy/kubefledged-validatingwebhook.yaml
202+
-kubectl delete deploy -l app=kubefledged,kubefledged=kubefledged-webhook-server
203+
kubectl apply -f deploy/kubefledged-serviceaccount-webhook-server.yaml
204+
kubectl apply -f deploy/kubefledged-clusterrole-webhook-server.yaml
205+
kubectl apply -f deploy/kubefledged-clusterrolebinding-webhook-server.yaml
198206
kubectl apply -f deploy/kubefledged-deployment-webhook-server.yaml
199207
kubectl apply -f deploy/kubefledged-service-webhook-server.yaml
200-
kubectl apply -f deploy/kubefledged-deployment-controller.yaml
201208
kubectl rollout status deployment kubefledged-webhook-server -n kube-fledged --watch
202-
kubectl rollout status deployment kubefledged-controller -n kube-fledged --watch
203209

204210
deploy-using-operator:
205211
# Create the namespace
@@ -218,6 +224,10 @@ deploy-using-operator:
218224
kubectl rollout status deployment kubefledged-operator -n ${KUBEFLEDGED_NAMESPACE} --watch
219225
kubectl apply -f deploy/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml
220226

227+
deploy-webhook-server-using-operator:
228+
sed -i "s|enable: false|enable: true|g" deploy/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml
229+
kubectl apply -f deploy/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml
230+
221231
update:
222232
kubectl scale deployment kubefledged-controller --replicas=0 -n kube-fledged
223233
kubectl scale deployment kubefledged-webhook-server --replicas=0 -n kube-fledged && sleep 1
@@ -227,12 +237,20 @@ update:
227237

228238
remove-kubefledged:
229239
-kubectl delete -f deploy/kubefledged-namespace.yaml
230-
-kubectl delete -f deploy/kubefledged-clusterrolebinding.yaml
231-
-kubectl delete -f deploy/kubefledged-clusterrole.yaml
232-
-kubectl delete -f deploy/kubefledged-crd.yaml
233-
-kubectl delete -f deploy/kubefledged-validatingwebhook.yaml
240+
-kubectl delete clusterrolebinding -l app=kubefledged
241+
-kubectl delete clusterrole -l app=kubefledged
242+
-kubectl delete crd -l app=kubefledged
243+
-kubectl delete validatingwebhookconfigurations -l app=kubefledged
244+
245+
remove-webhook-server:
246+
-kubectl delete validatingwebhookconfigurations -l app=kubefledged
247+
-kubectl delete deploy -l app=kubefledged,kubefledged=kubefledged-webhook-server -n kube-fledged
248+
-kubectl delete service -l app=kubefledged,kubefledged=kubefledged-webhook-server -n kube-fledged
249+
-kubectl delete clusterrolebinding -l app=kubefledged,kubefledged=kubefledged-webhook-server
250+
-kubectl delete clusterrole -l app=kubefledged,kubefledged=kubefledged-webhook-server
251+
-kubectl delete serviceaccount -l app=kubefledged,kubefledged=kubefledged-webhook-server -n kube-fledged
234252

235-
remove-operator-and-kubefledged:
253+
remove-kubefledged-and-operator:
236254
# Remove kubefledged
237255
-kubectl delete -f deploy/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml
238256
-kubectl delete validatingwebhookconfigurations -l app.kubernetes.io/name=kube-fledged
@@ -247,4 +265,8 @@ remove-operator-and-kubefledged:
247265
-git checkout deploy/kubefledged-operator/deploy/operator.yaml
248266
-git checkout deploy/kubefledged-operator/deploy/clusterrole_binding.yaml
249267
-git checkout deploy/kubefledged-operator/deploy/service_account.yaml
250-
-git checkout deploy/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml
268+
269+
remove-webhook-server-using-operator:
270+
sed -i "s|enable: true|enable: false|g" deploy/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml
271+
kubectl apply -f deploy/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml
272+

README.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ These instructions install _kube-fledged_ to a separate namespace called "kube-f
8383
$ kubectl get imagecaches -n kube-fledged (Output should be: 'No resources found')
8484
```
8585

86+
- Optional: Deploy _kube-fledged webhook server_ to the cluster. This component enables validating the ImageCache CR.
87+
88+
```
89+
$ make deploy-webhook-server-using-yaml
90+
```
91+
8692
## Quick Install using Helm chart
8793

8894
- Create the namespace where kube-fledged will be installed
@@ -102,6 +108,12 @@ These instructions install _kube-fledged_ to a separate namespace called "kube-f
102108
$ helm install --verify kube-fledged kubefledged-charts/kube-fledged -n ${KUBEFLEDGED_NAMESPACE} --wait
103109
```
104110

111+
- Optional: Verify and install kube-fledged webhook server. This component enables validating the ImageCache CR.
112+
113+
```
114+
$ helm upgrade --verify kube-fledged kubefledged-charts/kube-fledged -n ${KUBEFLEDGED_NAMESPACE} --set webhookServer.enable=true --wait
115+
```
116+
105117
## Quick Install using Helm operator
106118

107119
These instructions install _kube-fledged_ to a separate namespace called "kube-fledged", using Helm operator and pre-built images in [Docker Hub.](https://hub.docker.com/u/senthilrch)
@@ -127,6 +139,12 @@ These instructions install _kube-fledged_ to a separate namespace called "kube-f
127139
$ kubectl get imagecaches -n kube-fledged (Output should be: 'No resources found')
128140
```
129141

142+
- Optional: Deploy _kube-fledged webhook server_ to the cluster. This component enables validating the ImageCache CR.
143+
144+
```
145+
$ make deploy-webhook-server-using-operator
146+
```
147+
130148
## Helm chart parameters
131149

132150
Parameters of the helm chart are documented [here](docs/helm-parameters.md)
@@ -277,9 +295,18 @@ Run the following command to remove _kube-fledged_ from the cluster.
277295

278296
```
279297
$ make remove-kubefledged (if you deployed using YAML manifests)
298+
$ helm delete kube-fledged -n ${KUBEFLEDGED_NAMESPACE} (if you deployed using Helm chart)
280299
$ make remove-operator-and-kubefledged (if you deployed using Helm Operator)
281300
```
282301

302+
Note: To remove the _kube-fledged webhook server_ alone.
303+
304+
```
305+
$ make remove-webhook-server (if you deployed using YAML manifests)
306+
$ helm upgrade kube-fledged deploy/kubefledged-operator/helm-charts/kubefledged -n ${KUBEFLEDGED_NAMESPACE} --set webhookServer.enable=false --wait --debug (if you deployed using Helm chart)
307+
$ make remove-webhook-server-using-operator (if you deployed using Helm Operator)
308+
```
309+
283310
## How it works
284311

285312
Kubernetes allows developers to extend the kubernetes api via [Custom Resources](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/). _kube-fledged_ defines a custom resource of kind “ImageCache” and implements a custom controller (named _kubefledged-controller_). _kubefledged-controller_ does the heavy-lifting for managing image cache. Users can use kubectl commands for creation and deletion of ImageCache resources.
@@ -297,6 +324,8 @@ For more detailed description, go through _kube-fledged's_ [design proposal](doc
297324

298325
`--image-pull-policy:` Image pull policy for pulling images into and refreshing the cache. Possible values are 'IfNotPresent' and 'Always'. Default value is 'IfNotPresent'. Image with no or ":latest" tag are always pulled.
299326

327+
`--service-account-name:` serviceAccountName used in Jobs created for pulling or deleting images. Optional flag. If not specified the default service account of the namespace is used
328+
300329
`--stderrthreshold:` Log level. set the value of this flag to INFO
301330

302331
## Supported Container Runtimes

cmd/controller/app/controller.go

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
corev1 "k8s.io/api/core/v1"
3333
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3434
"k8s.io/apimachinery/pkg/labels"
35+
"k8s.io/apimachinery/pkg/selection"
3536
"k8s.io/apimachinery/pkg/util/runtime"
3637
"k8s.io/apimachinery/pkg/util/wait"
3738
coreinformers "k8s.io/client-go/informers/core/v1"
@@ -94,7 +95,8 @@ func NewController(
9495
imagePullDeadlineDuration time.Duration,
9596
criClientImage string,
9697
busyboxImage string,
97-
imagePullPolicy string) *Controller {
98+
imagePullPolicy string,
99+
serviceAccountName string) *Controller {
98100

99101
runtime.Must(fledgedscheme.AddToScheme(scheme.Scheme))
100102
glog.V(4).Info("Creating event broadcaster")
@@ -117,7 +119,8 @@ func NewController(
117119
imageCacheRefreshFrequency: imageCacheRefreshFrequency,
118120
}
119121

120-
imageManager, _ := images.NewImageManager(controller.workqueue, controller.imageworkqueue, controller.kubeclientset, controller.fledgedNameSpace, imagePullDeadlineDuration, criClientImage, busyboxImage, imagePullPolicy)
122+
imageManager, _ := images.NewImageManager(controller.workqueue, controller.imageworkqueue, controller.kubeclientset,
123+
controller.fledgedNameSpace, imagePullDeadlineDuration, criClientImage, busyboxImage, imagePullPolicy, serviceAccountName)
121124
controller.imageManager = imageManager
122125

123126
glog.Info("Setting up event handlers")
@@ -149,7 +152,14 @@ func (c *Controller) PreFlightChecks() error {
149152

150153
// danglingJobs finds and removes dangling or stuck jobs
151154
func (c *Controller) danglingJobs() error {
152-
joblist, err := c.kubeclientset.BatchV1().Jobs(c.fledgedNameSpace).List(context.TODO(), metav1.ListOptions{})
155+
appEqKubefledged, _ := labels.NewRequirement("app", selection.Equals, []string{"kubefledged"})
156+
kubefledgedEqImagemanager, _ := labels.NewRequirement("kubefledged", selection.Equals, []string{"kubefledged-image-manager"})
157+
labelSelector := labels.NewSelector()
158+
labelSelector = labelSelector.Add(*appEqKubefledged, *kubefledgedEqImagemanager)
159+
160+
joblist, err := c.kubeclientset.BatchV1().Jobs("").List(context.TODO(), metav1.ListOptions{
161+
LabelSelector: labelSelector.String(),
162+
})
153163
if err != nil {
154164
glog.Errorf("Error listing jobs: %v", err)
155165
return err
@@ -161,7 +171,7 @@ func (c *Controller) danglingJobs() error {
161171
}
162172
deletePropagation := metav1.DeletePropagationBackground
163173
for _, job := range joblist.Items {
164-
err := c.kubeclientset.BatchV1().Jobs(c.fledgedNameSpace).
174+
err := c.kubeclientset.BatchV1().Jobs(job.Namespace).
165175
Delete(context.TODO(), job.Name, metav1.DeleteOptions{PropagationPolicy: &deletePropagation})
166176
if err != nil {
167177
glog.Errorf("Error deleting job(%s): %v", job.Name, err)
@@ -176,7 +186,7 @@ func (c *Controller) danglingJobs() error {
176186
// image caches will get refreshed in the next cycle
177187
func (c *Controller) danglingImageCaches() error {
178188
dangling := false
179-
imagecachelist, err := c.kubefledgedclientset.KubefledgedV1alpha2().ImageCaches(c.fledgedNameSpace).List(context.TODO(), metav1.ListOptions{})
189+
imagecachelist, err := c.kubefledgedclientset.KubefledgedV1alpha2().ImageCaches("").List(context.TODO(), metav1.ListOptions{})
180190
if err != nil {
181191
glog.Errorf("Error listing imagecaches: %v", err)
182192
return err
@@ -385,7 +395,7 @@ func (c *Controller) processNextWorkItem() bool {
385395
// runRefreshWorker is resposible of refreshing the image cache
386396
func (c *Controller) runRefreshWorker() {
387397
// List the ImageCache resources
388-
imageCaches, err := c.imageCachesLister.ImageCaches(c.fledgedNameSpace).List(labels.Everything())
398+
imageCaches, err := c.imageCachesLister.ImageCaches("").List(labels.Everything())
389399
if err != nil {
390400
glog.Errorf("Error in listing image caches: %v", err)
391401
return
@@ -506,10 +516,6 @@ func (c *Controller) syncHandler(wqKey images.WorkQueueKey) error {
506516
}
507517
}
508518
glog.V(4).Infof("No. of nodes in %+v is %d", i.NodeSelector, len(nodes))
509-
if len(nodes) == 0 {
510-
glog.Errorf("NodeSelector %+v did not match any nodes.", i.NodeSelector)
511-
return fmt.Errorf("NodeSelector %+v did not match any nodes", i.NodeSelector)
512-
}
513519

514520
for _, n := range nodes {
515521
for m := range i.Images {
@@ -565,7 +571,9 @@ func (c *Controller) syncHandler(wqKey images.WorkQueueKey) error {
565571
status.StartTime = imageCache.Status.StartTime
566572
}
567573

574+
status.Status = v1alpha2.ImageCacheActioneNoImagesPulledOrDeleted
568575
status.Reason = imageCache.Status.Reason
576+
status.Message = v1alpha2.ImageCacheMessageNoImagesPulledOrDeleted
569577

570578
failures := false
571579
for _, v := range *wqKey.Status {
@@ -624,7 +632,7 @@ func (c *Controller) syncHandler(wqKey images.WorkQueueKey) error {
624632
}
625633
}
626634

627-
if status.Status == v1alpha2.ImageCacheActionStatusSucceeded {
635+
if status.Status == v1alpha2.ImageCacheActionStatusSucceeded || status.Status == v1alpha2.ImageCacheActioneNoImagesPulledOrDeleted {
628636
c.recorder.Event(imageCache, corev1.EventTypeNormal, status.Reason, status.Message)
629637
}
630638

cmd/controller/main.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ var (
4141
busyboxImage string
4242
imagePullPolicy string
4343
fledgedNameSpace string
44-
webhookServerPort int
44+
serviceAccountName string
4545
)
4646

4747
func main() {
@@ -71,7 +71,7 @@ func main() {
7171
controller := app.NewController(kubeClient, fledgedClient, fledgedNameSpace,
7272
kubeInformerFactory.Core().V1().Nodes(),
7373
fledgedInformerFactory.Kubefledged().V1alpha2().ImageCaches(),
74-
imageCacheRefreshFrequency, imagePullDeadlineDuration, criClientImage, busyboxImage, imagePullPolicy)
74+
imageCacheRefreshFrequency, imagePullDeadlineDuration, criClientImage, busyboxImage, imagePullPolicy, serviceAccountName)
7575

7676
glog.Info("Starting pre-flight checks")
7777
if err = controller.PreFlightChecks(); err != nil {
@@ -100,4 +100,5 @@ func init() {
100100
if busyboxImage = os.Getenv("BUSYBOX_IMAGE"); busyboxImage == "" {
101101
busyboxImage = "busybox:1.29.2"
102102
}
103+
flag.StringVar(&serviceAccountName, "service-account-name", "", "serviceAccountName used in Jobs created for pulling/deleting images. Optional flag. If not specified the default service account of the namespace is used")
103104
}

deploy/kubefledged-clusterrole.yaml renamed to deploy/kubefledged-clusterrole-controller.yaml

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ metadata:
44
name: kubefledged-controller
55
labels:
66
app: kubefledged
7-
component: kubefledged-controller
7+
kubefledged: kubefledged-controller
88
annotations:
99
rbac.authorization.kubernetes.io/autoupdate: "true"
1010
rules:
@@ -58,21 +58,3 @@ rules:
5858
- list
5959
- watch
6060
- get
61-
---
62-
kind: ClusterRole
63-
apiVersion: rbac.authorization.k8s.io/v1
64-
metadata:
65-
name: kubefledged-webhook-server
66-
labels:
67-
app: kubefledged
68-
component: kubefledged-webhook-server
69-
annotations:
70-
rbac.authorization.kubernetes.io/autoupdate: "true"
71-
rules:
72-
- apiGroups:
73-
- "admissionregistration.k8s.io"
74-
resources:
75-
- validatingwebhookconfigurations
76-
verbs:
77-
- get
78-
- patch
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
kind: ClusterRole
2+
apiVersion: rbac.authorization.k8s.io/v1
3+
metadata:
4+
name: kubefledged-webhook-server
5+
labels:
6+
app: kubefledged
7+
kubefledged: kubefledged-webhook-server
8+
annotations:
9+
rbac.authorization.kubernetes.io/autoupdate: "true"
10+
rules:
11+
- apiGroups:
12+
- "admissionregistration.k8s.io"
13+
resources:
14+
- validatingwebhookconfigurations
15+
verbs:
16+
- get
17+
- patch
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
kind: ClusterRoleBinding
2+
apiVersion: rbac.authorization.k8s.io/v1
3+
metadata:
4+
name: kubefledged-controller
5+
labels:
6+
app: kubefledged
7+
kubefledged: kubefledged-controller
8+
roleRef:
9+
apiGroup: rbac.authorization.k8s.io
10+
kind: ClusterRole
11+
name: kubefledged-controller
12+
subjects:
13+
- kind: ServiceAccount
14+
name: kubefledged-controller
15+
namespace: kube-fledged
16+
- apiGroup: rbac.authorization.k8s.io
17+
kind: Group
18+
name: system:nodes
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
kind: ClusterRoleBinding
2+
apiVersion: rbac.authorization.k8s.io/v1
3+
metadata:
4+
name: kubefledged-webhook-server
5+
labels:
6+
app: kubefledged
7+
kubefledged: kubefledged-webhook-server
8+
roleRef:
9+
apiGroup: rbac.authorization.k8s.io
10+
kind: ClusterRole
11+
name: kubefledged-webhook-server
12+
subjects:
13+
- kind: ServiceAccount
14+
name: kubefledged-webhook-server
15+
namespace: kube-fledged
16+
- apiGroup: rbac.authorization.k8s.io
17+
kind: Group
18+
name: system:nodes

0 commit comments

Comments
 (0)