Linux环境下K8S怎么搭建
导读:Linux 环境下搭建 Kubernetes 实操指南 一 环境与规划 节点与资源 控制平面(master):2 核 CPU / 4GB 内存 / 50GB+ 磁盘 工作节点(node):2 核 CPU / 4GB 内存 / 50GB+...
Linux 环境下搭建 Kubernetes 实操指南
一 环境与规划
- 节点与资源
- 控制平面(master):2 核 CPU / 4GB 内存 / 50GB+ 磁盘
- 工作节点(node):2 核 CPU / 4GB 内存 / 50GB+ 磁盘
- 操作系统:CentOS 7.9 / Ubuntu 22.04
- 网络规划
- Pod 网段:10.244.0.0/16(Flannel/Calico 常用)
- Service 网段:10.96.0.0/12
- 节点互通端口(示例):6443(API Server)、2379–2380(etcd)、10250(kubelet) 等,云上需在安全组放行
- 运行时与工具
- 容器运行时:containerd 1.7.x(K8s 1.24+ 推荐)
- 部署工具:kubeadm
- 命令行:kubectl
- 网络插件:Calico(生产常用,支持网络策略)
二 系统初始化与依赖安装
- 所有节点执行
- 关闭干扰项
- CentOS:systemctl stop/disable firewalld;sed -i ‘s/^SELINUX=enforcing$/SELINUX=permissive/’ /etc/selinux/config;setenforce 0
- Ubuntu:如需可 ufw disable
- 关闭 Swap
- swapoff -a;sed -i ‘/swap/s/^/#/’ /etc/fstab;free -h 验证
- 内核参数与模块
- cat > /etc/sysctl.d/k8s.conf < < EOF net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0 EOF
- modprobe br_netfilter;sysctl -p /etc/sysctl.d/k8s.conf
- 时间同步
- yum/apt 安装 chrony;systemctl enable --now chronyd;chronyc sources
- 可选优化(大规模/高并发推荐)
- 安装 ipset/ipvsadm 并预加载模块(ip_vs、ip_vs_rr、ip_vs_wrr、ip_vs_sh、nf_conntrack)
- 关闭干扰项
- 安装容器运行时 containerd
- CentOS
- yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- yum install -y containerd.io-1.7.11
- Ubuntu
- apt update & & apt install -y ca-certificates curl gnupg lsb-release
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker.gpg
- echo “deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | tee /etc/apt/sources.list.d/docker.list > /dev/null
- apt update & & apt install -y containerd.io-1.7.11
- 生成并调整配置
- containerd config default > /etc/containerd/config.toml
- 编辑 /etc/containerd/config.toml:设置 SystemdCgroup = true(与 kubelet 一致)
- systemctl enable --now containerd
- CentOS
- 安装 kubeadm / kubelet / kubectl(示例版本:1.30.x)
- Ubuntu
- apt update & & apt install -y apt-transport-https ca-certificates curl
- curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-keyring.gpg
- echo “deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main” | tee /etc/apt/sources.list.d/kubernetes.list
- apt update & & apt install -y kubelet=1.30. kubeadm=1.30. kubectl=1.30.***
- apt-mark hold kubelet kubeadm kubectl
- CentOS
- cat > /etc/yum.repos.d/kubernetes.repo < < EOF [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF
- yum install -y kubelet-1.30. kubeadm-1.30. kubectl-1.30.***
- systemctl enable --now kubelet
- Ubuntu
三 部署控制平面与网络
- 控制平面初始化(仅在 master 执行)
- kubeadm init
–apiserver-advertise-address=< MASTER_IP>
–image-repository=registry.k8s.io
–kubernetes-version=v1.30.0
–service-cidr=10.96.0.0/12
–pod-network-cidr=10.244.0.0/16 - 初始化完成后按提示执行:
- mkdir -p $HOME/.kube
- cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- chown $(id -u):$(id -g) $HOME/.kube/config
- kubeadm init
- 安装 CNI 网络插件(以 Calico 为例)
- kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- 等待节点 Ready:kubectl get nodes(可能需要数分钟)
- 加入工作节点(在每个 node 执行)
- 使用 kubeadm init 输出中的 join 命令,或重新生成:
- kubeadm token create --print-join-command
- 典型命令:kubeadm join < MASTER_IP> :6443 --token --discovery-token-ca-cert-hash sha256:
- 使用 kubeadm init 输出中的 join 命令,或重新生成:
四 验证与常见问题
- 基础验证
- kubectl get nodes -o wide(状态应为 Ready)
- kubectl get pods -A(核心组件 Running)
- 部署测试应用:
- kubectl create deployment nginx --image=nginx:1.25
- kubectl expose deployment nginx --port=80 --type=NodePort
- kubectl get svc nginx(访问地址:http://< 任意节点IP> :)
- 常见问题与处理
- 节点 NotReady:检查 Pod 网段是否与 10.244.0.0/16 冲突、CNI 是否成功部署、节点间网络与端口连通性
- 镜像拉取慢/失败:为 containerd 配置国内镜像仓库镜像(registry-mirrors)
- 忘记 join 命令:在 master 执行 kubeadm token create --print-join-command
- 重置与重装:kubeadm reset(清理后重新 init/join)
五 云上或必须使用 Docker 的场景
- 云服务器安全组需放行:6443(API)、10250(kubelet)、以及 kube-proxy/NodePort 相关端口
- 若必须使用 Docker(K8s 1.24+ 场景)
- 安装 Docker 并将 containerd 作为 Docker 内置运行时
- 安装 cri-dockerd(为 Docker 提供 CRI 接口),配置 kubelet 使用 cri-dockerd 的 endpoint,然后用 kubeadm 正常 init/join(cri-dockerd 的版本需与 K8s 版本匹配)
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux环境下K8S怎么搭建
本文地址: https://pptw.com/jishu/786933.html
