Kubernetes(常简称为 K8s)是一个开源的容器编排平台,最初由谷歌设计,现在由云原生计算基金会(CNCF)维护和发展。它旨在自动化容器化应用程序的部署、扩展和管理。
概述
Kubernetes 提供了一个平台,用于运行和管理容器化的应用程序。它支持集群管理、负载均衡、自动伸缩、自愈能力、服务发现和配置管理等功能,是目前最流行的容器编排工具。
主要功能
-
自动化部署和复制
- 自动部署和管理容器,确保应用程序在集群中的多个副本保持一致。
-
负载均衡和服务发现
- 自动为容器分配 IP 地址并配置负载均衡器,使应用程序可以轻松发现和访问彼此。
-
存储编排
- 挂载存储系统,如本地存储、公共云提供商的存储、NFS、GlusterFS 等到容器中。
-
自愈能力
- 自动重新启动失败的容器、替换被杀死的容器并在节点死亡时重新调度容器。
-
自动伸缩
- 根据 CPU 使用情况或其他指标,自动扩展或缩减容器的副本数量。
-
配置管理和密钥管理
- 管理应用程序的配置和敏感信息,如密码、OAuth 令牌等。
架构
Kubernetes 的架构主要由以下几个组件构成:
-
主节点(Master Node)
- API 服务器(kube-apiserver):集群的入口点,处理 RESTful API 调用。
- 调度器(kube-scheduler):负责将待调度的容器分配到合适的工作节点。
- 控制器管理器(kube-controller-manager):负责集群状态的管理和维护。
- etcd:键值存储,用于保存集群的所有数据。
-
工作节点(Worker Node)
- kubelet:与主节点通信,管理本地容器的生命周期。
- Container runtime:如 Docker 或 CRI-O,负责拉取镜像并运行容器。
- kube-proxy:实现网络代理和负载均衡功能。
-
附加组件
- Dashboard:Kubernetes 集群的 Web UI。
- Heapster:资源监控和指标采集。
- Cluster DNS:为容器提供 DNS 服务。
核心概念
-
Pod
- Kubernetes 中的最小部署单元,一个 Pod 可以包含一个或多个容器,共享网络和存储资源。
-
Service
- 定义一组 Pod 的访问策略,提供负载均衡和服务发现。
-
Deployment
- 管理 Pod 和 ReplicaSet,支持滚动更新和回滚操作。
-
ConfigMap 和 Secret
- ConfigMap 用于存储配置信息,Secret 用于存储敏感信息。
-
Namespace
- 用于逻辑隔离集群中的资源。
-
Volume
- 挂载到 Pod 上的存储,可以是持久化的或临时的。
-
Ingress
- 管理外部访问服务的路由规则,通常用于 HTTP 和 HTTPS 访问。
安装和使用
安装 Kubernetes
-
使用 kubeadm
- 初始化主节点
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
- 加入工作节点
kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
- 初始化主节点
-
使用 Minikube(适用于本地开发)
- 安装 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
- 安装 Minikube
-
使用 Kubernetes as a Service
- 如 Google Kubernetes Engine (GKE)、Amazon Elastic Kubernetes Service (EKS)、Azure Kubernetes Service (AKS) 等。
使用 Kubernetes
-
创建一个 Pod
- 创建一个
nginx
Pod 的 YAML 文件:apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
- 使用
kubectl
创建 Pod:kubectl apply -f nginx-pod.yaml
- 创建一个
-
查看 Pod 状态
kubectl get pods
-
创建一个 Service
- 创建一个
nginx
Service 的 YAML 文件:apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer
- 使用
kubectl
创建 Service:kubectl apply -f nginx-service.yaml
- 创建一个
-
创建一个 Deployment
- 创建一个
nginx
Deployment 的 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 ports: - containerPort: 80
- 使用
kubectl
创建 Deployment: bash复制代码
kubectl apply -f nginx-deployment.yaml
- 创建一个
-
更新和回滚 Deployment
- 更新 Deployment:
kubectl apply -f nginx-deployment.yaml
- 回滚 Deployment:
kubectl rollout undo deployment/nginx-deployment
- 更新 Deployment:
优缺点
优点
-
高可用性
- 自动恢复故障容器,重新调度和自愈能力强。
-
可扩展性
- 支持水平扩展,自动根据负载增加或减少容器数量。
-
灵活性
- 支持多种容器运行时和网络插件,适应不同的需求。
-
丰富的生态系统
- 提供丰富的附加组件和工具,支持各种工作负载。
-
强大的社区支持
- 拥有活跃的开源社区和大量文档、教程、插件。
缺点
-
复杂性
- 学习曲线陡峭,配置和管理较为复杂。
-
资源开销
- 需要更多的系统资源,特别是在高可用性配置下。
-
网络性能
- 某些网络配置可能会引入额外的性能开销。
适用场景
-
微服务架构
- 适用于部署和管理微服务应用,支持独立的服务生命周期管理。
-
持续集成/持续部署(CI/CD)
- 支持自动化部署和回滚,适合 DevOps 流程。
-
混合云和多云环境
- 支持跨云平台部署和管理,提供一致的操作体验。
-
大规模分布式系统
- 适用于需要高可用性和自动扩展的大规模分布式应用。
-
边缘计算
- 适用于资源有限的边缘设备上运行和管理容器化应用。
Kubernetes 是目前最流行的容器编排工具,广泛应用于各种容器化应用的部署和管理。
推荐阅读: