K8S集群安装部署

发布时间:2026/8/26 15:32:13
K8S集群安装部署 本次安装使用kubeadmcontainerd运行时方式进行安装三台master,三台node,两台主机安装haproxy所有系统均为ubuntu24.04主机规划IP地址hostname安装组件192.168.10.31k8s-master-01kube-apiserver/kube-controller-manager/kube-scheduler/etcd192.168.10.32k8s-master-02kube-apiserver/kube-controller-manager/kube-scheduler/etcd192.168.10.33k8s-master-03kube-apiserver/kube-controller-manager/kube-scheduler/etcd192.168.10.34k8s-node-01kubelet/kube-proxy192.168.10.35k8s-node-02kubelet/kube-proxy192.168.10.36k8s-node-03kubelet/kube-proxy192.168.10.21haproxy-01haproxy/keepalive192.168.10.22haproxy-02haproxy/keepalive192.168.10.20k8s-vipvip地址主机系统初使化设置主机名及配置hosts在所有k8s-master与k8s-node节点执行。vim /etc/hosts 192.168.10.31 k8s-master-01 192.168.10.32 k8s-master-02 192.168.10.33 k8s-master-03 192.168.10.34 k8s-node-01 192.168.10.35 k8s-node-02 192.168.10.36 k8s-node-03 192.168.10.30 k8s-vip关闭swap在所有k8s-master与k8s-node节点执行。swapoff -a sed -i /\sswap\s/s/^/#/ /etc/fstab加载内核模块与网络参数cat EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # 设置桥接流量走 iptables 开启转发 cat EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 EOF sudo sysctl --system # 验证三项(缺 sysctl --system 或跳过本节,init 会报 ip_forward ! 1) lsmod | grep br_netfilter # 有输出 sysctl net.ipv4.ip_forward # 1 sysctl net.bridge.bridge-nf-call-iptables # 1配置时间同步apt update -y apt install chrony -y systemctl enable --now chrony timedatectl set-timezone Asia/Shanghai安装containerd运行时apt install containerd -y 生成默认配置 mkdir -p /etc/containerd containerd config default | tee /etc/containerd/config.toml /dev/null 关键点 开启SystemdCgroup 配置完毕重启containerd服务 systemctl restart containerd systemctl enable containerd说明因为可以上外网配置加速这里暂不进行。可选安装crictl,crictl是排障工具不参与集群部署。安装kubeadm/kubelet/kubectl v1.35,所有节点都进行安装添加官方v1.35软件源并安装sudo apt-get install -y apt-transport-https ca-certificates curl gpg # 下载 v1.35 仓库的 GPG 公钥 curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.35/deb/Release.key \ | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg # 添加 apt 源(注意 URL 里的 v1.35) echo deb [signed-by/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.35/deb/ / \ | sudo tee /etc/apt/sources.list.d/kubernetes.list 安装 apt update -y apt install kubelet kubeadm kubectl 锁住版本防止apt upgrade 时被升级要升级时由kubeadm管理 apt-mark hold kubelet kubeadm kubectl 安装完毕查看一下版本 rootk8s-master-01:~# kubectl version --client Client Version: v1.35.8 Kustomize Version: v5.7.1 rootk8s-master-01:~# kubeadm version kubeadm version: version.Info{Major:1, Minor:35, EmulationMajor:, EmulationMinor:, MinCompatibilityMajor:, MinCompatibilityMinor:, GitVersion:v1.35.8, GitCommit:1c2e10a409eb1b03f2f28f401ce935312e20d9fb, GitTreeState:clean, BuildDate:2026-08-20T15:18:24Z, GoVersion:go1.26.5, Compiler:gc, Platform:linux/amd64} rootk8s-master-01:~#至此所有maste和node节点的准备工作已经就绪下面开始分角色安装。安装haproxykeepalived在两台ha主机上执行 cat /etc/sysctl.conf EOF net.ipv4.ip_nonlocal_bind 1 EOF sysctl -p apt update apt install haproxy -y 修改haproxy配置文件 listen stats mode http bind 0.0.0.0:8888 stats enable log global stats uri /status stats auth admin:work123 listen kubernetes-api-6443 bind 192.168.10.30:6443 mode tcp server master1 192.168.10.31:6443 check inter 3s fall 3 rise 3 #server master2 192.168.10.32:6443 check inter 3s fall 3 rise 3 #server master3 192.168.10.33:6443 check inter 3s fall 3 rise 3 systemctl start haproxy systemctl enable haproxy apt install keepalived -y vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id kaikai1 } vrrp_script check_haproxy { script /etc/keepalived/check_haproxy.sh interval 1 weight -30 fall 3 rise 2 timeout 2 } vrrp_instance VI_1 { state MASTER interface ens33 garp_master_delay 10 smtp_alert virtual_router_id 66 priority 100 advert_int 1 authentication { auth_type PASS auth_pass work123 } virtual_ipaddress { 192.168.10.30/24 dev ens33 label ens33:1 } track_script { check_haproxy } } ! Configuration File for keepalived global_defs { router_id kaikai2 } vrrp_script check_haproxy { script /etc/keepalived/check_haproxy.sh interval 1 weight -30 fall 3 rise 2 timeout 2 } vrrp_instance VI_1 { state BACKUP interface ens33 garp_master_delay 10 smtp_alert virtual_router_id 66 priority 80 advert_int 1 authentication { auth_type PASS auth_pass work123 } virtual_ipaddress { 192.168.10.30/24 dev ens33 label ens33:1 } track_script { check_haproxy } } systemctl restart keepalived systemctl enable keepalived初使化master在第一个节点上执行K8S_RELEASE_VERSION1.35.6 kubeadm init --kubernetes-versionv${K8S_RELEASE_VERSION} --control-plane-endpointk8s-vip.local --pod-network-cidr10.244.0.0/16 --service-cidr10.96.0.0/12 --token-ttl0 --upload-certs [init] Using Kubernetes version: v1.35.6 [preflight] Running pre-flight checks [preflight] Pulling images required for setting up a Kubernetes cluster [preflight] This might take a minute or two, depending on the speed of your internet connection [preflight] You can also perform this action beforehand using 执行成功输出加入集群的master和node所需的key执行上面的命令将另外两台master和三台node加入集群。并在三台master上执行以下命令mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/configmaster都已经加入集群从haproxy上可以看到状态现在所有节点已经都加入集群网络因为学没有安装插件还不正常。安装网络CNI插件Calico# 用 Tigera Operator 方式安装(Calico 官方推荐) # 版本号请到 Calico releases 核对最新稳定版,这里以 v3.29.x 为例 kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/tigera-operator.yaml # 下载自定义资源配置 curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/custom-resources.yaml # 编辑 custom-resources.yaml,把 cidr 改成 10.244.0.0/16 sed -i s#192.168.0.0/16#10.244.0.0/16# custom-resources.yaml # 应用 kubectl create -f custom-resources.yaml这个时候可以看到正在下载加载镜像这时已拉取完毕现在再执行kubectl get nodes 可以看到STATUS状诚应景Ready集群安装完毕验证现在执行几条命令查看一下集群是否正常。