跳到主要内容

部署1套k8s集群玩玩

最后更新于:

部署1套k8s集群玩玩

自己好久没接触k8s了,最近想部署一套k8s玩玩,有推荐的版本吗?请帮我出一份用kubeadm完整部署k8s(cri是containerd)的手把手文档,要求部署过程无Bug。机器是3台centos7系统(1 master节点,2 work节点)。

这份是CentOS 7 + kubeadm + containerd 手把手搭建 K8s 文档,严格按步骤走基本无坑,版本我给你选了稳定、兼容 CentOS 7 最好的版本。

一、环境说明

  • 系统:CentOS 7 x86_64(最小化安装即可)
  • 节点:1 Master + 2 Node
  • 容器运行时:containerd
  • 网络插件:Calico(最稳)
  • 推荐版本(无坑组合)
    • Kubernetes:v1.28.6(长期稳定,兼容 CentOS 7)
    • containerd:最新 yum 版即可

二、前置准备(所有节点都执行

1. 关闭防火墙、selinux、swap

1systemctl stop firewalld
2systemctl disable firewalld
3
4setenforce 0
5sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
6
7swapoff -a
8sed -i '/swap/s/^/#/' /etc/fstab

2. 配置主机名、hosts(可选但推荐)

1# Master 执行
2hostnamectl set-hostname k8s-master
3
4# Node1 执行
5hostnamectl set-hostname k8s-node1
6
7# Node2 执行
8hostnamectl set-hostname k8s-node2

所有节点 /etc/hosts 加上(替换为你真实IP):

1192.168.x.100 k8s-master
2192.168.x.101 k8s-node1
3192.168.x.102 k8s-node2

3. 加载内核模块 & 配置 sysctl

 1cat <<EOF | tee /etc/modules-load.d/k8s.conf
 2overlay
 3br_netfilter
 4EOF
 5
 6modprobe overlay
 7modprobe br_netfilter
 8
 9cat <<EOF | tee /etc/sysctl.d/k8s.conf
10net.bridge.bridge-nf-call-iptables  = 1
11net.bridge.bridge-nf-call-ip6tables = 1
12net.ipv4.ip_forward                 = 1
13EOF
14
15sysctl --system

4. 配置阿里云 yum 源

1yum install -y yum-utils
2yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5. 安装 containerd

1yum install -y containerd.io

生成默认配置并修改:

1containerd config default > /etc/containerd/config.toml

编辑 /etc/containerd/config.toml: 找到 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 下面的 SystemdCgroup 改为 true

1SystemdCgroup = true

再把 sandbox_image 改为阿里云:

1sandbox_image = "registry.aliyuncs.com/k8s/pause:3.9"

启动并开机自启:

1systemctl daemon-reload
2systemctl enable --now containerd

6. 添加 k8s yum 源

1cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
2[kubernetes]
3name=Kubernetes
4baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
5enabled=1
6gpgcheck=1
7gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
8exclude=kubelet kubeadm kubectl
9EOF

7. 安装 kubeadm、kubelet、kubectl

1yum install -y kubelet-1.28.6 kubeadm-1.28.6 kubectl-1.28.6 --disableexcludes=kubernetes
2
3systemctl enable --now kubelet

三、Master 节点初始化(仅 Master

1kubeadm init \
2  --apiserver-advertise-address=192.168.x.100 \
3  --image-repository registry.aliyuncs.com/k8s \
4  --kubernetes-version v1.28.6 \
5  --service-cidr=10.96.0.0/12 \
6  --pod-network-cidr=10.244.0.0/16 \
7  --ignore-preflight-errors=Swap

出现类似下面表示成功:

1Your Kubernetes control-plane has initialized successfully!
2
3Then you can join any number of worker nodes by running the following on each as root:
4
5kubeadm join 192.168.x.100:6443 --token xxx \
6        --discovery-token-ca-cert-hash sha256:xxx

配置 kubectl 权限

1mkdir -p $HOME/.kube
2cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
3chown $(id -u):$(id -g) $HOME/.kube/config

四、安装 Calico 网络插件(仅 Master)

1kubectl apply -f https://docs.projectcalico.org/v3.26/manifests/calico.yaml

等待所有 calico pod 运行:

1kubectl get pods -n kube-system -w

五、Node 节点加入集群(所有 Node 执行

用上面 kubeadm init 最后输出的 join 命令,示例:

1kubeadm join 192.168.x.100:6443 --token xxx \
2  --discovery-token-ca-cert-hash sha256:xxx

六、验证集群

Master 执行:

1kubectl get nodes

等一会所有节点状态为 Ready 就成功了。


七、常见问题(防 Bug)

  1. 节点一直 NotReady

    • 看日志:journalctl -u kubelet
    • 多半是 Calico 没跑起来,或 containerd 配置不对
  2. cgroup 驱动不对

    • 确保 containerd 中 SystemdCgroup = true
    • kubelet 默认就是 systemd,不用改
  3. 镜像拉不到

    • 已用阿里云仓库,基本不会失败
  4. token 过期

1kubeadm token create --print-join-command

如果你告诉我三台机器的真实内网IP,我可以直接给你生成可一键复制粘贴的完整命令版,连IP都帮你填好,你照着粘就能跑成一个无坑集群。

最新文章

文档导航