From 4a2e64d3eb29e6d88d43aa945326650f94a9a546 Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Fri, 9 Oct 2015 16:52:23 -0700 Subject: [PATCH 1/3] Add beta annotation for kube-proxy --- cmd/kube-proxy/app/server.go | 11 +++++++++-- cmd/kube-proxy/app/server_test.go | 8 ++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/cmd/kube-proxy/app/server.go b/cmd/kube-proxy/app/server.go index e91dc6af38e..7a255c596fe 100644 --- a/cmd/kube-proxy/app/server.go +++ b/cmd/kube-proxy/app/server.go @@ -98,6 +98,7 @@ const ( proxyModeUserspace = "userspace" proxyModeIptables = "iptables" experimentalProxyModeAnnotation = "net.experimental.kubernetes.io/proxy-mode" + betaProxyModeAnnotation = "net.beta.kubernetes.io/proxy-mode" ) func checkKnownProxyMode(proxyMode string) bool { @@ -327,9 +328,15 @@ func mayTryIptablesProxy(proxyMode string, client nodeGetter, hostname string) b glog.Errorf("Not trying iptables proxy: got nil Node %q", hostname) return false } - proxyMode, found := node.Annotations[experimentalProxyModeAnnotation] + proxyMode, found := node.Annotations[betaProxyModeAnnotation] if found { - glog.V(1).Infof("Found experimental annotation %q = %q", experimentalProxyModeAnnotation, proxyMode) + glog.V(1).Infof("Found beta annotation %q = %q", betaProxyModeAnnotation, proxyMode) + } else { + // We already published some information about this annotation with the "experimental" name, so we will respect it. + proxyMode, found = node.Annotations[experimentalProxyModeAnnotation] + if found { + glog.V(1).Infof("Found experimental annotation %q = %q", experimentalProxyModeAnnotation, proxyMode) + } } if proxyMode == proxyModeIptables { glog.V(1).Infof("Annotation allows iptables proxy") diff --git a/cmd/kube-proxy/app/server_test.go b/cmd/kube-proxy/app/server_test.go index 87b10e8b7eb..171fe2d5ffa 100644 --- a/cmd/kube-proxy/app/server_test.go +++ b/cmd/kube-proxy/app/server_test.go @@ -45,11 +45,19 @@ func Test_mayTryIptablesProxy(t *testing.T) { {"", "net.experimental.kubernetes.io/proxy-mode", "iptables", true}, {"", "net.experimental.kubernetes.io/proxy-mode", "other", false}, {"", "net.experimental.kubernetes.io/proxy-mode", "", false}, + {"", "net.beta.kubernetes.io/proxy-mode", "userspace", false}, + {"", "net.beta.kubernetes.io/proxy-mode", "iptables", true}, + {"", "net.beta.kubernetes.io/proxy-mode", "other", false}, + {"", "net.beta.kubernetes.io/proxy-mode", "", false}, {"", "proxy-mode", "iptables", false}, {"userspace", "net.experimental.kubernetes.io/proxy-mode", "userspace", false}, {"userspace", "net.experimental.kubernetes.io/proxy-mode", "iptables", false}, {"iptables", "net.experimental.kubernetes.io/proxy-mode", "userspace", true}, {"iptables", "net.experimental.kubernetes.io/proxy-mode", "iptables", true}, + {"userspace", "net.beta.kubernetes.io/proxy-mode", "userspace", false}, + {"userspace", "net.beta.kubernetes.io/proxy-mode", "iptables", false}, + {"iptables", "net.beta.kubernetes.io/proxy-mode", "userspace", true}, + {"iptables", "net.beta.kubernetes.io/proxy-mode", "iptables", true}, } for i, c := range cases { getter := &fakeNodeInterface{} From 0bf5bfff5daa8679e10de432764ad1c7401e31df Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Fri, 9 Oct 2015 16:54:49 -0700 Subject: [PATCH 2/3] update docs on experimental annotations --- docs/devel/api-conventions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/devel/api-conventions.md b/docs/devel/api-conventions.md index 7ad1dbc6a48..2568d952e52 100644 --- a/docs/devel/api-conventions.md +++ b/docs/devel/api-conventions.md @@ -713,7 +713,7 @@ Therefore, resources supporting auto-generation of unique labels should have a ` Annotations have very different intended usage from labels. We expect them to be primarily generated and consumed by tooling and system extensions. I'm inclined to generalize annotations to permit them to directly store arbitrary json. Rigid names and name prefixes make sense, since they are analogous to API fields. -In fact, experimental API fields, including those used to represent fields of newer alpha/beta API versions in the older stable storage version, may be represented as annotations with the form `something.experimental.kubernetes.io/name`. For example `net.experimental.kubernetes.io/policy` might represent an experimental network policy field. +In fact, in-development API fields, including those used to represent fields of newer alpha/beta API versions in the older stable storage version, may be represented as annotations with the form `something.alpha.kubernetes.io/name` or `something.beta.kubernetes.io/name` (depending on our confidence in it). For example `net.alpha.kubernetes.io/policy` might represent an experimental network policy field. Other advice regarding use of labels, annotations, and other generic map keys by Kubernetes components and tools: - Key names should be all lowercase, with words separated by dashes, such as `desired-replicas` From 2f4c3035be6a4188c12e8c45f5c6fe7f1a94fa38 Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Fri, 9 Oct 2015 16:57:59 -0700 Subject: [PATCH 3/3] Change to alpha/beta for bandwidth annotations --- pkg/kubelet/kubelet.go | 4 ++-- pkg/kubelet/kubelet_test.go | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 8d917fd7ce3..0d37ff804d7 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -2851,7 +2851,7 @@ func validateBandwidthIsReasonable(rsrc *resource.Quantity) error { } func extractBandwidthResources(pod *api.Pod) (ingress, egress *resource.Quantity, err error) { - str, found := pod.Annotations["kubernetes.io/ingress-bandwidth"] + str, found := pod.Annotations["net.alpha.kubernetes.io/ingress-bandwidth"] if found { if ingress, err = resource.ParseQuantity(str); err != nil { return nil, nil, err @@ -2860,7 +2860,7 @@ func extractBandwidthResources(pod *api.Pod) (ingress, egress *resource.Quantity return nil, nil, err } } - str, found = pod.Annotations["kubernetes.io/egress-bandwidth"] + str, found = pod.Annotations["net.alpha.kubernetes.io/egress-bandwidth"] if found { if egress, err = resource.ParseQuantity(str); err != nil { return nil, nil, err diff --git a/pkg/kubelet/kubelet_test.go b/pkg/kubelet/kubelet_test.go index d3d7940c7f3..2d2ab648066 100644 --- a/pkg/kubelet/kubelet_test.go +++ b/pkg/kubelet/kubelet_test.go @@ -3442,7 +3442,7 @@ func TestCleanupBandwidthLimits(t *testing.T) { ObjectMeta: api.ObjectMeta{ Name: "foo", Annotations: map[string]string{ - "kubernetes.io/ingress-bandwidth": "10M", + "net.alpha.kubernetes.io/ingress-bandwidth": "10M", }, }, }, @@ -3467,7 +3467,7 @@ func TestCleanupBandwidthLimits(t *testing.T) { ObjectMeta: api.ObjectMeta{ Name: "foo", Annotations: map[string]string{ - "kubernetes.io/ingress-bandwidth": "10M", + "net.alpha.kubernetes.io/ingress-bandwidth": "10M", }, }, }, @@ -3493,7 +3493,7 @@ func TestCleanupBandwidthLimits(t *testing.T) { ObjectMeta: api.ObjectMeta{ Name: "foo", Annotations: map[string]string{ - "kubernetes.io/ingress-bandwidth": "10M", + "net.alpha.kubernetes.io/ingress-bandwidth": "10M", }, }, }, @@ -3518,7 +3518,7 @@ func TestCleanupBandwidthLimits(t *testing.T) { ObjectMeta: api.ObjectMeta{ Name: "foo", Annotations: map[string]string{ - "kubernetes.io/ingress-bandwidth": "10M", + "net.alpha.kubernetes.io/ingress-bandwidth": "10M", }, }, }, @@ -3606,7 +3606,7 @@ func TestExtractBandwidthResources(t *testing.T) { pod: &api.Pod{ ObjectMeta: api.ObjectMeta{ Annotations: map[string]string{ - "kubernetes.io/ingress-bandwidth": "10M", + "net.alpha.kubernetes.io/ingress-bandwidth": "10M", }, }, }, @@ -3616,7 +3616,7 @@ func TestExtractBandwidthResources(t *testing.T) { pod: &api.Pod{ ObjectMeta: api.ObjectMeta{ Annotations: map[string]string{ - "kubernetes.io/egress-bandwidth": "10M", + "net.alpha.kubernetes.io/egress-bandwidth": "10M", }, }, }, @@ -3626,8 +3626,8 @@ func TestExtractBandwidthResources(t *testing.T) { pod: &api.Pod{ ObjectMeta: api.ObjectMeta{ Annotations: map[string]string{ - "kubernetes.io/ingress-bandwidth": "4M", - "kubernetes.io/egress-bandwidth": "20M", + "net.alpha.kubernetes.io/ingress-bandwidth": "4M", + "net.alpha.kubernetes.io/egress-bandwidth": "20M", }, }, }, @@ -3638,7 +3638,7 @@ func TestExtractBandwidthResources(t *testing.T) { pod: &api.Pod{ ObjectMeta: api.ObjectMeta{ Annotations: map[string]string{ - "kubernetes.io/ingress-bandwidth": "foo", + "net.alpha.kubernetes.io/ingress-bandwidth": "foo", }, }, },