《K3s 单节点完全离线生产环境部署 & 运维宝典》
目录
- K3s 安装与环境初始化
- 镜像全流程:拉取 → 导出 → 离线导入
- 配置 kubectl + 镜像仓库 Secret
- 应用部署与发版标准流程
- 日常运维常用命令(含 alias)
- 网络 & Traefik 终极优化(纯 443 + 宿主机网络)
- 防火墙最优配置(生产真实使用)
- 核弹级彻底卸载与残留清理
────────────────────
1. K3s 安装与环境初始化
# 停止旧服务
sudo systemctl stop k3s
# 下载固定版本(你真实使用的版本)
wget https://get.k3s.io -O install.sh
wget https://github.com/k3s-io/k3s/releases/download/v1.33.6+k3s1/k3s
wget https://github.com/k3s-io/k3s/releases/download/v1.33.6+k3s1/sha256sum-amd64.txt
# 验证完整性
sha256sum -c sha256sum-amd64.txt
# 安装二进制
sudo cp k3s /usr/local/bin/k3s
sudo chmod 755 /usr/local/bin/k3s
# 正式安装(完全离线模式)
sudo INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh
# 开机自启
sudo systemctl enable --now k3s
2. 镜像全流程:拉取 → 导出 → 离线导入
2.1 有网机器(执行一次就行)
docker login registry.cn-beijing.aliyuncs.com
# 示例:只拉前端和后端两类镜像(实际替换成你自己的)
docker pull registry.cn-beijing.aliyuncs.com/your-repo/frontend:latest
docker pull registry.cn-beijing.aliyuncs.com/your-repo/backend:latest
mkdir -p /home/offline-images
docker save -o /home/offline-images/frontend.tar registry.cn-beijing.aliyuncs.com/your-repo/frontend:latest
docker save -o /home/offline-images/backend.tar registry.cn-beijing.aliyuncs.com/your-repo/backend:latest
2.2 离线机器导入
sudo k3s ctr images import /home/offline-images/frontend.tar
sudo k3s ctr images import /home/offline-images/backend.tar
# 验证
sudo k3s ctr images list | grep -E "(frontend|backend)"
3. 配置 kubectl + 镜像仓库 Secret
# kubectl 配置
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
chmod 600 ~/.kube/config
unset KUBECONFIG
echo 'export KUBECONFIG=~/.kube/config' >> ~/.bashrc
source ~/.bashrc
# 创建镜像拉取 Secret(替换为你的命名空间)
kubectl create secret docker-registry registry-aliyun \
--docker-server=https://registry.cn-beijing.aliyuncs.com \
--docker-username=你的用户名 \
--docker-password='你的密码' \
--namespace=prod \
--dry-run=client -o yaml | kubectl apply -f -
4. 应用部署与发版标准流程(prod 命名空间)
# 首次部署
kubectl apply -f 01-namespace.yaml
kubectl apply -f 02-backend.yaml
kubectl apply -f 03-frontend.yaml
kubectl apply -f 04-ingress-443.yaml
# 日常发版
kubectl rollout restart deployment backend -n prod
kubectl rollout restart deployment frontend -n prod
5. 日常运维常用命令(直接加 alias)
# 加到 ~/.bashrc
alias k='kubectl'
alias kgp='kubectl get pod -n prod'
alias klf='kubectl logs -f -l app=frontend -n prod'
alias klb='kubectl logs -f -l app=backend -n prod'
alias kimg='sudo k3s ctr images list'
# 常用
kubectl get pod -n prod -o wide
kubectl describe pod -l app=frontend -n prod
kubectl exec -it deploy/backend -n prod -- sh
6. 网络 & Traefik 终极优化(纯 443 + 宿主机网络)
kubectl edit deployment traefik -n kube-system
# 只改这三行
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
tolerations:
- operator: Exists
# 纯 443 Ingress 示例
cat > /tmp/ingress-443.yaml <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
namespace: prod
annotations:
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
tls:
- {}
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend
port:
number: 80
EOF
kubectl apply -f /tmp/ingress-443.yaml
7. 防火墙最优配置(生产真实使用)
sudo firewall-cmd --permanent --new-zone=k3s
sudo firewall-cmd --permanent --zone=k3s --add-interface=cni0 2>/dev/null || true
sudo firewall-cmd --permanent --zone=k3s --add-interface=flannel.1 2>/dev/null || true
sudo firewall-cmd --permanent --zone=k3s --set-target=ACCEPT
sudo firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16
sudo firewall-cmd --permanent --zone=trusted --add-source=10.43.0.0/16
sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --reload
sudo systemctl restart k3s
8. 核弹级彻底卸载与残留清理
sudo /usr/local/bin/k3s-uninstall.sh || true
sudo rm -rf /var/lib/rancher/k3s /etc/rancher /var/lib/cni /etc/cni /opt/cni
sudo rm -rf /var/lib/containerd /run/containerd /var/lib/kubelet
sudo rm -f /usr/local/bin/k3s* /usr/local/bin/ctr*
sudo iptables -F && sudo iptables -t nat -F sudo iptables -t mangle -F sudo iptables -X
sudo ip link delete cni0 flannel.1 kube-ipvs0 2>/dev/null || true
评论区