Kubernetes 是一个开源的容器编排引擎最初由 Google 在内部开发中使用,用于管理其容器集群。它可以自动化应用程序的部署、扩展和管理。
Kubernetes 具有以下优势:
Kubernetes 的应用场景包括:
Kubernetes 具有以下优点,因此使用 Kubernetes 部署容器化应用程序是值得一试的:
安装 Kubernetes 可以通过 Kubernetes 官方文档提供的指南进行,也可以通过第三方工具完成。以下是通过官方指南安装 Kubernetes 的步骤:
在部署容器化应用程序之前,您需要准备应用程序的容器镜像,并将其上传到 Docker Hub 或 Kubernetes 内部的镜像仓库中。容器镜像通常包含应用程序和其依赖项。
以下是将本地容器镜像上传到 Docker Hub 的示例命令行:
# 登录 Docker Hub
docker login
# 标记镜像并推送到 Docker Hub
docker tag myimage:1.0 myuser/myimage:1.0
docker push myuser/myimage:1.0
在 Kubernetes 中,您可以使用 YAML 配置文件来定义应用程序和其依赖项的部署、服务和其他对象。
以下是一个 YAML 配置文件的示例,用于部署名为 “myapp” 的容器镜像:
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: myuser/myimage:1.0
ports:
- containerPort: 80
该配置文件定义了一个名为 “myapp” 的 Deployment 对象,它指定了应该运行 3 个 Pod,每个 Pod 包含一个名为 “myapp” 的容器镜像,并且在 80 端口上公开服务。
在 Kubernetes 中,命名空间用于为不同的应用程序或团队分隔资源。在创建命名空间之前,您可以使用以下命令列出当前可用的命名空间:
kubectl get namespaces
若您想创建一个名为 “myapp-namespace” 的新命名空间,请使用以下命令:
kubectl create namespace myapp-namespace
部署对象是 Kubernetes 中的一种资源,用于指定应用程序的 Pod 数量、容器镜像和其他配置。以下是一个 YAML 配置文件示例,该文件定义了一个名为 “myapp-deployment” 的部署对象:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
namespace: myapp-namespace
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: myuser/myapp-image:latest
ports:
- containerPort: 3000
您可以将上述 YAML 配置文件保存为文件路径为 “myapp-deployment.yaml” 的文件,并使用以下命令将该部署对象部署到 Kubernetes 中:
kubectl apply -f myapp-deployment.yaml
该命令将 “myapp-deployment.yaml” 文件中的部署对象应用于 Kubernetes 集群中的 “myapp-namespace” 命名空间。
Kubernetes 服务是部署对象的一种类型,用于提供对部署的网络访问。在 Kubernetes 中,有两种类型的服务:ClusterIP 和 NodePort。
以下是一个 YAML 配置文件示例,该文件定义了一个名为 “myapp-service” 的 ClusterIP 服务对象:
apiVersion: v1
kind: Service
metadata:
name: myapp-service
namespace: myapp-namespace
spec:
selector:
app: myapp
ports:
- name: http
port: 80
targetPort: 3000
type: ClusterIP
可以将上述 YAML 配置文件保存为文件路径为 “myapp-service.yaml” 的文件,并使用以下命令将该服务对象部署到 Kubernetes 中:
kubectl apply -f myapp-service.yaml
该命令将 “myapp-service.yaml” 文件中的服务对象应用于 Kubernetes 集群中的 “myapp-namespace” 命名空间。
水平扩展是指向应用程序添加更多 Pod 实例来增加其吞吐量和容量。在 Kubernetes 中,您可以使用以下命令向名为 “myapp-deployment” 的部署对象添加两个 Pod 实例:
kubectl scale deployment myapp-deployment --replicas=4
该命令将名为 “myapp-deployment” 的部署对象的 Pod 实例数量扩展到 4
垂直扩展是指向单个 Pod 实例分配更多资源(例如内存和 CPU)。您可以使用以下命令垂直扩展名为 “myapp-deployment” 的部署对象中 “myapp-container” 容器内的资源:
kubectl set resources deployment myapp-deployment -c myapp-container --requests=cpu=500m,memory=1Gi --limits=cpu=1,memory=2Gi
该命令将名为 “myapp-deployment” 的部署对象的 “myapp-container” 容器分配了更多资源,并将 CPU 请求设置为 500m 和内存请求设置为 1Gi。此外,该命令还将 CPU 限制设置为 1 和内存限制设置为 2Gi。
在初始部署之后,您可能需要更新、升级或删除已部署的应用程序。Kubernetes 提供了许多工具和机制,可以使这些操作变得容易。
要更新应用程序需要进行以下步骤:
以下是如何完成这些步骤的说明:
首先,您需要将您的 Docker 镜像更新为新版本。您可以使用 Dockerfile 来构建一个新镜像,然后上传到 Docker Registry 中。或者,如果您使用的是公共镜像仓库,则可以使用以下命令拉取新版本的镜像:
docker pull myuser/myapp-image:v2
接下来需要使用更新后的 Docker 镜像更新 Kubernetes 中放置这个 Docker 镜像的部署对象。假设您所使用的 YAML 配置文件为 “myapp-deployment.yaml”,则您可以重命名该文件并更新其中的镜像版本号:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
namespace: myapp-namespace
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: myuser/myapp-image:v2 # 更新为新版本的镜像
ports:
- containerPort: 3000
最后需要在 Kubernetes 中滚动更新您的应用程序。这意味着在更新应用程序期间,将逐步将旧版本的 Pod 实例替换为新的 Pod 实例。您可以使用以下命令进行滚动更新:
kubectl apply -f myapp-deployment.yaml
这个命令将在 Kubernetes 中创建新的部署对象,指向更新后的 Docker 镜像。Kubernetes 将使用滚动更新机制,逐步将旧版本 Pod 替换为新版本。
如果想要删除已部署的应用程序可以使用以下命令:
kubectl delete deployment myapp-deployment -n myapp-namespace
这个命令将删除 “myapp-deployment” 部署对象以及与之关联的所有 Pod。
Kubernetes 是一个功能强大的工具,可以快速部署和管理容器化应用程序。通过使用 Kubernetes,可以将大部分的应用程序逻辑从服务器硬件和运维方面抽象出来,并将其归纳到一个基于编排和自动化的管理系统中。
使用 Kubernetes 部署容器化应用程序可以获得以下收益: