Skip to content

Commit

Permalink
Merge pull request #48 from UKHomeOffice/labels
Browse files Browse the repository at this point in the history
Add node labels to kubelet
  • Loading branch information
lewismarshall committed Jul 6, 2017
2 parents 9fc8e2c + 6630c3d commit d2169d4
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 24 deletions.
10 changes: 6 additions & 4 deletions glide.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions glide.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ import:
- package: k8s.io/kubernetes
version: 1.6.6
- package: github.com/UKHomeOffice/keto
version: b0b72576d4bccfd2b0aa968b8864b72a803edcad
4 changes: 3 additions & 1 deletion pkg/kmm/cloudprovider.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"os"
"path/filepath"

dl "log"
log "github.com/Sirupsen/logrus"
"github.com/UKHomeOffice/keto/pkg/cloudprovider"
)
Expand Down Expand Up @@ -72,7 +73,8 @@ func SaveCloudAssets(cloudprovider, etcdCa, etcdCaKey, kubeCa, kubeCaKey string)

func getNodeInterface(cloudName string) (node cloudprovider.Node, err error) {
var cloud cloudprovider.Interface
if cloud, err = cloudprovider.InitCloudProvider(cloudName, nil); err != nil {
cl := dl.New(ioutil.Discard, "", 0)
if cloud, err = cloudprovider.InitCloudProvider(cloudName, cl); err != nil {
return nil, err
}
var supported = false
Expand Down
31 changes: 14 additions & 17 deletions pkg/kmm/kmm.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ type ConfigType struct {
Etcd etcd.Clienter
Kubeadm kubeadm.Kubeadmer
Kmm Interface
NodeLabels map[string]string
}

// Both structs here use the same config but are bound to different methods...
Expand Down Expand Up @@ -72,7 +73,7 @@ func SetupCompute(cloud string, exitOnCompletion bool) (err error) {
}
// TODO: make testable interface here too
if err = tokens.WriteKetoTokenEnv(cloud, cfg.KubeadmCfg.APIServer.String()); err != nil {
return fmt.Errorf("Error saving KetoTokenEnv:%q", err)
return fmt.Errorf("error saving KetoTokenEnv: %q", err)
}

k.Kmm.CreateAndStartKubelet(false)
Expand Down Expand Up @@ -251,10 +252,10 @@ func (k *Kmm) InstallNetwork() (err error) {
func (k *Kmm) CopyKubeCa() (err error) {
// First check for CA file...
if _, err := os.Stat(k.KubePersistentCaCert); os.IsNotExist(err) {
return errors.New("Kube CA cert not found at:" + k.KubePersistentCaCert)
return errors.New("kube CA cert not found at: " + k.KubePersistentCaCert)
}
if _, err := os.Stat(k.KubePersistentCaKey); os.IsNotExist(err) {
return errors.New("Kube CA key not found at:" + k.KubePersistentCaKey)
return errors.New("kube CA key not found at: " + k.KubePersistentCaKey)
}
if _, err = os.Stat(kubeadm.PkiDir); os.IsNotExist(err) {
os.Mkdir(kubeadm.PkiDir, os.ModePerm)
Expand Down Expand Up @@ -285,32 +286,28 @@ func (k *Kmm) UpdateCloudCfg() (err error) {
if node, err = getNodeInterface(k.KubeadmCfg.CloudProvider); err != nil {
return err
}
var clusterName string
if clusterName, err = node.GetClusterName(); err != nil {
return fmt.Errorf("Error getting cluster name cloud provider:%q", err)
}
k.ClusterName = clusterName
var api string
if api, err = node.GetKubeAPIURL(); err != nil {
return fmt.Errorf("Error getting Api server from cloud provider:%q", err)
nd, err := node.GetNodeData()
if err != nil {
return fmt.Errorf("error getting node data from cloud provider: %q", err)
}
k.ClusterName = nd.ClusterName
api := nd.KubeAPIURL
// TODO: detect if a port set here...
url, err := url.Parse(api + ":6443")
if err != nil {
return fmt.Errorf("Error parsing Api server %s [%v]", api, err)
return fmt.Errorf("error parsing Api server %s [%v]", api, err)
}
if len(api) > 0 {
k.KubeadmCfg.APIServer = url
} else {
// url.Parse seems to always parse without error!
return fmt.Errorf("Empty API server [%s] obtained from cloud provider", api)
}
if k.KubeadmCfg.KubeVersion, err = node.GetKubeVersion(); err != nil {
return fmt.Errorf("Kubernetes version not specified from cloud provider [%v]", err)
return fmt.Errorf("empty API server [%s] obtained from cloud provider", api)
}
k.KubeadmCfg.KubeVersion = nd.KubeVersion
if len(k.KubeadmCfg.KubeVersion) == 0 {
return fmt.Errorf("Error parsing Api server %s", api)
return fmt.Errorf("error parsing kubeversion %s", k.KubeadmCfg.KubeVersion)
}
k.NodeLabels = nd.Labels
} else {
log.Printf("No cloud provider specified - not loading...")
}
Expand Down
13 changes: 11 additions & 2 deletions pkg/kmm/kubelet.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"io/ioutil"
"os"
"path"
"strings"
"text/template"

"github.com/UKHomeOffice/keto-k8/pkg/constants"
Expand All @@ -17,15 +18,23 @@ import (
// CreateAndStartKubelet will call the CreateAndStartKubelet method with the correct configuration
func (k *Kmm) CreateAndStartKubelet(master bool) error {

s := []string{}
for k, v := range k.NodeLabels {
s = append(s, fmt.Sprintf("%s=%s", k, v))
}
nodeLables := strings.Join(s, ",")

// Render kubelet.service
data := struct {
CloudProviderName string
KubeVersion string
IsMaster bool
KubeVersion string
NodeLabels string
}{
CloudProviderName: k.KubeadmCfg.CloudProvider,
KubeVersion: k.KubeadmCfg.KubeVersion,
IsMaster: master,
KubeVersion: k.KubeadmCfg.KubeVersion,
NodeLabels: nodeLables,
}
t := template.Must(template.New("kubeletUnit").Parse(kubeletTemplate))
var b bytes.Buffer
Expand Down
1 change: 1 addition & 0 deletions pkg/kmm/kubelet_template.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ ExecStart=/usr/lib/coreos/kubelet-wrapper \
--lock-file=/var/run/lock/kubelet.lock \
--logtostderr=true \
--network-plugin=cni \
--node-labels={{ .NodeLabels }} \
--pod-manifest-path=/etc/kubernetes/manifests \
{{if .IsMaster }} \
--register-schedulable=false \
Expand Down

0 comments on commit d2169d4

Please sign in to comment.