一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

Linux|Centos|Ubuntu|系統(tǒng)進(jìn)程|Fedora|注冊(cè)表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務(wù)器之家 - 服務(wù)器系統(tǒng) - Ubuntu - Ubuntu 安裝部署Kubernetes(k8s)集群

Ubuntu 安裝部署Kubernetes(k8s)集群

2023-11-13 07:04未知服務(wù)器之家 Ubuntu

Ubuntu 安裝部署Kubernetes(k8s)集群:Kubernetes概述,Kubernetes 組件,控制平面組件,Node組件,配置節(jié)點(diǎn)的基本環(huán)境,節(jié)點(diǎn)安裝docker,并進(jìn)行相關(guān)配置,安裝kubelet,kubeadm,kubectl,kubeadm初始化,添加worker節(jié)點(diǎn)到k8s集群,部署CNI網(wǎng)絡(luò)插件

Ubuntu 安裝部署Kubernetes(k8s)集群:Kubernetes概述,Kubernetes 組件,控制平面組件,Node組件,配置節(jié)點(diǎn)的基本環(huán)境,節(jié)點(diǎn)安裝docker,并進(jìn)行相關(guān)配置,安裝kubelet,kubeadm,kubectl,kubeadm初始化,添加worker節(jié)點(diǎn)到k8s集群,部署CNI網(wǎng)絡(luò)插件calico,配置kubectl命令tab鍵自動(dòng)補(bǔ)全

目錄
  • 一.系統(tǒng)環(huán)境
  • 二.前言
  • 三.Kubernetes
    • 3.1 概述
    • 3.2 Kubernetes 組件
      • 3.2.1 控制平面組件
      • 3.2.2 Node組件
  • 四.配置節(jié)點(diǎn)的基本環(huán)境
  • 五.節(jié)點(diǎn)安裝docker,并進(jìn)行相關(guān)配置
  • 六.安裝kubelet,kubeadm,kubectl
  • 七.kubeadm初始化
  • 八.添加worker節(jié)點(diǎn)到k8s集群
  • 九.部署CNI網(wǎng)絡(luò)插件calico
  • 十.配置kubectl命令tab鍵自動(dòng)補(bǔ)全
  • 十一.總結(jié)

一.系統(tǒng)環(huán)境

本文主要基于Kubernetes1.22.2和Linux操作系統(tǒng)Ubuntu 18.04。

服務(wù)器版本 docker軟件版本 Kubernetes(k8s)集群版本 CPU架構(gòu)
Ubuntu 18.04.5 LTS Docker version 20.10.14 v1.22.2 x86_64

Kubernetes集群架構(gòu):k8scludes1作為master節(jié)點(diǎn),k8scludes2,k8scludes3作為worker節(jié)點(diǎn)。

服務(wù)器 操作系統(tǒng)版本 CPU架構(gòu) 進(jìn)程 功能描述
k8scludes1/192.168.110.128 Ubuntu 18.04.5 LTS x86_64 docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico k8s master節(jié)點(diǎn)
k8scludes2/192.168.110.129 Ubuntu 18.04.5 LTS x86_64 docker,kubelet,kube-proxy,calico k8s worker節(jié)點(diǎn)
k8scludes3/192.168.110.130 Ubuntu 18.04.5 LTS x86_64 docker,kubelet,kube-proxy,calico k8s worker節(jié)點(diǎn)

二.前言

下圖描述了軟件部署方式的變遷:傳統(tǒng)部署時(shí)代,虛擬化部署時(shí)代,容器部署時(shí)代。

Ubuntu 安裝部署Kubernetes(k8s)集群

傳統(tǒng)部署時(shí)代

早期,各個(gè)組織是在物理服務(wù)器上運(yùn)行應(yīng)用程序。 由于無(wú)法限制在物理服務(wù)器中運(yùn)行的應(yīng)用程序資源使用,因此會(huì)導(dǎo)致資源分配問(wèn)題。 例如,如果在同一臺(tái)物理服務(wù)器上運(yùn)行多個(gè)應(yīng)用程序, 則可能會(huì)出現(xiàn)一個(gè)應(yīng)用程序占用大部分資源的情況,而導(dǎo)致其他應(yīng)用程序的性能下降。 一種解決方案是將每個(gè)應(yīng)用程序都運(yùn)行在不同的物理服務(wù)器上, 但是當(dāng)某個(gè)應(yīng)用程式資源利用率不高時(shí),剩余資源無(wú)法被分配給其他應(yīng)用程式, 而且維護(hù)許多物理服務(wù)器的成本很高。

虛擬化部署時(shí)代

因此,虛擬化技術(shù)被引入了。虛擬化技術(shù)允許你在單個(gè)物理服務(wù)器的 CPU 上運(yùn)行多臺(tái)虛擬機(jī)(VM)。 虛擬化能使應(yīng)用程序在不同 VM 之間被彼此隔離,且能提供一定程度的安全性, 因?yàn)橐粋€(gè)應(yīng)用程序的信息不能被另一應(yīng)用程序隨意訪問(wèn)。

虛擬化技術(shù)能夠更好地利用物理服務(wù)器的資源,并且因?yàn)榭奢p松地添加或更新應(yīng)用程序, 而因此可以具有更高的可擴(kuò)縮性,以及降低硬件成本等等的好處。 通過(guò)虛擬化,你可以將一組物理資源呈現(xiàn)為可丟棄的虛擬機(jī)集群。

每個(gè) VM 是一臺(tái)完整的計(jì)算機(jī),在虛擬化硬件之上運(yùn)行所有組件,包括其自己的操作系統(tǒng)。

容器部署時(shí)代

容器類(lèi)似于 VM,但是更寬松的隔離特性,使容器之間可以共享操作系統(tǒng)(OS)。 因此,容器比起 VM 被認(rèn)為是更輕量級(jí)的。且與 VM 類(lèi)似,每個(gè)容器都具有自己的文件系統(tǒng)、CPU、內(nèi)存、進(jìn)程空間等。 由于它們與基礎(chǔ)架構(gòu)分離,因此可以跨云和 OS 發(fā)行版本進(jìn)行移植。

