一、說明
windows 11
ubuntu22.04.5
安裝5個虛擬機,3個master 2個node
二、安裝?Vmware 17(沒成功,但你可以成功)
我的電腦配置比較舊,直接提示處理器不支持xsave 無法打開虛擬機的電源,網上方法試過了,不行啊。準備安裝vmware12, 多少年的版本啊
1、下載個人使用免費軟件
Fusion and Workstation | VMwarehttps://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion自己注冊一下,然后繼續
搜索一下?
選擇最新版本
該填的都填上?
后面就可以下載了,我不能科學上網,后面下載不動,那得多長時間啊,網上有個人版也可以下載
2、安裝VM
這個應該沒啥講究,無腦一路向下 ,大膽的裝,在啟動的時候選擇用于個人用途
三、規劃虛擬機需求分析
0、服務器基本要求
- 每個集群節點應該有不同的主機名。
- 所有節點的時間需要同步。
- 建議使用干凈的操作系統來創建集群。不要自己裝 Docker!
- 支持大多數 Linux 發行版,例如:Ubuntu、Debian、CentOS、Rocky linux。
- 系統內核版本在 5.4 及以上。
- 必須使用 root 用戶安裝!
推薦使用 Ubuntu 22.04 LTS 操作系統,內核版本在 5.4 及以上,配置如下:
操作系統 內核版本 CPU 內存 存儲 Masters Nodes Ubuntu 22.04 LTS ≥ 5.4 8C 16GB 100GB 奇數臺 任意 ?Kubernetes 和 Sealos Cloud 的系統組件在每個 Master 節點上大約需要 2 核心 (2c) 和 2GB 內存 (2g),在每個 Node 節點上則需要大約 1 核心 (1c) 和 1GB 內存 (1g),請確保集群中每個節點都有足夠的計算資源以支持系統組件的運行。
- 所有節點之間網絡互通;
- 需要在 Kubernetes 集群的第一個 Master 節點上執行腳本,目前集群外的節點不支持集群安裝;
- 所有節點之間可以互相通信。
- 需要一個域名用于訪問 Sealos 及相關服務;
- 如果您沒有域名,可以使用?
nip.io
?提供的免費域名服務。
Sealos 需要使用證書來保證通信安全,默認在您不提供證書的情況下我們會使用?cert-manager?來自動簽發證書?
如果您能提供證書,證書需要解析下列域名 (假設您提供的域名為:cloud.example.io):
*.cloud.example.io
cloud.example.io
1、Master 節點需要開放的端口
Master 節點運行控制平面組件(如 API Server、etcd、Controller Manager、Scheduler),需要開放以下端口:
端口 | 協議 | 用途 | 開放范圍 |
---|---|---|---|
6443 | TCP | Kubernetes API Server | 對所有 Node 和外部客戶端 |
2379-2380 | TCP | etcd 數據庫通信 | 僅其他 Master 節點(HA 集群) |
10250 | TCP | Kubelet API(與 Pod/容器通信) | 集群內所有節點 |
10259 | TCP | kube-scheduler 的 HTTPS 端口 | 集群內部通信 |
10257 | TCP | kube-controller-manager 的 HTTPS 端口 | 集群內部通信 |
2、Node(Worker)節點需要開放的端口
Node 節點運行工作負載(Pod),需要開放以下端口:
端口 | 協議 | 用途 | 開放范圍 |
---|---|---|---|
10250 | TCP | Kubelet API(與 Master 通信) | 集群內所有節點 |
30000-32767 | TCP | NodePort 服務的外部訪問 | 對外部客戶端開放 |
8472 | UDP | Flannel CNI 的 VXLAN 隧道 | 所有節點間(按 CNI 需求) |
179 | TCP | Calico CNI 的 BGP 協議 | 所有節點間(按 CNI 需求) |
3、所有節點(Master + Node)都需要開放的端口
某些端口在集群中所有節點間需要互通:
端口 | 協議 | 用途 |
---|---|---|
22 | TCP | SSH 管理訪問 |
ICMP | – | 節點間網絡連通性檢查(ping) |
4、?操作建議
-
僅開放必要的端口,避免安全隱患。
-
例如?
2379-2380
(etcd)僅在多 Master 集群中開放給其他 Master 節點。
5、分析表格
服務器名稱 | ip | 開放端口 | 說明 |
---|---|---|---|
base | 192.168.1.100 | 22,ICMP,10250 | 這是一個基本虛擬機,平時不用,用來克隆其他master和node1,所以安裝基本配置,開放基本端口 |
master1 | 192.168.1.101 | 6443 2379-2380 10259 10257 | 通過base克隆 |
master2 | 192.168.1.102 | 6443 2379-2380 10259 10257 | 通過master1克隆 |
master3 | 192.168.1.103 | 6443 2379-2380 10259 10257 | 通過master1克隆 |
node1 | 192.168.1.111 | 30000-32767 8472 179 | 通過base克隆 |
node2 | 192.168.1.112 | 30000-32767 8472 179 | 通過node1克隆 |
三、安裝Base虛擬機
1、新建虛擬機
打開VMware Workstation,點擊?“創建新的虛擬機”。
選擇?“典型”?安裝模式,點擊下一步,
選擇安裝來源,點擊?“安裝程序光盤映像文件(iso)”,瀏覽并選擇下載好的Ubuntu 22.04 LTS鏡像(如
ubuntu-22.04.4-live-server-amd64.iso
)。
2、配置虛擬機參數
設置用戶名和密碼
輸入虛擬機名稱(如
Ubuntu-Node1
)。
指定磁盤容量:
建議分配 60GB,選擇?“將虛擬磁盤拆分成多個文件”(便于遷移)。
下一步
自定義硬件配置
點擊?“自定義硬件”,調整以下參數:
內存:分配3GB(根據宿主機總內存調整)。
處理器:分配處理器數量1,內核數量為6。
網絡適配器:選擇?橋接模式(虛擬機直接使用物理網絡)或?NAT模式(虛擬機共享宿主機IP)。我們選橋接模式,
點擊關閉后完成配置。
3、安裝Ubuntu 22.04系統
啟動安裝向導
啟動虛擬機,自動加載Ubuntu安裝界面。
選擇語言為?English(推薦,避免編碼問題),回車繼續
系統配置
網絡配置(關鍵步驟):
安裝程序會自動檢測網絡連接(需宿主機已聯網)。
如果使用DHCP(動態IP),直接按回車跳過。
如需靜態IP(推薦用于集群部署):
選擇當前網絡接口(如
ens33
),按回車進入配置。關閉IPv4的?“Automatic”,手動輸入以下信息:
Subnet(子網):
192.168.1.0/24
(根據實際網絡環境調整)Address(IP地址):
192.168.1.200
(依次為10~13分配給4臺虛擬機)Gateway(網關):
192.168.1.1
(通常為路由器IP)Name servers(DNS):
8.8.8.8,8.8.4.4
保存配置并返回。
存儲配置
選擇磁盤(默認
Use an entire disk
),按回車確認。并把free 部分設置為home確認分區方案(默認即可),選擇?Done?并提交更改。
用戶名和密碼
用戶名的都為sealos,由于要克隆,所以每個都一樣
服務器名為node1,node2,master1,master2.,master3,base
密碼為123456
?SSH配置
勾選?“Install OpenSSH server”(允許遠程SSH連接)。
完成安裝
- 等待系統安裝完成,重啟虛擬機
?4、開啟root用戶登陸
設置root用戶密碼:
sudo passwd root修改profile文件
sudo apt install vimsudo vim /root/.profile
注釋掉: mesg n 2> /dev/null || true
添加: tty -s && mesg n || true\修改SSH配置文件
sudo vim /etc/ssh/sshd_config找到 #PermitRootLogin prohibit-password
改為 PermitRootLogin yessudo systemctl restart ssh重啟
sudo reboot啟動直接root登錄
5、初始化環境?
# 定期檢查并應用系統和應用程序的安全補丁。Ubuntu會定期發布安全更新。確保你的系統是最新的。
apt update && apt upgrade && apt dist-upgrade && apt autoremove && apt clean && reboot
# 安裝一些常用的工具和庫,這些工具可以幫助你更高效地工作apt install git curl wget htopapt install iputils-pingapt-get install openvswitch-switch
# 修改時區cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
修改linux參數vim /etc/security/limits.conf
#后面添加
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536含義如下:
soft nproc: 可打開的文件描述符的最大數(軟限制)
hard nproc: 可打開的文件描述符的最大數(硬限制)
soft nofile:單個用戶可用的最大進程數量(軟限制)
hard nofile:單個用戶可用的最大進程數量(硬限制)
6、配置網絡?
前面安裝時已經配置了,這里是對的
node1---------192.168.1.101
要修改ip,必須
#如果沒這個問題直接創建,在后面network: {config: disabled}
vim /etc/netplan/50-cloud-init.yaml
network:
? ? ethernets:
? ? ? ? ens33:
? ? ? ? ? ? addresses:
? ? ? ? ? ? - 192.168.1.101/24
? ? ? ? ? ? nameservers:
? ? ? ? ? ? ? ? addresses:
? ? ? ? ? ? ? ? - 8.8.8.8
? ? ? ? ? ? ? ? - 8.8.8.4
? ? ? ? ? ? ? ? search: []
? ? ? ? ? ? routes:
? ? ? ? ? ? - ? to: default
? ? ? ? ? ? ? ? via: 192.168.1.1
? ? version: 2#如果修改了執行下面命令
netplan apply
7、驗證網絡
ping baidu.com
# 如果安裝了其它虛擬機,也要ping
ping 192.168.1.102?
?8、更新etc/hosts文件
更新所有節點的/etc/hosts文件,添加IP與主機名映射:echo "192.168.1.111 node1" | tee -a /etc/hosts
echo "192.168.1.112 node2" | tee -a /etc/hosts
echo "192.168.1.101 master1" | tee -a /etc/hosts
echo "192.168.1.102 master2" | tee -a /etc/hosts
echo "192.168.1.102 master3" | tee -a /etc/hosts
?9、開放端口
前面分析表格確定需要開放22,ICMP,10250三個端口
apt-get install ufw -yufw enableufw statusufw allow 22/tcp # SSH
ufw allow 10250/tcp ## 允許 Master 訪問 Node 的 Kubelet
10、時間同步
apt update
apt install chronyvim /etc/chrony/chrony.conf
添加
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst# 重啟并查看同步狀態
systemctl status chrony
systemctl start chrony
systemctl enable chrony
systemctl restart chrony
四、安裝master虛擬機
1、關閉模板虛擬機:?
shutdown now
2、克隆虛擬機
右鍵模板虛擬機,選擇?“管理” > “克隆”。
選擇?“創建完整克隆”,命名新虛擬機(如
Ubuntu-Master1
)。以
Ubuntu-Master1為模板
重復此步驟生成剩余Ubuntu-Master2和Ubuntu-Master3 兩
臺虛擬機。
3、修改mac
雙擊
?
克隆后mac地址相同,同時啟動會沖突,請一定要改?
4、修改克隆機的靜態IP和主機名
啟動克隆后的虛擬機,編輯網絡配置文件(vim /etc/netplan/50-cloud-init.yaml),修改IP地址(如
192.168.1.102,192.168.1.103,192.168.1.104
)按前面規劃的來。然后netplan apply修改主機名:
hostnamectl set-hostname master1? # 依次改為master2~3
5、開放master端口
6443
2379-2380
10259
10257ufw allow 6443/tcp # 允許 kubectl 和其他節點訪問 API Server
ufw allow 2379:2380/tcp # 僅多 Master 高可用集群需要
# ufw allow 10250/tcp # 允許節點與 Master 的 Kubelet 通信
ufw allow 10259/tcp # 調度器通信(按需開放)
ufw allow 10257/tcp # 控制器管理器通信(按需開放)
root@master1:~# ufw status
Status: activeTo ? ? ? ? ? ? ? ? ? ? ? ? Action ? ? ?From
-- ? ? ? ? ? ? ? ? ? ? ? ? ------ ? ? ?----
22/tcp ? ? ? ? ? ? ? ? ? ? ALLOW ? ? ? Anywhere
10250/tcp ? ? ? ? ? ? ? ? ?ALLOW ? ? ? Anywhere
6443/tcp ? ? ? ? ? ? ? ? ? ALLOW ? ? ? Anywhere
2379:2380/tcp ? ? ? ? ? ? ?ALLOW ? ? ? Anywhere
10259/tcp ? ? ? ? ? ? ? ? ?ALLOW ? ? ? Anywhere
10257/tcp ? ? ? ? ? ? ? ? ?ALLOW ? ? ? Anywhere
22/tcp (v6) ? ? ? ? ? ? ? ?ALLOW ? ? ? Anywhere (v6)
10250/tcp (v6) ? ? ? ? ? ? ALLOW ? ? ? Anywhere (v6)
6443/tcp (v6) ? ? ? ? ? ? ?ALLOW ? ? ? Anywhere (v6)
2379:2380/tcp (v6) ? ? ? ? ALLOW ? ? ? Anywhere (v6)
10259/tcp (v6) ? ? ? ? ? ? ALLOW ? ? ? Anywhere (v6)
10257/tcp (v6) ? ? ? ? ? ? ALLOW ? ? ? Anywhere (v6)
?
6、再安裝兩臺master虛擬機
這次用master1克隆
- 克隆
- 修改mac?,有時候感覺變了啊,不動,反正我碰到相同的
- 啟動
- 修改ip地址:102和103
- 修改主機名:master2和master3
五、安裝Node虛擬機
?1、關閉Base虛擬機:?
shutdown now
2、克隆虛擬機
右鍵模板虛擬機,選擇?“管理” > “克隆”。
選擇?“創建完整克隆”,命名新虛擬機(如
Ubuntu-Node1
)。以
Ubuntu-Node1為模板
重復此步驟生成剩余Ubuntu-Node2
虛擬機。
3、修改mac
和前面相同?
4、修改克隆機的靜態IP和主機名
啟動克隆后的虛擬機,編輯網絡配置文件(vim /etc/netplan/50-cloud-init.yaml),修改IP地址(如
192.168.1.111,192.168.1.112
)按前面規劃的來。然后netplan apply修改主機名:
hostnamectl set-hostname node1? # 依次改為node2
?5、開放master端口
30000-32767
8472
179# sudo ufw allow 10250/tcp # 允許 Master 訪問 Node 的 Kubelet
ufw allow 30000:32767/tcp # 允許外部訪問 NodePort 服務
ufw allow 8472/udp # Flannel VXLAN(按需)
ufw allow 179/tcp # Calico BGP(按需)
6、再安裝一臺node虛擬機
這次用node1克隆
- 克隆
- 修改mac?,有時候感覺變了啊,不動,反正我碰到相同的
- 啟動
- 修改ip地址:112
- 修改主機名:node2
六、配置SSH免密登錄
全部虛擬機開機,保證虛擬機互相都能ping通,很重要,要做喔
master1,master2,master3,node1,node2
在master1執行代碼
檢查一下,其實每個虛擬機都一樣,/root/.ssh目錄下有一個空文件authorized_keys
root@master1:~# ls -a
. ?.. ?.bash_history ?.bashrc ?.cache ?.profile ?.ssh ?.viminfo
root@master1:~# cd .ssh
root@master1:~/.ssh# ls
authorized_keys
root@master1:~/.ssh# cat authorized_keys
root@master1:~/.ssh#
?
SSH免密登錄#在master1虛擬機主節點生成密鑰并分發到其他節點,在執行代碼之前,/root/.ssh/authorized_keys里是空的ssh-keygen -t rsa #一路回車
#master1執行后,有了三個文件,其它虛擬機這時候和他無關
root@master1:~/.ssh# ls
authorized_keys id_rsa id_rsa.pubssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.102
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.103
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.111
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.112#分別執行上面4條命令,分別鍵入yes和root的登錄密碼123456,
# 我們這時候去看
# master1
root@master1:~/.ssh# ls
authorized_keys id_rsa id_rsa.pub known_hosts known_hosts.old# master2root@master2:~/.ssh# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtnMh7FsGEdGTLqRhwbcV5GUnyy7DH3u6cGiOE4wNpvqu0tX6ZDXn/j7MaHfkigPU0a3hOoRhkxjyl/KNXDbxJgrq126al9X1dzQQg1owG3n0BewLcga7uWXNFJSCsMDp1Yl8nxt/uynvBcj0CVz7+nJLET6jojVYk04ti7iJCz6oX9yVs+g7txNrtvtYbI2erl/MLf+/rPIz84h0QmD8xrGGWVvM9AmGRe+22ppTXfhsEBXPzrifogXRkpiFQ5za0GA41SSoRWERrCYqMIBMQLz96y6OCUWWKDOT1OUvrpyCQaz72YH7sIxwIyMZtBWZKlL1Y8MWsrMRAXYiwv6JPgbo8tE1vWVGhrxRK0JeSUPNDCvk70IsKZVpUaJCzPkVxgjFMl7oeEVKjzlGHu7vUk6Js/Uc1vHMEdZtCg+bBe3pV7E9WUusaHootNihvVOjd1tjaUQQF9T20f07Mtqws75GZJEbHlHGV0Ogjcr08t0QdmijzEsx6e4m45poOsgE= root@master1#其它幾個都一樣,空文件有東西了,這個就是key
master1 測試
ssh root@192.168.1.102
root@master1:~/.ssh# ssh root@192.168.1.102
Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-136-generic x86_64)?* Documentation: ?https://help.ubuntu.com
?* Management: ? ? https://landscape.canonical.com
?* Support: ? ? ? ?https://ubuntu.com/proThis system has been minimized by removing packages and content that are
not required on a system that users do not log into.To restore this content, you can run the 'unminimize' command.
New release '24.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.Last login: Sat Apr 12 20:18:47 2025 from 192.168.1.9
root@master2:~#這里進入了master2的命令行
?
node1測試連接master1
ssh root@192.168.1.101
不行的
node1測試連接node2
ssh root@192.168.1.112
不行的
只能master1連接其它4個虛擬機,反過來不行,其它互相也不行,這個主要為了在master1中安裝集群用的?
我們需要在3個master上都是做一遍,要保證3個master之間是免密互通的
所以我們繼續在master2和master3上把上面的重新執行一遍