国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vagrant 學(xué)習(xí)筆記:搭建 K8s 集群

這篇具有很好參考價(jià)值的文章主要介紹了Vagrant 學(xué)習(xí)筆記:搭建 K8s 集群。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Vagrant學(xué)習(xí)筆記:搭建K8s集群

通常情況下,我們在使用VMware、VirtualBox這一類虛擬機(jī)軟件創(chuàng)建虛擬開發(fā)環(huán)境時(shí),往往需要經(jīng)歷尋找并下載操作系統(tǒng)的安裝鏡像文件,然后根據(jù)該鏡像文件啟動(dòng)的安裝向?qū)б徊揭徊降匕惭b與配置操作系統(tǒng),最后還需要從零開始安裝開發(fā)與運(yùn)維工具。整個(gè)過程會(huì)非常的費(fèi)時(shí)費(fèi)力,特別是在我們需要虛擬一個(gè)K8s集群的情況下,工作量更是會(huì)隨著需要該集群中需要的服務(wù)器數(shù)量而成倍增加,這時(shí)候如果有一款像Vagrant這樣的自動(dòng)化虛擬機(jī)管理工具就非常重要了。接下來,就讓我們來介紹一下Vagrant這個(gè)工具,以及如何使用它來虛擬一個(gè)由三臺(tái)服務(wù)器構(gòu)成的K8s集群。

Vagrant的基本使用

正如之前所說,Vagrant是一款專用于實(shí)現(xiàn)虛擬機(jī)自動(dòng)化管理的軟件工具,主要使用Ruby編寫而成,以命令行終端的工具的形式存在于計(jì)算機(jī)中。在這里,需要特別強(qiáng)調(diào)的一件事是:Vagrant是一款“管理”虛擬機(jī)的軟件而非“創(chuàng)建”虛擬機(jī)的軟件。也就是說,Vagrant本身并不能用來創(chuàng)建虛擬機(jī),它通常需要搭配VMware、VirtualBox這一類虛擬機(jī)軟件來使用,以便共同完成虛擬開發(fā)環(huán)境的快速搭建與配置。當(dāng)然了,該工具允許人們通過編寫一個(gè)名為vagrantfile配置文件的方式來定義虛擬機(jī)的自動(dòng)化構(gòu)建與銷毀的過程,并配置虛擬機(jī)與其宿主機(jī)間的文件共享、虛擬機(jī)網(wǎng)絡(luò)環(huán)境等相關(guān)參數(shù)。除此之外,我們還可以通過編寫一些讓虛擬機(jī)在完成創(chuàng)建后,第一次被啟動(dòng)時(shí)要執(zhí)行的自定義腳本,以便用于以批處理的方式實(shí)現(xiàn)一些開發(fā)與運(yùn)維工具的自動(dòng)化安裝與配置,這也將大大地提高我們構(gòu)建虛擬開發(fā)環(huán)境的效率。最后,由于Vagrant還支持批量復(fù)制已創(chuàng)建的虛擬機(jī),這意味著我們只需要執(zhí)行一次操作,就可以同時(shí)擁有多個(gè)相同配置、安裝了相同軟件的虛擬機(jī)。

和學(xué)習(xí)大多數(shù)工具的過程一樣,在正式介紹Vagrant的具體使用方式之前,我們也同樣有必要先了解一下這款命令行工具的整體設(shè)計(jì)架構(gòu)。因?yàn)橹挥羞@樣,我們才能理解它的核心使用邏輯。

項(xiàng)目的組成架構(gòu)

從整體設(shè)計(jì)上來說,一個(gè)交由Vagrant來管理的虛擬機(jī)項(xiàng)目通常由以下幾大模塊組合而成。

  • Boxes:該模塊指的是Vagrant用于創(chuàng)建虛擬開發(fā)環(huán)境時(shí)所需要使用的、擴(kuò)展名為.box的鏡像文件。需要注意的是,該鏡像文件并不是我們之前使用傳統(tǒng)方式創(chuàng)建虛擬機(jī)時(shí)的、用于安裝操作系統(tǒng)的鏡像文件,而是一個(gè)基于某個(gè)現(xiàn)有的虛擬機(jī)打包而成的快照文件。該鏡像文件中除了基礎(chǔ)數(shù)據(jù)的鏡像外,還包括一些元數(shù)據(jù)文件,這些元數(shù)據(jù)將用于指導(dǎo)Vagrant將系統(tǒng)鏡像正確的加載到對應(yīng)的虛擬機(jī)當(dāng)中。需要注意的是,這些鏡像文件是嚴(yán)格依賴于Providers所指定的虛擬機(jī)軟件的,也就是說,在VMware下使用的鏡像文件是無法在VirtualBox上使用的,反之亦然;

  • Providers:該模塊指的是Vagrant用于創(chuàng)建虛擬開發(fā)環(huán)境時(shí)所需要使用的虛擬機(jī)軟件,例如:VirtualBox、VMware、Hyper-V、KVM等。在Vagrant的架構(gòu)中,Providers模塊將以服務(wù)的形式存在,它的作用是幫助Vagrant利用Boxes模塊指定的鏡像文件來創(chuàng)建虛擬開發(fā)環(huán)境;

  • Provisioners:該模塊指的是在Vagrant完成虛擬開發(fā)環(huán)境的創(chuàng)建后,讓虛擬機(jī)自動(dòng)執(zhí)行的自定義腳本。在Vagrant的架構(gòu)中,我們通常會(huì)利用這些自定義的腳本來實(shí)現(xiàn)一些開發(fā)與運(yùn)維工具的自動(dòng)化安裝與配置,例如VIM編輯器及其插件、Node.js運(yùn)行平臺(tái)、Docker和K8s運(yùn)維工具等。

  • Vagrant CLI:該模塊指的是Vagrant用于管理虛擬機(jī)的一系列命令,包括創(chuàng)建、啟動(dòng)、關(guān)閉、重啟、掛起等虛擬機(jī)操作,也包括打包,注冊等虛擬機(jī)鏡像文件的操作。這些命令可以幫助我們更好地與Providers模塊指定的虛擬機(jī)軟件進(jìn)行交互。

