porkadot 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +4 -0
  5. data/README.md +35 -0
  6. data/Rakefile +10 -0
  7. data/Vagrantfile +63 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +8 -0
  10. data/config/porkadot.yaml +25 -0
  11. data/config/unstable.yaml +49 -0
  12. data/exe/porkadot +5 -0
  13. data/lib/porkadot/assets/bootstrap/bootstrap/kube-proxy-bootstrap.yaml.erb +1 -0
  14. data/lib/porkadot/assets/bootstrap/bootstrap/kubeconfig-bootstrap.yaml.erb +18 -0
  15. data/lib/porkadot/assets/bootstrap/cleanup.sh.erb +12 -0
  16. data/lib/porkadot/assets/bootstrap/install.sh.erb +14 -0
  17. data/lib/porkadot/assets/bootstrap/manifests/kube-apiserver.bootstrap.yaml.erb +91 -0
  18. data/lib/porkadot/assets/bootstrap/manifests/kube-controller-manager.bootstrap.yaml.erb +69 -0
  19. data/lib/porkadot/assets/bootstrap/manifests/kube-proxy.bootstrap.yaml.erb +56 -0
  20. data/lib/porkadot/assets/bootstrap/manifests/kube-scheduler.bootstrap.yaml.erb +31 -0
  21. data/lib/porkadot/assets/bootstrap.rb +52 -0
  22. data/lib/porkadot/assets/certs/etcd.rb +21 -0
  23. data/lib/porkadot/assets/certs/front_proxy.rb +21 -0
  24. data/lib/porkadot/assets/certs/k8s.rb +90 -0
  25. data/lib/porkadot/assets/certs.rb +175 -0
  26. data/lib/porkadot/assets/etcd/etcd-server.yaml.erb +57 -0
  27. data/lib/porkadot/assets/etcd/install.sh.erb +12 -0
  28. data/lib/porkadot/assets/etcd.rb +109 -0
  29. data/lib/porkadot/assets/kubelet/bootstrap-kubelet.conf.erb +21 -0
  30. data/lib/porkadot/assets/kubelet/config.yaml.erb +36 -0
  31. data/lib/porkadot/assets/kubelet/install-deps.sh.erb +21 -0
  32. data/lib/porkadot/assets/kubelet/install-pkgs.sh.erb +33 -0
  33. data/lib/porkadot/assets/kubelet/install.sh.erb +35 -0
  34. data/lib/porkadot/assets/kubelet/kubelet.service.erb +22 -0
  35. data/lib/porkadot/assets/kubelet.rb +102 -0
  36. data/lib/porkadot/assets/kubernetes/install.sh.erb +7 -0
  37. data/lib/porkadot/assets/kubernetes/manifests/flannel.yaml.erb +602 -0
  38. data/lib/porkadot/assets/kubernetes/manifests/kube-apiserver.yaml.erb +129 -0
  39. data/lib/porkadot/assets/kubernetes/manifests/kube-controller-manager.yaml.erb +173 -0
  40. data/lib/porkadot/assets/kubernetes/manifests/kube-proxy.yaml.erb +132 -0
  41. data/lib/porkadot/assets/kubernetes/manifests/kube-scheduler.yaml.erb +162 -0
  42. data/lib/porkadot/assets/kubernetes/manifests/kubelet-rubber-stamp.yaml.erb +86 -0
  43. data/lib/porkadot/assets/kubernetes/manifests/kubelet.yaml.erb +40 -0
  44. data/lib/porkadot/assets/kubernetes/manifests/metallb.yaml.erb +323 -0
  45. data/lib/porkadot/assets/kubernetes/manifests/pod-checkpointer.yaml.erb +130 -0
  46. data/lib/porkadot/assets/kubernetes/manifests/porkadot.yaml.erb +69 -0
  47. data/lib/porkadot/assets/kubernetes.rb +39 -0
  48. data/lib/porkadot/assets.rb +24 -0
  49. data/lib/porkadot/cmd/cli.rb +45 -0
  50. data/lib/porkadot/cmd/install/bootstrap.rb +50 -0
  51. data/lib/porkadot/cmd/install.rb +36 -0
  52. data/lib/porkadot/cmd/render/certs.rb +68 -0
  53. data/lib/porkadot/cmd/render.rb +67 -0
  54. data/lib/porkadot/cmd.rb +4 -0
  55. data/lib/porkadot/config.rb +115 -0
  56. data/lib/porkadot/configs/bootstrap.rb +67 -0
  57. data/lib/porkadot/configs/certs/etcd.rb +33 -0
  58. data/lib/porkadot/configs/certs/front_proxy.rb +33 -0
  59. data/lib/porkadot/configs/certs/k8s.rb +89 -0
  60. data/lib/porkadot/configs/certs.rb +50 -0
  61. data/lib/porkadot/configs/cni.rb +22 -0
  62. data/lib/porkadot/configs/etcd.rb +95 -0
  63. data/lib/porkadot/configs/kubelet.rb +61 -0
  64. data/lib/porkadot/configs/kubernetes.rb +223 -0
  65. data/lib/porkadot/configs/loadbalancer.rb +26 -0
  66. data/lib/porkadot/const.rb +8 -0
  67. data/lib/porkadot/default.yaml +123 -0
  68. data/lib/porkadot/install/base.rb +5 -0
  69. data/lib/porkadot/install/bootstrap.rb +76 -0
  70. data/lib/porkadot/install/kubelet.rb +63 -0
  71. data/lib/porkadot/install/kubernetes.rb +33 -0
  72. data/lib/porkadot/utils/hash_recursive_merge.rb +73 -0
  73. data/lib/porkadot/utils.rb +25 -0
  74. data/lib/porkadot/version.rb +3 -0
  75. data/lib/porkadot.rb +41 -0
  76. data/porkadot.gemspec +42 -0
  77. metadata +205 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d234a54eadea75f593857f0d1a697af8be3cb74c5a4b48bb42b19ec966a905ae
