ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Debian13 搭建 K8s v1.37 集群(cri-dockerd + Calico)

Debian13 搭建 K8s v1.37 集群(cri-dockerd + Calico) 搜遍了整个网络免费教安装K8s的视频已经很少了所以我决定自己做一个安装教程网络缓慢问题可以自行寻找加速办法本教程不提供网络加速教程架构1 台Master2核4G 3台 Worker4核6G 系统Debian 13 Trixie集群环境docker cri-dockerdCNICalico v3.32.2所有节点全部执行【1. 基础环境 2.Dockercri-dockerd kube 组件】仅 Master 执行【集群初始化、Calico 安装、ssh 免密】Worker 节点执行kubeadm join加入集群1. 所有节点配置基础环境1.1 关闭swap#临时关闭swap swapoff -a #永久关闭swap sed -i / swap / s/^/#/ /etc/fstab1.2 加载内核模块 overlay br_netfiltercat EOF | tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF modprobe overlay modprobe br_netfilter1.3 内核网络参数开启转发与桥接iptablescat EOF | 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 #查看配置 sysctl --system1.4 修改Debian源为清华源cat /etc/apt/sources.list EOF # 清华大学镜像源 - Debian 13 (Trixie) deb https://mirrors.tuna.tsinghua.edu.cn/debian/ trixie main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian/ trixie-updates main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian/ trixie-backports main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian-security/ trixie-security main contrib non-free non-free-firmware EOF #更新源 apt-get update1.5 设置时区上海timedatectl set-timezone Asia/Shanghai1.6 设置工作节点主机名主机名不能重复所以设置主机名#工作节点1 hostnamectl set-hostname worker1 #工作节点2 hostnamectl set-hostname worker2 #工作节点3 hostnamectl set-hostname worker31.7 主机名解析 hostscat /etc/hosts EOF # 集群节点 IP 映射 192.168.2.100 master 192.168.2.150 worker1 192.168.2.151 worker2 192.168.2.152 worker3 EOF2. 所有节点安装 Docker、cri-dockerd2.1 安装依赖apt install curl wget -y2.2 一键安装dockercurl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh2.3 安装 cri-dockerd v0.4.6wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.4.6/cri-dockerd-0.4.6.amd64.tgz tar -xvf cri-dockerd-0.4.6.amd64.tgz mv cri-dockerd/cri-dockerd /usr/local/bin/2.4 创建cri-dockerd systemd服务cat EOF | tee /etc/systemd/system/cri-docker.service [Unit] DescriptionCRI Docker Afterdocker.service [Service] ExecStart/usr/local/bin/cri-dockerd --container-runtime-endpointunix:///var/run/cri-dockerd.sock Restartalways [Install] WantedBymulti-user.target EOF #重新加载 systemd 的管理器配置 systemctl daemon-reload #设置 cri-docker 为开机自启,同时立即启动该服务 systemctl enable --now cri-docker #查看 cri-docker 启动状态 systemctl status cri-docker2.5 配置K8s apt源 v1.37#下载软件包 apt-get install -y apt-transport-https ca-certificates curl gpg #创建 keyrings 目录 mkdir -p -m 755 /etc/apt/keyrings #把 K8s 官方 GPG 公钥转换成 APT 能识别的格式放进去 curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.37/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg #添加 K8s官方源 echo deb [signed-by/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.37/deb/ / | tee /etc/apt/sources.list.d/kubernetes.list2.6 安装kube组件并锁定版本apt-get update apt-get install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl3. Master 节点操作3.1 kubeadm 初始化集群apiserver-advertise-address192.168.2.100中IP地址为控制节点IP地址如不同请修改为对应IP地址如修改pod-network-cidr192.182.0.0/16在网络插件中cidr: 192.182.0.0/16也修改为一样的值kubeadm init --apiserver-advertise-address192.168.2.100 \ --pod-network-cidr192.182.0.0/16 \ --cri-socketunix:///var/run/cri-dockerd.sock保存输出的kubeadm join命令worker 节点要用记得追加 --cri-socket 参数3.2 配置 kubectl 普通用户权限mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config3.3 Master 安装 Calico v3.32.2 网络插件#下载Calico v3.32.2 网络插件 kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.32.2/manifests/operator-crds.yaml kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.32.2/manifests/tigera-operator.yaml #通过 Tigera Operator 为 Calico 网络插件安装并配置核心参数 cat EOF | kubectl apply -f - apiVersion: operator.tigera.io/v1 kind: Installation metadata: name: default spec: calicoNetwork: ipPools: - blockSize: 26 cidr: 192.182.0.0/16 encapsulation: VXLANCrossSubnet natOutgoing: Enabled --- apiVersion: operator.tigera.io/v1 kind: APIServer metadata: name: default spec: {} EOF查看kube-system pod状态等待全部就绪kubectl get pods -n kube-system -wrootK8sMastrt:~# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-559f6c778d-8fsrr 1/1 Running 0 2m coredns-559f6c778d-m9kjs 1/1 Running 0 2m etcd-k8smastrt 1/1 Running 0 2m kube-apiserver-k8smastrt 1/1 Running 0 2m kube-controller-manager-k8smastrt 1/1 Running 0 2m kube-proxy-2kpq6 1/1 Running 0 1m kube-proxy-97hgs 1/1 Running 0 1m kube-proxy-gjpzf 1/1 Running 0 1m kube-proxy-wdqb6 1/1 Running 0 2m kube-scheduler-k8smastrt 1/1 Running 0 2m4. Worker 节点操作三台 worker 都执行如果忘记请重新生成加入master节点命令生成加入master节点命令kubeadm token create --print-join-command# 因为我们使用的docker为底层 需要加 --cri-socketunix:///var/run/cri-dockerd.sock # 替换token和hash为kubeadm init输出的值 kubeadm join your-master-ip --token your-token \ --discovery-token-ca-cert-hash sha256:your-hash \ --cri-socketunix:///var/run/cri-dockerd.sock # 例子 kubeadm join 192.168.2.100:6443 --token dbgrar.btz3qhwaqzrh4hjt \ --discovery-token-ca-cert-hash sha256:7c8d90d9164ae05c014406db1b44909cd9baaa3a04723d4f85b7b8cda6b657fb \ --cri-socketunix:///var/run/cri-dockerd.sock5. Master 配置 ssh 免密登录到 worker 节点可选# 生成密钥对一路回车 ssh-keygen -t rsa -b 4096 -C kubernetes-admin # 分发公钥到3台worker,输入 yes 后输入节点机器密码 ssh-copy-id root192.168.2.150 ssh-copy-id root192.168.2.151 ssh-copy-id root192.168.2.1526.可选Worker 节点配置 kubectl直接管理集群# worker节点执行 mkdir -p $HOME/.kube # master节点推送config到worker scp /etc/kubernetes/admin.conf rootworker1:/root/.kube/config scp /etc/kubernetes/admin.conf rootworker2:/root/.kube/config scp /etc/kubernetes/admin.conf rootworker3:/root/.kube/config7. Master 节点kubectl bash 自动补全可选推荐echo source (kubectl completion bash) ~/.bashrc source ~/.bashrc常用检查命令# 查看节点状态 kubectl get nodes rootK8sMastrt:~# kubectl get nodes NAME STATUS ROLES AGE VERSION k8smastrt Ready control-plane 20m v1.37.0 k8sworker1 Ready none 9m47s v1.37.0 k8sworker2 Ready none 9m46s v1.37.0 k8sworker3 Ready none 9m46s v1.37.0 # 查看集群信息 kubectl get cs # 查看所有pod kubectl get pods -A # 查看所有节点 kubectl get nodes -o wide
返回列表