class Porkadot::Install::KubeletList
def [](name)
def [](name) self.kubelets[name] end
def backup_etcd host: nil, path: "./backup/etcd.db"
def backup_etcd host: nil, path: "./backup/etcd.db" unless host self.kubelets.each do |_, v| if v.etcd? host = v end end end on(:local) do |local| execute(:mkdir, '-p', File.dirname(path)) end options = self.etcd_options on(host) do |host| execute(:mkdir, '-p', KUBE_TEMP) execute(:"/opt/bin/etcdctl", *options, "snapshot", "save", "#{KUBE_TEMP}/etcd.db") download! "#{KUBE_TEMP}/etcd.db", path end end
def etcd_options
def etcd_options %w( --cacert /etc/etcd/pki/ca.crt --cert /etc/etcd/pki/etcd.crt --key /etc/etcd/pki/etcd.key --endpoints=https://127.0.0.1:2379 ) end
def exec hosts: nil
def exec hosts: nil unless hosts hosts = [] self.kubelets.each do |_, v| hosts << v end end on(hosts) do |host| execute(:mkdir, '-p', Porkadot::Install::KUBE_TEMP) if test("[ -d #{KUBE_TEMP} ]") execute(:rm, '-rf', KUBE_TEMP) execute(:rm, '-rf', KUBE_SECRETS_TEMP) execute(:rm, '-rf', KUBE_DEFAULT_TEMP) execute(:rm, '-rf', KUBE_SECRETS_DEFAULT_TEMP) end upload! host.global_config.kubelet_default.target_path, KUBE_TEMP, recursive: true upload! host.global_config.kubelet_default.target_secrets_path, KUBE_SECRETS_TEMP, recursive: true upload! host.config.target_path, KUBE_DEFAULT_TEMP, recursive: true upload! host.config.target_secrets_path, KUBE_SECRETS_DEFAULT_TEMP, recursive: true execute(:cp, '-r', KUBE_SECRETS_TEMP + '/*', KUBE_TEMP) execute(:cp, '-r', KUBE_DEFAULT_TEMP + '/*', KUBE_TEMP) execute(:cp, '-r', KUBE_SECRETS_DEFAULT_TEMP + '/*', KUBE_TEMP) end return hosts end
def initialize global_config
def initialize global_config @global_config = global_config @logger = global_config.logger @kubelets = {} global_config.nodes.each do |k, config| @kubelets[k] = Kubelet.new(config) end end
def install hosts: nil, force: false
def install hosts: nil, force: false hosts = self.exec hosts: hosts on(hosts) do |host| as user: 'root' do unless test("[ -f /opt/bin/kubelet-#{host.global_config.k8s.kubernetes_version} ]") && !force execute(:bash, File.join(KUBE_TEMP, 'install-deps.sh')) end execute(:bash, File.join(KUBE_TEMP, 'install-pkgs.sh')) execute(:bash, File.join(KUBE_TEMP, 'install.sh')) end end end
def restore_etcd path: "./backup/etcd.db"
def restore_etcd path: "./backup/etcd.db" require 'date' hosts = [] self.kubelets.each do |_, v| hosts << v if v.etcd? end options = self.etcd_options on(hosts) do |host| if test("[ -d #{KUBE_TEMP} ]") execute(:rm, '-rf', KUBE_TEMP) execute(:rm, '-rf', KUBE_SECRETS_TEMP) end execute(:mkdir, '-p', KUBE_TEMP) upload! path, "#{KUBE_TEMP}/etcd.db" as user: 'root' do execute(:mkdir, '-p', ETCD_TEMP) if test('[ -d /var/lib/etcd ]') execute(:mv, '/var/lib/etcd', "${ETCD_TEMP}/data-#{DateTime.now.to_s}") end execute(:"/opt/bin/etcdctl", *options, "snapshot", "restore", "#{KUBE_TEMP}/etcd.db") end end end
def setup_containerd hosts: nil, force: false
def setup_containerd hosts: nil, force: false hosts = self.exec hosts: hosts on(hosts) do |host| as user: 'root' do execute(:bash, File.join(KUBE_TEMP, 'setup-containerd.sh')) end end end
def setup_default hosts: nil, force: false
def setup_default hosts: nil, force: false hosts = self.exec hosts: hosts on(hosts) do |host| as user: 'root' do execute(:bash, File.join(KUBE_TEMP, 'setup-node.sh')) end end end
def start_etcd hosts: nil
def start_etcd hosts: nil unless hosts hosts = [] self.kubelets.each do |_, v| hosts << v if v.etcd? end end on(hosts) do |host| as user: 'root' do execute(:mkdir, '-p', ETCD_TEMP) result = capture(:"/opt/bin/crictl", 'ps', '-q', '--name', 'etcd') with(container_runtime_endpoint: "unix:///run/containerd/containerd.sock") do if result.empty? info 'Trying to start etcd' execute(:mv, "${ETCD_TEMP}/etcd-server.yaml", "/etc/kubernetes/manifests/etcd-server.yaml") else info 'etcd is already started...' end end end end end
def stop_etcd hosts: nil
def stop_etcd hosts: nil unless hosts hosts = [] self.kubelets.each do |_, v| hosts << v if v.etcd? end end on(hosts) do |host| as user: 'root' do execute(:mkdir, '-p', ETCD_TEMP) info "Waiting for etcd to stop..." with(container_runtime_endpoint: "unix:///run/containerd/containerd.sock") do unless capture(:"/opt/bin/crictl", 'ps', '-q', '--name', 'etcd').empty? execute(:mv, "/etc/kubernetes/manifests/etcd-server.yaml", "${ETCD_TEMP}/etcd-server.yaml") while capture(:"/opt/bin/crictl", 'ps', '-q', '--name', 'etcd') != '' info 'Still waiting for stopping etcd...' sleep 5 end end end info 'etcd was stopped.' end end end