In Kubernetes' kubectl/run.go code, the Generate function returns a result list that includes two types: runtime.Object and error. However, the last line of the function is return &deployment, nil, which initially raises the question of how &deployment can satisfy the runtime.Object type.
runtime.Object is an interface defined in the k8s.io/apimachinery/pkg/runtime package. It represents an abstract object in the Kubernetes API. To implement the interface, a type must have the following methods:
In this case, deployment is a local variable of type extensionsv1beta1.Deployment, which is a Kubernetes API type. extensionsv1beta1.Deployment extends metav1.TypeMeta, which provides the GetObjectKind() method. Additionally, extensionsv1beta1.Deployment also implements the DeepCopyObject() method directly.
The & operator in Go creates a pointer to the variable. Pointers have a distinct type from their base type. However, in this case:
According to the Go specification, an interface type can store a value of any type with a method set that is a superset of the interface. In this case, the method set of *extensionsv1beta1.Deployment is a superset of the method set of runtime.Object. Therefore, &deployment can be assigned to a variable of type runtime.Object, satisfying the return type of the Generate function.
The above is the detailed content of How Does a Deployment Pointer Satisfy the runtime.Object Interface in Kubernetes?. For more information, please follow other related articles on the PHP Chinese website!