一、前言

随着容器技术的兴起,Kubernetes(简称 K8s)作为目前最主流的容器编排系统,已经被广泛应用于微服务架构、云原生开发、DevOps 体系等多个领域。然而,仅仅掌握 Kubernetes 的基础概念远远不够,实践操作和实战经验,才是真正上手的关键。

本文将带你从 0 到 1,逐步搭建一个可用的 Kubernetes 应用环境,并通过实战案例掌握核心资源对象的使用方法。


二、Kubernetes 环境搭建(以 Minikube 为例)

在学习 Kubernetes 实战之前,我们需要一个本地环境。Minikube 是一个轻量级的 Kubernetes 实现,非常适合学习和测试。

1. 安装 Minikube

macOS / Linux:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
Windows:

下载地址:https://minikube.sigs.k8s.io/docs/start/

2. 启动本地集群

minikube start

3. 验证集群状态

kubectl get nodes

输出示例:

NAME       STATUS   ROLES           AGE     VERSION
minikube   Ready    control-plane   3m34s   v1.29.0

三、实战一:部署 Nginx 服务

1. 创建 Deployment

# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.21.6
          ports:
            - containerPort: 80
kubectl apply -f nginx-deployment.yaml

2. 暴露 Service

kubectl expose deployment nginx-deployment --type=NodePort --port=80

查看访问端口:

kubectl get svc

使用命令打开浏览器访问:

minikube service nginx-deployment

四、实战二:配置 ConfigMap 管理配置

Kubernetes 推荐将配置与容器镜像解耦,我们可以使用 ConfigMap 来注入配置信息。

1. 创建配置文件

# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  index.html: |
    <html>
    <head><title>My Nginx Site</title></head>
    <body><h1>Hello from ConfigMap!</h1></body>
    </html>
kubectl apply -f configmap.yaml

2. 使用配置挂载容器

修改 Deployment:

# nginx-deployment-with-configmap.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-config-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-config
  template:
    metadata:
      labels:
        app: nginx-config
    spec:
      containers:
        - name: nginx
          image: nginx
          volumeMounts:
            - name: html
              mountPath: /usr/share/nginx/html/index.html
              subPath: index.html
      volumes:
        - name: html
          configMap:
            name: nginx-config
kubectl apply -f nginx-deployment-with-configmap.yaml

五、实战三:Pod 自动扩缩容(HPA)

Kubernetes 的自动扩缩容机制(HPA)能根据 CPU 或内存使用率自动调整副本数量。

1. 安装 Metrics Server

minikube addons enable metrics-server

2. 创建 HPA

kubectl autoscale deployment nginx-deployment --cpu-percent=50 --min=1 --max=5

查看 HPA 状态:

kubectl get hpa

六、实战四:滚动更新与版本回滚

1. 更新镜像

kubectl set image deployment/nginx-deployment nginx=nginx:1.25.0

查看状态:

kubectl rollout status deployment/nginx-deployment

2. 版本回滚

如果更新失败:

kubectl rollout undo deployment/nginx-deployment

七、实战五:Job 与定时任务 CronJob

Kubernetes 支持短生命周期的 Job,以及类似 Linux crontab 的 CronJob。

1. Job 示例

# job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: hello-job
spec:
  template:
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["echo", "Hello from Kubernetes!"]
      restartPolicy: Never
kubectl apply -f job.yaml

2. CronJob 示例

# cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello-cron
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            command: ["date"]
          restartPolicy: OnFailure
kubectl apply -f cronjob.yaml

八、实战六:Ingress 实现统一入口

Ingress 控制器可以让你通过一个统一入口访问多个服务。

1. 启用 Ingress

minikube addons enable ingress

2. 创建 Ingress 规则

# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: myapp.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-deployment
            port:
              number: 80

添加 hosts 映射(本地开发):

127.0.0.1 myapp.local

访问:http://myapp.local/


九、常用命令总结

操作 命令
查看 pod kubectl get pods
查看服务 kubectl get svc
查看部署 kubectl get deployment
查看所有资源 kubectl get all
查看日志 kubectl logs <pod-name>
进入容器 kubectl exec -it <pod-name> -- /bin/sh
删除资源 kubectl delete -f <file.yaml>
YAML 生成 kubectl create deployment NAME --image=IMAGE --dry-run=client -o yaml

十、总结

本文通过部署 Nginx 服务、配置 ConfigMap、设置 HPA、使用 Ingress 等多个实战案例,展示了 Kubernetes 的核心能力和使用方式。从中你应该可以掌握以下几点:

  • 如何定义和部署常见资源对象(Deployment、Service、ConfigMap)
  • 如何使用 HPA、Job、CronJob 实现自动化和任务调度
  • 如何通过 Ingress 实现统一入口管理

Kubernetes 的生态庞大,实战是最好的学习方式。建议大家继续尝试 StatefulSet、Volume、Secrets、网络策略等更多高级特性,深入理解 Kubernetes 在真实生产环境中的落地方法。

⭐️ 好书推荐

《Kubernetes实战(原书第2版) 》

在这里插入图片描述

【内容简介】

本书是管理大规模容器编排的大师级读物,涵盖了所有最新的Kubernetes功能、工具和弃用内容。在本书中,四位在分布式系统、企业应用开发和开源领域有着丰富经验的Kubernetes专家对使用 Kubernetes 容器编排系统构建应用进行了全程指导。本书内容丰富,涵盖开发者工作流、监控和度量指标、配置管理、持续集成和测试、版本控制与发布、应用程序的全球化部署、资源管理、网络、Pod安全、集群策略与治理、多集群管理、外部服务集成、机器学习、在Kubernetes上构建高层应用的模式、状态管理和有状态应用、准入控制与授权、GitOps、安全性、混沌测试、实现Operator等,是一本非常全面的实践指南。

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