容器因具有許多優(yōu)勢(shì)而變得流行起來(lái),例如:

  • 敏捷應(yīng)用程序的創(chuàng)建和部署:與使用 VM 鏡像相比,提高了容器鏡像創(chuàng)建的簡(jiǎn)便性和效率。
  • 持續(xù)開(kāi)發(fā)、集成和部署:通過(guò)快速簡(jiǎn)單的回滾(由于鏡像不可變性), 提供可靠且頻繁的容器鏡像構(gòu)建和部署。
  • 關(guān)注開(kāi)發(fā)與運(yùn)維的分離:在構(gòu)建、發(fā)布時(shí)創(chuàng)建應(yīng)用程序容器鏡像,而不是在部署時(shí), 從而將應(yīng)用程序與基礎(chǔ)架構(gòu)分離。
  • 可觀察性:不僅可以顯示 OS 級(jí)別的信息和指標(biāo),還可以顯示應(yīng)用程序的運(yùn)行狀況和其他指標(biāo)信號(hào)。
  • 跨開(kāi)發(fā)、測(cè)試和生產(chǎn)的環(huán)境一致性:在筆記本計(jì)算機(jī)上也可以和在云中運(yùn)行一樣的應(yīng)用程序。
  • 跨云和操作系統(tǒng)發(fā)行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方運(yùn)行。
  • 以應(yīng)用程序?yàn)橹行牡墓芾恚禾岣叱橄蠹?jí)別,從在虛擬硬件上運(yùn)行 OS 到使用邏輯資源在 OS 上運(yùn)行應(yīng)用程序。
  • 松散耦合、分布式、彈性、解放的微服務(wù):應(yīng)用程序被分解成較小的獨(dú)立部分, 并且可以動(dòng)態(tài)部署和管理 - 而不是在一臺(tái)大型單機(jī)上整體運(yùn)行。
  • 資源隔離:可預(yù)測(cè)的應(yīng)用程序性能。
  • 資源利用:高效率和高密度。

在這篇博客中,我們將詳細(xì)介紹如何在Ubuntu 18.04上安裝和部署Kubernetes 1.22.2集群。我們將使用kubeadm工具,這是Kubernetes官方推薦的用于快速部署Kubernetes集群的工具。

如果您的平臺(tái)在Centos系統(tǒng)上,關(guān)于Kubernetes(k8s)集群的安裝部署,可以查看博客《Centos7 安裝部署Kubernetes(k8s)集群》https://www.cnblogs.com/renshengdezheli/p/16686769.html。

如果您對(duì)Ubuntu系統(tǒng)不熟悉,Ubuntu系統(tǒng)的詳細(xì)操作,請(qǐng)查看博客《centos系統(tǒng)和Ubuntu系統(tǒng)命令區(qū)別以及常見(jiàn)操作》。

三.Kubernetes

3.1 概述

Kubernetes 是一個(gè)可移植、可擴(kuò)展的開(kāi)源平臺(tái),用于管理容器化的工作負(fù)載和服務(wù),可促進(jìn)聲明式配置和自動(dòng)化。 Kubernetes 擁有一個(gè)龐大且快速增長(zhǎng)的生態(tài),其服務(wù)、支持和工具的使用范圍相當(dāng)廣泛。

Kubernetes 這個(gè)名字源于希臘語(yǔ),意為“舵手”或“飛行員”。k8s 這個(gè)縮寫(xiě)是因?yàn)?k 和 s 之間有八個(gè)字符的關(guān)系。 Google 在 2014 年開(kāi)源了 Kubernetes 項(xiàng)目。 Kubernetes 建立在 Google 大規(guī)模運(yùn)行生產(chǎn)工作負(fù)載十幾年經(jīng)驗(yàn)的基礎(chǔ)上, 結(jié)合了社區(qū)中最優(yōu)秀的想法和實(shí)踐。

Kubernetes 為你提供的功能如下:

  1. 服務(wù)發(fā)現(xiàn)和負(fù)載均衡:Kubernetes 可以使用 DNS 名稱(chēng)或自己的 IP 地址來(lái)曝露容器。 如果進(jìn)入容器的流量很大, Kubernetes 可以負(fù)載均衡并分配網(wǎng)絡(luò)流量,從而使部署穩(wěn)定。
  2. 存儲(chǔ)編排:Kubernetes 允許你自動(dòng)掛載你選擇的存儲(chǔ)系統(tǒng),例如本地存儲(chǔ)、公共云提供商等。
  3. 自動(dòng)部署和回滾:你可以使用 Kubernetes 描述已部署容器的所需狀態(tài), 它可以以受控的速率將實(shí)際狀態(tài)更改為期望狀態(tài)。 例如,你可以自動(dòng)化 Kubernetes 來(lái)為你的部署創(chuàng)建新容器, 刪除現(xiàn)有容器并將它們的所有資源用于新容器。
  4. 自動(dòng)完成裝箱計(jì)算:你為 Kubernetes 提供許多節(jié)點(diǎn)組成的集群,在這個(gè)集群上運(yùn)行容器化的任務(wù)。 你告訴 Kubernetes 每個(gè)容器需要多少 CPU 和內(nèi)存 (RAM)。 Kubernetes 可以將這些容器按實(shí)際情況調(diào)度到你的節(jié)點(diǎn)上,以最佳方式利用你的資源。
  5. 自我修復(fù):Kubernetes 將重新啟動(dòng)失敗的容器、替換容器、殺死不響應(yīng)用戶(hù)定義的運(yùn)行狀況檢查的容器, 并且在準(zhǔn)備好服務(wù)之前不將其通告給客戶(hù)端。
  6. 密鑰與配置管理:Kubernetes 允許你存儲(chǔ)和管理敏感信息,例如密碼、OAuth 令牌和 ssh 密鑰。 你可以在不重建容器鏡像的情況下部署和更新密鑰和應(yīng)用程序配置,也無(wú)需在堆棧配置中暴露密鑰。

3.2 Kubernetes 組件

Kubernetes 集群架構(gòu)如下:

Ubuntu 安裝部署Kubernetes(k8s)集群

Kubernetes 集群組件如下:

Ubuntu 安裝部署Kubernetes(k8s)集群

Kubernetes有兩種節(jié)點(diǎn)類(lèi)型:master節(jié)點(diǎn),worker節(jié)點(diǎn)。master節(jié)點(diǎn)又稱(chēng)為控制平面(Control Plane)??刂破矫嬗泻芏嘟M件,控制平面組件會(huì)為集群做出全局決策,比如資源的調(diào)度。 以及檢測(cè)和響應(yīng)集群事件,例如當(dāng)不滿(mǎn)足部署的 replicas 字段時(shí), 要啟動(dòng)新的 pod)。

控制平面組件可以在集群中的任何節(jié)點(diǎn)上運(yùn)行。 然而,為了簡(jiǎn)單起見(jiàn),設(shè)置腳本通常會(huì)在同一個(gè)計(jì)算機(jī)上啟動(dòng)所有控制平面組件, 并且不會(huì)在此計(jì)算機(jī)上運(yùn)行用戶(hù)容器。

3.2.1 控制平面組件

控制平面組件如下

  1. kube-apiserver:API 服務(wù)器是 Kubernetes 控制平面的組件, 該組件負(fù)責(zé)公開(kāi)了 Kubernetes API,負(fù)責(zé)處理接受請(qǐng)求的工作。 API 服務(wù)器是 Kubernetes 控制平面的前端。
    Kubernetes API 服務(wù)器的主要實(shí)現(xiàn)是 kube-apiserver。 kube-apiserver 設(shè)計(jì)上考慮了水平擴(kuò)縮,也就是說(shuō),它可通過(guò)部署多個(gè)實(shí)例來(lái)進(jìn)行擴(kuò)縮。 你可以運(yùn)行 kube-apiserver 的多個(gè)實(shí)例,并在這些實(shí)例之間平衡流量。
  2. etcd:etcd 是兼顧一致性與高可用性的鍵值對(duì)數(shù)據(jù)庫(kù),可以作為保存 Kubernetes 所有集群數(shù)據(jù)的后臺(tái)數(shù)據(jù)庫(kù)。你的 Kubernetes 集群的 etcd 數(shù)據(jù)庫(kù)通常需要有個(gè)備份計(jì)劃。
  3. kube-scheduler:kube-scheduler 是控制平面的組件, 負(fù)責(zé)監(jiān)視新創(chuàng)建的、未指定運(yùn)行節(jié)點(diǎn)(node)的 Pods, 并選擇節(jié)點(diǎn)來(lái)讓 Pod 在上面運(yùn)行。調(diào)度決策考慮的因素包括單個(gè) Pod 及 Pods 集合的資源需求、軟硬件及策略約束、 親和性及反親和性規(guī)范、數(shù)據(jù)位置、工作負(fù)載間的干擾及最后時(shí)限。
  4. kube-controller-manager:kube-controller-manager 是控制平面的組件, 負(fù)責(zé)運(yùn)行控制器進(jìn)程。從邏輯上講, 每個(gè)控制器都是一個(gè)單獨(dú)的進(jìn)程, 但是為了降低復(fù)雜性,它們都被編譯到同一個(gè)可執(zhí)行文件,并在同一個(gè)進(jìn)程中運(yùn)行。
    這些控制器包括:
    節(jié)點(diǎn)控制器(Node Controller):負(fù)責(zé)在節(jié)點(diǎn)出現(xiàn)故障時(shí)進(jìn)行通知和響應(yīng)
    任務(wù)控制器(Job Controller):監(jiān)測(cè)代表一次性任務(wù)的 Job 對(duì)象,然后創(chuàng)建 Pods 來(lái)運(yùn)行這些任務(wù)直至完成
    端點(diǎn)控制器(Endpoints Controller):填充端點(diǎn)(Endpoints)對(duì)象(即加入 Service 與 Pod)
    服務(wù)帳戶(hù)和令牌控制器(Service Account & Token Controllers):為新的命名空間創(chuàng)建默認(rèn)帳戶(hù)和 API 訪問(wèn)令牌
  5. cloud-controller-manager:一個(gè) Kubernetes 控制平面組件, 嵌入了特定于云平臺(tái)的控制邏輯。 云控制器管理器(Cloud Controller Manager)允許你將你的集群連接到云提供商的 API 之上, 并將與該云平臺(tái)交互的組件同與你的集群交互的組件分離開(kāi)來(lái)。cloud-controller-manager 僅運(yùn)行特定于云平臺(tái)的控制器。 因此如果你在自己的環(huán)境中運(yùn)行 Kubernetes,或者在本地計(jì)算機(jī)中運(yùn)行學(xué)習(xí)環(huán)境, 所部署的集群不需要有云控制器管理器。
    與 kube-controller-manager 類(lèi)似,cloud-controller-manager 將若干邏輯上獨(dú)立的控制回路組合到同一個(gè)可執(zhí)行文件中, 供你以同一進(jìn)程的方式運(yùn)行。 你可以對(duì)其執(zhí)行水平擴(kuò)容(運(yùn)行不止一個(gè)副本)以提升性能或者增強(qiáng)容錯(cuò)能力。
    下面的控制器都包含對(duì)云平臺(tái)驅(qū)動(dòng)的依賴(lài):
    節(jié)點(diǎn)控制器(Node Controller):用于在節(jié)點(diǎn)終止響應(yīng)后檢查云提供商以確定節(jié)點(diǎn)是否已被刪除
    路由控制器(Route Controller):用于在底層云基礎(chǔ)架構(gòu)中設(shè)置路由
    服務(wù)控制器(Service Controller):用于創(chuàng)建、更新和刪除云提供商負(fù)載均衡器

3.2.2 Node組件

節(jié)點(diǎn)組件會(huì)在每個(gè)節(jié)點(diǎn)上運(yùn)行,負(fù)責(zé)維護(hù)運(yùn)行的 Pod 并提供 Kubernetes 運(yùn)行環(huán)境。

node組件如下

  1. kubelet:kubelet 會(huì)在集群中每個(gè)節(jié)點(diǎn)(node)上運(yùn)行。 它保證容器(containers)都運(yùn)行在 Pod 中。kubelet 接收一組通過(guò)各類(lèi)機(jī)制提供給它的 PodSpecs, 確保這些 PodSpecs 中描述的容器處于運(yùn)行狀態(tài)且健康。 kubelet 不會(huì)管理不是由 Kubernetes 創(chuàng)建的容器。
  2. kube-proxy:kube-proxy 是集群中每個(gè)節(jié)點(diǎn)(node)所上運(yùn)行的網(wǎng)絡(luò)代理, 實(shí)現(xiàn) Kubernetes 服務(wù)(Service) 概念的一部分。kube-proxy 維護(hù)節(jié)點(diǎn)上的一些網(wǎng)絡(luò)規(guī)則, 這些網(wǎng)絡(luò)規(guī)則會(huì)允許從集群內(nèi)部或外部的網(wǎng)絡(luò)會(huì)話(huà)與 Pod 進(jìn)行網(wǎng)絡(luò)通信。如果操作系統(tǒng)提供了可用的數(shù)據(jù)包過(guò)濾層,則 kube-proxy 會(huì)通過(guò)它來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)規(guī)則。 否則,kube-proxy 僅做流量轉(zhuǎn)發(fā)。

四.配置節(jié)點(diǎn)的基本環(huán)境

先配置節(jié)點(diǎn)的基本環(huán)境,3個(gè)節(jié)點(diǎn)都要同時(shí)設(shè)置,在此以k8scludes1作為示例。

查看Ubuntu系統(tǒng)版本。

root@localhost:~# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.5 LTS
Release:	18.04
Codename:	bionic

首先設(shè)置主機(jī)名。

root@localhost:~# vim /etc/hostname 

root@localhost:~# cat /etc/hostname
k8scludes1

配置節(jié)點(diǎn)靜態(tài)IP地址(可選)。

root@localhost:~# vim /etc/netplan/01-netcfg.yaml

root@localhost:~# cat /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens32:
      dhcp4: no
      addresses: [192.168.110.128/24]
      gateway4: 192.168.110.2
      nameservers:
        addresses: [192.168.110.2,114.114.114.114]

使配置生效。

root@localhost:~# netplan apply 

測(cè)試機(jī)器是否可以訪問(wèn)網(wǎng)絡(luò)。

root@localhost:~# ping www.baidu.com
PING www.baidu.com (14.215.177.39) 56(84) bytes of data.
64 bytes from www.baidu.com (14.215.177.39): icmp_seq=1 ttl=128 time=48.0 ms
64 bytes from www.baidu.com (14.215.177.39): icmp_seq=2 ttl=128 time=52.9 ms
64 bytes from www.baidu.com (14.215.177.39): icmp_seq=3 ttl=128 time=39.8 ms
^C
--- www.baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2009ms
rtt min/avg/max/mdev = 39.843/46.940/52.968/5.417 ms

配置IP地址和主機(jī)名映射。