當(dāng)然,在使用Vagrant管理虛擬機(jī)的過程中,我們需要在vagrantfile配置文件中定義與Providers和Provisioners這兩個(gè)模塊相關(guān)的參數(shù),以及要使用的鏡像文件。下面,我們就來重點(diǎn)介紹一下vagrantfile配置文件具體寫法。

編寫項(xiàng)目配置文件

如前所述,Vagrant虛擬機(jī)項(xiàng)目的配置文件名為vagrantfile,該文件將負(fù)責(zé)定義虛擬機(jī)的創(chuàng)建參數(shù)、自動(dòng)化執(zhí)行的腳本、虛擬機(jī)與宿主機(jī)之間的共享目錄及其通信網(wǎng)絡(luò)等關(guān)鍵信息。由于Vagrant主要是用Ruby開發(fā)而成的,所以vagrantfile文件中使用的配置語言自然也采用了這門編程語言的語法,但這也并不意味著我們必須先學(xué)會(huì)Ruby的全部語法才能使用Vagrant。因?yàn)閂agrant對自己的配置語言做了一定程度的重新定義,其語法規(guī)則事實(shí)上比我們真正在編程活動(dòng)中使用的Ruby語言要簡單不少,對于任何一個(gè)有編程語言使用經(jīng)驗(yàn)的人來說,通常只需要學(xué)習(xí)幾個(gè)小時(shí),就基本能應(yīng)付日常使用中的大部分需求了。下面,就讓我們來實(shí)際體驗(yàn)一下快速掌握這套語法規(guī)則的過程吧。

通常情況下,vagrantfile文件都會(huì)被存放在Vagrant虛擬機(jī)項(xiàng)目的根目錄下,在實(shí)際使用中常常會(huì)借由vagrant init命令來自動(dòng)生成。例如,如果我們在計(jì)算機(jī)的任意位置上創(chuàng)建了一個(gè)名為vagrant_demo的目錄,那么我們只需要在Powershell/Bash這樣的命令行終端環(huán)境,進(jìn)入到vagrant_demo目錄中并執(zhí)行vagrant init命令,然后就會(huì)在該目錄下看到一個(gè)自動(dòng)生成的vagrantfile文件,其主要內(nèi)容如下。

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  config.vm.box = "base"

  # Disable automatic box update checking. If you disable this, then
  # boxes will only be checked for updates when the user runs
  # `vagrant box outdated`. This is not recommended.
  # config.vm.box_check_update = false

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # NOTE: This will enable public access to the opened port
  # config.vm.network "forwarded_port", guest: 80, host: 8080

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine and only allow access
  # via 127.0.0.1 to disable public access
  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  # config.vm.network "private_network", ip: "192.168.33.10"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network "public_network"

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  # config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
  #   vb.memory = "1024"
  # end
  #
  # View the documentation for the provider you are using for more
  # information on available options.

  # Enable provisioning with a shell script. Additional provisioners such as
  # Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
  # documentation for more information about their specific syntax and use.
  # config.vm.provision "shell", inline: <<-SHELL
  #   apt-get update
  #   apt-get install -y apache2
  # SHELL
end

如果讀者仔細(xì)觀察一下上述文件的內(nèi)容,就會(huì)發(fā)現(xiàn)它實(shí)際上就是vagrantflie配置文件的一個(gè)模板和一份以注釋形式編寫的簡易教程。下面我們就基于這個(gè)文件來介紹一下如何具體配置一個(gè)Vagrant虛擬機(jī)項(xiàng)目。首先,如果我們?nèi)サ粼撐募械乃凶⑨專蜁?huì)發(fā)現(xiàn)其當(dāng)前真正發(fā)揮作用的配置只有以下三行代碼。

Vagrant.configure("2") do |config|
  config.vm.box = "base"
end

