1-基础环境搭建(都要做)
1.1-修改主机IP地址
IP分配:
MASTER_IP="192.168.132.100" NODE1_IP="192.168.132.101" NODE2_IP="192.168.132.102"进入master或node中修改对应的IP,修改示例如下:(ping8.8.8.8不通请检查网关)
sudo tee /etc/netplan/01-network-manager-all.yaml <<'EOF' # Let NetworkManager manage all devices on this system network: version: 2 renderer: NetworkManager ethernets: ens33: # 请替换为你的实际网卡名 dhcp4: no # 关闭 DHCP addresses: - 192.168.132.100/24 # 固定 IP 地址 gateway4: 192.168.132.2 # 网关(根据你的网络设置修改) nameservers: addresses: [8.8.8.8, 223.5.5.5] # DNS EOF
应用配置:
sudo netplan apply
1.2-添加IP到/etc/hosts文件
tee -a /etc/hosts << EOF 192.168.132.100 k8s-master 192.168.132.101 k8s-node1 192.168.132.102 k8s-node2 EOFcat /etc/hosts

1.3-修改主机名(可选)
在 master 上设置主机名
hostnamectl set-hostname k8s-master exec bash在 node1 上设置主机名
hostnamectl set-hostname k8s-node1 exec bash在 node2 上设置主机名
hostnamectl set-hostname k8s-node2 exec bash


1.4-系统基础调优
基础工具
apt-get update apt-get install -y apt-transport-https ca-certificates curl gpg lsb-release \ chrony conntrack ipset ipvsadm socat ebtables ethtool
关闭 swap(立即 + 开机不启用)
swapoff -a sed -ri '/\sswap\s/s/^/#/' /etc/fstab
内核转发与桥接
tee /etc/modules-load.d/k8s.conf >/dev/null <<EOM overlay br_netfilter EOMmodprobe overlay || true modprobe br_netfilter || true
tee /etc/sysctl.d/99-k8s.conf >/dev/null <<EOM net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOM sysctl --system
可选:ipvs 常用模块(开机自动加载)
tee /etc/modules-load.d/ipvs.conf >/dev/null <<EOM ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack EOMmodprobe ip_vs || true modprobe ip_vs_rr || true modprobe ip_vs_wrr || true modprobe ip_vs_sh || true modprobe nf_conntrack || true
iptables -F
systemctl disable NetworkManager

1.5-添加环境变量(重要)
添加环境变量便于文件识别,防止后面创建集群时无法正常构架网络
sudo tee -a /etc/profile > /dev/null <<'EOF'
# ===== Kubernetes Environment Variables =====
export POD_CIDR=10.244.0.0/16
export SERVICE_CIDR=10.96.0.0/12
export MASTER_IP=192.168.132.100
export K8S_VERSION=1.34.1
# ===== End of Kubernetes Environment Variables =====
EOF