root@localhost:~# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.110.128  netmask 255.255.255.0  broadcast 192.168.110.255
        inet6 fe80::20c:29ff:fe92:3462  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:92:34:62  txqueuelen 1000  (Ethernet)
        RX packets 3600  bytes 909889 (909.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2327  bytes 225443 (225.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 54  bytes 6421 (6.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 54  bytes 6421 (6.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@localhost:~# vim /etc/hosts

root@localhost:~# cat /etc/hosts
127.0.0.1	localhost
127.0.1.1	tom
192.168.110.128 k8scludes1
192.168.110.129 k8scludes2
192.168.110.130 k8scludes3

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

重啟機(jī)器之后,主機(jī)名變?yōu)閗8scludes1,另外兩臺(tái)機(jī)器也進(jìn)行相同操作。

k8scludes1可以ping通其他兩個(gè)節(jié)點(diǎn)則成功。

root@k8scludes1:~# ping k8scludes1
PING k8scludes1 (192.168.110.128) 56(84) bytes of data.
64 bytes from k8scludes1 (192.168.110.128): icmp_seq=1 ttl=64 time=0.014 ms
64 bytes from k8scludes1 (192.168.110.128): icmp_seq=2 ttl=64 time=0.040 ms
64 bytes from k8scludes1 (192.168.110.128): icmp_seq=3 ttl=64 time=0.058 ms
^C
--- k8scludes1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2048ms
rtt min/avg/max/mdev = 0.014/0.037/0.058/0.018 ms

root@k8scludes1:~# ping k8scludes2
PING k8scludes2 (192.168.110.129) 56(84) bytes of data.
64 bytes from k8scludes2 (192.168.110.129): icmp_seq=1 ttl=64 time=0.465 ms
64 bytes from k8scludes2 (192.168.110.129): icmp_seq=2 ttl=64 time=2.98 ms
64 bytes from k8scludes2 (192.168.110.129): icmp_seq=3 ttl=64 time=2.34 ms
^C
--- k8scludes2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2048ms
rtt min/avg/max/mdev = 0.465/1.932/2.983/1.069 ms

root@k8scludes1:~# ping k8scludes3
PING k8scludes3 (192.168.110.130) 56(84) bytes of data.
64 bytes from k8scludes3 (192.168.110.130): icmp_seq=1 ttl=64 time=0.450 ms
64 bytes from k8scludes3 (192.168.110.130): icmp_seq=2 ttl=64 time=3.71 ms
^C
--- k8scludes3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1022ms
rtt min/avg/max/mdev = 0.450/2.083/3.717/1.634 ms

配置Ubuntu軟件源,軟件源如下,最后三行是k8s源。

root@localhost:~# cat /etc/apt/sources.list
deb http://m.ythuaji.com.cn/uploads/allimg/yx1pezmrjyh bionic main restricted universe multiverse
deb-src http://m.ythuaji.com.cn/uploads/allimg/yx1pezmrjyh bionic main restricted universe multiverse

deb http://m.ythuaji.com.cn/uploads/allimg/yx1pezmrjyh bionic-security main restricted universe multiverse
deb-src http://m.ythuaji.com.cn/uploads/allimg/yx1pezmrjyh bionic-security main restricted universe multiverse

deb http://m.ythuaji.com.cn/uploads/allimg/yx1pezmrjyh bionic-updates main restricted universe multiverse
deb-src http://m.ythuaji.com.cn/uploads/allimg/yx1pezmrjyh bionic-updates main restricted universe multiverse

deb http://m.ythuaji.com.cn/uploads/allimg/yx1pezmrjyh bionic-proposed main restricted universe multiverse
deb-src http://m.ythuaji.com.cn/uploads/allimg/yx1pezmrjyh bionic-proposed main restricted universe multiverse

deb http://m.ythuaji.com.cn/uploads/allimg/yx1pezmrjyh bionic-backports main restricted universe multiverse
deb-src http://m.ythuaji.com.cn/uploads/allimg/yx1pezmrjyh bionic-backports main restricted universe multiverse

deb http://m.ythuaji.com.cn/uploads/allimg/mqvth0rzds0 kubernetes-xenial main
deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic stable
# deb-src [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic stable

apt-key.gpg是k8s的deb源公鑰,加載k8s的deb源公鑰命令為:apt-key add apt-key.gpg,下載并加載k8s的deb源公鑰命令為:curl -s http://m.ythuaji.com.cn/uploads/allimg/hkey1j4oqc5.gpg | sudo apt-key add - ; apt-get update,但是谷歌的網(wǎng)址訪問(wèn)不了,我們直接去網(wǎng)上下載apt-key.gpg文件。

#apt-key.gpg文件下載好了
root@localhost:~# ls
 apt-key.gpg  

加載k8s的deb源公鑰。

root@localhost:~# cat apt-key.gpg | apt-key add -
OK

更新軟件源。

root@localhost:~# apt-get update
Hit:1 http://mirrors.aliyun.com/ubuntu bionic InRelease
Hit:2 http://mirrors.aliyun.com/ubuntu bionic-security InRelease                                                                      
Hit:3 http://mirrors.aliyun.com/ubuntu bionic-updates InRelease                                                                       
Get:4 https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial InRelease [9,383 B]                   
Hit:5 http://mirrors.aliyun.com/ubuntu bionic-proposed InRelease                                        
Hit:6 http://mirrors.aliyun.com/ubuntu bionic-backports InRelease                                                                      
Hit:7 https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic InRelease    
Ign:8 https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
Get:8 https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages [54.7 kB]
Fetched 54.7 kB in 2s (33.3 kB/s)
Reading package lists... Done

關(guān)閉防火墻。

root@k8scludes1:~# ufw disable
Firewall stopped and disabled on system startup

Linux swapoff命令用于關(guān)閉系統(tǒng)交換分區(qū)(swap area)。

注意:如果不關(guān)閉swap,就會(huì)在kubeadm初始化Kubernetes的時(shí)候報(bào)錯(cuò):“[ERROR Swap]: running with swap on is not supported. Please disable swap”。

root@k8scludes1:~# swapoff -a ;sed -i '/swap/d' /etc/fstab

root@k8scludes1:~# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/tom--vg-root /               ext4    errors=remount-ro 0       1

此時(shí)基本環(huán)境就配置完畢了。

五.節(jié)點(diǎn)安裝docker,并進(jìn)行相關(guān)配置

k8s是容器編排工具,需要容器管理工具,所以三個(gè)節(jié)點(diǎn)同時(shí)安裝docker,還是以k8scludes1為例。

安裝docker。

root@k8scludes1:~# apt-get install docker-ce
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  containerd.io dbus-user-session docker-ce-cli docker-ce-rootless-extras docker-scan-plugin libltdl7 pigz
 ......
Processing triggers for libc-bin (2.27-3ubuntu1.2) ...

查看docker安裝包。

root@k8scludes	1:~# dpkg -l | grep docker
ii  docker-ce                              5:20.10.14~3-0~ubuntu-bionic                    amd64        Docker: the open-source application container engine
ii  docker-ce-cli                          5:20.10.14~3-0~ubuntu-bionic                    amd64        Docker CLI: the open-source application container engine
ii  docker-ce-rootless-extras              5:20.10.14~3-0~ubuntu-bionic                    amd64        Rootless support for Docker.
ii  docker-scan-plugin                     0.17.0~ubuntu-bionic                            amd64        Docker scan cli plugin.

設(shè)置docker開(kāi)機(jī)自啟動(dòng)并現(xiàn)在啟動(dòng)docker。

root@k8scludes1:~# systemctl enable docker --now
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker

查看docker狀態(tài)。

root@k8scludes1:~# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2022-04-16 21:39:46 CST; 3min 21s ago
     Docs: http://m.ythuaji.com.cn/uploads/allimg/qi211ameh4o.com
 Main PID: 1822 (dockerd)
    Tasks: 9
   CGroup: /system.slice/docker.service
           └─1822 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

查看docker版本。

root@k8scludes1:~# docker --version
Docker version 20.10.14, build a224086

注意kubernetes V1.22.2版本及其以后,要求容器的cgroup driver 為systemd,但是docker默認(rèn)的cgroup driver 是cgroupfs,kubernetes 1.21版本及其之前,是不需要修改cgroup driver的。

可以使用docker info | grep -i cgroup查看cgroup driver。

root@k8scludes1:~# docker info | grep -i cgroup
WARNING: No swap limit support
 Cgroup Driver: cgroupfs
 Cgroup Version: 1

配置docker鏡像加速器,并設(shè)置docker的cgroup driver 為systemd。

root@k8scludes1:~# cat > /etc/docker/daemon.json <<EOF
> {
> "registry-mirrors": ["https://frz7i079.mirror.aliyuncs.com"],
> "exec-opts": ["native.cgroupdriver=systemd"] 
> }
> EOF

root@k8scludes1:~# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://frz7i079.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"] 
}

重啟docker。

root@k8scludes1:~# systemctl restart docker

root@k8scludes1:~# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2022-04-16 21:51:29 CST; 8s ago
     Docs: http://m.ythuaji.com.cn/uploads/allimg/qi211ameh4o.com
 Main PID: 3541 (dockerd)
    Tasks: 9
   CGroup: /system.slice/docker.service
           └─3541 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

這時(shí)Cgroup Driver就變?yōu)閟ystemd了。

root@k8scludes1:~# docker info | grep -i cgroup
 Cgroup Driver: systemd
 Cgroup Version: 1
WARNING: No swap limit support

設(shè)置iptables不對(duì)bridge的數(shù)據(jù)進(jìn)行處理,啟用IP路由轉(zhuǎn)發(fā)功能。

root@k8scludes1:~# cat <<EOF> /etc/sysctl.d/k8s.conf 
> net.bridge.bridge-nf-call-ip6tables = 1 
> net.bridge.bridge-nf-call-iptables = 1 
> net.ipv4.ip_forward = 1 
> EOF

使配置生效。

root@k8scludes1:~# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

六.安裝kubelet,kubeadm,kubectl

三個(gè)節(jié)點(diǎn)都安裝kubelet,kubeadm,kubectl,以k8scludes1為例:

  • Kubelet 是 kubernetes 工作節(jié)點(diǎn)上的一個(gè)代理組件,運(yùn)行在每個(gè)節(jié)點(diǎn)上
  • Kubeadm 是一個(gè)快捷搭建kubernetes(k8s)的安裝工具,它提供了 kubeadm init 以及 kubeadm join 這兩個(gè)命令來(lái)快速創(chuàng)建 kubernetes 集群,kubeadm 通過(guò)執(zhí)行必要的操作來(lái)啟動(dòng)和運(yùn)行一個(gè)最小可用的集群
  • kubectl是Kubernetes集群的命令行工具,通過(guò)kubectl能夠?qū)罕旧磉M(jìn)行管理,并能夠在集群上進(jìn)行容器化應(yīng)用的安裝部署。
root@k8scludes1:~# apt-get -y install kubelet=1.22.2-00 kubeadm=1.22.2-00 kubectl=1.22.2-00
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  conntrack cri-tools kubernetes-cni socat
......
Unpacking kubeadm (1.22.2-00) ...
Setting up conntrack (1:1.4.4+snapshot20161117-6ubuntu2) ...
Setting up kubernetes-cni (0.8.7-00) ...
Setting up cri-tools (1.23.0-00) ...
Setting up socat (1.7.3.2-2ubuntu2) ...
Setting up kubelet (1.22.2-00) ...
Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service → /lib/systemd/system/kubelet.service.
Setting up kubectl (1.22.2-00) ...
Setting up kubeadm (1.22.2-00) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...

設(shè)置kubelet開(kāi)機(jī)自啟動(dòng)并現(xiàn)在啟動(dòng)kubelet。

root@k8scludes1:~# systemctl enable kubelet --now

kubelet現(xiàn)在是啟動(dòng)不了的。

root@k8scludes1:~# systemctl status kubelet 
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: activating (auto-restart) (Result: exit-code) since Sat 2022-04-16 22:07:09 CST; 7s ago
     Docs: http://m.ythuaji.com.cn/uploads/allimg/4ov232tlwaw
  Process: 5282 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=1/FAILURE)
 Main PID: 5282 (code=exited, status=1/FAILURE)

七.kubeadm初始化

更新軟件源。

root@k8scludes1:~# apt update

查看可得的kubeadm軟件包版本。

root@k8scludes1:~# apt-cache madison kubeadm | grep 1.22
   kubeadm |  1.22.8-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
   kubeadm |  1.22.7-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
   kubeadm |  1.22.6-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
   kubeadm |  1.22.5-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
   kubeadm |  1.22.4-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
   kubeadm |  1.22.3-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
   kubeadm |  1.22.2-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
   kubeadm |  1.22.1-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
   kubeadm |  1.22.0-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages

kubeadm init:在主節(jié)點(diǎn)k8scludes1上初始化 Kubernetes 控制平面節(jié)點(diǎn)。

  • --image-repository registry.aliyuncs.com/google_containers:表示使用阿里云鏡像倉(cāng)庫(kù),不然有些鏡像下載不下來(lái) ;
  • --kubernetes-version=v1.22.2:指定kubernetes的版本;
  • --pod-network-cidr=10.244.0.0/16:指定pod的網(wǎng)段 ;
  • coredns是一個(gè)用go語(yǔ)言編寫(xiě)的開(kāi)源的DNS服務(wù)。
root@k8scludes1:~# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.22.2 --pod-network-cidr=10.244.0.0/16

[init] Using Kubernetes version: v1.22.2
[preflight] Running pre-flight checks
......
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  http://m.ythuaji.com.cn/uploads/allimg/uo11gqgtxhb

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.110.128:6443 --token ju8p1y.8gjm5q00l6u5y1rp \
        --discovery-token-ca-cert-hash sha256:3f401b6187ed44ff8f4b50aa6453cf3eacc3b86d6a72e3bf2caba02556cb918e 

進(jìn)行kubeadm初始化的時(shí)候會(huì)去下載各種鏡像,可以使用docker images查看。

root@k8scludes1:~# docker images
REPOSITORY                                                        TAG       IMAGE ID       CREATED         SIZE
registry.aliyuncs.com/google_containers/kube-apiserver            v1.22.2   e64579b7d886   7 months ago    128MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.22.2   5425bcbd23c5   7 months ago    122MB
registry.aliyuncs.com/google_containers/kube-proxy                v1.22.2   873127efbc8a   7 months ago    104MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.22.2   b51ddc1014b0   7 months ago    52.7MB
registry.aliyuncs.com/google_containers/etcd                      3.5.0-0   004811815584   10 months ago   295MB
registry.aliyuncs.com/google_containers/coredns                   v1.8.4    8d147537fb7d   10 months ago   47.6MB
registry.aliyuncs.com/google_containers/pause                     3.5       ed210e3e4a5b   13 months ago   683kB

根據(jù)提示創(chuàng)建目錄和配置文件。

