Google Kubernetes installer for deb-based distros with docker
Ruby HTML Shell
Latest commit b2ce5b4 Jul 19, 2018

README.md

kubernetes-cookbook

alt text

Google Kubernetes installer for Ubuntu

Supported Platforms

  • Ubuntu

Attributes

default
Key Type Description Default
['kubernetes']['container_runtime'] String type of engine docker
['kubernetes']['roles']['master'] String role name for master servers kubernetes_master
['kubernetes']['roles']['node'] String role name for minions kubernetes_node
['kubernetes']['install_via'] String type of installation systemd
['kubernetes']['databag'] String default chef data_bag kubernetes
['kubernetes']['version'] String kubernetes version v1.11.1
['kubernetes']['keep_versions'] Int 3
['kubernetes']['image'] String hyperkube image name gcr.io/google_containers/hyperkube
['kubernetes']['interface'] String default interface eth1
['kubernetes']['enable_firewall'] Boolean Enable firewall true
['kubernetes']['register_as'] String ip
['kubernetes']['proxy_mode'] String Which proxy mode to use: iptables or ipvs. iptables
['kubernetes']['use_sdn'] Boolean Use sdn true
['kubernetes']['sdn'] String Type of sdn weave
['kubernetes']['master'] String k8s master address 127.0.0.1
['kubernetes']['cluster_name'] String cluster name kubernetes
['kubernetes']['cluster_dns'] Array cluster dns 10.222.222.222
['kubernetes']['cluster_domain'] String cluster dns name kubernetes.local
['kubernetes']['cluster_cidr'] String cidr 192.168.0.0/16
['kubernetes']['node_cidr_mask_size'] Int cidr mask size 24
['kubernetes']['use_cluster_dns_systemwide'] Boolean dns systemwide false
['kubernetes']['ssl']['keypairs'] Array ssl keypairs ['apiserver', 'ca']
['kubernetes']['ssl']['ca']['public_key'] String ca public_key path /etc/kubernetes/ssl/ca.pem
['kubernetes']['ssl']['ca']['private_key'] String ca private_key path /etc/kubernetes/ssl/ca-key.pem
['kubernetes']['ssl']['apiserver']['public_key'] String apiserver public_key path /etc/kubernetes/ssl/apiserver.pem
['kubernetes']['ssl']['apiserver']['private_key'] String apiserver private_key path /etc/kubernetes/ssl/apiserver-key.pem
['kubernetes']['kubeconfig'] String kubeconfig path /etc/kubernetes/kubeconfig.yaml
['kubernetes']['tls_cert_file'] String tls_cert_file path /etc/kubernetes/ssl/apiserver.pem
['kubernetes']['tls_private_key_file'] String tls private key file /etc/kubernetes/ssl/apiserver-key.pem
['kubernetes']['client_ca_file'] String client_ca_file path /etc/kubernetes/ssl/ca.pem
['kubernetes']['cluster_signing_cert_file'] String cluster_signing_cert_file path /etc/kubernetes/ssl/ca.pem
['kubernetes']['cluster_signing_key_file'] String /etc/kubernetes/ssl/ca-key.pem
['kubernetes']['token_auth'] Boolean token auth false
['kubernetes']['token_auth_file'] String tokens file /etc/kubernetes/known_tokens.csv
['kubernetes']['docker'] String path to docker socket unix:///var/run/docker.sock
['kubernetes'][cgroupdriver'] String Driver that the kubelet uses to manipulate cgroups on the host. cgroupfs
['kubernetes']['feature_gates'] Hash feature gates 'RotateKubeletServerCertificate': true, 'PersistentLocalVolumes': true, 'VolumeScheduling: true, 'MountPropagation=true']
['kubernetes']['audit']['enabled'] Boolean enable audit true
['kubernetes']['audit']['log_file'] String audit logfile /var/log/kubernetes/audit.log
['kubernetes']['audit']['maxbackup'] Int audit maxbackup 3
['kubernetes']['packages']['storage_url'] String packages storage https://storage.googleapis.com/kubernetes-release/release/#{node['kubernetes']['version']}/bin/linux/amd64/
['kubernetes']['checksums']['apiserver'] String checksum 1852bfe86cfa96959ece2db5c70847c4e6b993caf0799ecc0d11c788ed366a56
['kubernetes']['checksums']['controller-manager'] String checksum 114e7d1b6ff44bab03ecc84959b76455372445b703661863a9f222bf710e35f0
['kubernetes']['checksums']['proxy'] String checksum 7670939861baeeca598bdfcbebc8f7e48f1c6fa73983c4d3f549e894757d2d2f
['kubernetes']['checksums']['scheduler'] String checksum ad44f1c248ce0b6c35b7c7c66567d6e8085f785a130a6a26fd238411088fab5b
['kubernetes']['checksums']['kubectl'] String checksum 1bb4d3793fb0f9e1cfee86599e0f43ae5f15578a01b61011fe7c9488e114a00b
['kubernetes']['checksums']['kubelet'] String checksum 688d1167c5a8b37bb5f10e330ba43c15092f1d35dcc25929e84484c41a20319d
['kubernetes']['addon_manager']['version'] String addon_manager version v6.5
['kubernetes']['multimaster']['access_via'] String type of access haproxy
['kubernetes']['multimaster']['haproxy_url'] String haproxy url 127.0.0.1
['kubernetes']['multimaster']['haproxy_port'] Int haproxy port 6443
['kubernetes']['multimaster']['dns_name'] String multimaster dns_name
['kubernetes']['cni']['version'] String cni version 0.6.0
['kubernetes']['cni']['plugins'] Hash cni plugins See attributes/default.rb for this big hash
['kubernetes']['cni']['plugins_version'] String cni plugins version 0.7.1
['kubernetes']['encryption'] String encryption aescbc
['kubernetes']['node']['packages'] Hash default node packages See attributes/default.rb for more information
kubelet
Key Type Description Default
['kubernetes']['kubelet']['daemon_flags']['config'] String kubelet init config /etc/kubernetes/kubeletconfig.yaml
['kubernetes']['kubelet']['daemon_flags']['bootstrap_kubeconfig'] String bootstrap config /etc/kubernetes/kubeconfig-bootstrap.yaml
['kubernetes']['kubelet']['daemon_flags']['cert_dir'] String cert dir /etc/kubernetes/ssl
['kubernetes']['kubelet']['daemon_flags']['kubeconfig'] String kubeconfig /etc/kubernetes/kubelet.yaml
['kubernetes']['kubelet']['daemon_flags']['allow_privileged'] Boolean allow run privileged pods true
['kubernetes']['kubelet']['daemon_flags']['v'] Integer log veribosity 2
['kubernetes']['kubelet']['daemon_flags']['network_plugin'] String network plugin cni
['kubernetes']['kubelet']['daemon_flags']['register_node'] Boolean register node true
['kubernetes']['kubelet']['daemon_flags']['cadvisor_port'] Integer cadvisor port 0
['kubernetes']['kubelet']['config']['staticPodPath'] String pod manifests /etc/kubernetes/manifests
['kubernetes']['kubelet']['config']['authentication']['x509']['clientCAFile'] String client ca file /etc/kubernetes/ssl/ca.pem
['kubernetes']['kubelet']['config']['authentication']['webhook']['enabled'] Boolean enable webhook true
['kubernetes']['kubelet']['config']['authentication']['webhook']['cacheTTL'] String webhook cacheTTL 2m0s
['kubernetes']['kubelet']['config']['authentication']['anonymous']['enabled'] Boolean anonymous auth fase
['kubernetes']['kubelet']['config']['authorization']['mode'] String auth mode Webhook
['kubernetes']['kubelet']['config']['clusterDNS'] Array array of cluster dns ips node['kubernetes']['cluster_dns']
['kubernetes']['kubelet']['config']['featureGates'] Hash hash of feature gates node['kubernetes']['feature_gates']
['kubernetes']['kubelet']['config']['NodeStatusUpdateFrequency'] String NodeStatusUpdateFrequency 4s
['kubernetes']['kubelet']['config']['clusterDomain'] String cluster domain node['kubernetes']['cluster_domain']
['kubernetes']['kubelet']['config']['imageGCLowThresholdPercent'] Integer imageGCLowThresholdPercent 70
['kubernetes']['kubelet']['config']['imageGCHighThresholdPercent'] Integer imageGCHighThresholdPercent 80
['kubernetes']['kubelet']['config']['failSwapOn'] Boolean failSwapOn false
['kubernetes']['kubelet']['config']['ReadOnlyPort'] Integer ReadOnlyPort 10255
crio
Key Type Description Default
['kubernetes']['crio']['version'] String CRIO binary version 1.11.0
['kubernetes']['crio']['endpoint'] String Path to UNIX socket for crio daemon to listen /var/run/crio/crio.sock
['kubernetes']['crio']['config']['runtime'] String OCI compatible runtime used for trusted container workloads. /usr/local/bin/runc
['kubernetes']['crio']['config']['untrusted_runtime'] String OCI compatible runtime used for untrusted container workloads. /usr/local/bin/runsc
['kubernetes']['crio']['config']['conmon'] String Path to conmon binary /usr/local/bin/conmon
['kubernetes']['crio']['config']['storage_driver'] String Storage driver aufs
['kubernetes']['crio']['config']['stream_port'] Fixnum Port on which the stream server will listen 10010
['kubernetes']['crio']['config']['runroot'] String Path to the "run directory". CRIO stores all of its state in this directory. /var/run/containers/storage
['kubernetes']['crio']['config']['root'] String Path to the "root directory". CRIO stores all of its data, including container images, in this directory. /var/lib/containers/storage
['kubernetes']['crio']['daemon_flags']['log_format'] String Format used by logs text
['kubernetes']['crio']['daemon_flags']['log_level'] String Log messages above specified level: debug, info, warn, error, fatal or panic info
['kubernetes']['crio']['daemon_flags']['profile'] Boolean Enable pprof remote profiler on localhost:6060 false
['kubernetes']['crio']['daemon_flags']['enable_metrics'] Boolean Enable prometheus-compatible metrics endpoint for the server true
['kubernetes']['crio']['daemon_flags']['metrics_port'] Fixnum Port for the metrics endpoint 9090
addons
Key Type Description Default
['kubernetes']['addons']['dns']['controller'] String dns controller coredns
['kubernetes']['addons']['dns']['antiaffinity_type'] String antiaffinity type preferredDuringSchedulingIgnoredDuringExecution
['kubernetes']['addons']['dns']['antiaffinity_weight'] Int antiaffinity weight 100
['kubernetes']['addons']['kubedns']['dns_forward_max'] Int dns forward max 150
['kubernetes']['addons']['kubedns']['version'] String kubedns version 1.14.10
['kubernetes']['addons']['kubedns']['limits']['cpu'] String kubedns cpu limits 100m
['kubernetes']['addons']['kubedns']['limits']['memory'] String kubedns memory limits 170Mi
['kubernetes']['addons']['kubedns']['requests']['cpu'] String kubedns requests cpu 100m
['kubernetes']['addons']['kubedns']['requests']['memory'] String kubedns requests memory 70Mi
['kubernetes']['addons']['coredns']['version'] String coredns version '1.2.0'
['kubernetes']['addons']['coredns']['limits']['cpu'] String coredns cpu limits 100m
['kubernetes']['addons']['coredns']['limits']['memory'] String coredns memory limits 256Mi
['kubernetes']['addons']['coredns']['requests']['cpu'] String coredns cpu requests 100m
['kubernetes']['addons']['coredns']['requests']['memory'] String coredns memory requests 256Mi
['kubernetes']['addons']['coredns']['log'] Boolean enable coredns log false
authorization
Key Type Description Default
['kubernetes']['authorization']['admin_groups'] Array admin groups ['admins']
['kubernetes']['authorization']['mode'] String authorization mode None,RBAC
['kubernetes']['authorization']['policies'] Array auth policies See attributes/authorization.rb
deis
Key Type Description Default
['kubernetes']['deis']['enabled'] Boolean enable deis false
['kubernetes']['deis']['route_via'] String route haproxy
['kubernetes']['deis']['builder']['port'] Int builder port 2222
docker
Key Type Description Default
['docker']['built-in'] Boolean enable built-in docker installation true
['docker']['version'] String default daemon version 17.03.2
['docker']['settings']['storage-driver'] String defalt storage driver aufs
['docker']['settings']['live-restore'] Boolean live restore true
['docker']['settings']['iptables'] Boolean iptables false
['docker']['settings']['ip-masq'] Boolean ip masq false
etcd
Key Type Description Default
['etcd']['version'] String version v3.3.7
['etcd']['image'] String image quay.io/coreos/etcd
['etcd']['trusted_ca_file'] String trusted_ca_file /etc/kubernetes/ssl/ca.pem
['etcd']['client_cert_auth'] String client_cert_auth true
['etcd']['key_file'] String key file /etc/kubernetes/ssl/apiserver-key.pem
['etcd']['cert_file'] String cert file /etc/kubernetes/ssl/apiserver.pem
['etcd']['peer_trusted_ca_file'] String trusted ca /etc/kubernetes/ssl/ca.pem
['etcd']['peer_client_cert_auth'] String cert auth true
['etcd']['peer_key_file'] String key file /etc/kubernetes/ssl/apiserver-key.pem
['etcd']['peer_cert_file'] String cert file /etc/kubernetes/ssl/apiserver.pem
['etcd']['server_port'] Int server port 2380
['etcd']['client_port'] Int client port 2379
['etcd']['data_dir'] String data dir /var/lib/etcd
['etcd']['wal_dir'] String wal_dir /var/lib/etcd/member/wal
['etcd']['proto'] String proto http
['etcd']['binary'] String binary /usr/local/bin/etcd
['etcd']['user'] String etcd user etcd
['etcd']['group'] String etcd group etcd
['etcd']['initial_cluster_token'] String initial cluster token etcd-cluster
['etcd']['initial_cluster_state'] String initial cluster state new
['etcd']['role'] String role name etcd
['etcd']['default_service_name'] Boolean Set default service name like etcd.service true
firewall
Key Type Description Default
['firewall']['allow_ssh'] Boolean allow_ssh true
['firewall']['allow_loopback'] Boolean allow loopback true
['firewall']['allow_icmp'] Boolean allow icmp true
['firewall']['ubuntu_iptables'] Boolean ubuntu iptables false
['firewall']['allow_established'] Boolean allow established true
['firewall']['ipv6_enabled'] Boolean ipv6_enabled true
weave
Key Type Description Default
['kubernetes']['weave']['version'] String version 2.2.1
['kubernetes']['weave']['interface'] String interfave weave
['kubernetes']['weave']['use_scope'] Boolean use_scope true
['kubernetes']['weave']['use_portmap'] Boolean use_portmap true
['kubernetes']['weave']['update_strategy']['type'] String update_strategy RollingUpdate
['kubernetes']['weavescope']['version'] String weavespoce version 0.17.1
['kubernetes']['weavescope']['port'] String weavescope port 4040
k8s_apiserver
Key Type Description Default
['kubernetes']['api']['bind_address'] String bind_address 0.0.0.0
['kubernetes']['api']['insecure_bind_address'] String insecure_bind_address 127.0.0.1
['kubernetes']['api']['insecure_port'] Integer insecure_port 8080
['kubernetes']['api']['secure_port'] Integer secure_port 8443
['kubernetes']['api']['service_cluster_ip_range'] String 10.222.0.0/16
['kubernetes']['api']['storage_backend'] String storage_backend etcd3
['kubernetes']['api']['storage_media_type'] String storage_media_type application/vnd.kubernetes.protobuf
['kubernetes']['api']['kubelet_https'] Boolean kubelet_https true
['kubernetes']['api']['kubelet_certificate_authority'] String kubelet_certificate_authority /etc/kubernetes/ssl/ca.pem
['kubernetes']['api']['experimental_encryption_provider_config'] String experimental_encryption_provider_config /etc/kubernetes/encryption-config.yaml
['kubernetes']['api']['kubelet_client_certificate'] String kubelet_client_certificate /etc/kubernetes/ssl/apiserver.pem
['kubernetes']['api']['kubelet_client_key'] String kubelet_client_key /etc/kubernetes/ssl/apiserver-key.pem
['kubernetes']['api']['endpoint_reconciler_type'] String endpoint_reconciler_type lease
['kubernetes']['api']['etcd_certfile'] String etcd_certfile node['etcd']['cert_file']
['kubernetes']['api']['etcd_keyfile'] String etcd_keyfile node['etcd']['key_file']
['kubernetes']['api']['etcd_cafile'] String etcd_cafile node['etcd']['trusted_ca_file']
['kubernetes']['api']['allow_privileged'] Boolean allow privileged containers true
['kubernetes']['api']['authorization_mode'] String authorization_mode node['kubernetes']['authorization']['mode']
['kubernetes']['api']['enable_bootstrap_token_auth'] default nit, because option without params nil
['kubernetes']['api']['tls_cert_file'] String tls_cert_file node['kubernetes']['tls_cert_file']
['kubernetes']['api']['tls_private_key_file'] String tls_private_key_file node['kubernetes']['tls_private_key_file']
['kubernetes']['api']['client_ca_file'] String client_ca_file node['kubernetes']['client_ca_file']
['kubernetes']['api']['service_account_key_file'] String service_account_key_file node['kubernetes']['service_account_key_file']
['kubernetes']['api']['log_dir'] String log_dir /var/log/kubernetes
['kubernetes']['api']['feature_gates'] String feature_gates node['kubernetes']['feature_gates']
['kubernetes']['api']['enable_admission_plugins'] String plugins separated by comma Initializers, NamespaceLifecycle, NodeRestriction, LimitRanger, ServiceAccount, DefaultStorageClass, ResourceQuota
k8s_controller
Key Type Description Default
['kubernetes']['controller_manager']['address'] String address 127.0.0.1
['kubernetes']['controller_manager']['leader_elect'] Boolean leader_elect true
['kubernetes']['controller_manager']['cluster_cidr'] String cluster cird node['kubernetes']['cluster_cidr']
['kubernetes']['controller_manager']['cluster_name'] String cluster name node['kubernetes']['cluster_name']
['kubernetes']['controller_manager']['service_account_private_key_file'] String service_account_key_file node['kubernetes']['service_account_key_file']
['kubernetes']['controller_manager']['cluster_signing_cert_file'] String cluster_signing_cert_file node['kubernetes']['cluster_signing_cert_file']
['kubernetes']['controller_manager']['cluster_signing_key_file'] String cluster_signing_key_file node['kubernetes']['cluster_signing_key_file']
['kubernetes']['controller_manager']['root_ca_file'] String root_ca_file node['kubernetes']['client_ca_file']
['kubernetes']['controller_manager']['master'] String master http://127.0.0.1:#{node['kubernetes']['api']['insecure_port']}
['kubernetes']['controller_manager']['feature_gates'] String feature_gates node['kubernetes']['feature_gates']
['kubernetes']['controller_manager']['node_monitor_period'] String node_monitor_period 2s
['kubernetes']['controller_manager']['node_monitor_grace_period'] String node_monitor_grace_period 16s
['kubernetes']['controller_manager']['pod_eviction_timeout'] String pod_eviction_timeout 30s
k8s_proxy
Key Type Description Default
['kubernetes']['proxy']['kubeconfig'] String path to config /etc/kubernetes/system:kube-proxy_config.yaml
['kubernetes']['proxy']['feature_gates'] Hash hash of feature gates node['kubernetes']['feature_gates']
scheduler
Key Type Description Default
['kubernetes']['scheduler']['address'] String address 127.0.0.1
['kubernetes']['scheduler']['leader_elect'] Boolean leader_elect true
['kubernetes']['scheduler']['feature_gates'] String feature_gates node['kubernetes']['feature_gates']
['kubernetes']['scheduler']['master'] String master http://127.0.0.1:#{node['kubernetes']['api']['insecure_port']}

Usage

Certificates

Create ssl certificates for k8s.

cd ./lib/tasks/ssl
cp config_example.yaml config.yaml
bundler
rake ca:generate
rake apiserver:generate

All keys will be generated at ./ssl folder.

After cluster installation weave pods can contain error about:

FATA: 2018/03/15 19:51:39.168435 [kube-peers] Could not get peers: Get https://192.168.128.1:443/api/v1/nodes:
x509: certificate is valid for 127.0.0.1, 10.222.0.1, not 192.168.128.1

Add 192.168.128.1 to ssl/tasks/config.yaml and recreate and upload new apiserver-key.pem and apiserver.pem

Prepare your data_bag

You need to create kubernetes data_bag in chef server.

Then add next files:

  • apiserver_ssl
  • ca_ssl
  • encryption_keys
  • users
Structure:

apiserver_ssl

{
  "id": "apiserver_ssl",
  "private_key": "PUT apiserver-key.pem HERE",
  "public_key": "PUT apiserver.pem HERE"
}

ca_ssl

{
  "id": "ca_ssl",
  "private_key": "PUT ca-key.pem HERE",
  "public_key": "PUT ca.pem HERE"
}

encryption_keys

{
  "id": "encryption_keys",
  "aescbc": [
    {
      "name": "key1",
      "secret": "baiBu8ais4bu3uRohqu6och5yai4wai8"
    }
  ]
}

users

{
  "id": "users",
  "users": [
    {
      "name": "exampleuser",
      "token": "aenup6io4ciath7yaxu0vie6guaSie6goi3ahri0eemui3Ieghu4tuhaa3kisohv",
      "uid": "10001",
      "groups": [
        "admins"
      ]
    },
    {
      "name": "kubelet-bootstrap",
      "token": "nieJi3ooGh1ohy8sheowee7ohghei3Xaebeeve8Ooch3omex4cho2xuexuuzeeva",
      "uid": "10100",
      "groups": [
        "system:bootstrappers"
      ]
    },
    {
      "name": "kubelet",
      "token": "ieT5Oogecah6geengaeyai3ohNg6Fiecha6iemaifithah2ui3oChaixeThi5Shi",
      "uid": "10101",
      "groups": [
        "kubelet",
        "system:nodes"
      ]
    },
    {
      "name": "system:kube-proxy",
      "token": "ka2thaijaek0oophoothahbahyaiphe6ahteegieyae8il9XohveeJahn3Aizohy",
      "uid": "10102",
      "groups": [
        "system:node-proxier"
      ]
    },
    {
      "name": "scheduler",
      "token": "MoN7ohz2Aebeep2eeneGhie5Hikop9iroSahyezohchuthi8Iu1iVaetae5xaj3W",
      "uid": "10103",
      "groups": [
        "scheduler"
      ]
    }
  ]
}

kubernetes::etcd

Run kubernetes::etcd recipe or role on your nodes. Run it twice for normal chef search.

Or you can add role without kubernetes::etcd for first servers registration in chef.

name 'etcd'
description 'Etcd cluster node'
override_attributes(
  'etcd' => {
    initial_cluster_state: 'new',
    initial_cluster_token: 'etcd-test-cluster',
    wal_dir: '/var/lib/etcd/member/wal'
  }
)
run_list 'recipe[kubernetes::etcd]'

kubernetes::master

Include kubernetes::master in your master node's run_list:

{
  "run_list": [
    "recipe[kubernetes::master]"
  ]
}

Or role:

name 'kubernetes_master'
description 'Kubernetes master node'
run_list 'recipe[kubernetes::master]'
override_attributes(
  docker: {
    build_in_enable: false
  },
  kubernetes: {
    cluster_name: 'evilms',
    cluster_dns: ['192.168.222.222'],
    cluster_cidr: '192.168.0.0/17',
    api: {
      'service_cluster_ip_range' => '192.168.128.0/17'
    },
    dns: { deploy_via: 'deployment' },
    token_auth: true,
    addons: {
      kubedns: {
        node_selector: 'evl.ms/role=system'
      },
      coredns: {
        node_selector: 'evl.ms/role=system',
        requests: {
          cpu: '200m'
        },
        limits: {
          cpu: '200m'
        }
      },
      dns: {
        controller: 'coredns',
        antiaffinity_type: 'requiredDuringSchedulingIgnoredDuringExecution'
      }
    }
  }
)

If you use master nodes without minions on them add kubernetes::packages to you run_list.

And add master node to role kube_master. This is obligatory in multinode configuration - minions uses role to find master.

kubernetes::default

Include kubernetes::default in your minion node's run_list:

{
  "run_list": [
    "recipe[kubernetes]"
  ]
}

Or role:

name 'kubernetes_node'
description 'kubernetes node'
#run_list 'recipe[kubernetes]'
run_list 'recipe[kubernetes]'
override_attributes(
  kubernetes: {
    cluster_name: 'evilms',
    cluster_dns: ['192.168.222.222'],
    token_auth: true,
    api:   { 'service_cluster_ip_range' => '192.168.128.0/17' },
    weave: {
      network: '192.168.0.0/17',
      use_scope: false
    }
  }
)

If you use custom docker installation you can disable built-in docker installation

docker: {
  'built-in' => false
}

Also you can use CRIO as a container runtime interface:

kubernetes: {
  'container_runtime': 'crio'
}

Don't forget to run docker rm -f `docker ps -aq` after successful CRIO installation.

Dashboard

Starting from release 1.11.0 we are no more ships kubernetes-dashboard with cookbook. From now on we recommends to use helm and install kubernetes-dashboard from official chart.

License and Authors

License:: http://bregor.mit-license.org

Author:: Maxim Filatov (bregor@evilmartians.com)