2-安装 containerd并配置国内镜像与 SystemdCgroup(都要做)
# 创建存放软件源密钥的目录并设置权限; install -m 0755 -d /etc/apt/keyrings# 从阿里云镜像下载 Docker 的 GPG 密钥并配置权限; curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc chmod a+r /etc/apt/keyrings/docker.asc
# 自动识别系统版本,添加阿里云的 Docker 软件源到系统配置中,用于后续安装 Docker 相关组件。 . /etc/os-release echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \ https://mirrors.aliyun.com/docker-ce/linux/ubuntu ${UBUNTU_CODENAME} stable" \ | tee /etc/apt/sources.list.d/docker.list >/dev/null
# 生成默认配置 mkdir -p /etc/containerd /etc/containerd/certs.d containerd config default | tee /etc/containerd/config.toml >/dev/null
# 开启 SystemdCgroup,并设置 pause 镜像(与 K8s 1.34 对齐) sed -ri 's#SystemdCgroup = false#SystemdCgroup = true#' /etc/containerd/config.toml sed -ri 's#sandbox_image = ".*"#sandbox_image = "registry.k8s.io/pause:3.10"#' /etc/containerd/config.toml
# 配置 registry mirrors(DaoCloud 国内加速,也可换成你自己的阿里云专属加速器) mkdir -p /etc/containerd/certs.d/registry.k8s.io tee /etc/containerd/certs.d/registry.k8s.io/hosts.toml >/dev/null <<EOM server = "https://registry.k8s.io" [host."https://k8s.m.daocloud.io"] capabilities = ["pull", "resolve"] EOM mkdir -p /etc/containerd/certs.d/docker.io tee /etc/containerd/certs.d/docker.io/hosts.toml >/dev/null <<EOM server = "https://docker.io" [host."https://docker.m.daocloud.io"] capabilities = ["pull", "resolve"] EOM mkdir -p /etc/containerd/certs.d/quay.io tee /etc/containerd/certs.d/quay.io/hosts.toml >/dev/null <<EOM server = "https://quay.io" [host."https://quay.m.daocloud.io"] capabilities = ["pull", "resolve"] EOM
# 配置 crictl 连接 containerd tee /etc/crictl.yaml >/dev/null <<EOM runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false EOM
systemctl enable --now containerd systemctl restart containerd
3-安装 kubeadm / kubelet / kubectl(都要做)
install -m 0755 -d /etc/apt/keyrings # 建议使用 1.34 的 Release.key(key 对各小版本通用,使用对应版本路径最稳妥) curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# 任选其一:TUNA echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/kubernetes/core:/stable:/v1.34/deb/ /' \ | tee /etc/apt/sources.list.d/kubernetes.list >/dev/null # 若想切换 USTC,请改为: # echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.ustc.edu.cn/kubernetes/core:/stable:/v1.34/deb/ /' \ # | tee /etc/apt/sources.list.d/kubernetes.list >/dev/null
apt-get update apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl systemctl enable kubelet
4-上传文章顶部的tar文件到机器上(都要做)
下载本章顶部的文件calico.rar的windows,先解压获得两个tar文件(后面用到)

4.1-上传本地k8s_ubuntu_20.04_images.tar到~/
# 在每台机器(master/node)执行
ctr -n k8s.io images import /root/k8s_ubuntu_20.04_images.tar
crictl images | grep -E 'kube-|etcd|pause|coredns' || true

ctr -n k8s.io images tag registry.k8s.io/pause:3.10 registry.k8s.io/pause:3.10.1
ctr -n k8s.io images tag registry.k8s.io/etcd:3.6.4-0 registry.k8s.io/etcd:3.6.5-0

4.2-上传本地calico.tar到~/calico_v3.30.3
mkdir -p ~/calico_v3.30.3 && cd ~/calico_v3.30.3
上传calico.tar

tar zxvf calico.tar
images=(
calico/node:v3.30.3
calico/cni:v3.30.3
calico/typha:v3.30.3
calico/kube-controllers:v3.30.3
calico/pod2daemon-flexvol:v3.30.3
calico/node-driver-registrar:v3.30.3
calico/csi:v3.30.3
calico/apiserver:v3.30.3
)
#for img in "${images[@]}"; do
# docker pull quay.io/$img
# docker save -o $(basename $img).tar quay.io/$img
#done
for f in *.tar; do
ctr -n k8s.io images import "$f"
done
# 可选:统一打 tag,防止 YAML 里引用 docker.io 前缀时不匹配
for img in "${images[@]}"; do
ctr -n k8s.io images tag quay.io/$img docker.io/$img
done