不用懷疑,正是這三行代碼構(gòu)成了一個(gè)Vagrant項(xiàng)目的基本配置。其中,第一行定義了一個(gè)名為config的配置對象,該對象的各項(xiàng)屬性就是我們對虛擬機(jī)項(xiàng)目的全局配置項(xiàng),適用于該項(xiàng)目所管轄的所有虛擬機(jī)。根據(jù)該對象的聲明,我們還可以知道它采用的是版本為2的配置規(guī)則。然后,從第一行開始,直至遇到最后一行中的end這個(gè)結(jié)束符之前,我們編寫的所有代碼都是在config對象的作用域內(nèi)進(jìn)行的細(xì)項(xiàng)配置。譬如在上面代碼的第二行中,config.vm.box選項(xiàng)的作用是配置Vagrant創(chuàng)建虛擬機(jī)時(shí)所需要使用的鏡像文件。需要特別注意的是,這里的base是一個(gè)無效的鏡像名,我們需要根據(jù)自己的需要將其改為實(shí)際有效的鏡像文件名,例如,如果我們想安裝的是一個(gè)基于CentOS系統(tǒng)的虛擬機(jī),就可以將這行代碼改為config.vm.box = "centos-7"。除此之外,根據(jù)我們剛才移除的注釋內(nèi)容,我們接下來還可以為虛擬機(jī)配置以下選項(xiàng)。

  • config.vm.hostname選項(xiàng):該選項(xiàng)用于配置虛擬機(jī)的主機(jī)名,當(dāng)我們需要模擬由多臺(tái)機(jī)器組成的開發(fā)環(huán)境時(shí),主機(jī)名的設(shè)置通常是必不可少的,例如,如果我們創(chuàng)建了centos1、centos2兩臺(tái)虛擬機(jī),那么在使用vagrant up命令啟動(dòng)虛擬機(jī)就需要用主機(jī)名指定要啟動(dòng)的是centos1還是centos2,否則所有的虛擬機(jī)將會(huì)一起被啟動(dòng),一瞬間占用掉宿主機(jī)的大量資源。另外,該主機(jī)名也將會(huì)以環(huán)境變量的形式設(shè)置在虛擬機(jī)所安裝的操作系統(tǒng)中;

  • config.vm.network選項(xiàng):該選項(xiàng)用于配置虛擬機(jī)的網(wǎng)絡(luò)。在Vagrant管理的虛擬機(jī)之間,網(wǎng)絡(luò)連接可以有以下三種模式。

    • NAT模式:這是Vagrant在默認(rèn)情況下會(huì)使用的網(wǎng)絡(luò)連接模式,不需要我們對其進(jìn)行特別設(shè)置。在該模式下,虛擬機(jī)可以借由其宿主機(jī)端口轉(zhuǎn)發(fā)的形式訪問訪問局域網(wǎng),乃至整個(gè)互聯(lián)網(wǎng)。
    • host-only模式:該模式需要使用將config.vm.network選項(xiàng)設(shè)置為private_network,并為其手動(dòng)指定IP地址,或者將網(wǎng)絡(luò)類型設(shè)置為DHCP以便讓其自動(dòng)分配IP地址。在該模式下,虛擬機(jī)只能被其宿主機(jī)訪問,其他機(jī)器均無法訪問它。
    • bridge模式:該模式需要使用將config.vm.network選項(xiàng)設(shè)置為public_network,并為其手動(dòng)指定IP地址,或者為其指定要橋接的網(wǎng)絡(luò)適配器。在該模式下,虛擬機(jī)就相當(dāng)于是其宿主機(jī)所在的局域網(wǎng)中的一臺(tái)獨(dú)立的機(jī)器,可以被其他機(jī)器訪問。

    下面是一些該選項(xiàng)的具體配置示例。

    # 將網(wǎng)絡(luò)配置為host-only模式,并為其手動(dòng)配置IP地址
    config.vm.network :private_network, ip: "192.168.100.1"
    # 將網(wǎng)絡(luò)配置為host-only模式,并將其配置為DHCP地址分配模式
    config.vm.network "private_network", type: "dhcp”
    # 將網(wǎng)絡(luò)配置為bridge模式,并為其手動(dòng)配置IP地址
    config.vm.network "public_network", ip: "192.168.31.7"
    # 將網(wǎng)絡(luò)配置為bridge模式,并為其指定橋接適配器
    config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)"
    # 配置虛擬機(jī)與宿主之間的端口映射
    # 將宿主機(jī)上的8080端口映射到虛擬機(jī)的80端口
    config.vm.network :forwarded_port, guest: 80, host: 8080
    
  • config.vm.provider選項(xiàng):該選項(xiàng)用于配置虛擬機(jī)的具體硬件參數(shù)。在Vagrant中,由于硬件參數(shù)的具體設(shè)置依賴于其具體使用的虛擬機(jī)軟件服務(wù),所以在配置該選項(xiàng)是需要指定我們所使用的具體Providers類型,并定義出一個(gè)該類型的對象,然后再通過該對象來進(jìn)行相關(guān)配置。例如,如果我們需要基于VirtualBox這款虛擬機(jī)軟件。使用Vagrant創(chuàng)建一臺(tái)雙核CPU,內(nèi)存為4GB的虛擬機(jī),就可以配置文件編寫如下。

    Vagrant.configure("2") do |config|
        # 其他全局配置 ...
        config.vm.provider :virtualbox do |vb|
            # 設(shè)置虛擬機(jī)在VirtualBox管理控制臺(tái)中的名稱。
            vb.name = "vagrant_demo"
            # 設(shè)置虛擬機(jī)的內(nèi)存大小,單位為MB
            vb.memory = "4096"
            #設(shè)置虛擬機(jī)的CPU核心數(shù)
            vb.cpus = 2
        end
    end
    
  • config.vm.synced_folder選項(xiàng):該選項(xiàng)用于配置虛擬機(jī)與宿主機(jī)之間的共享目錄,默認(rèn)情況下,該共享目錄就是vagrantfile文件所在的目錄(即當(dāng)前項(xiàng)目的根目錄),如果想特別指定其他目錄,就需要手動(dòng)為該選項(xiàng)設(shè)置新的值,例如像下面這樣。

    # 在Windows系統(tǒng)中設(shè)置共享目錄
    # 將Windows系統(tǒng)的宿主機(jī)的"D:/code"目錄
    # 映射并掛載到Ubuntu系統(tǒng)的虛擬機(jī)中的"/home/www/"目錄中
    config.vm.synced_folder "D:/code", "/home/www/" 
    
  • config.ssh.username選項(xiàng):該選項(xiàng)用于配置虛擬機(jī)中登錄系統(tǒng)所用的用戶名。在Vagrant中,默認(rèn)用戶名就是vagrant,如果我們使用的Box文件是個(gè)官方鏡像,就務(wù)必要使用這個(gè)默認(rèn)用戶名。但如果使用的是自己打包的鏡像文件,那就可以根據(jù)實(shí)際情況通過該選項(xiàng)來配置我們所要使用的用戶名。

  • config.vm.provision選項(xiàng):該選項(xiàng)用于配置可讓虛擬機(jī)自動(dòng)執(zhí)行的自定義腳本,這些腳本通常只能在第一次執(zhí)行vagrant up命令時(shí),額外特別執(zhí)行vagrant provision、vagrant reload --provisionvagrant up --provision命令時(shí)自動(dòng)執(zhí)行,主要用于完成必備工具的安裝與配置操作。另外,由于Vagrant支持的自定義的腳本類型包括Shell、Ansible、CFEngine、Chef、Docker等,所以我們在使用該選項(xiàng)配置自定義腳本時(shí),通常需要指定腳本的類型和執(zhí)行方式,下面是一些配置示例。

    Vagrant.configure("2") do |config|
        # 以內(nèi)聯(lián)的方式執(zhí)行 Shell 腳本
        config.vm.provision "shell", inline: "echo 1"
        # 以外部文件的方式執(zhí)行 Shell 腳本
        config.vm.provision "shell", path: "./scripts/script.sh"
    end
    

