--- /dev/null
+AllCops:
+ Exclude:
+ - vendor/**/*
+
+AlignParameters:
+ Enabled: false
+LineLength:
+ Enabled: false
+Lint/UnusedBlockArgument:
+ Enabled: false
+Metrics/AbcSize:
+ Enabled: false
+Style/BlockComments:
+ Enabled: false
+Style/BlockDelimiters:
+ Enabled: false
+Style/ExtraSpacing:
+ Enabled: false
+Style/FileName:
+ Enabled: false
+Style/LeadingCommentSpace:
+ Enabled: false
+Style/RescueModifier:
+ Enabled: false
+Style/SpaceBeforeFirstArg:
+ Enabled: false
+Style/TrailingCommaInLiteral:
+ EnforcedStyleForMultiline: comma
+Style/WordArray:
+ Enabled: false
+
+#Style/AccessorMethodName:
+# Enabled: false
+Metrics/MethodLength:
+ Max: 15
+#Style/ModuleLength:
+# Max: 150
--- /dev/null
+# kubernetes-grid CHANGELOG
+
+0.1.0
+-----
+- Initial release of kubernetes-grid
--- /dev/null
+source 'https://rubygems.org'
+
+#gem 'foodcritic'
--- /dev/null
+kubernetes-grid Cookbook
+========================
+
+This cookbook sets up Kubernetes cluster.
+
+## Contents
+
+- [Requirements](#requirements)
+ - [platforms](#platforms)
+ - [packages](#packages)
+- [Attributes](#attributes)
+- [Usage](#usage)
+ - [Recipes](#recipes)
+ - [kubernetes-grid::default](#kubernetes-griddefault)
+ - [kubernetes-grid::master](#kubernetes-gridmaster)
+ - [kubernetes-grid::node](#kubernetes-gridnode)
+ - [kubernetes-grid::node-commons](#kubernetes-gridnode-commons)
+ - [Role Examples](#role-examples)
+- [License and Authors](#license-and-authors)
+
+## Requirements
+
+### platforms
+- CentOS, Red Hat Enterprise Linux >= 7.2
+- Ubuntu >= 16.04
+
+### packages
+- none.
+
+## Attributes
+
+|Key|Type|Description, example|Default|
+|:--|:--|:--|:--|
+|`['kubernetes-grid']['apt_repo']['url']`|String||`'http://apt.kubernetes.io/'`|
+|`['kubernetes-grid']['apt_repo']['keyurl']`|String|You must set whether this `keyurl` or the following `keyserver` & `recv-keys`.|`'https://packages.cloud.google.com/apt/doc/apt-key.gpg'`|
+|`['kubernetes-grid']['apt_repo']['keyserver']`|String||`nil`|
+|`['kubernetes-grid']['apt_repo']['recv-keys']`|String||`nil`|
+|`['kubernetes-grid']['apt_repo']['override_apt_line']`|String|e.g. `'deb http://apt.kubernetes.io/ kubernetes-xenial main'`|`''`|
+|`['kubernetes-grid']['yum_repo']['baseurl']`|String||`'http://yum.kubernetes.io/repos/kubernetes-el7-x86_64'`|
+|`['kubernetes-grid']['yum_repo']['gpgcheck']`|String||`'1'`|
+|`['kubernetes-grid']['yum_repo']['repo_gpgcheck']`|String||`'1'`|
+|`['kubernetes-grid']['yum_repo']['gpgkey']`|Array, String||See `attributes/default.rb`.|
+|`['kubernetes-grid']['docker-engine']['setup']`|Boolean|Docker setup by the `docker-grid` cookbook.|`true`|
+
+## Usage
+
+### Recipes
+
+#### kubernetes-grid::default
+
+This recipe does nothing.
+
+#### kubernetes-grid::master
+
+This recipe sets up a master node.
+
+#### kubernetes-grid::node
+
+This recipe sets up a worker node.
+
+#### kubernetes-grid::node-commons
+
+This recipe installs Kubernetes base packages.
+
+### Role Examples
+
+- `roles/kube0.rb`
+
+```ruby
+cluster_name = 'kube0'
+
+name "#{cluster_name}"
+description "#{cluster_name} cluster"
+
+run_list(
+)
+
+override_attributes(
+ 'docker-grid' => {
+ 'engine' => {
+ 'version_on_centos' => '1.11.2-1',
+ 'version_on_ubuntu' => '1.11.2-0',
+ 'storage-driver_on_centos' => 'overlay',
+ 'storage-driver_on_ubuntu' => 'overlay', # default: aufs
+ #'userns-remap' => 'default',
+ 'daemon_extra_options' => '-H fd:// --bip=192.168.128.1/24 --fixed-cidr=192.168.128.0/24',
+ },
+ },
+)
+```
+
+- `roles/kube0-master.rb`
+
+```ruby
+cluster_name = 'kube0'
+
+name "#{cluster_name}-master"
+description "#{cluster_name} cluster master node"
+
+run_list(
+ "role[#{cluster_name}]",
+ 'recipe[kubernetes-grid::master]',
+)
+
+override_attributes(
+)
+```
+
+- `roles/kube0-node.rb`
+
+```ruby
+cluster_name = 'kube0'
+
+name "#{cluster_name}-node"
+description "#{cluster_name} cluster worker node"
+
+run_list(
+ "role[#{cluster_name}]",
+ 'recipe[kubernetes-grid::node]',
+)
+
+override_attributes(
+)
+```
+
+## License and Authors
+
+- Author:: whitestar at osdn.jp
+
+```text
+Copyright 2016, whitestar
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+```
--- /dev/null
+require 'rspec/core/rake_task'
+require 'rubocop/rake_task'
+require 'foodcritic'
+
+namespace :style do
+ desc 'Run Ruby style checks'
+ RuboCop::RakeTask.new(:ruby)
+
+ desc 'Run Chef style checks'
+ FoodCritic::Rake::LintTask.new(:chef) do |t|
+ t.options = {
+ fail_tags: ['any'],
+ }
+ end
+end
+
+desc 'Run all style checks'
+task style: ['style:chef', 'style:ruby']
+
+desc 'Run ChefSpec examples'
+RSpec::Core::RakeTask.new(:spec)
+
+task default: ['style', 'spec']
--- /dev/null
+#
+# Cookbook Name:: kubernetes-grid
+# Attributes:: default
+#
+# Copyright 2016, whitestar
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+default['kubernetes-grid']['apt_repo'] = {
+ 'url' => 'http://apt.kubernetes.io/',
+ 'keyurl' => 'https://packages.cloud.google.com/apt/doc/apt-key.gpg',
+ # or
+ 'keyserver' => nil,
+ 'recv-keys' => nil,
+ 'override_apt_line' => '', # e.g. 'deb http://apt.kubernetes.io/ kubernetes-xenial main'
+}
+default['kubernetes-grid']['yum_repo'] = {
+ 'baseurl' => 'http://yum.kubernetes.io/repos/kubernetes-el7-x86_64',
+ 'gpgcheck' => '1',
+ 'repo_gpgcheck' => '1',
+ 'gpgkey' => [
+ 'https://packages.cloud.google.com/yum/doc/yum-key.gpg',
+ 'https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg',
+ ],
+}
+default['kubernetes-grid']['docker-engine']['setup'] = true
--- /dev/null
+# $ knife supermarket share kubernetes-grid "Operating Systems & Virtualization"
+name 'kubernetes-grid'
+maintainer 'whitestar'
+maintainer_email ''
+license 'Apache 2.0'
+description 'Installs/Configures Kubernetes'
+long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
+version '0.1.0'
+
+source_url 'http://scm.osdn.jp/gitroot/metasearch/grid-chef-repo.git'
+issues_url 'https://osdn.jp/projects/metasearch/ticket'
+
+%w( centos redhat ).each do |os|
+ supports os, '>= 7.2'
+end
+supports 'ubuntu', '>= 16.04'
+
+# external cookbooks
+depends 'docker-grid', '>= 0.2.8'
--- /dev/null
+#
+# Cookbook Name:: kubernetes-grid
+# Recipe:: default
+#
+# Copyright 2016, whitestar
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# http://kubernetes.io/docs/getting-started-guides/kubeadm/
+
+include_recipe 'kubernetes-grid::node'
--- /dev/null
+#
+# Cookbook Name:: kubernetes-grid
+# Recipe:: master
+#
+# Copyright 2016, whitestar
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# http://kubernetes.io/docs/getting-started-guides/kubeadm/
+
+include_recipe 'kubernetes-grid::node-commons'
+
+[
+ 'kubeadm', # for `kubeadm init`
+ 'kubectl', # already required by kubeadm ...
+].each {|pkg|
+ resources(package: pkg) rescue package pkg do
+ action :install
+ end
+}
--- /dev/null
+#
+# Cookbook Name:: kubernetes-grid
+# Recipe:: node-commons
+#
+# Copyright 2016, whitestar
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# http://kubernetes.io/docs/getting-started-guides/kubeadm/
+
+if node['kubernetes-grid']['docker-engine']['setup']
+ include_recipe 'docker-grid::engine'
+end
+
+case node['platform_family']
+when 'rhel'
+ disable_selinux = 'disable_selinux'
+ resources(execute: disable_selinux) rescue execute disable_selinux do
+ user 'root'
+ command 'setenforce 0'
+ not_if 'getenforce | grep -i \'\(disabled\|permissive\)\''
+ end
+ template '/etc/selinux/config' do
+ source 'etc/selinux/config'
+ owner 'root'
+ group 'root'
+ mode '0644'
+ end
+
+ execute 'yum_makecache_kubernetes' do
+ user 'root'
+ # import GPG keys simultaneously.
+ command 'yum -q -y makecache --disablerepo=* --enablerepo=kubernetes'
+ action :nothing
+ end
+
+ template '/etc/yum.repos.d/kubernetes.repo' do
+ source 'etc/yum.repos.d/kubernetes.repo'
+ owner 'root'
+ group 'root'
+ mode '0644'
+ notifies :run, 'execute[yum_makecache_kubernetes]', :immediately
+ end
+when 'debian'
+ [
+ 'curl',
+ ].each {|pkg|
+ resources(package: pkg) rescue package pkg do
+ action :install
+ end
+ }
+
+ apt_get_update = 'apt-get_update'
+ resources(execute: apt_get_update) rescue execute apt_get_update do
+ command 'apt-get update'
+ action :nothing
+ end
+
+ apt_repo_config = node['kubernetes-grid']['apt_repo']
+ add_key_command = ''
+ if !apt_repo_config['keyurl'].nil? && !apt_repo_config['keyurl'].empty?
+ add_key_command = "curl -s #{apt_repo_config['keyurl']} | apt-key add -"
+ elsif !apt_repo_config['keyserver'].nil? && !apt_repo_config['keyserver'].empty? \
+ && !apt_repo_config['recv-keys'].nil? && !apt_repo_config['recv-keys'].empty?
+ add_key_command = "apt-key adv --keyserver #{apt_repo_config['keyserver']} --recv-keys #{apt_repo_config['recv-keys']}"
+ end
+
+ execute 'apt-key_add_google_cloud_packages_key' do
+ command add_key_command
+ action :nothing
+ not_if 'apt-key list | grep "Google Cloud Packages"'
+ end
+
+ template '/etc/apt/sources.list.d/kubernetes.list' do
+ source 'etc/apt/sources.list.d/kubernetes.list'
+ owner 'root'
+ group 'root'
+ mode '0644'
+ notifies :run, 'execute[apt-key_add_google_cloud_packages_key]', :before
+ notifies :run, "execute[#{apt_get_update}]", :immediately
+ end
+=begin
+ # Pinning Kubernetes version
+ template '/etc/apt/preferences.d/kubernetes.pref' do
+ source 'etc/apt/preferences.d/kubernetes.pref'
+ owner 'root'
+ group 'root'
+ mode '0644'
+ end
+=end
+end
+
+[
+ 'kubelet',
+ 'kubernetes-cni', # already required by kublet ...
+].each {|pkg|
+ resources(package: pkg) rescue package pkg do
+ action :install
+ end
+}
+
+service 'kubelet' do
+ action [:start, :enable]
+end
--- /dev/null
+#
+# Cookbook Name:: kubernetes-grid
+# Recipe:: node
+#
+# Copyright 2016, whitestar
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# http://kubernetes.io/docs/getting-started-guides/kubeadm/
+
+include_recipe 'kubernetes-grid::node-commons'
+
+[
+ 'kubeadm', # for `kubeadm join`
+ #'kubectl', # required by kubeadm
+].each {|pkg|
+ resources(package: pkg) rescue package pkg do
+ action :install
+ end
+}
--- /dev/null
+require_relative '../spec_helper'
+
+describe 'docker-grid::default' do
+ let(:chef_run) { ChefSpec::SoloRunner.new.converge(described_recipe) }
+
+ #it 'does something' do
+ # expect(chef_run).to do_something('...')
+ #end
+end
--- /dev/null
+# Added by ChefSpec
+require 'chefspec'
+
+# Uncomment to use ChefSpec's Berkshelf extension
+# require 'chefspec/berkshelf'
+
+RSpec.configure do |config|
+ # Specify the path for Chef Solo to find cookbooks
+ # config.cookbook_path = '/var/cookbooks'
+
+ # Specify the path for Chef Solo to find roles
+ # config.role_path = '/var/roles'
+
+ # Specify the Chef log_level (default: :warn)
+ # config.log_level = :debug
+
+ # Specify the path to a local JSON file with Ohai data
+ # config.path = 'ohai.json'
+
+ # Specify the operating platform to mock Ohai data from
+ # config.platform = 'ubuntu'
+
+ # Specify the operating version to mock Ohai data from
+ # config.version = '12.04'
+end
--- /dev/null
+<%
+override_apt_line = node['kubernetes-grid']['apt_repo']['override_apt_line']
+if !override_apt_line.nil? && !override_apt_line.empty?
+-%>
+<%= override_apt_line %>
+<%
+else
+-%>
+deb <%= node['kubernetes-grid']['apt_repo']['url'] %> kubernetes-<%= node['lsb']['codename'] %> main
+<%
+end
+-%>
--- /dev/null
+
+# This file controls the state of SELinux on the system.
+# SELINUX= can take one of these three values:
+# enforcing - SELinux security policy is enforced.
+# permissive - SELinux prints warnings instead of enforcing.
+# disabled - No SELinux policy is loaded.
+SELINUX=disabled
+# SELINUXTYPE= can take one of three two values:
+# targeted - Targeted processes are protected,
+# minimum - Modification of targeted policy. Only selected processes are protected.
+# mls - Multi Level Security protection.
+SELINUXTYPE=targeted
+
+
--- /dev/null
+<%
+config = node['kubernetes-grid']['yum_repo']
+gpgkey = config['gpgkey']
+gpgkey = gpgkey.kind_of?(Array) ? gpgkey.join("\n ") : gpgkey.to_s
+-%>
+[kubernetes]
+name=Kubernetes
+baseurl=<%= config['baseurl'] %>
+enabled=1
+gpgcheck=<%= config['gpgcheck'] %>
+repo_gpgcheck=<%= config['repo_gpgcheck'] %>
+gpgkey=<%= gpgkey %>
--- /dev/null
+cluster_name = 'kube0'
+
+name "#{cluster_name}-master"
+description "#{cluster_name} cluster master node"
+
+run_list(
+ "role[#{cluster_name}]",
+ 'recipe[kubernetes-grid::master]',
+)
+
+#env_run_lists
+
+default_attributes(
+)
+
+override_attributes(
+)
--- /dev/null
+cluster_name = 'kube0'
+
+name "#{cluster_name}-node"
+description "#{cluster_name} cluster worker node"
+
+run_list(
+ "role[#{cluster_name}]",
+ 'recipe[kubernetes-grid::node]',
+)
+
+#env_run_lists
+
+default_attributes(
+)
+
+override_attributes(
+)
--- /dev/null
+cluster_name = 'kube0'
+
+name "#{cluster_name}"
+description "#{cluster_name} cluster"
+
+run_list(
+)
+
+#env_run_lists
+
+default_attributes(
+)
+
+override_attributes(
+ 'docker-grid' => {
+ 'engine' => {
+ 'version_on_centos' => '1.11.2-1',
+ 'version_on_ubuntu' => '1.11.2-0',
+ 'storage-driver_on_centos' => 'overlay',
+ 'storage-driver_on_ubuntu' => 'overlay', # default: aufs
+ #'userns-remap' => 'default',
+ 'daemon_extra_options' => '-H fd:// --bip=192.168.128.1/24 --fixed-cidr=192.168.128.0/24',
+ },
+ },
+)