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

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

#- 5.1 #

bash 复制代码
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab

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

#- 5.2 #

bash 复制代码
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
modprobe br_netfilter

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

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

bash 复制代码
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
EOF

sudo 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 #

bash 复制代码
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 软件源地址

bash 复制代码
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 自动升级,避免版本不一致导致集群问题。

bash 复制代码
#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加载使其立即生效。

bash 复制代码
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 #

bash 复制代码
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

bash 复制代码
kubeadm config print init-defaults > kubeadm.yaml

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

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

bash 复制代码
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 路径

bash 复制代码
modprobe br_netfilter
kubeadm init --config kubeadm.yaml

再次加载 br_netfilter(确保生效)

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

#- 5.7 #

bash 复制代码
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 #

bash 复制代码
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

​部署 Calico 网络插件

#- 5.9 #

bash 复制代码
kubectl get pod -A

kubectl get node

查看pod状态以及node是否ready

#- 5.10 #

bash 复制代码
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 命令。

bash 复制代码
kubectl label nodes cka-worker1 cka-worker2 node-role.kubernetes.io/worker=worker

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

bash 复制代码
kubectl get nodes

查看节点状态

相关推荐
运维老郭3 小时前
【K8s运维实战】Kubernetes临时存储卷实战:emptyDir核心用法与gitRepo弃用迁移指南
运维·云原生·kubernetes
AAA@峥7 小时前
容器数据不丢失:Docker 分层存储 + Volume 共享、备份迁移完整指南
运维·docker·容器
十年磨一剑~8 小时前
docker 为何每次 docker tag才能 docker push
docker·容器·eureka
gs8014010 小时前
记一次多 Agent 架构在单节点 K8s 触发的 PID 耗尽与 Pod 驱逐(Evicted)大摸排
容器·架构·kubernetes
bukeyiwanshui11 小时前
20260701 k8s Metric Server
容器·贪心算法·kubernetes
江湖有缘11 小时前
基于Docker环境部署tillywork开源工作管理工具
docker·容器·开源
鸿儒51713 小时前
MR-50国产化GPU docker配置方法
docker·容器·mr
Zhu75815 小时前
在k8s集群部署ApacheHadoop单节点单数据副本
云原生·容器·kubernetes
Akamai中国15 小时前
Akamai收购安全企业浏览器提供商LayerX
人工智能·云原生·云计算·云服务