關閉交換空間
# 切換 超級管理員身份
# 查看交換空間
free -h
# 關閉交換空間
swapoff -a
避免開啟啟動交換空間
# 注釋swap開頭的行
vim /etc/fstab
關閉防火墻
# 關閉防火墻
# 因為K8S 是集群形式存在的 至少三臺 一主二從 (一個master 兩個node) master 要給其他node節點發送指令 走的 gRPC協議
# 這個通信協議不能跨防火墻 故需要關閉
ufw disable
配置 DNS
# 取消注釋 配置 DNS
vim /etc/systemd/resolved.conf
安裝 Docker 、配置docker 鏡像加速器
參考資料
安裝kubernetes
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat >/etc/apt/sources.list.d/kubernetes.list <<EOF
# 寫入軟件源 注意目前使用的Ubuntu的版本是 noble,但阿里云暫且不支持,所以沿用16.04 d xenial
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-$(lsb_release -cs) main
EOF
apt-get update
》》》安裝k8s
apt-get update && apt-get install -y kubelet kubeadm kubectl
查看版本
鎖定版本
防止k8s軟件自動升級,通過以下命令進行鎖定版本。
sudo apt-mark hold kubelet kubeadm kubectl
如果要取消
sudo apt-mark unhold kubelet kubeadm kubectl
同步時間
同步時間之前 一定要先同步時區
dpkg-reconfigure tzdata
》》時間同步
# 安裝ntpdate
apt-get install ntpdate
# 設置系統時間與網絡時間同步(cn.pool.ntp.org ) 是尋找離本機最近的時間服務器 同步時間
ntpdate cn.pool.ntp.org
# 將系統時間寫入硬件時間
# 如果hwclock命令沒,則需要安裝 apt install util-linux-extra
hwclock --systohc# 確認時間 看時間跟本地是否一致
date
修改主機名
》》修改cloud.cfg ,防止重啟主機名還原 ,但測試下來 默認不還原
vim /etc/cloud/cloud.cfg
# 該配置默認是False,修改為True 即可
# preserve——>保護,維護 持之以恒 保持
preserve_hostname:true
》》重新一下,讓配置生效, 然后關機
到此 可以把這個 Ubuntu系統 作為最基礎的,方便以后快速 新增 一個k8s 節點
基于上面的 克隆 一個 K8S 作為master、兩個 節點 Node1、Node2
》》》修改IP、主機名
配置上面基本 一定 一定 一定 要重啟
Kubernetes 安裝集群
上面安裝Kubernetes》》包含kubeadm、kubectl、kubetel》》
kubeadm 是kubernetes的集群安裝工具,能快速安裝kubernetes集群,安裝kubernetes主要是安裝它的各個鏡像,而kubeadm已經為我們集成好了運行kubenetes所需要的基本鏡像。
安裝程序Linux系統 一般安裝在 /usr/local中
# cd /usr/local
# 創建 kubernetes 文件夾
# 進入到 kubernetes 文件夾
# 創建 cluster 文件夾
# 進入cluster文件夾
# 導出配置文件
# kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
》》修改 kubeadm.yml 文件
把谷歌的鏡像倉庫地址修改成阿里云的鏡像倉庫地址
imageRepository: registry.aliyuncs.com/google_containers
》》配置文件還要到加個Pod
# 配置POD 所在網段為我們虛擬機不重疊的網段 容器跟容器間通信 可以不需要加雙引號podSubnet: 10.244.0.0/16
》》查看所需要的鏡像
kubeadm config images list --config kubeadm.yml
》》拉取鏡像
kubeadm config images pull --config kubeadm.yml
報錯
ailed to pull image "registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.2": output: time="2025-03-18T10:36:20+08:00" level=fatal msg="validate service connection: CRI v1 image API is not implemented for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.ImageService"
, error: exit status 1
To see the stack trace of this error execute with --v=5 or higher
》》解決方案
vim /etc/containerd/config.toml
重啟contained服務即可
systemctl restart containerd
在拉取就可以了
如果拉取不成功,查看網絡配置(要重啟)、kubeadm.ym 的 配置
# 這步驟不需要的,只是測試這個路徑是否可以從拉取
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.2
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.2
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.2
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.28.2
docker pull registry.aliyuncs.com/google_containers/pause:3.9
docker pull registry.aliyuncs.com/google_containers/etcd:3.5.9-0
docker pull registry.aliyuncs.com/google_containers/coredns:v1.10.1
安裝主節點 》》注意 注意 注意只主節點才需要 初始化的
# --experimental-upload-certs 可以在后續執行加入節點時自動分發證書文件
# tee kubeadm-init.log 輸出日志的
# tee命令的功能是用于讀取標準輸入的數據,將其內容轉交到標準輸出設備中,同時保存成文件。
kubeadm init --config=kubeadm.yml --experimental-upload-certs | tee kubeadm-init.log
k8s 1.8版本之后就不支持這個 選項了
kubeadm init --config=kubeadm.yml --upload-certs | tee kubeadm-init.log
》》如果報錯
[init] Using Kubernetes version: v1.28.2
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
kubeadm init --config=kubeadm.yml --upload-certs --ignore-preflight-errors=all | tee kubeadm-init.log
》》安裝中會出現
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[kubelet-check] Initial timeout of 40s passed.
》》解決問題:《《
# 1.修改Containerd配置
cd /etc/containerd
# 生成默認配置文件,Containerd的配置文件使用TOML格式,然后打開修改。(如果之前存在可以刪除)
containerd config default > /etc/containerd/config.toml
# 打開修改:
vim /etc/containerd/config.toml
將 sandbox_image = "registry.k8s.io/pause:3.8"
改為 sanbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
SystemdCgroup = false 改為 SystemdCgroup = true
保存退出,重啟Containerd
sudo systemctl restart containerd
# containerd 重啟之后
kubeadm reset 重置一下
# 進入
cd /usr/local/kubernetes/cluster
# 在初始化一下
kubeadm init --config=kubeadm.yml --upload-certs --ignore-preflight-errors=all | tee kubeadm-init.log
成功 成功
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# 這個兩個命令 要分別執行
kubectl get node
節點加入Master
如果報錯
error execution phase preflight: [preflight] Some fatal errors occurred:[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
解決方法
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptablesmodprobe br_netfilter
集群網絡配置
參考資料