root@k8scludes1:~# mkdir -p $HOME/.kube

root@k8scludes1:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

root@k8scludes1:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config

現(xiàn)在已經(jīng)可以看到master節(jié)點(diǎn)了。

root@k8scludes1:~# kubectl get node
NAME         STATUS     ROLES                  AGE    VERSION
k8scludes1   NotReady   control-plane,master   178m   v1.22.2

八.添加worker節(jié)點(diǎn)到k8s集群

接下來(lái)把另外的兩個(gè)worker節(jié)點(diǎn)也加入到k8s集群。

kubeadm init的時(shí)候輸出了如下這句。

kubeadm join 192.168.110.128:6443 --token ju8p1y.8gjm5q00l6u5y1rp \
        --discovery-token-ca-cert-hash sha256:3f401b6187ed44ff8f4b50aa6453cf3eacc3b86d6a72e3bf2caba02556cb918e 

在另外兩個(gè)worker節(jié)點(diǎn)執(zhí)行這一命令就可以把節(jié)點(diǎn)加入到k8s集群里。

如果加入集群的token忘了,可以使用如下的命令獲取最新的加入命令token。

root@k8scludes1:~# kubeadm token create --print-join-command
kubeadm join 192.168.110.128:6443 --token 4xk96a.qizykuirhn8ccvcw --discovery-token-ca-cert-hash sha256:3f401b6187ed44ff8f4b50aa6453cf3eacc3b86d6a72e3bf2caba02556cb918e 

在k8scludes2執(zhí)行加入集群的token命令。

root@k8scludes2:~# kubeadm join 192.168.110.128:6443 --token 4xk96a.qizykuirhn8ccvcw --discovery-token-ca-cert-hash sha256:3f401b6187ed44ff8f4b50aa6453cf3eacc3b86d6a72e3bf2caba02556cb918e
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

可以發(fā)現(xiàn)worker節(jié)點(diǎn)加入到k8s集群后多了兩個(gè)鏡像。

root@k8scludes2:~# docker images
REPOSITORY                                      TAG       IMAGE ID       CREATED         SIZE
registry.aliyuncs.com/google_containers/pause   3.5       ed210e3e4a5b   13 months ago   683kB
registry.aliyuncs.com/google_containers/kube-proxy   v1.22.2   873127efbc8a   7 months ago    104MB

在k8scludes3執(zhí)行加入集群的token命令。

root@k8scludes3:~# kubeadm join 192.168.110.128:6443 --token 4xk96a.qizykuirhn8ccvcw --discovery-token-ca-cert-hash sha256:3f401b6187ed44ff8f4b50aa6453cf3eacc3b86d6a72e3bf2caba02556cb918e
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

可以發(fā)現(xiàn)worker節(jié)點(diǎn)加入到k8s集群后多了兩個(gè)鏡像。

root@k8scludes3:~# docker images
REPOSITORY                                           TAG       IMAGE ID       CREATED         SIZE
registry.aliyuncs.com/google_containers/kube-proxy   v1.22.2   873127efbc8a   7 months ago    104MB
registry.aliyuncs.com/google_containers/pause        3.5       ed210e3e4a5b   13 months ago   683kB

在k8scludes1查看節(jié)點(diǎn)狀態(tài),可以看到兩個(gè)worker節(jié)點(diǎn)都加入到了k8s集群。

root@k8scludes1:~# kubectl get nodes
NAME         STATUS     ROLES                  AGE    VERSION
k8scludes1   NotReady   control-plane,master   3h2m   v1.22.2
k8scludes2   NotReady   <none>                 60s    v1.22.2
k8scludes3   NotReady   <none>                 57s    v1.22.2

九.部署CNI網(wǎng)絡(luò)插件calico

雖然現(xiàn)在kubernetes集群已經(jīng)有1個(gè)master節(jié)點(diǎn),2個(gè)worker節(jié)點(diǎn),但是此時(shí)三個(gè)節(jié)點(diǎn)的狀態(tài)都是NotReady的,原因是沒(méi)有CNI網(wǎng)絡(luò)插件,為了節(jié)點(diǎn)間的通信,需要安裝cni網(wǎng)絡(luò)插件,常用的cni網(wǎng)絡(luò)插件有calico和flannel,兩者區(qū)別為:flannel不支持復(fù)雜的網(wǎng)絡(luò)策略,calico支持網(wǎng)絡(luò)策略,因?yàn)榻窈筮€要配置kubernetes網(wǎng)絡(luò)策略networkpolicy,所以本文選用的cni網(wǎng)絡(luò)插件為calico!

現(xiàn)在去官網(wǎng)下載calico.yaml文件:

官網(wǎng):https://projectcalico.docs.tigera.io/about/about-calico

Ubuntu 安裝部署Kubernetes(k8s)集群

搜索框里直接搜索calico.yaml。

Ubuntu 安裝部署Kubernetes(k8s)集群

找到下載calico.yaml的命令。

Ubuntu 安裝部署Kubernetes(k8s)集群

下載calico.yaml文件。

root@k8scludes1:~# curl http://m.ythuaji.com.cn/uploads/allimg/ozxdcek44ut.yaml -O
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  212k  100  212k    0     0   8736      0  0:00:24  0:00:24 --:--:-- 18568

root@k8scludes1:~# ls
aa.txt  apt-key.gpg  calico.yaml  set.sh

查看需要下載的calico鏡像。

root@k8scludes1:~# grep image calico.yaml
          image: docker.io/calico/cni:v3.22.2
          image: docker.io/calico/cni:v3.22.2
          image: docker.io/calico/pod2daemon-flexvol:v3.22.2
          image: docker.io/calico/node:v3.22.2
          image: docker.io/calico/kube-controllers:v3.22.2

這四個(gè)鏡像需要在所有節(jié)點(diǎn)都下載,以k8scloudes1為例。

root@k8scludes1:~# docker pull docker.io/calico/cni:v3.22.2

root@k8scludes1:~# docker pull docker.io/calico/pod2daemon-flexvol:v3.22.2

