简介
Kubernetes 已成为领先的容器编排平台,使组织能够简化应用程序的部署、扩展和管理。本全面教程将引导你了解 Kubernetes 的基础知识、其架构,以及使用这项强大技术部署和管理应用程序的过程。在本教程结束时,你将理解“使用 Kubernetes 进行部署的意义何在”,并能够为你的云原生基础设施解锁 Kubernetes 部署的优势。
Kubernetes 已成为领先的容器编排平台,使组织能够简化应用程序的部署、扩展和管理。本全面教程将引导你了解 Kubernetes 的基础知识、其架构,以及使用这项强大技术部署和管理应用程序的过程。在本教程结束时,你将理解“使用 Kubernetes 进行部署的意义何在”,并能够为你的云原生基础设施解锁 Kubernetes 部署的优势。
Kubernetes 是一个开源的容器编排平台,用于自动化容器化应用程序的部署、扩展和管理。它最初由谷歌设计,现在由云原生计算基金会(Cloud Native Computing Foundation,CNCF)维护。
要开始使用 Kubernetes,你可以按以下步骤操作:
## 在 Ubuntu 22.04 上安装 minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube start
kubectl get nodes
Kubernetes 提供了一个强大的 API,允许你与集群进行交互并管理应用程序。你可以使用 kubectl
命令行工具与 Kubernetes API 进行交互:
## 列出默认命名空间中的所有 Pod
kubectl get pods
## 创建一个新的部署
kubectl create deployment nginx --image=nginx
## 将部署暴露为服务
kubectl expose deployment nginx --port=80 --type=LoadBalancer
Kubernetes 使用称为清单的 YAML 文件来定义应用程序的期望状态。这是一个简单的 Nginx 部署清单示例:
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.14.2
ports:
- containerPort: 80
此清单创建一个包含三个 Nginx 容器副本的部署。
Kubernetes 采用主从架构,其中主节点管理整个集群,而工作节点运行容器化应用程序。Kubernetes 架构的关键组件如下:
Kubernetes 控制平面负责管理集群的整体状态,而工作节点运行容器化应用程序。控制平面组件,如 API 服务器、调度器和控制器管理器,运行在主节点上,而工作节点运行 Kubelet、Kube-Proxy 和容器运行时。
要部署 Kubernetes 集群,你可以使用托管服务,如谷歌 Kubernetes 引擎(Google Kubernetes Engine,GKE)或亚马逊弹性 Kubernetes 服务(Amazon Elastic Kubernetes Service,EKS),或者你可以使用 kubeadm 或 Kops 等工具设置一个自我管理的集群。
Kubernetes 提供了多种部署应用程序的方式,包括:
这是一个部署清单的示例:
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.14.2
ports:
- containerPort: 80
Kubernetes 提供了多种工具和命令来管理应用程序的生命周期:
kubectl apply
:创建或更新资源kubectl get
:列出资源kubectl describe
:显示有关资源的详细信息kubectl delete
:删除资源kubectl logs
:查看容器的日志kubectl exec
:在容器中执行命令例如,要将 Nginx 部署扩展到 5 个副本:
kubectl scale deployment nginx-deployment --replicas=5
Kubernetes 支持滚动更新,这使你能够以最少的停机时间更新应用程序。你可以更新容器镜像或部署清单中的任何其他配置并应用更改:
kubectl apply -f nginx-deployment.yaml
然后,Kubernetes 将逐步推出新版本,确保应用程序在更新过程中保持可用。
如果更新引入了问题,你可以使用 kubectl rollout
命令轻松回滚到应用程序的上一个版本:
kubectl rollout undo deployment nginx-deployment
这将把部署恢复到上一个稳定版本。
Kubernetes 提供了多种扩展应用程序的机制:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50
Kubernetes 提供了多项功能来确保应用程序的高可用性:
复制与自我修复:Kubernetes 部署和副本集确保始终运行所需数量的 Pod,自动替换任何失败的 Pod。
负载均衡:Kubernetes 服务提供负载均衡和服务发现,在可用的 Pod 之间分配流量。
多可用区和多区域部署:你可以跨多个可用区或区域部署应用程序以提高弹性。
通过利用这些功能,你可以在 Kubernetes 之上构建高度可扩展和高可用的应用程序。
Kubernetes 遵循特定的网络模型,以确保 Pod、服务与外部世界之间的通信。Kubernetes 网络模型的关键方面包括:
Kubernetes 提供了不同的服务类型,以满足不同的网络需求:
externalName
字段的内容。Kubernetes 提供了多种服务发现机制,使 Pod 能够找到并与其他服务进行通信:
通过了解 Kubernetes 网络模型和服务发现机制,你可以在 Kubernetes 之上构建高度可扩展和有弹性的应用程序。
Kubernetes 使用持久卷(Persistent Volumes,PVs)为有状态应用程序提供持久存储。PV 独立于 Pod 的生命周期,管理员可以动态配置或预先创建。PV 可以使用各种存储后端,如本地磁盘、网络附属存储(Network - Attached Storage,NAS)或云存储服务。
持久卷声明(Persistent Volume Claims,PVCs)是 Pod 请求存储资源的方式。Pod 可以使用 PVC 挂载存储卷,这些存储卷由底层的 PV 提供支持。Kubernetes 会自动将 PVC 与可用的 PV 进行匹配,或者在需要时动态配置新的 PV。
以下是一个 PVC 以及使用该 PVC 的 Pod 的示例:
## 持久卷声明
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my - pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
## 使用该 PVC 的 Pod
apiVersion: v1
kind: Pod
metadata:
name: my - pod
spec:
containers:
- name: my - container
image: nginx
volumeMounts:
- name: my - volume
mountPath: /data
volumes:
- name: my - volume
persistentVolumeClaim:
claimName: my - pvc
Kubernetes 使用存储类来为管理员提供定义不同类型存储的方法。存储类可用于根据 PVC 的存储需求动态配置新的 PV。
## 存储类
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my - storage - class
provisioner: kubernetes.io/gce - pd
parameters:
type: pd - standard
fstype: ext4
zone: us - central1 - a
通过使用持久卷、持久卷声明和存储类,你可以确保有状态应用程序在 Kubernetes 集群中能够访问持久且可靠的存储。
监控对于了解 Kubernetes 集群及其上运行的应用程序的健康状况和性能至关重要。Kubernetes 提供了多个内置监控工具,并与各种第三方监控解决方案集成:
Kubernetes 通过使用容器日志提供了一个集中式日志记录解决方案。Pod 将其日志写入标准输出(stdout)和标准错误(stderr),可使用 kubectl logs
命令进行访问。此外,你可以将 Kubernetes 与各种日志聚合解决方案集成,例如:
当你的 Kubernetes 集群或应用程序出现问题时,你可以使用以下工具和技术进行故障排除:
通过利用 Kubernetes 提供的监控、日志记录和故障排除工具及技术,你可以确保在该平台上运行的应用程序的健康和可靠性。
Kubernetes 提供了多种用于对用户和工作负载进行认证和授权的机制:
为保障你的 Kubernetes 集群安全,你应考虑以下最佳实践:
Kubernetes 网络策略允许你控制 Pod 之间的流量流向,提供一种保障应用程序网络通信安全的方法。网络策略可用于根据标签、端口和协议限制入站和出站流量。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: web - policy
spec:
podSelector:
matchLabels:
app: web
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- port: 80
通过实施这些安全措施,你可以确保你的 Kubernetes 集群以及在其上运行的应用程序是安全的,并且仅对授权用户和工作负载可访问。
Kubernetes 彻底改变了组织在云中部署和管理应用程序的方式。通过利用 Kubernetes,你可以获得可扩展、可靠且高效的应用程序管理所带来的好处,使你的云原生基础设施蓬勃发展。本教程通过涵盖 Kubernetes 基础、架构、部署策略以及诸如扩展、网络、存储和安全等高级概念,探讨了“使用 Kubernetes 进行部署的意义何在”。有了这些知识,你现在可以自信地利用 Kubernetes 的力量来简化你的应用程序部署和管理,在你的云原生生态系统中推动创新并取得成功。