博主头像

人間になりたい!!!!!


皖ICP备2025096275号

K3s 专题向研究 ep3: 快速部署 Docker 镜像

前言

在搭建好 K3s Master, Worker 与私有 Docker 镜像站后, 我们就该将自己开发的程序交付给 K3s 进行集群化部署. 这篇文章就记录了博主将程序交付 K3s 部署运行的全过程

  • 本教程也同样适用于 Kubernets, 即 K8s
  • 由于博主刚开始研究 K3s, 故本文可能会出现的问题包括但不限于各种低级错误, 十分不严谨的专业用语, 还请各路大佬轻喷

搭建需求

  • 已部署的 K3s Master 与至少一个 Worker 节点
  • 私有 Harbor 站点
  • 已编译并上传至 Harbor 的 Docker 镜像

开整

1. 编写 Kubernets 部署清单

与 Docker 类似, 每一份 Kubernets 程序都需要一份清单文件来描述你想创建的资源对象, 让 Kubernets 的控制平面 (Control Panel) 来负责让集群的实际状态不断地接近并维持这个期望状态

如果您不了解如何编写部署清单, 可以看看 这篇文章
  • 参照这份示例文件, 编写您的 Kubernets 部署清单
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 2   # 运行2个副本
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1.0.0   # 根据你实际使用的镜像名调整
        imagePullPolicy: IfNotPresent   # 如果本地已有镜像就不拉取
        ports:
        - containerPort: 8080
          name: http
        # 健康检查(如果你的程序实现了 /health endpoint)
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 10
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
  - port: 80          # 集群内访问的端口
    targetPort: 8080  # 容器的端口
    protocol: TCP
  type: ClusterIP     # 集群内部访问,如改为 NodePort 可对外暴露
注意: 在给出的这份示例配置文件中并没有给出挂载点等配置, 您需要继续进行编写, 而不是直接使用这份不完整的示例文件

2. 推送至 K3s

  • 在 Master 中应用该 YAML 文件
kubectl apply -f myapp-deployment.yaml

如果您的控制台有类似于这样的输出, 则证明应用成功

deployment.apps/myapp created
service/myapp-service created
configmap/myapp-config created
Warning: annotation "kubernetes.io/ingress.class" is deprecated, please use 'spec.ingressClassName' instead
ingress.networking.k8s.io/myapp-ingress created
  • 检查 Pod 状态
kubectl get pods -o wide

您应当看到如下所示的输出

NAME                            READY   STATUS             RESTARTS   AGE    IP          NODE          NOMINATED NODE   READINESS GATES
myapp-8667bb46f9-mzxf8          0/1     ImagePullBackOff   0          111s   10.42.1.5   k3s-worker1   <none>           <none>
  • 检查 Service
kubectl get svc myapp-service

您应当看到如下所示的输出

NAME                   TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGEvice 
heart-mirror-service   ClusterIP   10.43.42.37   <none>        8080:80/TCP    4m19s
  • 检查 Pod 状态
kubectl get pods -l app=myapp

您应当看到如下所示的输出

NAME                            READY   STATUS    RESTARTS   AGE
myapp-674b9fdf7b-7d669   1/1     Running   0          28s
  • 查看 Pod 日志
kubectl logs myapp-674b9fdf7b-7d669
如果您的 Pod 状态不是 Running, 您应当在 kubectl logs 后添加 --previous 参数来检查历史日志, 或使用 kubectl describe pod myapp-674b9fdf7b-7d669 来查看具体错误原因
  • 使用 :80 访问后端, 如果正常, 则搭建阶段到此结束

至此, 您的 Kubernets 集群就启动完成了


后记

本人非专业 Kubernets 运维人员, 如有疏漏或错误, 请指出! 如果觉得文章写得不错, 请分享给有需要的人, 感谢阅读.

K3s 专题向研究 ep3: 快速部署 Docker 镜像
https://blog.nanami.tech/archives/281/
本文作者 Madobi Nanami
发布时间 2026-04-11
许可协议 CC BY-NC-SA 4.0
发表新评论