
适用人群:开发、运维、SRE、DevOps 工程师 目标:掌握 K8s 核心概念、架构原理、实战操作与生产最佳实践 前置知识:Docker 基础、Linux 命令、网络基础

💡 核心思想:声明式 API + 控制器模式(Reconciliation Loop)

一个或多个紧密耦合的容器共享网络/存储
短暂性:IP 会变,随时可能被重建
YAML 示例:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80确保指定数量的 Pod 副本始终运行
支持滚动更新、回滚、扩缩容
YAML 示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25为动态 Pod 提供固定 IP 和 DNS 名称
类型:
ClusterIP(默认):集群内部访问NodePort:通过 <NodeIP>:<Port> 访问LoadBalancer:云厂商提供外网 LBExternalName:CNAME 到外部服务YAML 示例:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancerConfigMap:存储非敏感配置(如环境变量、配置文件)
Secret:存储敏感信息(Base64 编码,建议配合加密)
# Secret 示例
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
username: YWRtaW4= # echo -n "admin" | base64
password: MWYyZDFlMmU2N2Rm逻辑分区,避免命名冲突
默认 Namespace:default, kube-system, kube-public
创建命令:
kubectl create namespace dev
kubectl get pods -n dev # 指定命名空间# 安装 Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 启动集群
minikube start --driver=docker
# 验证
kubectl get nodes
minikube dashboard # 打开 Web UI# 安装 Kind
go install sigs.k8s.io/kind@v0.20.0
# 创建集群
kind create cluster --name my-cluster
# 验证
kubectl cluster-info
# app-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: app
image: nginx:alpine
ports:
- containerPort: 80# app-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort# 部署
kubectl apply -f app-deploy.yaml
kubectl apply -f app-svc.yaml
# 获取访问地址(Minikube)
minikube service web-service --url
# 或端口转发
kubectl port-forward svc/web-service 8080:80
# 访问 http://localhost:8080spec:
containers:
- name: app
image: my-app
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 2# PVC 示例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10GiapiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80# 安装 Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 部署 MySQL
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-mysql bitnami/mysql资源请求 & 限制:
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"亲和性 & 反亲和性:避免单点故障
Horizontal Pod Autoscaler (HPA):基于指标自动扩缩容
kubectl applyPending?kubectl describe podkubectl describe nodekubectl run -it --rm debug --image=busybox --restart=Never -- nslookup web-servicekubectl logs <pod> --previous
📚 推荐资源:
Kubernetes 不是终点,而是云原生旅程的起点。掌握它,你将:
记住: “Don’t learn Kubernetes to run Kubernetes. Learn Kubernetes to build resilient systems.”
附:速查 Cheat Sheet 📥 下载 PDF 版命令速查表 🐙 GitHub 示例 YAML 仓库
现在,打开终端,输入 kubectl get nodes,开启你的 K8s 之旅吧! ☸️