root@k8scludes1:~# docker pull docker.io/calico/node:v3.22.2

root@k8scludes1:~# docker pull docker.io/calico/kube-controllers:v3.22.2

此時(shí)三個(gè)節(jié)點(diǎn)都有calico鏡像了。

root@k8scludes1:~# docker images | grep calico
calico/kube-controllers                                           v3.22.2   a1a88662416b   2 days ago      132MB
calico/cni                                                        v3.22.2   be7dfc21ba2e   2 days ago      236MB
calico/pod2daemon-flexvol                                         v3.22.2   d6660bf471e1   2 days ago      19.7MB
calico/node                                                       v3.22.2   fd1608dbbc19   2 days ago      198MB

root@k8scludes2:~# docker images | grep calico
calico/kube-controllers                         v3.22.2   a1a88662416b   2 days ago      132MB
calico/cni                                      v3.22.2   be7dfc21ba2e   2 days ago      236MB
calico/pod2daemon-flexvol                       v3.22.2   d6660bf471e1   2 days ago      19.7MB
calico/node                                     v3.22.2   fd1608dbbc19   2 days ago      198MB

root@k8scludes3:~# docker images | grep calico
calico/kube-controllers                              v3.22.2   a1a88662416b   2 days ago      132MB
calico/cni                                           v3.22.2   be7dfc21ba2e   2 days ago      236MB
calico/pod2daemon-flexvol                            v3.22.2   d6660bf471e1   2 days ago      19.7MB
calico/node                                          v3.22.2   fd1608dbbc19   2 days ago      198MB

修改calico.yaml 文件,CALICO_IPV4POOL_CIDR的IP段要和kubeadm初始化時(shí)候的pod網(wǎng)段一致,注意格式要對(duì)齊,不然會(huì)報(bào)錯(cuò)。

root@k8scludes1:~# vim calico.yaml 

root@k8scludes1:~# cat calico.yaml | egrep "CALICO_IPV4POOL_CIDR|"10.244""
            - name: CALICO_IPV4POOL_CIDR
              value: "10.244.0.0/16"

不直觀的話(huà)看圖片:修改calico.yaml 文件。

Ubuntu 安裝部署Kubernetes(k8s)集群

應(yīng)用calico.yaml文件。

root@k8scludes1:~# kubectl apply -f calico.yaml
configmap/calico-config created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
......
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-node created
clusterrolebinding.rbac.authorization.k8s.io/calico-node created
daemonset.apps/calico-node created
serviceaccount/calico-node created
deployment.apps/calico-kube-controllers created
serviceaccount/calico-kube-controllers created
Warning: policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
poddisruptionbudget.policy/calico-kube-controllers created

查看calico pod。

root@k8scludes1:~# kubectl get pod -A | grep calico
kube-system   calico-kube-controllers-65898446b5-gtsz6   1/1     Running             0          58s
kube-system   calico-node-d6564                          1/1     Running             0          59s
kube-system   calico-node-jgvjb                          0/1     Running             0          59s
kube-system   calico-node-snkxp                          1/1     Running             0          59s

此時(shí)發(fā)現(xiàn)三個(gè)節(jié)點(diǎn)都是Ready狀態(tài)了。

root@k8scludes1:~# kubectl get node
NAME         STATUS   ROLES                  AGE     VERSION
k8scludes1   Ready    control-plane,master   3h44m   v1.22.2
k8scludes2   Ready    <none>                 42m     v1.22.2
k8scludes3   Ready    <none>                 42m     v1.22.2

十.配置kubectl命令tab鍵自動(dòng)補(bǔ)全

查看kubectl自動(dòng)補(bǔ)全命令。

root@k8scludes1:~# kubectl --help | grep bash
  completion    Output shell completion code for the specified shell (bash or zsh)

添加source <(kubectl completion bash)到/etc/profile,并使配置生效。

root@k8scludes1:~# vim /etc/profile

root@k8scludes1:~# cat /etc/profile | head -3
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
source <(kubectl completion bash)

root@k8scludes1:~# source /etc/profile

此時(shí)即可kubectl命令tab鍵自動(dòng)補(bǔ)全。

root@k8scludes1:~# kubectl get nodes 
NAME         STATUS   ROLES                  AGE     VERSION
k8scludes1   Ready    control-plane,master   3h46m   v1.22.2
k8scludes2   Ready    <none>                 45m     v1.22.2
k8scludes3   Ready    <none>                 45m     v1.22.2

十一.總結(jié)

至此,我們已經(jīng)成功在Ubuntu 18.04上安裝并部署了Kubernetes 1.22.2集群。你現(xiàn)在可以開(kāi)始創(chuàng)建和管理你的Kubernetes資源了。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 超级乱淫伦小说全集np | 国产第一页在线视频 | x8x8国产在线观看2021 | 手机看片自拍自自拍日韩免费 | 紧身短裙女教师波多野 | 日本中文字幕二区三区 | 日本人作爰啪啪全过程 | 久久亚洲国产成人影院 | 黑人破中国女人处 | 青草视频免费观看在线观看 | 国产一区二区免费福利片 | 国产理论片在线观看 | yjsp妖精视频在线观看免费 | 亚洲精品卡一卡2卡3卡4卡 | 日本亚洲娇小与黑人tube | 羞羞漫画视频 | 国产精品视频第一页 | 搓光美女衣 | nxgx欧美| 日本一区免费观看 | 午夜DY888国产精品影院 | 国产在线拍 | 国产一级一级一级成人毛片 | 特黄特色大片免费视频播放 | 男人看片网址 | 91制片厂制作果冻传媒八夷 | 免费视频精品一区二区三区 | 免费高清视频免费观看 | 好大好爽好涨太深了小喜 | 国产性tv国产精品 | 美女被吸乳得到大胸 | 日本又黄又裸一级大黄裸片 | 欧美一区二区三区在线观看不卡 | 女医学护士一级毛片 | 97精品国产自在现线免费观看 | 午夜精品区 | 岛国最新资源网站 | 日本javaajax| 午夜神器老司机高清无码 | 男人的天堂comwww | 亚洲黄色色图 |