Ubuntu 24.04 + kubenets 1.33 + containerd部署

  1. 準(zhǔn)備工作
  2. VMWare安裝ubuntu系統(tǒng)
  3. 更新源
  4. 修改ip為靜態(tài)地址
  5. 主機(jī)名設(shè)置hostname
  6. 主機(jī)名與IP地址解析
  7. 時(shí)間同步
  8. 配置內(nèi)核轉(zhuǎn)發(fā)及網(wǎng)橋過濾
  9. 安裝ipset及ipvsadm及腳本自動(dòng)執(zhí)行
  10. 關(guān)閉swap分區(qū)
  11. 關(guān)閉防火墻
  12. 安裝容器containerd
  13. 添加crictl.yaml文件
  14. 添加k8s源
  15. 配置集群
  16. 初始化集群
  17. 初始化失敗解決
  18. CNI插件calico安裝
  19. 檢查 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

14. 添加k8s源

$ 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

18. CNI插件calico安裝

# 安裝 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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容