mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-26 05:03:09 +00:00
Merge pull request #63844 from tossmilestone/add-statefulset-strategy-desc
Automatic merge from submit-queue (batch tested with PRs 63871, 63927, 63966, 63957, 63844). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Add strategy description for 'kubectl describe sts' command **What this PR does / why we need it**: To display `UpdateStrategyType` and `RollingUpdateStrategy` information when execute `kubectl describe sts` command, the output likes: ``` Name: web Namespace: default CreationTimestamp: Thu, 17 May 2018 10:21:19 +0800 Selector: app=nginx Labels: app=nginx Annotations: <none> Replicas: 3 desired | 1 total Update Strategy: RollingUpdate Partition: 2 Pods Status: 0 Running / 1 Waiting / 0 Succeeded / 0 Failed Pod Template: Labels: app=nginx Containers: nginx: Image: k8s.gcr.io/nginx-slim:0.8 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: /usr/share/nginx/html from www (rw) Volumes: <none> Volume Claims: Name: www StorageClass: my-storage-class Labels: <none> Annotations: <none> Capacity: 1Gi Access Modes: [ReadWriteOnce] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulCreate 10s statefulset-controller create Pod web-0 in StatefulSet web successful ``` **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes None **Special notes for your reviewer**: **Release note**: ```release-note Add 'UpdateStrategyType' and 'RollingUpdateStrategy' to 'kubectl describe sts' command output. ```
This commit is contained in:
commit
64bb688ece
@ -2764,6 +2764,14 @@ func describeStatefulSet(ps *apps.StatefulSet, selector labels.Selector, events
|
||||
printLabelsMultiline(w, "Labels", ps.Labels)
|
||||
printAnnotationsMultiline(w, "Annotations", ps.Annotations)
|
||||
w.Write(LEVEL_0, "Replicas:\t%d desired | %d total\n", ps.Spec.Replicas, ps.Status.Replicas)
|
||||
w.Write(LEVEL_0, "Update Strategy:\t%s\n", ps.Spec.UpdateStrategy.Type)
|
||||
if ps.Spec.UpdateStrategy.RollingUpdate != nil {
|
||||
ru := ps.Spec.UpdateStrategy.RollingUpdate
|
||||
if ru.Partition != 0 {
|
||||
w.Write(LEVEL_1, "Partition:\t%d\n", ru.Partition)
|
||||
}
|
||||
}
|
||||
|
||||
w.Write(LEVEL_0, "Pods Status:\t%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed)
|
||||
DescribePodTemplate(&ps.Spec.Template, w)
|
||||
describeVolumeClaimTemplates(ps.Spec.VolumeClaimTemplates, w)
|
||||
|
@ -33,6 +33,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
versionedfake "k8s.io/client-go/kubernetes/fake"
|
||||
"k8s.io/kubernetes/pkg/apis/apps"
|
||||
"k8s.io/kubernetes/pkg/apis/autoscaling"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||
@ -2526,6 +2527,46 @@ func TestDescribeNode(t *testing.T) {
|
||||
|
||||
}
|
||||
|
||||
func TestDescribeStatefulSet(t *testing.T) {
|
||||
fake := fake.NewSimpleClientset(&apps.StatefulSet{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "bar",
|
||||
Namespace: "foo",
|
||||
},
|
||||
Spec: apps.StatefulSetSpec{
|
||||
Replicas: 1,
|
||||
Selector: &metav1.LabelSelector{},
|
||||
Template: api.PodTemplateSpec{
|
||||
Spec: api.PodSpec{
|
||||
Containers: []api.Container{
|
||||
{Image: "mytest-image:latest"},
|
||||
},
|
||||
},
|
||||
},
|
||||
UpdateStrategy: apps.StatefulSetUpdateStrategy{
|
||||
Type: apps.RollingUpdateStatefulSetStrategyType,
|
||||
RollingUpdate: &apps.RollingUpdateStatefulSetStrategy{
|
||||
Partition: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
d := StatefulSetDescriber{fake}
|
||||
out, err := d.Describe("foo", "bar", printers.DescriberSettings{ShowEvents: true})
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
expectedOutputs := []string{
|
||||
"bar", "foo", "Containers:", "mytest-image:latest", "Update Strategy", "RollingUpdate", "Partition",
|
||||
}
|
||||
for _, o := range expectedOutputs {
|
||||
if !strings.Contains(out, o) {
|
||||
t.Errorf("unexpected out: %s", out)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// boolPtr returns a pointer to a bool
|
||||
func boolPtr(b bool) *bool {
|
||||
o := b
|
||||
|
Loading…
Reference in New Issue
Block a user