Kubernetes实战:从部署到实用案例
随着容器技术的兴起,Kubernetes(简称 K8s)作为目前最主流的容器编排系统,已经被广泛应用于微服务架构、云原生开发、DevOps 体系等多个领域。然而,仅仅掌握 Kubernetes 的基础概念远远不够,实践操作和实战经验,才是真正上手的关键。本文将带你从 0 到 1,逐步搭建一个可用的 Kubernetes 应用环境,并通过实战案例掌握核心资源对象的使用方法。操作命令查看 pod查看服
一、前言
随着容器技术的兴起,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
九、常用命令总结
操作 | 命令 |
---|---|
查看 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等,是一本非常全面的实践指南。
更多推荐
所有评论(0)