Skip to content

Kubernetes

什么是 Kubernetes

Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。它由 Google 开发并捐赠给 Cloud Native Computing Foundation(CNCF)。Kubernetes 可以管理容器化应用的整个生命周期,包括部署、扩展、滚动更新、服务发现和负载均衡等。

Kubernetes 的特点

1. 自动部署和扩展

  • 自动化容器部署
  • 水平扩展
  • 自动故障恢复

2. 服务发现和负载均衡

  • 内置服务发现
  • 负载均衡
  • DNS 解析

3. 存储编排

  • 支持多种存储后端
  • 动态存储 provisioning
  • 存储卷管理

4. 自动滚动更新

  • 零停机部署
  • 滚动更新
  • 回滚能力

5. 配置管理

  • 配置和密钥管理
  • 配置热更新
  • 环境变量管理

Kubernetes 的基本概念

1. 集群(Cluster)

  • 由多个节点组成
  • 运行容器化应用
  • 管理整个系统

2. 节点(Node)

  • 集群中的工作机器
  • 可以是物理机或虚拟机
  • 运行容器

3. Pod

  • 最小的部署单元
  • 包含一个或多个容器
  • 共享网络和存储

4. 服务(Service)

  • 提供稳定的网络端点
  • 负载均衡
  • 服务发现

5. 部署(Deployment)

  • 管理 Pod 的副本
  • 滚动更新
  • 扩缩容

6. 命名空间(Namespace)

  • 资源隔离
  • 权限控制
  • 环境隔离

安装 Kubernetes

1. Minikube(本地开发)

bash
# 安装 Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 启动 Minikube
minikube start

# 验证安装
kubectl get nodes

2. kubeadm(生产环境)

bash
# 安装 kubeadm
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

# 初始化集群
sudo kubeadm init

# 配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 安装网络插件
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

3. 云服务提供商

  • Amazon EKS
  • Google GKE
  • Microsoft AKS
  • 阿里云 ACK

Kubernetes 基本操作

1. 部署应用

bash
# 创建部署
kubectl create deployment myapp --image=nginx

# 查看部署
kubectl get deployments

# 查看 Pod
kubectl get pods

# 暴露服务
kubectl expose deployment myapp --port=80 --type=NodePort

# 查看服务
kubectl get services

2. 配置文件

yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: nginx:latest
        ports:
        - containerPort: 80

# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  selector:
    app: myapp
  ports:
  - port: 80
    targetPort: 80
  type: NodePort
bash
# 应用配置文件
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

3. 扩缩容

bash
# 手动扩缩容
kubectl scale deployment myapp --replicas=5

# 自动扩缩容
kubectl autoscale deployment myapp --min=3 --max=10 --cpu-percent=80

4. 滚动更新

bash
# 滚动更新
kubectl set image deployment myapp myapp=nginx:1.19.0

# 查看滚动更新状态
kubectl rollout status deployment myapp

# 回滚
kubectl rollout undo deployment myapp

Kubernetes 在 CI/CD 中的应用

1. 持续部署

  • 自动化部署到 Kubernetes
  • 滚动更新
  • 零停机部署

2. 环境管理

  • 多环境部署(开发、测试、生产)
  • 环境隔离
  • 配置管理

3. 集成 CI 系统

  • 与 Jenkins、GitHub Actions 等集成
  • 自动化测试和部署
  • 快速反馈

4. 监控和日志

  • 集成监控系统
  • 日志收集和分析
  • 性能监控

Kubernetes 最佳实践

1. 资源管理

  • 设置资源请求和限制
  • 合理配置副本数
  • 使用 Horizontal Pod Autoscaler

2. 安全

  • 使用命名空间隔离
  • 配置 RBAC
  • 使用 Secrets 管理敏感信息
  • 限制 Pod 权限

3. 存储

  • 合理使用存储类型
  • 配置存储卷
  • 考虑数据持久化

4. 网络

  • 合理配置网络策略
  • 使用 Ingress 管理外部访问
  • 考虑网络性能

5. 监控和日志

  • 集成 Prometheus 和 Grafana
  • 使用 ELK 或 EFK 堆栈
  • 配置健康检查

Kubernetes 常见问题

1. 集群管理

  • 节点故障
  • 网络问题
  • 资源不足

2. 部署问题

  • 镜像拉取失败
  • 资源不足
  • 配置错误

3. 性能问题

  • 资源配置不当
  • 网络延迟
  • 存储性能

4. 安全问题

  • 权限配置
  • 敏感信息泄露
  • 容器漏洞

学习资源

实践练习

  1. 安装和配置 Kubernetes
  2. 部署一个简单的应用
  3. 配置服务和 ingress
  4. 实现滚动更新
  5. 集成 CI/CD 流水线

基于 VitePress 的本地知识库