从小白到精通——Kubernetes集群运维实战
一、认识 Kubernetes
Kubernetes(K8s)是一个开源的 容器编排平台,用于自动化部署、扩展和管理容器化应用。
它被设计为 高度可扩展 和 自愈 的系统,广泛应用于微服务架构的管理。
一句话总结:Kubernetes 是“容器编排的引擎”,为你管理海量容器的生命周期。
核心功能:
-
自动化部署与扩展:管理容器集群,自动部署应用
-
容器调度:自动选择最适合的节点运行容器
-
自愈机制:容器故障自动恢复
-
服务发现与负载均衡:自动为容器提供网络访问与负载均衡
-
存储管理:支持多种存储类型的动态挂载
二、Kubernetes 架构概览
+---------------------------------------------------------+ | Kubernetes Master | |---------------------------------------------------------| | API Server | Scheduler | Controller Manager | etcd | +---------------------------------------------------------+ | | v v +---------------------------------------------------------+ | Kubernetes Node | |---------------------------------------------------------| | Kubelet | Kube Proxy | Container Runtime (Docker/Containerd)| +---------------------------------------------------------+
组件介绍:
-
API Server:集群的统一入口,所有操作通过它访问。
-
Scheduler:负责调度容器到合适的节点。
-
Controller Manager:管理集群状态,确保应用在期望状态。
-
etcd:分布式键值数据库,用于存储所有集群的配置信息和状态。
-
Kubelet:负责管理节点上的容器。
-
Kube Proxy:负责集群内部的负载均衡和网络规则。
三、安装 Kubernetes(使用 kubeadm)
1. 环境准备
每台主机需具备:
-
CPU ≥ 2 核
-
内存 ≥ 2GB
-
系统:Ubuntu 20.04+ / CentOS 7+
禁用 swap:
sudo swapoff -a sudo sed -i '/swap/d' /etc/fstab
2. 安装依赖
sudo apt update sudo apt install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt update sudo apt install -y kubelet kubeadm kubectl sudo systemctl enable kubelet
3. 初始化 Master 节点
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
初始化完成后,执行:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
4. 安装网络插件(Flannel)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
5. 加入 Worker 节点
获取加入命令:
kubeadm token create --print-join-command
在 Worker 节点执行:
sudo kubeadm join <Master-Node-IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
四、Kubernetes 核心资源类型
1. Pods(最小部署单位)
一个 Pod 可以包含一个或多个容器。Pod 内的容器共享网络、存储等资源。
创建一个单容器 Pod:
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80
部署:
kubectl apply -f nginx-pod.yaml
查看 Pod 状态:
kubectl get pods
2. Deployments(部署控制)
Deployment 负责管理应用的副本集,自动化滚动更新。
创建一个 Deployment:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80
应用:
kubectl apply -f nginx-deploy.yaml
查看 Deployment:
kubectl get deployments
参考案例:www.tbhzr.cn
五、Kubernetes 服务(Services)
1. ClusterIP(集群内部访问)
默认类型,服务只能在集群内访问。
创建服务:
apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80
部署:
kubectl apply -f nginx-service.yaml
查看服务:
kubectl get svc
2. NodePort(外部访问)
暴露服务到每个节点的固定端口。
apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 30001 type: NodePort
暴露后,可以通过 http://<NodeIP>:30001 访问服务。
六、Kubernetes 存储管理(Volumes)
1. PersistentVolume(PV)
创建存储卷:
apiVersion: v1 kind: PersistentVolume metadata: name: mypv spec: capacity: storage: 2Gi accessModes: - ReadWriteOnce hostPath: path: /mnt/data
2. PersistentVolumeClaim(PVC)
请求存储资源:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
七、Kubernetes 集群扩展与弹性伸缩
1. Horizontal Pod Autoscaler(HPA)
根据负载自动扩容 Pod。
创建 HPA:
kubectl autoscale deployment nginx-deploy --cpu-percent=80 --min=1 --max=5
查看 HPA:
kubectl get hpa
2. Vertical Pod Autoscaler(VPA)
自动调整 Pod 资源请求和限制。
安装 VPA:
kubectl apply -f https://github.com/kubernetes/autoscaler/blob/master/vertical-pod-autoscaler/deploy/vertical-pod-autoscaler-vpa.yaml
八、Kubernetes 升级与版本管理
1. 升级 Kubernetes 组件
检查当前版本:
kubectl version
更新 kubeadm:
sudo apt-get install -y kubeadm
执行集群升级:
sudo kubeadm upgrade plan sudo kubeadm upgrade apply <version>
2. 管理 kubeconfig 文件
复制 kubeconfig 文件:
scp user@master:/etc/kubernetes/admin.conf ~/.kube/config
九、Kubernetes 健康检查与日志管理
1. Liveness & Readiness Probes(健康检查)
确保容器健康,自动重启失败的容器。
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 livenessProbe: httpGet: path: /healthz port: 80 initialDelaySeconds: 3 periodSeconds: 3 readinessProbe: httpGet: path: /readiness port: 80 initialDelaySeconds: 5 periodSeconds: 5
2. 查看 Pod 日志
查看日志:
kubectl logs <pod-name>
查看实时日志:
kubectl logs -f <pod-name>
十、Kubernetes 安全与访问控制
1. RBAC(角色与权限控制)
创建角色:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list"]
绑定角色:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-pods namespace: default subjects: - kind: User name: "johndoe" apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io
十一、Kubernetes 高可用架构
1. 多主节点配置(HA)
配置多个 Master 节点,提高高可用性。
2. etcd 集群
为保证 etcd 高可用,部署 3 个以上节点,使用集群模式。
十二、Kubernetes 与 CI/CD 集成
1. Jenkins 与 Kubernetes 集成
通过 Jenkins 动态创建 Pod 来执行 CI/CD 流程。
配置 Jenkins 插件:
-
Kubernetes Plugin
-
Docker Plugin
十三、Kubernetes 与 Helm 集成
Helm 是 Kubernetes 的包管理工具,简化应用部署。
安装 Helm:
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
部署应用:
helm install nginx stable/nginx-ingress
十四、Kubernetes 日志与监控
1. Prometheus 与 Grafana 集成
使用 Prometheus 收集指标,使用 Grafana 可视化。
2. 集群资源监控
安装 Metrics Server:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.4.4/components.yaml
查看资源:
kubectl top nodes kubectl top pods
十五、Kubernetes 性能优化与调优
| 项目 | 建议 |
|---|---|
| 节点资源 | 控制节点资源分配,避免 OOM |
| Pod 调度 | 使用资源限制(requests/limits) |
| 网络 | 配置网络策略,减少不必要的流量 |
| 存储 | 使用合适的存储类型,避免 I/O 瓶颈 |
十六、Kubernetes 集群管理工具
1. Rancher
通过 Rancher 提供简单的 UI 来管理 Kubernetes 集群。
2. K9s
命令行界面的 Kubernetes 管理工具,增强命令行体验。
十七、Kubernetes 高级功能
1. StatefulSet(有状态应用)
适用于有状态应用(如数据库)。
apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: serviceName: "mysql" replicas: 3 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 volumeMounts: - name: data mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 1Gi
十八、Kubernetes 调试与故障排查
-
查看 Pod 日志:
kubectl logs <pod-name> -
查看 Pod 描述:
kubectl describe pod <pod-name> -
查看集群状态:
kubectl get nodes -
查看资源使用情况:
kubectl top pod
十九、Kubernetes 备份与恢复
1. 使用 Velero 进行备份与恢复
Velero 是 Kubernetes 的备份解决方案,支持完整集群与持久化存储备份。
2. 数据持久化备份
通过卷快照或其他备份工具定期备份数据卷。
二十、完整实战项目:企业级 Kubernetes 集群
目标:
搭建一个高可用的 Kubernetes 集群,支持自动扩容、CI/CD 集成、存储与监控功能。
更多推荐
所有评论(0)