Kubernetes 入门:部署应用指南
Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。本文将带你入门 Kubernetes,了解如何在 K8s 上部署你的第一个应用。
什么是 Kubernetes?
Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,它促进了声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统,其服务、支持和工具的选择日益丰富。
主要特性:
- 服务发现与负载均衡:Kubernetes 可以使用 DNS 名称或自己的 IP 地址暴露容器,如果进入容器的流量很大,Kubernetes 可以在多个容器之间进行负载均衡。
- 存储编排:Kubernetes 允许你自动挂载你选择的存储系统,无论是本地存储、公有云提供商还是网络存储系统。
- 自动部署与回滚:你可以使用 Kubernetes 来描述系统的期望状态,它可以自动地将实际状态转移到期望状态。
- 自动完成装箱计算:你为 Kubernetes 提供许多节点组成的集群,在这个集群上运行容器化应用程序,你告诉 Kubernetes 每个应用程序需要多少 CPU 和内存(RAM)。Kubernetes 能够智能地将这些容器调度到合适的节点上。
- 自我修复:Kubernetes 重新启动失败的容器,替换并重新调度不健康的节点上的容器,关闭不响应用户定义的健康检查的容器,并且在准备好服务之前不会向它们发送流量。
- 密钥与配置管理:部署和更新密钥和应用程序配置,无需重新构建容器镜像,也无需在堆栈配置中暴露密钥。
核心概念
在开始部署应用前,我们需要先了解一些核心概念:
Pod
Pod 是 Kubernetes 中最小的可部署单元。一个 Pod 代表集群中正在运行的一个进程实例。Pod 包含一个或多个紧密关联的容器,共享存储、网络等资源。
Service
Service 定义了访问一组特定 Pod 的策略。它充当 Pod 的入口点,提供稳定的 IP 地址和 DNS 名称,并能在多个 Pod 之间分发流量。
Deployment
Deployment 负责创建和更新应用程序实例。它管理 ReplicaSet,确保指定数量的 Pod 副本始终在运行。
Namespace
Namespace 是一种将集群资源划分到多个虚拟集群的方法。不同的命名空间可以用于隔离不同项目、团队或客户。
准备工作
在部署应用之前,请确保你已经具备以下条件:
- 已安装并配置好 kubectl 命令行工具
- 拥有一个 Kubernetes 集群(可以是本地集群如 Minikube、云服务商提供的集群等)
部署你的第一个应用
下面我们将通过一个简单的示例来演示如何在 Kubernetes 上部署应用。
步骤 1:创建 Deployment
首先,我们创建一个 Deployment 来部署 nginx 应用:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
保存为 nginx-deployment.yaml 文件,然后执行以下命令:
kubectl apply -f nginx-deployment.yaml
这会创建一个包含两个副本的 nginx Deployment。
步骤 2:查看 Deployment 状态
kubectl get deployments
你应该能看到类似如下输出:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 2/2 2 2 5m
步骤 3:创建 Service
为了让外部能够访问我们的应用,我们需要创建一个 Service:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
保存为 nginx-service.yaml 文件,然后执行:
kubectl apply -f nginx-service.yaml
步骤 4:查看 Service 状态
kubectl get services
你会看到类似如下输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service LoadBalancer 10.96.123.45 <pending> 80:31234/TCP 2m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1d
根据你的环境,EXTERNAL-IP 可能显示为 <pending> 或具体的 IP 地址。
步骤 5:访问应用
如果你在本地使用 Minikube,可以通过以下命令打开浏览器访问应用:
minikube service nginx-service
或者直接访问 ClusterIP 和端口。
扩展应用
你可以轻松地扩展应用副本数:
kubectl scale deployment nginx-deployment --replicas=5
查看扩展后的状态:
kubectl get pods
应该会看到 5 个 nginx Pod 在运行。
更新应用
要更新应用,可以修改 Deployment 文件中的镜像版本:
# ... 其他内容不变
containers:
- name: nginx
image: nginx:1.16.1 # 更新版本
ports:
- containerPort: 80
然后应用更改:
kubectl apply -f nginx-deployment.yaml
Kubernetes 会自动执行滚动更新,确保服务不中断。
回滚应用
如果更新后出现问题,可以快速回滚:
kubectl rollout undo deployment/nginx-deployment
删除应用
要删除部署的应用,只需删除相应的资源:
kubectl delete service nginx-service
kubectl delete deployment nginx-deployment
总结
本文介绍了 Kubernetes 的基本概念和部署应用的基本流程。我们学习了如何:
- 创建 Deployment 来管理应用副本
- 创建 Service 来暴露应用
- 扩展和更新应用
- 执行回滚操作
- 删除应用
这只是 Kubernetes 功能的一小部分。随着深入了解,你会发现更多高级功能,如 ConfigMap、Secret、Ingress 控制器、持久卷等,它们可以帮助你更好地管理和部署复杂的应用程序。
下一步建议深入学习:
- 使用 Helm 进行包管理
- 配置持久化存储
- 设置健康检查和探针
- 实现自动扩缩容
- 学习网络策略和安全设置
希望这篇入门指南能帮助你迈出使用 Kubernetes 的第一步!