除了上述使用config對象進(jìn)行的全局配置之外,如果需要一次創(chuàng)建多臺(tái)虛擬機(jī)的話,我們還可以通過config.vm.define選項(xiàng)來定義一個(gè)局部對象,以便針對某個(gè)具體的虛擬機(jī)來進(jìn)行針對性的配置,該局部對象可配置的選項(xiàng)與config全局對象基本相同。下面是該選項(xiàng)的一個(gè)配置示例。

# 定義一個(gè)虛擬機(jī)列表
vm_list = [
    {
        :name => "centos1",
        :eth1 => "192.168.100.1",
        :mem => "2048",
        :cpu => "4",
        :sshport => 22231
    },
    {
        :name => "centos2",
        :eth1 => "192.168.100.2",
        :mem => "4096",
        :cpu => "2",
        :sshport => 22232
    }
]

Vagrant.configure(2) do |config|
    config.vm.box = "centos-7"
    # 遍歷虛擬機(jī)列表
    vm_list.each do |item|
        # 創(chuàng)建虛擬機(jī)級別的配置對象
        config.vm.define item[:name] do |vm_config|
            vm_config.vm.hostname = item[:name]
            vm_config.vm.network "private_network", ip: item[:eth1]
            # 禁用掉默認(rèn)的SSH服務(wù)轉(zhuǎn)發(fā)端口
            vm_config.vm.network "forwarded_port", guest: 22, host: 2222, id: "ssh", disabled: "true"
            vm_config.vm.network "forwarded_port", guest: 22, host: item[:sshport]
            vm_config.vm.provider "virtualbox" do |vb|
                vb.name = item[:name];
                vb.memory = item[:mem];
                vb.cpus = item[:cpu];
            end
        end
    end
end

Vagrant CLI常用命令

在完成了配置文件的編寫之后,我們就可以使用Vagrant CLI來進(jìn)行虛擬機(jī)的管理操作了。這里需要提醒讀者注意的是:vagrantfile文件中的配置代碼通常只在第一次執(zhí)行vagrant up命令時(shí)被執(zhí)行。之后,如果我們不明確使用vagrant reload --provision命令進(jìn)行重新加載,這些配置就不會(huì)再被執(zhí)行了。下面,就讓我們來分類介紹一下Vagrant CLI的常用命令。

  1. 在需要使用SSH的方式進(jìn)入指定虛擬機(jī)內(nèi)執(zhí)行某些操作是,我們可以使用vagrant ssh命令(如果當(dāng)前項(xiàng)目下管轄有多臺(tái)虛擬機(jī),就執(zhí)行vagrant ssh <主機(jī)名>命令),如圖B-1所示。

    Vagrant 學(xué)習(xí)筆記:搭建 K8s 集群

    圖B-1:使用SSH方式進(jìn)入虛擬機(jī)

  2. 在執(zhí)行虛擬機(jī)的啟動(dòng)、重啟與關(guān)閉等操作時(shí),我們常會(huì)用到以下命令。

    # 啟動(dòng)所有虛擬機(jī)
    vagrant up
    # 啟動(dòng)指定的虛擬機(jī)
    vagrant up <主機(jī)名>
    # 重啟所有虛擬機(jī)
    vagrant reload
    # 重啟指定的虛擬機(jī)
    vagrant reload <主機(jī)名>
    # 關(guān)閉所有虛擬機(jī)
    vagrant halt
    # 關(guān)閉指定的虛擬機(jī)
    vagrant halt <主機(jī)名>
    # 掛起所有虛擬機(jī)
    vagrant suspend
    # 掛起指定的虛擬機(jī)
    vagrant suspend <主機(jī)名>
    
  3. 在需要銷毀項(xiàng)目中的虛擬機(jī)時(shí),我們需要用到以下命令。

    # 銷毀所有虛擬機(jī)
    vagrant destroy -f
    # 銷毀指定的虛擬機(jī)
    vagrant destroy <主機(jī)名> -f
    

基于篇幅的考慮,我們在這里只是介紹了Vagrant CLI的常用命令。如果我們需要使用到某個(gè)指定的命令,可以使用vagrant --helpvagrant <指定命令> --help這兩個(gè)命令來查看Vagrant CLI提供的幫助信息(在這里,命令中的--help參數(shù)可以使用-h這樣的簡寫形式)。例如在圖B-2中,我們就根據(jù)這些幫助信息執(zhí)行對現(xiàn)有虛擬機(jī)的鏡像打包操作。

