目 录CONTENT

文章目录

K3s 单节点完全离线生产环境部署 & 运维宝典

BKUN
2025-12-13 / 0 评论 / 0 点赞 / 400 阅读 / 1,006 字

《K3s 单节点完全离线生产环境部署 & 运维宝典》

目录

  1. K3s 安装与环境初始化
  2. 镜像全流程:拉取 → 导出 → 离线导入
  3. 配置 kubectl + 镜像仓库 Secret
  4. 应用部署与发版标准流程
  5. 日常运维常用命令(含 alias)
  6. 网络 & Traefik 终极优化(纯 443 + 宿主机网络)
  7. 防火墙最优配置(生产真实使用)
  8. 核弹级彻底卸载与残留清理

────────────────────

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
0

评论区