5-k8s集群创建(仅在master执行)
5.1-离线安装
| 镜像名 | 说明 |
|---|---|
| registry.k8s.io/pause:3.10.1 | Pod 沙箱容器镜像 |
| registry.k8s.io/etcd:3.6.4-0 | etcd 数据库 |
| registry.k8s.io/kube-apiserver:v1.34.1 | 控制平面 API 服务 |
| registry.k8s.io/kube-controller-manager:v1.34.1 | 控制器管理 |
| registry.k8s.io/kube-scheduler:v1.34.1 | 调度器 |
| registry.k8s.io/coredns/coredns:v1.12.1 | DNS 服务 |
imageRepository: registry.k8s.io
(表示使用本地的k8s镜像,但是未识别的镜像会通过registry.k8s.io拉取)需要将镜像tag为官网标识的镜像名,用于init集群时避免识别不到
imageRepository: registry.aliyuncs.com/google_containers(表示拉取阿里云的镜像来构建k8s)
tee /root/kubeadm-config.yaml <<EOF
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: "${K8S_VERSION}"
clusterName: kubernetes
imageRepository: registry.k8s.io
networking:
podSubnet: "${POD_CIDR}"
serviceSubnet: "${SERVICE_CIDR}"
controllerManager: {}
scheduler: {}
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: "${MASTER_IP}"
bindPort: 6443
nodeRegistration:
criSocket: unix:///run/containerd/containerd.sock
EOF


5.3-集群安装
# 预拉镜像(可跳过,kubeadm init 会自动拉)
# kubeadm config images pull --config=/root/kubeadm-config.yaml
# 初始化
kubeadm init --config=/root/kubeadm-config.yaml



mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
下面kubeadm join复制到node节点上,让node节点加入集群(忘记保存可以运行生成新的加入命令)
sudo kubeadm token create --print-join-command
kubeadm join 192.168.132.100:6443 --token 8petkc.vsj6w4dc0axyysuz --discovery-token-ca-cert-hash sha256:75b112811d6c99e5d69a2289abd1f7652c020caff63493504e40ae81b13a303f


6-安装 Calico 网络(只在 master 执行)
6.1-拉取文件
方法一:直接通过官方yaml文件安装(不推荐)
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/calico.yaml


方法二:使用 Tigera Operator 来部署和管理(推荐)
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/tigera-operator.yaml
tee > /root/custom-resources.yaml << "EOF"
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
name: default
spec:
cni:
type: Calico
calicoNetwork:
ipPools:
- blockSize: 26
cidr: 10.244.0.0/16
encapsulation: VXLAN
natOutgoing: Enabled
nodeSelector: all()
nodeAddressAutodetectionV4:
firstFound: true
---
apiVersion: operator.tigera.io/v1
kind: APIServer
metadata:
name: default
EOF
kubectl apply -f /root/tigera-operator.yaml # 上面执行成功可以跳过
kubectl apply -f /root/custom-resources.yaml

kubectl get pods -A

查询日志
# 查询日志
kubectl logs -n calico-system calico-node-fqhf2
ctr -n k8s.io images list |grep calico
kubectl delete pod -n tigera-operator --all --force --grace-period=0
kubectl delete pod -n calico-system --all --force --grace-period=0
kubectl get pods -A
强制删除(Terminating状态可以使用强制删除清理)
kubectl delete pod <pod-name> -n <namespace> --grace-period=0 --force
7-本章总结
到这里我们已经完成了基础的k8s集群搭建,现在来回顾下我们遇到的问题(都是累)
遇到的问题及解决方法:
- 使用了临时环境变量,导致重启后无法识别,导致calico无法正常运行
# 临时环境变量 : "${POD_CIDR:=10.244.0.0/16}" : "${SERVICE_CIDR:=10.96.0.0/12}" : "${MASTER_IP:=192.168.132.100}" : "${K8S_VERSION:=1.34.1}"应当添加到/etc/profile系统环境文件中使其完全生效
- 修改静态IP时:/etc/netplan/01-network-manager-all.yaml
- 要检查网关,通过编辑--->虚拟网络编辑器--->点击VMnet8--->NAT设置--->网关查询

- calico插件无法正常拉取镜像,需要先将镜像拉去下来,通过ctr导入,详细请解读文档

















&spm=1001.2101.3001.5002&articleId=153274191&d=1&t=3&u=7560a095f7794639a76c0201c8d26d8a)
3707

被折叠的 条评论
为什么被折叠?