4
+ data.tar.gz: a62e0011627d9d7f5b93e34fadd8c76df6dc88496c7ff39b561d808880ac1570
5
+ SHA512:
6
+ metadata.gz: e359ab5f970e9ed84d82c1210a4c74215bec8fb878a42b736add72a2c27771ab1c8fe3d36125387694b3ea84c626f5b5bbdcbc9bbcb25e0f47dfa6c54484c651
7
+ data.tar.gz: 1dda5458027c308e37832c74cd66b67422935c88968960b2ea017aa30aad2a6d39aa3ca2d3eaeb0d334431e4a2e50f4eb2e35bd43cca8b216eccab9c93a38c6b
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ /Gemfile.lock
11
+
12
+ /*.log
13
+ /.vagrant
14
+
15
+ /assets
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.5.5
7
+ before_install: gem install bundler -v 2.0.1
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in porkadot.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # Porkadot
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/porkadot`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'porkadot'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install porkadot
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/yuanying/porkadot.
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/*_test.rb"]
8
+ end
9
+
10
+ task :default => :test
data/Vagrantfile ADDED
@@ -0,0 +1,63 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ public_key = nil
5
+ [ENV['PORKA_PUBLIC_KEY'], "~/.ssh/id_rsa.pub", "~/.ssh/id_dsa.pub"].each do |p_key|
6
+ if p_key
7
+ p_key = File.expand_path(p_key)
8
+ if File.file?(p_key)
9
+ public_key = open(p_key).read
10
+ break
11
+ end
12
+ end
13
+ end
14
+
15
+ unless public_key
16
+ raise "Please specify ssh public key using following env: PORKA_PUBLIC_KEY"
17
+ end
18
+
19
+ SCRIPT = <<-EOF
20
+ echo "#{public_key}" >> ~vagrant/.ssh/authorized_keys
21
+
22
+ apt update
23
+ apt install -y socat conntrack ipset
24
+ EOF
25
+
26
+ CNI_INSTALL = <<-EOF
27
+ CNI_VERSION="v0.8.2"
28
+ mkdir -p /opt/cni/bin
29
+ curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-amd64-${CNI_VERSION}.tgz" | tar -C /opt/cni/bin -xz
30
+ EOF
31
+
32
+ K8S_INSTALL = <<-EOF
33
+ RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)"
34
+
35
+ mkdir -p /opt/bin
36
+ cd /opt/bin
37
+ curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/amd64/{kubeadm,kubelet,kubectl}
38
+ chmod +x {kubeadm,kubelet,kubectl}
39
+
40
+ curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes/${RELEASE}/build/debs/kubelet.service" | sed "s:/usr/bin:/opt/bin:g" > /etc/systemd/system/kubelet.service
41
+ mkdir -p /etc/systemd/system/kubelet.service.d
42
+ curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes/${RELEASE}/build/debs/10-kubeadm.conf" | sed "s:/usr/bin:/opt/bin:g" > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
43
+ EOF
44
+
45
+ Vagrant.configure("2") do |config|
46
+ config.vm.box = "ubuntu/bionic64"
47
+ config.vm.box_check_update = true
48
+
49
+ [[:node01, 111], [:node02, 112], [:node03, 113], [:node04, 114]].each do |worker|
50
+ config.vm.define worker[0] do |w|
51
+ w.vm.hostname = worker[0].to_s
52
+ w.vm.provider "virtualbox" do |v, override|
53
+ v.customize ["modifyvm", :id, "--memory", "2048"]
54
+ end
55
+
56
+ w.vm.network :private_network, ip: "192.168.33.#{worker[1]}"
57
+ w.vm.provision "docker", images: ["busybox"]
58
+ w.vm.provision :shell, inline: SCRIPT
59
+ w.vm.provision :shell, inline: CNI_INSTALL
60
+ w.vm.provision :shell, inline: K8S_INSTALL
61
+ end
62
+ end
63
+ end
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "porkadot"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,25 @@
1
+ nodes:
2
+ node01:
3
+ hostname: 192.168.33.111
4
+ labels:
5
+ "k8s.unstable.cloud/master":
6
+ "etcd.unstable.cloud/member": node01
7
+ taints:
8
+ "node-role.kubernetes.io/master": :NoSchedule"
9
+ "etcd.unstable.cloud/member": node02
10
+ node02:
11
+ hostname: 192.168.33.112
12
+ labels:
13
+ "k8s.unstable.cloud/master":
14
+ "etcd.unstable.cloud/member": node03
15
+ taints:
16
+ "node-role.kubernetes.io/master": :NoSchedule"
17
+ node03:
18
+ hostname: 192.168.33.113
19
+ node04:
20
+ hostname: 192.168.33.114
21
+
22
+ bootstrap: {}
23
+
24
+ kubernetes:
25
+ control_plane_endpoint: '192.168.33.101:6443'
@@ -0,0 +1,49 @@
1
+ nodes:
2
+ 172.18.13.111:
3
+ labels:
4
+ "k8s.unstable.cloud/master":
5
+ "etcd.unstable.cloud/member": node01
6
+ taints:
7
+ "node-role.kubernetes.io/master": ":NoSchedule"
8
+ 172.18.13.112:
9
+ labels:
10
+ "k8s.unstable.cloud/master":
11
+ "etcd.unstable.cloud/member": node02
12
+ taints:
13
+ "node-role.kubernetes.io/master": ":NoSchedule"
14
+ 172.18.13.113:
15
+ labels:
16
+ "k8s.unstable.cloud/master":
17
+ "etcd.unstable.cloud/member": node03
18
+ taints:
19
+ "node-role.kubernetes.io/master": ":NoSchedule"
20
+ 172.18.13.121:
21
+ 172.18.13.122:
22
+ 172.18.13.123:
23
+
24
+ bootstrap:
25
+ node:
26
+ hostname: 172.18.13.121
27
+
28
+ lb:
29
+ metallb:
30
+ config: |
31
+ address-pools:
32
+ - name: default
33
+ protocol: layer2
34
+ addresses:
35
+ - 172.18.13.101/32
36
+ - 172.18.13.140-172.18.13.200
37
+
38
+ cni:
39
+ flannel:
40
+ backend: host-gw
41
+
42
+ kubernetes:
43
+ kubernetes_version: v1.15.11
44
+ cluster_name: unstable
45
+ control_plane_endpoint: '172.18.13.101:6443'
46
+
47
+ proxy:
48
+ config:
49
+ mode: 'ipvs'
data/exe/porkadot ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'porkadot'
4
+
5
+ puts Porkadot::Cmd::Cli.start(ARGV)
@@ -0,0 +1 @@
1
+ <%= global_config.k8s.proxy.proxy_config('/etc/kubernetes/bootstrap/kubeconfig-bootstrap.yaml') %>
@@ -0,0 +1,18 @@
1
+ apiVersion: v1
2
+ kind: Config
3
+ clusters:
4
+ - name: kubernetes
5
+ cluster:
6
+ certificate-authority: /etc/kubernetes/bootstrap/secrets/kubernetes/ca.crt
7
+ server: https://127.0.0.1:<%= global_config.k8s.apiserver.bind_port %>
8
+ users:
9
+ - name: admin
10
+ user:
11
+ client-certificate: /etc/kubernetes/bootstrap/secrets/kubernetes/admin.crt
12
+ client-key: /etc/kubernetes/bootstrap/secrets/kubernetes/admin.key
13
+ contexts:
14
+ - context:
15
+ cluster: kubernetes
16
+ user: admin
17
+ name: admin-context
18
+ current-context: admin-context
@@ -0,0 +1,12 @@
1
+ #!/bin/bash
2
+
3
+ set -eu
4
+ export LC_ALL=C
5
+ ROOT=$(dirname "${BASH_SOURCE}")
6
+
7
+ export KUBERNETES_PATH="/etc/kubernetes"
8
+ export KUBERNETES_BOOTSTRAP_ASSETS_PATH="${KUBERNETES_PATH}/bootstrap"
9
+ export KUBERNETES_MANIFESTS_PATH="${KUBERNETES_PATH}/manifests"
10
+
11
+ rm -rf ${KUBERNETES_BOOTSTRAP_ASSETS_PATH}
12
+ rm -rf ${KUBERNETES_MANIFESTS_PATH}/*.bootstrap.yaml
@@ -0,0 +1,14 @@
1
+ #!/bin/bash
2
+
3
+ set -eu
4
+ export LC_ALL=C
5
+ ROOT=$(dirname "${BASH_SOURCE}")
6
+
7
+ export KUBERNETES_PATH="/etc/kubernetes"
8
+ export KUBERNETES_BOOTSTRAP_ASSETS_PATH="${KUBERNETES_PATH}/bootstrap"
9
+ export KUBERNETES_MANIFESTS_PATH="${KUBERNETES_PATH}/manifests"
10
+
11
+ mkdir -p ${KUBERNETES_BOOTSTRAP_ASSETS_PATH}
12
+
13
+ cp ${ROOT}/manifests/*.bootstrap.yaml ${KUBERNETES_MANIFESTS_PATH}/
14
+ cp -r ${ROOT}/bootstrap/* ${KUBERNETES_BOOTSTRAP_ASSETS_PATH}/
@@ -0,0 +1,91 @@
1
+ <% k8s = global_config.k8s -%>
2
+ apiVersion: v1
3
+ kind: Pod
4
+ metadata:
5
+ name: bootstrap-kube-apiserver
6
+ namespace: kube-system
7
+ labels:
8
+ <%- labels = k8s.apiserver.labels.to_hash.dup -%>
9
+ <%- labels[:'app.kubernetes.io/instance'] = 'kube-apiserver-porkadot-bootstrap' -%>
10
+ <%- labels.each do |k, v| -%>
11
+ <%= k.to_s %>: <%= v %>
12
+ <%- end -%>
13
+ spec:
14
+ hostNetwork: true
15
+ containers:
16
+ - name: kube-apiserver
17
+ resources:
18
+ requests:
19
+ cpu: 250m
20
+ image: <%= k8s.image_repository %>/kube-apiserver:<%= k8s.kubernetes_version %>
21
+ command:
22
+ - kube-apiserver
23
+ - --advertise-address=$(POD_IP)
24
+ - --allow-privileged
25
+ - --authorization-mode=Node,RBAC
26
+ - --bind-address=0.0.0.0
27
+ - --client-ca-file=/etc/kubernetes/secrets/kubernetes/ca.crt
28
+ - --enable-admission-plugins=NodeRestriction
29
+ - --enable-bootstrap-token-auth=true
30
+ - --etcd-cafile=/etc/kubernetes/secrets/etcd/ca.crt
31
+ - --etcd-certfile=/etc/kubernetes/secrets/etcd/etcd-client.crt
32
+ - --etcd-keyfile=/etc/kubernetes/secrets/etcd/etcd-client.key
33
+ - --etcd-servers=<%= global_config.etcd.advertise_client_urls.join(',') %>
34
+ - --kubelet-certificate-authority=/etc/kubernetes/secrets/kubernetes/ca.crt
35
+ - --kubelet-client-certificate=/etc/kubernetes/secrets/kubernetes/kubelet-client.crt
36
+ - --kubelet-client-key=/etc/kubernetes/secrets/kubernetes/kubelet-client.key
37
+ - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
38
+ - --proxy-client-cert-file=/etc/kubernetes/secrets/kubernetes/front-proxy-client.crt
39
+ - --proxy-client-key-file=/etc/kubernetes/secrets/kubernetes/front-proxy-client.key
40
+ - --requestheader-allowed-names=front-proxy-client
41
+ - --requestheader-client-ca-file=/etc/kubernetes/secrets/kubernetes/front-proxy-ca.crt
42
+ - --requestheader-extra-headers-prefix=X-Remote-Extra-
43
+ - --requestheader-group-headers=X-Remote-Group
44
+ - --requestheader-username-headers=X-Remote-User
45
+ - --secure-port=<%= k8s.apiserver.bind_port %>
46
+ - --service-account-key-file=/etc/kubernetes/secrets/kubernetes/sa.pub
47
+ - --service-cluster-ip-range=<%= k8s.networking.service_subnet %>
48
+ - --storage-backend=etcd3
49
+ - --tls-cert-file=/etc/kubernetes/secrets/kubernetes/apiserver.crt
50
+ - --tls-private-key-file=/etc/kubernetes/secrets/kubernetes/apiserver.key
51
+ - --v=2
52
+ env:
53
+ - name: POD_IP
54
+ valueFrom:
55
+ fieldRef:
56
+ fieldPath: status.podIP
57
+ volumeMounts:
58
+ - mountPath: /etc/ca-certificates
59
+ name: etc-ca-certificates
60
+ readOnly: true
61
+ - mountPath: /etc/ssl/certs
62
+ name: ca-certs
63
+ readOnly: true
64
+ - mountPath: /usr/share/ca-certificates
65
+ name: usr-share-ca-certificates
66
+ readOnly: true
67
+ - mountPath: /etc/kubernetes/secrets
68
+ name: secrets
69
+ readOnly: true
70
+ - mountPath: /var/lock
71
+ name: var-lock
72
+ readOnly: false
73
+ volumes:
74
+ - name: secrets
75
+ hostPath:
76
+ path: /etc/kubernetes/bootstrap/secrets
77
+ - hostPath:
78
+ path: /etc/ssl/certs
79
+ type: DirectoryOrCreate
80
+ name: ca-certs
81
+ - hostPath:
82
+ path: /usr/share/ca-certificates
83
+ type: DirectoryOrCreate
84
+ name: usr-share-ca-certificates
85
+ - hostPath:
86
+ path: /etc/ca-certificates
87
+ type: DirectoryOrCreate
88
+ name: etc-ca-certificates
89
+ - name: var-lock
90
+ hostPath:
91
+ path: /var/lock
@@ -0,0 +1,69 @@
1
+ <% k8s = global_config.k8s -%>
2
+ ---
3
+ apiVersion: v1
4
+ kind: Pod
5
+ metadata:
6
+ name: bootstrap-kube-controller-manager
7
+ namespace: kube-system
8
+ labels:
9
+ <%- k8s.controller_manager.labels.each do |k, v| -%>
10
+ <%= k.to_s %>: <%= v %>
11
+ <%- end -%>
12
+ spec:
13
+ containers:
14
+ - name: kube-controller-manager
15
+ image: <%= k8s.image_repository %>/kube-controller-manager:<%= k8s.kubernetes_version %>
16
+ command:
17
+ - kube-controller-manager
18
+ - --allocate-node-cidrs=true
19
+ - --cluster-cidr=<%= k8s.networking.pod_subnet %>
20
+ - --cluster-signing-cert-file=/etc/kubernetes/bootstrap/secrets/kubernetes/ca.crt
21
+ - --cluster-signing-key-file=/etc/kubernetes/bootstrap/secrets/kubernetes/ca.key
22
+ - --controllers=*,bootstrapsigner,tokencleaner
23
+ - --kubeconfig=/etc/kubernetes/bootstrap/kubeconfig-bootstrap.yaml
24
+ - --leader-elect=true
25
+ - --node-cidr-mask-size=24
26
+ - --root-ca-file=/etc/kubernetes/bootstrap/secrets/kubernetes/ca.crt
27
+ - --service-account-private-key-file=/etc/kubernetes/bootstrap/secrets/kubernetes/sa.key
28
+ - --use-service-account-credentials=true
29
+ - --v=2
30
+ volumeMounts:
31
+ - name: var-run-kubernetes
32
+ mountPath: /var/run/kubernetes
33
+ - name: kubernetes
34
+ mountPath: /etc/kubernetes
35
+ readOnly: true
36
+ - mountPath: /usr/libexec/kubernetes/kubelet-plugins/volume/exec
37
+ name: flexvolume-dir
38
+ - mountPath: /usr/share/ca-certificates
39
+ name: usr-share-ca-certificates
40
+ readOnly: true
41
+ - mountPath: /etc/ca-certificates
42
+ name: etc-ca-certificates
43
+ readOnly: true
44
+ - mountPath: /etc/ssl/certs
45
+ name: ca-certs
46
+ readOnly: true
47
+ hostNetwork: true
48
+ volumes:
49
+ - name: var-run-kubernetes
50
+ emptyDir: {}
51
+ - name: kubernetes
52
+ hostPath:
53
+ path: /etc/kubernetes
54
+ - hostPath:
55
+ path: /etc/ssl/certs
56
+ type: DirectoryOrCreate
57
+ name: ca-certs
58
+ - hostPath:
59
+ path: /var/lib/kubelet/volumeplugins
60
+ type: DirectoryOrCreate
61
+ name: flexvolume-dir
62
+ - hostPath:
63
+ path: /usr/share/ca-certificates
64
+ type: DirectoryOrCreate
65
+ name: usr-share-ca-certificates
66
+ - hostPath:
67
+ path: /etc/ca-certificates
68
+ type: DirectoryOrCreate
69
+ name: etc-ca-certificates
@@ -0,0 +1,56 @@
1
+ <% k8s = global_config.k8s -%>
2
+ ---
3
+ apiVersion: v1
4
+ kind: Pod
5
+ metadata:
6
+ name: bootstrap-kube-proxy
7
+ namespace: kube-system
8
+ labels:
9
+ tier: node
10
+ k8s-app: kube-proxy
11
+ <%- k8s.proxy.labels.each do |k, v| -%>
12
+ <%= k.to_s %>: <%= v %>
13
+ <%- end -%>
14
+ spec:
15
+ containers:
16
+ - name: kube-proxy
17
+ image: <%= k8s.image_repository %>/kube-proxy:<%= k8s.kubernetes_version %>
18
+ imagePullPolicy: IfNotPresent
19
+ command:
20
+ - kube-proxy
21
+ - --config=/etc/kubernetes/bootstrap/kube-proxy-bootstrap.yaml
22
+ - --hostname-override=$(NODE_NAME)
23
+ env:
24
+ - name: NODE_NAME
25
+ valueFrom:
26
+ fieldRef:
27
+ fieldPath: spec.nodeName
28
+ securityContext:
29
+ privileged: true
30
+ volumeMounts:
31
+ - name: kubernetes
32
+ mountPath: /etc/kubernetes
33
+ readOnly: true
34
+ - mountPath: /run/xtables.lock
35
+ name: xtables-lock
36
+ - mountPath: /lib/modules
37
+ name: lib-modules
38
+ readOnly: true
39
+ hostNetwork: true
40
+ priorityClassName: system-node-critical
41
+ serviceAccountName: kube-proxy
42
+ tolerations:
43
+ - operator: Exists
44
+ effect: NoSchedule
45
+ volumes:
46
+ - hostPath:
47
+ path: /run/xtables.lock
48
+ type: FileOrCreate
49
+ name: xtables-lock
50
+ - hostPath:
51
+ path: /lib/modules
52
+ type: ""
53
+ name: lib-modules
54
+ - name: kubernetes
55
+ hostPath:
56
+ path: /etc/kubernetes
@@ -0,0 +1,31 @@
1
+ <% k8s = global_config.k8s -%>
2
+ ---
3
+ apiVersion: v1
4
+ kind: Pod
5
+ metadata:
6
+ name: bootstrap-kube-scheduler
7
+ namespace: kube-system
8
+ labels:
9
+ <%- k8s.scheduler.labels.each do |k, v| -%>
10
+ <%= k.to_s %>: <%= v %>
11
+ <%- end -%>
12
+ spec:
13
+ containers:
14
+ - name: kube-scheduler
15
+ image: <%= k8s.image_repository %>/kube-scheduler:<%= k8s.kubernetes_version %>
16
+ command:
17
+ - kube-scheduler
18
+ - --kubeconfig=/etc/kubernetes/bootstrap/kubeconfig-bootstrap.yaml
19
+ - --authentication-kubeconfig=/etc/kubernetes/bootstrap/kubeconfig-bootstrap.yaml
20
+ - --authorization-kubeconfig=/etc/kubernetes/bootstrap/kubeconfig-bootstrap.yaml
21
+ - --leader-elect=true
22
+ - --v=2
23
+ volumeMounts:
24
+ - name: kubernetes
25
+ mountPath: /etc/kubernetes
26
+ readOnly: true
27
+ hostNetwork: true
28
+ volumes:
29
+ - name: kubernetes
30
+ hostPath:
31
+ path: /etc/kubernetes
@@ -0,0 +1,52 @@
1
+ require 'fileutils'
2
+
3
+ module Porkadot; module Assets
4
+ class Bootstrap
5
+ include Porkadot::Assets
6
+ TEMPLATE_DIR = File.join(File.dirname(__FILE__), "bootstrap")
7
+ attr_reader :global_config
8
+ attr_reader :config
9
+ attr_reader :certs_config
10
+ attr_reader :logger
11
+
12
+ def initialize global_config
13
+ @global_config = global_config
14
+ @config = global_config.bootstrap
15
+ @certs_config = global_config.certs
16
+ @logger = global_config.logger
17
+ end
18
+
19
+ def render
20
+ logger.info "--> Rendering bootstrap manifests"
21
+ unless File.directory?(config.target_path)
22
+ FileUtils.mkdir_p(config.target_path)
23
+ end
24
+ render_secrets
25
+ render_erb 'bootstrap/kubeconfig-bootstrap.yaml'
26
+ render_erb 'bootstrap/kube-proxy-bootstrap.yaml'
27
+ render_manifests
28
+ render_erb 'install.sh'
29
+ render_erb 'cleanup.sh'
30
+ end
31
+
32
+ def render_secrets
33
+ logger.info "----> Secrets"
34
+ unless File.directory?(config.secrets_path)
35
+ FileUtils.mkdir_p(config.secrets_path)
36
+ end
37
+ FileUtils.cp_r(Dir.glob(File.join(certs_config.certs_root_dir, '*')), config.secrets_path)
38
+ end
39
+
40
+ def render_manifests
41
+ unless File.directory?(config.manifests_path)
42
+ FileUtils.mkdir_p(config.manifests_path)
43
+ end
44
+ render_erb 'manifests/kube-apiserver.bootstrap.yaml'
45
+ render_erb 'manifests/kube-controller-manager.bootstrap.yaml'
46
+ render_erb 'manifests/kube-scheduler.bootstrap.yaml'
47
+ render_erb 'manifests/kube-proxy.bootstrap.yaml'
48
+ end
49
+
50
+ end
51
+
52
+ end; end
@@ -0,0 +1,21 @@
1
+
2
+ class Porkadot::Assets::Certs::Etcd
3
+ include Porkadot::Assets::CertsUtils
4
+ attr_reader :global_config
5
+ attr_reader :config
6
+ attr_reader :logger
7
+
8
+ def initialize global_config
9
+ @config = Porkadot::Configs::Certs::Etcd.new(global_config)
10
+ @logger = config.logger
11
+ @global_config = config.config
12
+ end
13
+
14
+ def ca_name
15
+ '/CN=kube-ca'
16
+ end
17
+
18
+ def client_name
19
+ '/CN=etcd-client'
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+
2
+ class Porkadot::Assets::Certs::FrontProxy
3
+ include Porkadot::Assets::CertsUtils
4
+ attr_reader :global_config
5
+ attr_reader :config
6
+ attr_reader :logger
7
+
8
+ def initialize global_config
9
+ @config = Porkadot::Configs::Certs::FrontProxy.new(global_config)
10
+ @logger = config.logger
11
+ @global_config = config.config
12
+ end
13
+
14
+ def ca_name
15
+ '/CN=front-proxy-ca'
16
+ end
17
+
18
+ def client_name
19
+ '/CN=aggregator-client'
20
+ end
21
+ end