Merge pull request #41017 from luxas/symlink_hyperkube

Automatic merge from submit-queue (batch tested with PRs 38252, 41122, 36101, 41017, 41264)

Add alternative names for the server binaries to hyperkube

**What this PR does / why we need it**:

Right now one can't swap a server image to the hyperkube image without touching the `command` field in the yaml spec, and that's daunting and leading to extra and unnecessary logic for example in kubeadm.

This makes the hyperkube image directly swappable, so now `/usr/local/bin/kube-*` is a portable first argument (or simply `kube-*` if there's a shell).

**Special notes for your reviewer**:

**Release note**:

```release-note
Align the hyperkube image to support running binaries at /usr/local/bin/ like the other server images
```
@jessfraz @thockin @ixdy
This commit is contained in:
Kubernetes Submit Queue 2017-02-10 15:59:43 -08:00 committed by GitHub
commit 32dd68ad2a
8 changed files with 32 additions and 13 deletions

View File

@ -66,6 +66,8 @@ COPY cni-bin/bin /opt/cni/bin
COPY cni-conf /etc/cni/net.d
# Create symlinks for each hyperkube server
# Also create symlinks to /usr/local/bin/ where the server image binaries live, so the hyperkube image may be
# used instead of gcr.io/google_containers/kube-* without any modifications.
# TODO: replace manual symlink creation with --make-symlink command once
# cross-building with qemu supports go binaries. See #28702
# RUN /hyperkube --make-symlinks
@ -76,8 +78,15 @@ RUN ln -s /hyperkube /apiserver \
&& ln -s /hyperkube /kubectl \
&& ln -s /hyperkube /kubelet \
&& ln -s /hyperkube /proxy \
&& ln -s /hyperkube /scheduler
&& ln -s /hyperkube /scheduler \
&& ln -s /hyperkube /usr/local/bin/kube-apiserver \
&& ln -s /hyperkube /usr/local/bin/kube-controller-manager \
&& ln -s /hyperkube /usr/local/bin/federation-apiserver \
&& ln -s /hyperkube /usr/local/bin/federation-controller-manager \
&& ln -s /hyperkube /usr/local/bin/kubectl \
&& ln -s /hyperkube /usr/local/bin/kubelet \
&& ln -s /hyperkube /usr/local/bin/kube-proxy \
&& ln -s /hyperkube /usr/local/bin/kube-scheduler
# Copy the hyperkube binary
COPY hyperkube /hyperkube

View File

@ -55,7 +55,7 @@ func (hk *HyperKube) AddServer(s *Server) {
// FindServer will find a specific server named name.
func (hk *HyperKube) FindServer(name string) (*Server, error) {
for _, s := range hk.servers {
if s.Name() == name {
if s.Name() == name || s.AlternativeName == name {
return &s, nil
}
}

View File

@ -27,6 +27,8 @@ func NewKubeAPIServer() *Server {
s := options.NewServerRunOptions()
hks := Server{
name: "apiserver",
AlternativeName: "kube-apiserver",
SimpleUsage: "apiserver",
Long: "The main API entrypoint and interface to the storage system. The API server is also the focal point for all authorization decisions.",
Run: func(_ *Server, args []string) error {

View File

@ -27,6 +27,8 @@ func NewKubeControllerManager() *Server {
s := options.NewCMServer()
hks := Server{
name: "controller-manager",
AlternativeName: "kube-controller-manager",
SimpleUsage: "controller-manager",
Long: "A server that runs a set of active components. This includes replication controllers, service endpoints and nodes.",
Run: func(_ *Server, args []string) error {

View File

@ -32,6 +32,8 @@ func NewKubeProxy() *Server {
config := options.NewProxyConfig()
hks := Server{
name: "proxy",
AlternativeName: "kube-proxy",
SimpleUsage: "proxy",
Long: `The Kubernetes proxy server is responsible for taking traffic directed at
services and forwarding it to the appropriate pods. It generally runs on

View File

@ -27,6 +27,8 @@ func NewScheduler() *Server {
s := options.NewSchedulerServer()
hks := Server{
name: "scheduler",
AlternativeName: "kube-scheduler",
SimpleUsage: "scheduler",
Long: "Implements a Kubernetes scheduler. This will assign pods to kubelets based on capacity and constraints.",
Run: func(_ *Server, _ []string) error {

View File

@ -26,6 +26,7 @@ import (
func NewKubelet() *Server {
s := options.NewKubeletServer()
hks := Server{
name: "kubelet",
SimpleUsage: "kubelet",
Long: `The kubelet binary is responsible for maintaining a set of containers on a
particular node. It syncs data from a variety of sources including a

View File

@ -33,6 +33,7 @@ type Server struct {
SimpleUsage string // One line description of the server.
Long string // Longer free form description of the server
Run serverRunFunc // Run the server. This is not expected to return.
AlternativeName string
flags *pflag.FlagSet // Flags for the command (and all dependents)
name string