Vagrant 學(xué)習(xí)筆記:搭建 K8s 集群

圖B-2:對現(xiàn)有虛擬機(jī)的鏡像打包操作

項(xiàng)目示例:搭建K8s集群

在掌握了Vagrant的基本使用方法之后,我們接下來就可以通過實(shí)際項(xiàng)目來演示一下如何使用Vagrant+VirtualBox搭建一個(gè)部署了K8s系統(tǒng)的服務(wù)器集群。該集群的主要配置如表B-1所示。

主機(jī)名 IP地址 內(nèi)存 處理器數(shù)量 操作系統(tǒng)
k8s-master 192.168.100.21 4G 2 Ubuntu 20.04
k8s-worker1 192.168.100.22 2G 2 Ubuntu 20.04
k8s-worker2 192.168.100.23 2G 2 Ubuntu 20.04

準(zhǔn)備工作

要想模擬出上面這個(gè)由三臺(tái)服務(wù)器組成的K8s集群,首先要做的是在宿主機(jī)中安裝VirtualBox。為此,我們需要利用搜索引擎找到VirtualBox的官方網(wǎng)站,并進(jìn)入到其下載頁面,然后根據(jù)宿主機(jī)所使用的操作系統(tǒng)來下載對應(yīng)的安裝包。需要注意的是,除了主程序的安裝包之外,我們還需要下載并安裝相應(yīng)的擴(kuò)展包程序,以便在創(chuàng)建虛擬機(jī)時(shí)能對USB 3.0接口等高級特性進(jìn)行模擬,如圖B-3所示。

Vagrant 學(xué)習(xí)筆記:搭建 K8s 集群

圖B-3:下載VirtualBox安裝包及擴(kuò)展程序

VirtualBox主程序的安裝包是以圖形化向?qū)У姆绞絹韴?zhí)行的,初學(xué)者只需要一路按照其默認(rèn)選項(xiàng)完成安裝即可。在安裝完成VirtualBox之后,我們還需要對其進(jìn)行一些全局配置。為此,我們需要啟動(dòng)VirtualBox,然后依次單擊其主菜單中的「管理」 -> 「全局設(shè)定」或按下快捷鍵Ctrl + g,并在彈出的如圖B-4所示的「常規(guī)」對話框中修改「默認(rèn)虛擬電腦位置」,以免日后虛擬機(jī)占用了過多Windows系統(tǒng)分區(qū)的空間。最后,在如圖B-5所示的「擴(kuò)展」選項(xiàng)卡中導(dǎo)入我們之前下載好的擴(kuò)展程序。

Vagrant 學(xué)習(xí)筆記:搭建 K8s 集群

圖B-4:VirtualBox全局配置之「常規(guī)」對話框

Vagrant 學(xué)習(xí)筆記:搭建 K8s 集群

圖B-5:VirtualBox全局配置之「擴(kuò)展」對話框

在完成了虛擬機(jī)軟件的安裝與配置操作之后,接下來的任務(wù)就是安裝Vagrant本身了。同樣的,我們需要利用搜索引擎找到Vagrant的官方網(wǎng)站,并進(jìn)入到其下載頁面,然后根據(jù)宿主機(jī)所使用的操作系統(tǒng)來下載對應(yīng)的安裝包,如圖B-6所示。

Vagrant 學(xué)習(xí)筆記:搭建 K8s 集群

圖B-6:下載Vagrant安裝包

具體在Windows系統(tǒng)中,該安裝包是也是以圖形化向?qū)У姆绞絹韴?zhí)行的,初學(xué)者只需要一路按照其默認(rèn)選項(xiàng)完成安裝即可。在安裝過程中,Vagrant的安裝包會(huì)自動(dòng)把安裝路徑加入到系統(tǒng)的PATH環(huán)境變量中,所以,我們可以通過在Powershell/Bash之類的命令行終端環(huán)境中執(zhí)行vagrant version命令來驗(yàn)證安裝是否成功。

$ vagrant version
Installed Version: 2.3.0
Latest Version: 2.3.0

在確認(rèn)成功安裝了Vagrant之后,為了讓該工具能更好地管理使用VirtualBox創(chuàng)建的虛擬機(jī),我們還需要繼續(xù)在命令行終端環(huán)境中執(zhí)行vagrant plugin install vagrant-vbguest vagrant-share命令來安裝相關(guān)的插件,以便該工具能自動(dòng)安裝并配置虛擬機(jī)的驅(qū)動(dòng)增強(qiáng)包,從而實(shí)現(xiàn)虛擬機(jī)與宿主機(jī)之間的目錄共享等功能。如果一切順利,我們可以通過vagrant plugin list命令來確認(rèn)插件的安裝。

$ vagrant plugin list
vagrant-share (2.0.0, global)
vagrant-vbguest (0.30.0, global)

搭建集群

