Kubernetes(K8s)已经成为容器编排的事实标准。本文将带你从入门到实践,掌握Kubernetes的核心概念和操作。
1. Kubernetes基础
核心概念
# Pod - 最小部署单元
# 包含一个或多个容器
# 共享网络和存储
# Deployment - 管理Pod副本
# 确保指定数量的Pod运行
# 支持滚动更新和回滚
# Service - 服务发现和负载均衡
# ClusterIP - 集群内部访问
# NodePort - 节点端口访问
# LoadBalancer - 负载均衡器
# ConfigMap/Secret - 配置管理
# Volume - 存储管理
# Namespace - 资源隔离
安装Kubernetes
# 使用kubeadm安装(Ubuntu)
# 1. 关闭swap
sudo swapoff -a
# 2. 安装容器运行时
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
# 3. 安装kubeadm/kubelet/kubectl
sudo apt install -y apt-transport-https ca-certificates curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <
2. 核心资源
Pod
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
Deployment
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.21
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
Service
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP # 或 NodePort/LoadBalancer
3. 常用命令
# 集群管理
kubectl cluster-info
kubectl get nodes
kubectl get pods -A
kubectl get services -A
# 资源管理
kubectl apply -f deployment.yaml
kubectl get deployment nginx-deployment
kubectl describe deployment nginx-deployment
kubectl rollout status deployment/nginx-deployment
kubectl rollout undo deployment/nginx-deployment
# 日志查看
kubectl logs nginx-pod
kubectl logs -f nginx-pod
kubectl logs nginx-pod -c container-name
# 进入容器
kubectl exec -it nginx-pod -- /bin/bash
# 端口转发
kubectl port-forward pod/nginx-pod 8080:80
4. 配置管理
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database_url: "mysql://localhost:3306"
log_level: "info"
Secret
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
username: YWRtaW4= # base64编码
password: cGFzc3dvcmQ=
5. 存储管理
PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-volume
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
hostPath:
path: "/mnt/data"
PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
6. 网络策略
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 8080
7. Helm包管理
# 安装Helm
curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt install helm
# 使用Chart
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-mysql bitnami/mysql
8. CI/CD集成
# 使用Argo CD进行GitOps
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/org/repo.git
targetRevision: HEAD
path: k8s/
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
9. 监控与日志
# 部署监控栈
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack
# 查看指标
kubectl top nodes
kubectl top pods
10. 生产环境最佳实践
- 资源限制:设置requests和limits
- 健康检查:配置liveness和readiness探针
- 滚动更新:零停机部署
- 多副本:至少2个副本保证高可用
- 命名空间:按环境或团队隔离
总结
Kubernetes学习曲线较陡,但功能强大。关键要点:
- 掌握核心概念:Pod、Deployment、Service
- 实践操作:搭建本地集群(Minikube、Kind)
- 理解网络:CNI、Service、Ingress
- 存储管理:PV/PVC、StorageClass
📖 进阶学习:学习Operator模式、服务网格(Istio)、以及云原生技术(CNCF Landscape)。