Appearance
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 nodes2. 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.yaml3. 云服务提供商
- 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 services2. 配置文件
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: NodePortbash
# 应用配置文件
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml3. 扩缩容
bash
# 手动扩缩容
kubectl scale deployment myapp --replicas=5
# 自动扩缩容
kubectl autoscale deployment myapp --min=3 --max=10 --cpu-percent=804. 滚动更新
bash
# 滚动更新
kubectl set image deployment myapp myapp=nginx:1.19.0
# 查看滚动更新状态
kubectl rollout status deployment myapp
# 回滚
kubectl rollout undo deployment myappKubernetes 在 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. 安全问题
- 权限配置
- 敏感信息泄露
- 容器漏洞
学习资源
实践练习
- 安装和配置 Kubernetes
- 部署一个简单的应用
- 配置服务和 ingress
- 实现滚动更新
- 集成 CI/CD 流水线