在完成上述準(zhǔn)備工作之后,我們就可以正式開始創(chuàng)建用于模擬K8s集群的Vagrant項(xiàng)目了,其主要步驟如下。

  1. 在計(jì)算機(jī)中的任意位置上創(chuàng)建一個(gè)名為k8s_cluster的目錄,并使用Powershell/Bash之類的命令行終端環(huán)境進(jìn)入到該目錄中,并執(zhí)行vagrant init命令,將其初始化為一個(gè)Vagrant項(xiàng)目的根目錄。

  2. k8s_cluster目錄下打開上述命令自動(dòng)生成的vagrantfile文件,并將其內(nèi)如修改如下。

    # 創(chuàng)建要?jiǎng)?chuàng)建的虛擬機(jī)清單
    vm_list = [
        {
            :name => "k8s-master",
            :eth1 => "192.168.100.21",
            :mem => "4096",
            :cpu => "2",
            :sshport => 22230
        },
        {
            :name => "k8s-worker1",
            :eth1 => "192.168.100.22",
            :mem => "2048",
            :cpu => "2",
            :sshport => 22231
        },
        {
            :name => "k8s-worker2",
            :eth1 => "192.168.100.23",
            :mem => "2048",
            :cpu => "2",
            :sshport => 22232
        }
    ]
    
    Vagrant.configure(2) do |config|
        # 全局配置,指定要下載并使用的鏡像名稱,并設(shè)置要使用的字符編碼
        config.vm.box = "gusztavvargadr/ubuntu-server"
        config.vm.box_check_update = false
        Encoding.default_external = 'UTF-8'
        
        # 遍歷虛擬機(jī)清單,根據(jù)其中定義的參數(shù)創(chuàng)建虛擬機(jī)
        vm_list.each do |item|
            config.vm.define item[:name] do |vm_config|
                vm_config.vm.hostname = item[:name]
                vm_config.vm.network "public_network", ip: item[:eth1]
                # 禁用掉默認(rèn)的SSH服務(wù)轉(zhuǎn)發(fā)端口
                vm_config.vm.network "forwarded_port", guest: 22, host: 2222, id: "ssh", disabled: "true"
                vm_config.vm.network "forwarded_port", guest: 22, host: item[:sshport]
                vm_config.vm.provider "virtualbox" do |vb|
                    vb.memory = item[:mem];
                    vb.cpus = item[:cpu];
                    vb.name = item[:name];
                end
                # 設(shè)置K8s集群中所有機(jī)器都要執(zhí)行的自定義腳本
                vm_config.vm.provision "shell", path: "scripts/common.sh"
                if item[:name] == "k8s-master"
                    # 設(shè)置K8s集群的主控節(jié)點(diǎn)要執(zhí)行的自定義腳本
                    vm_config.vm.provision "shell", path: "scripts/master.sh"
                else
                    # 設(shè)置K8s集群的工作節(jié)點(diǎn)都要執(zhí)行的自定義腳本
                    vm_config.vm.provision "shell", path: "scripts/worker.sh"
                end
            end
        end
    end
    
  3. k8s_cluster目錄下創(chuàng)建一個(gè)名為scripts的目錄,并在該目錄下創(chuàng)建一個(gè)名為common.sh的、三機(jī)通用的配置腳本文件,并在其中輸入如下代碼。

    #! /bin/bash
    
    # 指定要安裝哪一個(gè)版本的K8s
    KUBERNETES_VERSION="1.21.1-00"
    
    # 關(guān)閉swap分區(qū)
    sudo swapoff -a
    sudo sed -ri 's/.*swap.*/#&/' /etc/fstab 
    
    echo "Swap diasbled..."
    
    # 關(guān)閉防火墻功能
    sudo ufw disable
    
    # 安裝一些 Docker+k8s 環(huán)境的依賴項(xiàng)
    sudo mv /etc/apt/sources.list /etc/apt/sources.list-backup
    sudo cp -i /vagrant/scripts/apt/sources.list /etc/apt/ 
    sudo apt update -y
    sudo apt install -y apt-transport-https ca-certificates curl wget software-properties-common build-essential
    
    echo "Dependencies installed..."
    
    # 安裝并配置 Docker CE
    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
    sudo apt update -y
    sudo apt install -y docker-ce
    
    cat <<EOF | sudo tee /etc/docker/daemon.json
    {
    "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"],
    "exec-opts":["native.cgroupdriver=systemd"]
    }
    EOF
    
    # 啟動(dòng) Docker
    sudo systemctl enable docker
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    echo "Docker installed and configured..."
    
    # 安裝 k8s 組件:kubelet, kubectl, kubeadm
    curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
    cat <<EOF | sudo tee /etc/apt/sources.list.d/kubenetes.list
    deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
    EOF
    sudo apt update -y
    sudo apt install -y kubelet=$KUBERNETES_VERSION kubectl=$KUBERNETES_VERSION kubeadm=$KUBERNETES_VERSION
    
    # 如果想阻止自動(dòng)更新,可以選擇鎖住相關(guān)軟件的版本
    sudo apt-mark hold kubeadm kubectl kubelet
    
    # 啟動(dòng) K8s 的服務(wù)組件:kubelet
    sudo systemctl start kubelet  
    sudo systemctl enable kubelet   
    
    echo "K8s installed and configured..."
    
  4. 繼續(xù)在scripts目錄下創(chuàng)建一個(gè)名為master.sh的、K8s集群主控節(jié)點(diǎn)專用的腳本文件,并在其中輸入如下代碼。

    #! /bin/bash
    
    # 指定主控節(jié)點(diǎn)的IP地址
    MASTER_IP="192.168.100.21"
    # 指定主控節(jié)點(diǎn)的主機(jī)名
    NODENAME=$(hostname -s)
    # 指定當(dāng)前 K8s 集群中 Service 所使用的 CIDR
    SERVICE_CIDR="10.96.0.0/12"
    # 指定當(dāng)前 K8s 集群中 Pod 所使用的 CIDR
    POD_CIDR="10.244.0.0/16"
    # 指定當(dāng)前使用的 K8s 版本
    KUBE_VERSION=v1.21.1
    
    # 特別預(yù)先加載 coredns 插件
    COREDNS_VERSION=1.8.0
    sudo docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$COREDNS_VERSION
    sudo docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$COREDNS_VERSION registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v$COREDNS_VERSION
    
    # 使用 kubeadm 工具初始化 K8s 集群
    sudo kubeadm init \
    --kubernetes-version=$KUBE_VERSION \
    --apiserver-advertise-address=$MASTER_IP \
    --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
    --service-cidr=$SERVICE_CIDR \
    --pod-network-cidr=$POD_CIDR \
    --node-name=$NODENAME \
    --ignore-preflight-errors=Swap
    
    # 生成主控節(jié)點(diǎn)的配置文件
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    # 將主控節(jié)點(diǎn)的配置文件備份到別處
    config_path="/vagrant/configs"
    
    if [ -d $config_path ]; then
    sudo rm -f $config_path/*
    else
    sudo mkdir -p $config_path
    fi
    
    sudo cp -i /etc/kubernetes/admin.conf $config_path/config
    sudo touch $config_path/join.sh
    sudo chmod +x $config_path/join.sh       
    
    # 將往 K8s 集群中添加工作節(jié)點(diǎn)的命令保存為腳本文件
    kubeadm token create --print-join-command > $config_path/join.sh
    
    # 安裝名為 calico 的網(wǎng)路插件
    # 1. 網(wǎng)絡(luò)安裝
    sudo wget https://docs.projectcalico.org/v3.14/manifests/calico.yaml 
    sudo kubectl apply -f calico.yaml
    
    # 安裝名為 flannel 的網(wǎng)路插件
    # 1. 網(wǎng)絡(luò)安裝
    # sudo wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    # sudo kubectl apply -f kube-flannel.yml
    
  5. 繼續(xù)在scripts目錄下創(chuàng)建一個(gè)名為worker.sh的、K8s集群中工作節(jié)點(diǎn)通用的腳本文件,并在其中輸入如下代碼。

    #! /bin/bash
    
    # 執(zhí)行之前保存的,用于往K8s集群中添加工作節(jié)點(diǎn)的腳本
    /bin/bash /vagrant/configs/join.sh -v
    
    # 如果希望在工作節(jié)點(diǎn)中也能使用kubectl,可執(zhí)行以下命令
    sudo -i -u vagrant bash << EOF
    mkdir -p /home/vagrant/.kube
    sudo cp -i /vagrant/configs/config /home/vagrant/.kube/
    sudo chown 1000:1000 /home/vagrant/.kube/config
    EOF
    
  6. scripts目錄下創(chuàng)建一個(gè)名為apt的目錄,并在該目錄下創(chuàng)建一個(gè)名為sources.list的、使用阿里云國內(nèi)鏡像的APT源配置文件,并在其中輸入如下代碼。

    # 使用阿里云的源
    deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
    
  7. 回到k8s_cluster目錄下并執(zhí)行vagrant up命令,開始創(chuàng)建虛擬機(jī)。在vagrant up命令的執(zhí)行過程中,讀者會(huì)看到Vagrant會(huì)在構(gòu)建虛擬機(jī)之后,第一次啟動(dòng)它們時(shí)自動(dòng)執(zhí)行scripts目錄中的腳本,這些腳本將會(huì)自動(dòng)為虛擬機(jī)配置、安裝Docker與K8s環(huán)境,以下是其安裝軟件的版本信息。

    Docker-CE:  20.10.17
    Kubernetes: 1.21.1
        kube-apiserver: v1.21.1
        kube-proxy: v1.21.1
        kube-controller-manager: v1.21.1
        kube-scheduler: v1.21.1
        pause: 3.4.1
        coredns: v1.8.0
        etcd: 3.4.13-0  
    

如果讀者想獲得上述示例的源碼,也可以前往https://github.com/owlman/vagrant-ubuntu-k8s-cluster處獲得。文章來源地址http://www.zghlxwxcb.cn/news/detail-465580.html

到了這里,關(guān)于Vagrant 學(xué)習(xí)筆記:搭建 K8s 集群的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • kubernetes(K8S)學(xué)習(xí)(一):K8S集群搭建(1 master 2 worker)

    kubernetes(K8S)學(xué)習(xí)(一):K8S集群搭建(1 master 2 worker)

    kubernetes官網(wǎng) :https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing-kubeadm-kubelet-and-kubectl GitHub :https://github.com/kubernetes/kubeadm 本文 :使用kubeadm搭建一個(gè)3臺(tái)機(jī)器組成的k8s集群,1臺(tái)master節(jié)點(diǎn),2臺(tái)worker節(jié)點(diǎn)。 由于k8s安裝較麻煩,為防止出現(xiàn)其他異常,特此

    2024年04月09日
    瀏覽(22)
  • 本地k8s集群搭建保姆級教程(3)-安裝k8s集群

    本地k8s集群搭建保姆級教程(3)-安裝k8s集群

    1.1 增加鏡像替換腳本 注意:請?jiān)趍aster機(jī)器上執(zhí)行 添加腳本內(nèi)容: 1.2 查看k8s版本 1.3 執(zhí)行腳本 2.1 初始化master節(jié)點(diǎn) 在master機(jī)器上執(zhí)行如下命令: 說明: –apiserver-advertise-address= 你master節(jié)點(diǎn)的ip 看到如下內(nèi)容,說明master節(jié)點(diǎn)初始化成功 圖片中最后一行記得要保存起來,worker節(jié)

    2024年02月15日
    瀏覽(20)
  • vagrant 安裝虛擬機(jī),docker, k8s

    vagrant 安裝虛擬機(jī),docker, k8s

    本機(jī)是 mac, 但是這一步不影響,找對應(yīng)操作系統(tǒng)的安裝方式就行了。 vagrant 下載地址 VirtualBox 下載地址 找到對應(yīng)系統(tǒng)下載,安裝就可以。 盡量把虛擬機(jī)和 vagrant 放到一個(gè)文件夾中,規(guī)避一些問題.后面的 vagrant 命令都要 在這個(gè)文件目錄下執(zhí)行。 這一步比較重要,這一步就是

    2024年04月22日
    瀏覽(28)
  • 搭建K8S集群

    搭建K8S集群

    三臺(tái)2核2G 20G硬盤的服務(wù)器或虛擬機(jī),文中使用的系統(tǒng)是centos7.9 docker:19.03.15-3.el7 kubernetes:1.23.6 hostnamectl set-hostname hostname yum makecache創(chuàng)建元數(shù)據(jù)緩存 yum list docker-ce --showduplicates yum -y install docker-ce-19.03.15-3.el7 systemctl start docker systemctl enable docker systemctl daemon-reload systemctl restart

    2024年02月19日
    瀏覽(22)
  • k8s簡介、虛擬機(jī)快速搭建k8s集群、集群管理方式及K8S工作原理和組件介紹

    k8s簡介、虛擬機(jī)快速搭建k8s集群、集群管理方式及K8S工作原理和組件介紹

    1.1、部署方式的變遷 傳統(tǒng)部署時(shí)代: 在物理服務(wù)器上運(yùn)行應(yīng)用程序 無法為應(yīng)用程序定義資源邊界 導(dǎo)致資源分配問題 例如,如果在物理服務(wù)器上運(yùn)行多個(gè)應(yīng)用程序,則可能會(huì)出現(xiàn)一個(gè)應(yīng)用程序占用大部分資源的情況, 結(jié)果可能導(dǎo)致其他應(yīng)用程序的性能下降。 一種解決方案是

    2024年02月12日
    瀏覽(29)
  • k8s簡介及虛擬機(jī)快速搭建k8s集群

    k8s簡介及虛擬機(jī)快速搭建k8s集群

    1.1、部署方式的變遷 傳統(tǒng)部署時(shí)代: 在物理服務(wù)器上運(yùn)行應(yīng)用程序 無法為應(yīng)用程序定義資源邊界 導(dǎo)致資源分配問題 例如,如果在物理服務(wù)器上運(yùn)行多個(gè)應(yīng)用程序,則可能會(huì)出現(xiàn)一個(gè)應(yīng)用程序占用大部分資源的情況, 結(jié)果可能導(dǎo)致其他應(yīng)用程序的性能下降。 一種解決方案是

    2024年02月12日
    瀏覽(25)
  • K8s集群搭建教程

    K8s集群搭建教程

    學(xué)習(xí)并總結(jié)一下使用三臺(tái)虛擬機(jī)搭建一個(gè)kubernetes集群的過程。 Kubernetes 集群大致分為兩類:一主多從和多主多從。 (1)一主多從(單 master ):一個(gè) Master 節(jié)點(diǎn),多臺(tái) Node 節(jié)點(diǎn),搭建簡單,但是有單機(jī)故障風(fēng)險(xiǎn),適合用于測試環(huán)境。 (2)多主多從(高可用):多臺(tái) Master 節(jié)

    2024年02月02日
    瀏覽(24)
  • k8s集群環(huán)境搭建

    以工作項(xiàng)目的視角來講解k8s相關(guān)環(huán)境搭建,提供k8s相關(guān)基礎(chǔ)理論、測試案例,極大方便k8s的入門、進(jìn)階 k8s入門之前,集群環(huán)境的搭建是至關(guān)重要的,有了集群環(huán)境,才方便后續(xù)k8s的學(xué)習(xí)和實(shí)踐。但集群的搭建涉及的步驟是比較多的,而且很容易踩坑,導(dǎo)致環(huán)境搭建耗時(shí)較長,

    2024年02月07日
    瀏覽(22)
  • k8s集群網(wǎng)絡(luò)插件搭建——————解決集群notready(k8s1.20版本,docker24)

    k8s集群網(wǎng)絡(luò)插件搭建——————解決集群notready(k8s1.20版本,docker24)

    ????????前面已經(jīng)提到,在初始化 k8s-master 時(shí)并沒有網(wǎng)絡(luò)相關(guān)配置,所以無法跟 node 節(jié)點(diǎn)通信,因此狀態(tài)都是“NotReady”。但是通過 kubeadm join 加入的 node 節(jié)點(diǎn)已經(jīng)在k8s-master 上可以看到。 ?那么,這個(gè)時(shí)候我們該怎么辦呢???????? 安裝flannel ????????Master 節(jié)點(diǎn)

    2024年02月13日
    瀏覽(46)
  • k8s集群環(huán)境的搭建

    k8s集群環(huán)境的搭建

    Kubernetes集群大致分為兩類:一主多從和多主多從。 一主多從:一個(gè)Master節(jié)點(diǎn)和多臺(tái)Node節(jié)點(diǎn),搭建簡單,但是有單機(jī)故障風(fēng)險(xiǎn),適合用于測試環(huán)境。 多主多從:多臺(tái)Master和多臺(tái)Node節(jié)點(diǎn),搭建麻煩,安全性高,適合用于生產(chǎn)環(huán)境。 為了測試方便,本次搭建的是一主多從類型的

    2024年02月15日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包