Kubernetes (k8s)
以下是一份 Kubernetes (k8s) 基础使用教程,涵盖从环境搭建到核心操作的完整流程,附详细命令和示例:
🚀 一、环境准备(3种方式)
1. 本地开发环境(推荐)
安装 Minikube(单节点集群)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
启动集群(需提前安装 Docker)
minikube start --driver=docker
验证
kubectl get nodes # 应显示一个节点状态 Ready
2. 生产环境
- 云服务:使用托管K8s服务# AWS EKS
eksctl create cluster --name my-cluster --region us-east-1
Google GKE
gcloud container clusters create my-cluster
3. 学习环境
- Play with Kubernetes(免费在线沙盒)
⚙️ 二、核心概念与操作
1. 部署第一个应用
运行Nginx容器
kubectl create deployment nginx-app --image=nginx:1.25
查看Pod(容器组)
kubectl get pods -w # -w 实时监控状态变化
输出示例:
NAME READY STATUS RESTARTS AGE
nginx-app-5d96f8d7b6-2k9jf 1/1 Running 0 25s
2. 暴露服务
创建Service(负载均衡)
kubectl expose deployment nginx-app --port=80 --type=NodePort
获取访问地址
minikube service nginx-app --url # 本地环境
输出:http://192.168.49.2:32456
浏览器打开URL应看到Nginx欢迎页
3. 扩缩容
扩容到3个副本
kubectl scale deployment nginx-app --replicas=3
查看Pod分布
kubectl get pods -o wide
输出:
nginx-app-5d96f8b7b6-2k9jf 1/1 Running 0 2m node1
nginx-app-5d96f8b7b6-8x7pd 1/1 Running 0 10s node2
nginx-app-5d96f8b7b6-qw4k9 1/1 Running 0 10s node1
📁 三、YAML声明式管理
1. 部署文件示例
deploy.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-web
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
resources:
limits:
memory: “128Mi”
cpu: “500m”
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
2. 应用配置
创建资源
kubectl apply -f deploy.yaml
更新配置(修改文件后重新运行)
kubectl apply -f deploy.yaml
删除资源
kubectl delete -f deploy.yaml
🔍 四、日常运维命令
1. 查看资源
kubectl get pods # 查看Pod
kubectl get svc # 查看Service
kubectl get deployments # 查看部署
kubectl describe pod <pod名> # 查看Pod详情
2. 调试与日志
进入Pod的Shell
kubectl exec -it <pod名> – /bin/bash
查看日志
kubectl logs <pod名> -f # -f 实时跟踪日志
端口转发(访问内部服务)
kubectl port-forward svc/web-service 8080:80
浏览器访问 http://localhost:8080
3. 故障排查
查看事件(定位启动失败原因)
kubectl get events --sort-by=.metadata.creationTimestamp
查看节点状态
kubectl top nodes # 需安装Metrics Server
🛠️ 五、进阶操作
1. 配置管理
创建ConfigMap
kubectl create configmap my-config
–from-literal=LOG_LEVEL=debug
–from-file=config.properties
Pod中挂载
spec:
containers:
env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: my-config
key: LOG_LEVEL
volumeMounts:
- name: config-vol
mountPath: /etc/config
volumes:
- name: config-vol
configMap:
name: my-config
2. 存储卷
持久卷声明 (PVC)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
Pod挂载
spec:
containers:
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumes:
- name: data
persistentVolumeClaim:
claimName: mysql-pvc
🚨 六、常见问题解决
1. Pod卡在Pending状态
查看原因
kubectl describe pod <pod名> | grep Events -A20
常见原因:
- 资源不足(CPU/内存)
- 没有可用节点(节点NotReady)
2. 服务无法访问
检查Service选择器是否匹配Pod标签
kubectl describe svc <service名>
验证网络策略
kubectl get networkpolicy
📚 七、学习资源
1.官方文档:kubernetes.io/docs
2.交互式教程:Katacoda Kubernetes
3.命令备忘单:kubectl Cheat Sheet
✅ 快速总结表
提示:生产环境务必配置:
- 资源限制(CPU/内存)
- 就绪探针(Readiness Probe)
- 存活探针(Liveness Probe)
- HPA(自动扩缩容)
掌握以上基础操作后,可进一步学习Ingress、Helm、Operator等高级功能!