diff --git a/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml b/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml index 82e0380ee1c..7daad4f2b35 100644 --- a/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml +++ b/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml @@ -34,6 +34,8 @@ spec: - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true + nodeSelector: + alpha.kubernetes.io/fluentd-ds-ready: "true" terminationGracePeriodSeconds: 30 volumes: - name: varlog diff --git a/cluster/addons/fluentd-gcp/fluentd-gcp-ds.yaml b/cluster/addons/fluentd-gcp/fluentd-gcp-ds.yaml index 25d4290208e..5e9e7b43cdd 100644 --- a/cluster/addons/fluentd-gcp/fluentd-gcp-ds.yaml +++ b/cluster/addons/fluentd-gcp/fluentd-gcp-ds.yaml @@ -42,6 +42,8 @@ spec: readOnly: true - name: libsystemddir mountPath: /host/lib + nodeSelector: + alpha.kubernetes.io/fluentd-ds-ready: "true" terminationGracePeriodSeconds: 30 volumes: - name: varlog diff --git a/pkg/apis/meta/v1/well_known_labels.go b/pkg/apis/meta/v1/well_known_labels.go index fb0ccad7075..da003cd6568 100644 --- a/pkg/apis/meta/v1/well_known_labels.go +++ b/pkg/apis/meta/v1/well_known_labels.go @@ -27,6 +27,12 @@ const ( LabelOS = "beta.kubernetes.io/os" LabelArch = "beta.kubernetes.io/arch" + + // Historically fluentd was a manifest pod the was migrated to DaemonSet. + // To avoid situation during cluster upgrade when there are two instances + // of fluentd running on a node, kubelet need to mark node on which + // fluentd in not running as a manifest pod with LabelFluentdDsReady. + LabelFluentdDsReady = "alpha.kubernetes.io/fluentd-ds-ready" ) // Role labels are applied to Nodes to mark their purpose. In particular, we diff --git a/pkg/kubelet/kubelet_node_status.go b/pkg/kubelet/kubelet_node_status.go index 2407dafca80..bccf1ce988c 100644 --- a/pkg/kubelet/kubelet_node_status.go +++ b/pkg/kubelet/kubelet_node_status.go @@ -193,9 +193,10 @@ func (kl *Kubelet) initialNode() (*v1.Node, error) { ObjectMeta: v1.ObjectMeta{ Name: string(kl.nodeName), Labels: map[string]string{ - metav1.LabelHostname: kl.hostname, - metav1.LabelOS: goruntime.GOOS, - metav1.LabelArch: goruntime.GOARCH, + metav1.LabelHostname: kl.hostname, + metav1.LabelOS: goruntime.GOOS, + metav1.LabelArch: goruntime.GOARCH, + metav1.LabelFluentdDsReady: "true", }, }, Spec: v1.NodeSpec{