- 準(zhǔn)備工作
- VMWare安裝ubuntu系統(tǒng)
- 更新源
- 修改ip為靜態(tài)地址
- 主機(jī)名設(shè)置hostname
- 主機(jī)名與IP地址解析
- 時(shí)間同步
- 配置內(nèi)核轉(zhuǎn)發(fā)及網(wǎng)橋過濾
- 安裝ipset及ipvsadm及腳本自動(dòng)執(zhí)行
- 關(guān)閉swap分區(qū)
- 關(guān)閉防火墻
- 安裝容器containerd
- 添加crictl.yaml文件
- 添加k8s源
- 配置集群
- 初始化集群
- 初始化失敗解決
- CNI插件calico安裝
- 檢查 Kubernetes 集群狀態(tài)
1. 準(zhǔn)備工作
ubuntu 24.04.3 iso + VMWare虛擬機(jī)
-
系統(tǒng)要求: ubuntu 24.04.3
- VMWare虛擬機(jī)
2. VMWare安裝ubuntu系統(tǒng)
# 默認(rèn)用戶登錄,切換root登錄
$ sudo -i
$ passwd root
$ 輸入兩次密碼設(shè)置root密碼
# 配置root登錄
$ vim /etc/ssh/sshd_config
# 修改
PermitRootLogin yes
esc+:wq 保存退出
# 重啟ssh
$ systemctl restart ssh
3. 更新源
$ apt update & apt upgrade -y
4. 修改ip為靜態(tài)地址
# 獲取當(dāng)前網(wǎng)關(guān)信息
$ ip route show
#獲取當(dāng)前ip地址信息
$ ip addr show
# 查看當(dāng)前網(wǎng)卡名稱信息
$ ls /etc/netplan/
# 配置DHCP動(dòng)態(tài)分配ip為靜態(tài)ip
$ vim /etc/netplan/xx.yaml
# 根據(jù)當(dāng)前主機(jī)信息配置
network:
version: 2
ethernets:
ens18:
dhcp4: no
addresses: [192.168.60.213/20] # 當(dāng)前ip
routes:
- to: default
via: 192.168.50.1 # 網(wǎng)關(guān)
nameservers:
addresses: [114.114.114.114, 119.29.29.29, 8.8.8.8] #DNS解析
# 保存退出后應(yīng)用網(wǎng)絡(luò)信息
$ netplan apply
# 嘗試解析一下(baidu.com),會(huì)返回本地DNS解析
$ dig -t a baidu.com
# DNS配置
$ cat /etc/resolv.conf
# 查看配置詳細(xì)信息顯示本地解析,未使用DNS解析
$ ll /etc/resolv.conf
# 查看鏈接信息
$ ls -l /run/systemd/resolve/
# 刪除重新綁定后nslookup查看server會(huì)返回自定義DNS域名解析服務(wù)器
$ rm -f /etc/resolv.conf
$ ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
5. 主機(jī)名設(shè)置hostname
# master 分支
$ hostnamectl set-hostname k8s-master
# node節(jié)點(diǎn)設(shè)置
$ hostnamectl set-hostname k8s-node1
6. 主機(jī)名與IP地址解析
# 配置hosts文件
$ cat >> /etc/hosts << EOF
192.168.155.140 k8s-master
192.168.155.141 k8s-node01
192.168.155.142 k8s-node02
EOF
7. 時(shí)間同步
# 當(dāng)前時(shí)間/時(shí)區(qū)
$ date
# 同步時(shí)間為當(dāng)前時(shí)區(qū)時(shí)間
$ timedatectl set-timezone Asia/Shanghai
# 阿里云時(shí)間同步(可選)
$ ntpdate ntp.aliyun.com
# 計(jì)劃任務(wù)同步時(shí)間
$ crontab -e
# 選擇 2 后插入時(shí)間格式
$ 59 23 * * * ntpdate ntp.aliyun.com
# 查看
$ crontab -l
8. 配置內(nèi)核轉(zhuǎn)發(fā)及網(wǎng)橋過濾
# 網(wǎng)橋過濾
$ cat << EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
# 應(yīng)用,手動(dòng)執(zhí)行
$ modprobe overlay
$ modprobe br_netfilter
# 查看
$ lsmod | grep overlay
$ lsmod | grep br_netfilter
# 內(nèi)核轉(zhuǎn)發(fā)配置
$ cat << EOF | sudo tee /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
# 加載內(nèi)核參數(shù)
$ sysctl --system
9. 安裝ipset及ipvsadm及腳本自動(dòng)執(zhí)行
# 安裝ipset及ipvsadm
$ apt install ipset ipvsadm -y
# 配置ipvsadm模塊加載, 添加需要加載的模塊
$ cat << EOF | tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
# 創(chuàng)建加載模塊腳本文件
$ cat << EOF | tee ipvs.sh
#!/bin/sh
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
# 查看腳本
$ ls
# 執(zhí)行腳本文件
$ bash ipvs.sh
10. 關(guān)閉swap分區(qū)
# 查看分區(qū)
$ free -mh
# 手動(dòng)關(guān)閉,重啟后后自動(dòng)開啟
$ swapoff -a
# 永久關(guān)閉,注釋swap分區(qū)開啟
$ vim /etc/fstab
11. 關(guān)閉防火墻
# 查看防火墻狀態(tài)
$ ufw status
# 關(guān)閉防火墻
$ ufw disable
# 系統(tǒng)關(guān)閉
$ systemctl disable ufw
12. 安裝容器containerd
# 更新源
$ apt update $ apt upgrade -y
# 安裝containerd
$ apt install containerd -y
# 生成配置文件
$ mkdir -p /etc/containerd/
$ containerd config default > /etc/containerd/config.toml
# 配置 systemd cgroup 驅(qū)動(dòng)
echo "配置 systemd cgroup 驅(qū)動(dòng)..."
$ sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 中國(guó)大陸環(huán)境拉取 pause 失敗時(shí),改用可達(dá)鏡像
$ sed -i 's#sandbox_image = "registry\.k8s\.io/pause:.*"#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.10"#' /etc/containerd/config.toml
or
# 編輯config.toml文件,修改配置
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.10"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
13. 添加crictl.yaml文件
$ cat<<EOF | sudo tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 5
debug: false
pull-image-on-create: false
EOF
$ systemctl daemon-reload
$ systemctl enable containerd
$ systemctl restart containerd
$ systemctl status containerd
$ apt-get update && apt-get install -y apt-transport-https
$ curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.33/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
$ echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.33/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list
$ apt list kubeadm kubelet kubectl
# 安裝kubeadm kubelet kubectl
$ apt-get install -y kubelet kubeadm kubectl
# 安裝指定版本號(hào)
$ apt-get install -y kubelet=1.33.3-1.1 kubeadm=1.33.3-1.1 kubectl=1.33.3-1.1
# 鎖定版本,避免錯(cuò)誤升級(jí)
$ apt-mark hold kubelet kubeadm kubectl
15. 配置集群
# 查看所需鏡像文件
$ kubeadm config images list
# 避免超時(shí),可下載到本地(可選)
$ kubeadm config images pull
16. 初始化集群
# 初始化集群
$ kubeadm init --kubernetes-version=1.33.3 --control-plane-endpoint=k8s-master:6443 --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=192.168.0.0/16 --upload-certs --v=9
or
# 創(chuàng)建日志打印生成模板并編輯
$ kubeadm config print init-defaults > /etc/kubernetes/kubeadm-config.yaml
# 獲取版本
$ kubelet --version
# 編輯kubeadm-config.yaml文件并修改配置
advertiseAddress: 192.168.60.183(master ip) # 當(dāng)前ip
name: colin-k8s-master # 節(jié)點(diǎn)名稱(可選)
kubernetesVersion: 1.32.3 # 版本
podSubnet: 10.244.0.0/16 # 固定格式
# 初始化集群
kubeadm init --config /etc/kubernetes/kubeadm-config.yaml --upload-certs --v=9
# 獲取所有節(jié)點(diǎn)
$ kubectl get node
17. 初始化失敗解決
# 重置集群配置
$ kubeadm reset -f
# 清理網(wǎng)絡(luò)配置:
$ ipvsadm --clear
# 刪除配置文件:
$ rm -rf ~/.kube
$ rm -rf /etc/kubernetes/manifests/*
# 檢查并終止占用進(jìn)程/查看端口占用情況
$ netstat -tlnp | grep -E '(10250|10257|10259)'
or
$ sudo kubeadm reset -f
$ sudo systemctl stop kubelet
$ sudo rm -rf /etc/kubernetes/
$ sudo rm -rf ~/.kube/
# node刪除配置(無法加入)
$ rm -f /etc/kubernetes/kubelet.conf /etc/kubernetes/pki/ca.crt
# 生成新的node加入命令
$ kubeadm token create --print-join-command
# 安裝 Tigera Operator 和自定義資源定義
$ kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.31.0/manifests/tigera-operator.yaml
# 通過創(chuàng)建必要的自定義資源來安裝 Calico
$ kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.31.0/manifests/custom-resources.yaml
# 查看Calico Pod運(yùn)行情況
$ kubectl get pods -n calico-system
19. 檢查 Kubernetes 集群狀態(tài)
# 查看所有pods狀態(tài)
$ kubectl get pod -A
# 顯示Kubernetes集群的基本信息/檢查節(jié)點(diǎn)狀態(tài)
$ kubectl cluster-info & kubectl get nodes -o wide
# 顯示配置信息
$ kubectl config view