随着容器技术的兴起,Kubernetes(简称 K8s)作为目前最主流的容器编排系统,已经被广泛应用于微服务架构、云原生开发、DevOps 体系等多个领域。然而,仅仅掌握 Kubernetes 的基础概念远远不够,实践操作和实战经验,才是真正上手的关键。
本文将带你从 0 到 1,逐步搭建一个可用的 Kubernetes 应用环境,并通过实战案例掌握核心资源对象的使用方法。
在学习 Kubernetes 实战之前,我们需要一个本地环境。Minikube 是一个轻量级的 Kubernetes 实现,非常适合学习和测试。
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
下载地址:https://minikube.sigs.k8s.io/docs/start/
minikube start
kubectl get nodes
输出示例:
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 3m34s v1.29.0
# 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
kubectl expose deployment nginx-deployment --type=NodePort --port=80
查看访问端口:
kubectl get svc
使用命令打开浏览器访问:
minikube service nginx-deployment
Kubernetes 推荐将配置与容器镜像解耦,我们可以使用 ConfigMap 来注入配置信息。
# 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
修改 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
Kubernetes 的自动扩缩容机制(HPA)能根据 CPU 或内存使用率自动调整副本数量。
minikube addons enable metrics-server
kubectl autoscale deployment nginx-deployment --cpu-percent=50 --min=1 --max=5
查看 HPA 状态:
kubectl get hpa
kubectl set image deployment/nginx-deployment nginx=nginx:1.25.0
查看状态:
kubectl rollout status deployment/nginx-deployment
如果更新失败:
kubectl rollout undo deployment/nginx-deployment
Kubernetes 支持短生命周期的 Job,以及类似 Linux crontab 的 CronJob。
# 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
# 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 控制器可以让你通过一个统一入口访问多个服务。
minikube addons enable 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/
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> | |
kubectl create deployment NAME --image=IMAGE --dry-run=client -o yaml |
本文通过部署 Nginx 服务、配置 ConfigMap、设置 HPA、使用 Ingress 等多个实战案例,展示了 Kubernetes 的核心能力和使用方式。从中你应该可以掌握以下几点:
Kubernetes 的生态庞大,实战是最好的学习方式。建议大家继续尝试 StatefulSet、Volume、Secrets、网络策略等更多高级特性,深入理解 Kubernetes 在真实生产环境中的落地方法。
《Kubernetes实战(原书第2版) 》

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