当前位置: 首页 > news >正文

【k8s】k8s安装与集群部署脚本

建议先阅读上一篇k8s概念深入理解k8s架构再阅读本脚本。

#- 5.1 #

swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab

为什么要关闭交换分区:如果内存满了,将一部分数据放到了硬盘,让scheduler误认为该节点资源空闲,放置更多的pod运行,导致部分pod性能极差,不利于负载均衡。而且k8s不在开启了swap分区的节点运行。

#- 5.2 #

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
modprobe br_netfilter

让 Linux 把​​网桥(bridge)上的流量也交给 iptables/netfilter 处理​​,这对 Kubernetes 网络非常重要。

modprobe br_netfilter:手动加载该模块(立即生效)

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOFsudo sysctl --system

net.bridge.bridge-nf-call-ip6tables = 1:让网桥上的 IPv6 流量经过 ip6tables。

net.bridge.bridge-nf-call-iptables = 1:让网桥上的 IPv4 流量经过 iptables。

net.ipv4.ip_forward = 1:开启 IPv4 转发功能,使节点可以转发数据包(类似路由器)。

这些设置写入到 /etc/sysctl.d/k8s.conf,然后通过 sysctl --system生效(包括立即生效 + 开机自动加载)。

#- 5.3 #

cat > /etc/apt/sources.list.d/k8s.list <<EOF
deb https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.33/deb /
EOF

第一部分创建 /etc/apt/sources.list.d/k8s.list文件,添加阿里云的 Kubernetes 软件源地址

curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb/Release.key | apt-key add -apt-get update

然后通过 curl下载该版本的 GPG key,并用 apt-key add -导入(⚠️ 注意:新版 Ubuntu 已逐步废弃 apt-key,推荐使用 gpg+ /etc/apt/trusted.gpg.d/,但这里仍兼容老方式)。

apt-get update:更新软件包索引。

apt-mark hold ...:​​锁定这三个包,防止被 apt upgrade 自动升级​​,避免版本不一致导致集群问题。

#apt-get install -y kubelet kubeadm kubectl
apt-get install -y kubelet=1.33.0-1.1 kubeadm=1.33.0-1.1 kubectl=1.33.0-1.1
apt-mark hold kubelet kubeadm kubectl

#- 5.4 #

将补全脚本输出到 /etc/bash_completion.d/目录下,然后通过 source加载使其立即生效。

kubectl completion bash > /etc/bash_completion.d/kubectl
kubeadm completion bash > /etc/bash_completion.d/kubeadm
source /etc/bash_completion.d/kubectl
source /etc/bash_completion.d/kubeadm

#- 5.5 #

crictl config runtime-endpoint unix:///run/cri-dockerd.sock
crictl images

runtime-endpoint指向 cri-dockerd 的 socket 文件:/run/cri-dockerd.sock

这是你使用 ​​cri-dockerd(而不是 containerd)作为容器运行时​​ 的关键配置。

crictl images是测试命令,查看当前能看到的镜像列表。

#- 5.6 # master only

kubeadm config print init-defaults > kubeadm.yaml

kubeadm 是 Kubernetes 官方提供的一个命令行工具,用于快速搭建 Kubernetes 集群(如 Master 节点和 Worker 节点的初始化)。

kubeadm.yaml用于在 kubeadm init 或 kubeadm join 时自定义 Kubernetes 集群的初始化参数

sed -i 's/.*advert.*/  advertiseAddress: 192.168.30.132/g' kubeadm.yaml
sed -i 's/.*name.*/  name: cka-master/g' kubeadm.yaml
Sed-i 's/imageRepo.*/imageRepository: registry.cn-hangzhou.aliyuncs.com\/google_containers/g' kubeadm.yaml
sed -i 's/  criSocket.*/  criSocket: unix:\/\/\/run\/cri-dockerd.sock/' kubeadm.yaml

kubeadm config print init-defaults:输出默认的 init 配置,重定向到 kubeadm.yaml。

接着用 sed修改如下字段:

advertiseAddress: 集群通信 IP(你的 Master 节点 IP,如 192.168.30.130)

name: 节点名称为 cka-master

imageRepository: 使用阿里云的镜像仓库(加速拉取)

criSocket: 指定使用 cri-dockerd 的 socket 路径

modprobe br_netfilter
kubeadm init --config kubeadm.yaml

再次加载 br_netfilter(确保生效)

最后执行:kubeadm init --config kubeadm.yaml,​​正式初始化 Kubernetes Master 节点​

#- 5.7 #

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

将集群的 admin 配置文件拷贝到当前用户的 ~/.kube/config,这样你就能用 kubectl命令控制集群了。

#- 5.8 #

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

部署 Calico 网络插件

#- 5.9 #

kubectl get pod -Akubectl get node

查看pod状态以及node是否ready

#- 5.10 #

kubeadm join 192.168.30.132:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:4376be99ad95b47cc8289ba1ac908358661c85457027b4ff7a1d8911c2f2f522 \--cri-socket=unix:///var/run/cri-dockerd.sock

这是 Worker 节点用来加入集群的命令​​,包括:

集群 API Server 地址

Token(身份令牌)

CA 证书 Hash

指定使用 cri-dockerd 的 socket

这个 token和 hash是示例,实际使用时需要用 kubeadm token create重新生成,或者查看 Master 初始化时输出的 join 命令。

kubectl label nodes cka-worker1 cka-worker2 node-role.kubernetes.io/worker=worker

给 Worker 节点打标签​​,标识它们是“Worker 角色”,方便后续调度 Pod 时区分 Master 和 Worker。

kubectl get nodes

查看节点状态

http://www.lryc.cn/news/617615.html

相关文章:

  • 网络性能优化:Go编程视角 - 从理论到实践的性能提升之路
  • 定制化4G专网架构,满足多行业专属需求
  • 5G NR NTN 在 PHY 层和 MAC 层实现 OAI
  • PCB批量线路板厂家有哪些?
  • 2025面试题——(12)
  • Vibe Coding 自然语言驱动 AI 编程方式
  • Redis类型之Hash
  • AI产品经理手册(Ch12-16)AI Product Manager‘s Handbook学习笔记
  • Vue 中的 Class 与 Style 绑定详解1
  • lesson35:数据库深度解析:从概念到MySQL实战学习指南
  • 面试实战 问题二十三 如何判断索引是否生效,什么样的sql会导致索引失效
  • 【排序算法】⑥快速排序:Hoare、挖坑法、前后指针法
  • 微信小程序常用 API
  • Seata
  • 小杰python高级(three day)——matplotlib库
  • Spark 优化全攻略:从 “卡成 PPT“ 到 “飞一般体验“
  • Vlanif 实验
  • 第16届蓝桥杯Python青少组_省赛_中/高级组_2025年5月真题
  • 国企社招 | 中国邮政2025年社会招聘开启
  • 腾讯前端面试模拟详解
  • Java 之抽象类和接口
  • AIStarter修复macOS 15兼容问题:跨平台AI项目管理新体验
  • docker是什么以及镜像命令详解
  • C++模板的补充
  • 【读代码】微软开源Agentic-RAG深度解析
  • Profile.vue组件详细解析
  • SDH 和 OTN 的帧结构对比
  • 3.数据类型和类型装换
  • Spring-Security-5.7.11升级6.5.2
  • Unity笔记(五)知识补充——场景切换、退出游戏、鼠标隐藏锁定、随机数、委托