Puppet Class: kubernetes::kube_addons

Defined in:
manifests/kube_addons.pp

Overview

Class kubernetes kube_addons

Parameters:

  • cni_network_preinstall (Optional[String]) (defaults to: $kubernetes::cni_network_preinstall)

    Defaults to undef

  • cni_network_provider (Optional[String]) (defaults to: $kubernetes::cni_network_provider)

    Defaults to undef

  • cni_pod_cidr (Optional[String]) (defaults to: $kubernetes::cni_pod_cidr)

    The overlay (internal) network range to use. Defaults to undef. kube_tool sets this per cni provider.

  • cni_provider (Optional[String]) (defaults to: $kubernetes::cni_provider)

    Defaults to undef

  • cni_rbac_binding (Optional[String]) (defaults to: $kubernetes::cni_rbac_binding)

    The URL get the cni providers rbac rules. This is for use with Calico only. Defaults to ‘undef`.

  • install_dashboard (Boolean) (defaults to: $kubernetes::install_dashboard)

    This is a bool that determines if the kubernetes dashboard is installed. Defaults to false

  • dashboard_version (String) (defaults to: $kubernetes::dashboard_version)

    The version of Kubernetes dashboard you want to install. Defaults to 1.10.1

  • dashboard_url (String) (defaults to: $kubernetes::dashboard_url)

    The URL to get the Kubernetes Dashboard yaml file. Default is based on dashboard_version.

  • kubernetes_version (String) (defaults to: $kubernetes::kubernetes_version)

    The version of Kubernetes containers you want to install. ie api server, Defaults to 1.10.2

  • controller (Boolean) (defaults to: $kubernetes::controller)

    This is a bool that sets the node as a Kubernetes controller Defaults to false

  • schedule_on_controller (Optional[Boolean]) (defaults to: $kubernetes::schedule_on_controller)

    A flag to remove the control plane role and allow pod scheduling on controllers Defaults to true

  • node_name (Stdlib::Fqdn) (defaults to: $kubernetes::node_name)

    Name of the node. Defaults to a fact

  • path (Array) (defaults to: $kubernetes::default_path)

    The path to be used when running kube* commands Defaults to [‘/usr/bin’,‘/bin’,‘/sbin’,‘/usr/local/bin’]

  • env (Optional[Array]) (defaults to: $kubernetes::environment)

    The environment passed to kubectl commands. Defaults to setting HOME and KUBECONFIG variables



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'manifests/kube_addons.pp', line 41

class kubernetes::kube_addons (

  Optional[String] $cni_network_preinstall  = $kubernetes::cni_network_preinstall,
  Optional[String] $cni_network_provider    = $kubernetes::cni_network_provider,
  Optional[String] $cni_pod_cidr            = $kubernetes::cni_pod_cidr,
  Optional[String] $cni_provider            = $kubernetes::cni_provider,
  Optional[String] $cni_rbac_binding        = $kubernetes::cni_rbac_binding,
  Boolean $install_dashboard                = $kubernetes::install_dashboard,
  String $dashboard_version                 = $kubernetes::dashboard_version,
  String $dashboard_url                     = $kubernetes::dashboard_url,
  String $kubernetes_version                = $kubernetes::kubernetes_version,
  Boolean $controller                       = $kubernetes::controller,
  Optional[Boolean] $schedule_on_controller = $kubernetes::schedule_on_controller,
  Stdlib::Fqdn $node_name                   = $kubernetes::node_name,
  Array $path                               = $kubernetes::default_path,
  Optional[Array] $env                      = $kubernetes::environment,
) {
  Exec {
    path        => $path,
    environment => $env,
    logoutput   => true,
    tries       => 10,
    try_sleep   => 30,
  }

  $exec_onlyif = 'kubectl get nodes'

  if $cni_rbac_binding {
    exec { 'Install calico rbac bindings':
      environment => $env,
      command     => ['kubectl', 'apply', '-f', $cni_rbac_binding],
      onlyif      => $exec_onlyif,
      unless      => 'kubectl get clusterrole | grep calico',
    }
  }

  if $cni_network_provider {
    case $cni_provider {
      'calico-tigera': {
        if $cni_network_preinstall {
          exec { 'Install cni network (preinstall)':
            command     => ['kubectl', 'create', '-f', $cni_network_preinstall],
            onlyif      => $exec_onlyif,
            unless      => 'kubectl -n tigera-operator get deployments | egrep "^tigera-operator"',
            environment => $env,
            before      => Exec['Install cni network provider'],
          }
        }
        file { '/etc/kubernetes/calico-installation.yaml':
          ensure  => file,
          group   => 'root',
          mode    => '0400',
          owner   => 'root',
          replace => false,
          source  => $cni_network_provider,
        } -> file_line { 'Configure calico ipPools.cidr':
          ensure   => present,
          path     => '/etc/kubernetes/calico-installation.yaml',
          match    => '      cidr:',
          line     => "      cidr: ${cni_pod_cidr}",
          multiple => false,
          replace  => true,
        } -> exec { 'Install cni network provider':
          command     => 'kubectl apply -f /etc/kubernetes/calico-installation.yaml',
          onlyif      => $exec_onlyif,
          unless      => 'kubectl -n calico-system get daemonset | egrep "^calico-node"',
          environment => $env,
          before      => Exec['Install cni network provider'],
        }
      }
      'flannel': {
        exec { 'Install cni network provider':
          command     => ['kubectl', 'create', '-f', $cni_network_provider],
          onlyif      => $exec_onlyif,
          unless      => 'kubectl -n kube-flannel get daemonset | egrep "^kube-flannel"',
          environment => $env,
        }
      }
      default: {
        exec { 'Install cni network provider':
          command     => ['kubectl', 'apply', '-f', $cni_network_provider],
          onlyif      => $exec_onlyif,
          unless      => 'kubectl -n kube-system get daemonset | egrep "(flannel|weave|calico-node|cilium)"',
          environment => $env,
        }
      }
    }
  }

  if $schedule_on_controller {
    exec { 'schedule on controller':
      command => "kubectl taint nodes ${node_name} node-role.kubernetes.io/master-",
      onlyif  => "kubectl describe nodes ${node_name} | tr -s ' ' | grep 'Taints: node-role.kubernetes.io/master:NoSchedule'",
    }
  }

  if $install_dashboard {
    exec { 'Install Kubernetes dashboard':
      command     => ['kubectl', 'apply', '-f', $dashboard_url],
      onlyif      => $exec_onlyif,
      unless      => [
        'kubectl get pods --field-selector="status.phase=Running" -n kubernetes-dashboard | grep kubernetes-dashboard-',
        'kubectl get pods --field-selector="status.phase=Running" -n kube-system | grep kubernetes-dashboard-',
      ],
      environment => $env,
    }
  }
}