在 Kubernetes 上部署应用程序:完整指南!
Kubernetes 是一个开源平台,用于自动化部署、扩展和管理容器化应用程序。它是一种流行的容器编排工具,能够将大量容器作为一个单元进行管理,而无需单独管理每个容器。
Kubernetes 的重要性
Kubernetes 已成为管理和部署现代应用程序的必备工具,其重要性在于它能够提供统一的平台,用于自动化和扩展应用程序的部署、管理和扩展。借助 Kubernetes,组织可以提高开发和部署流程的效率和敏捷性,从而加快产品上市速度并降低运营成本。Kubernetes 还提供了高度的可扩展性,使组织能够随着业务的增长和发展轻松扩展其应用程序。
此外,Kubernetes 还提供强大的安全功能,确保应用程序免受潜在威胁和漏洞的侵害。凭借其活跃的社区和广泛的生态系统,Kubernetes 为组织提供了丰富的资源、工具和服务,帮助他们持续改进和增强其应用程序。总而言之,使用 Kubernetes 的重要性在于它能够提供一个灵活、可扩展且安全的平台来管理现代应用程序,并使组织能够在快速发展的数字环境中保持领先地位。
以下是如何使用 Kubernetes 的基本概述:
- 设置集群:
要使用 Kubernetes,您需要设置一个集群。集群是一组运行 Kubernetes 控制平面和容器的机器。您可以在自己的基础架构上设置集群,也可以使用云服务提供商,例如 Amazon Web Services (AWS)、Google Cloud Platform (GCP) 或 Microsoft Azure。
- 将您的应用程序打包到容器中:
要在 Kubernetes 上运行应用程序,您需要将其打包到一个或多个容器中。容器是一个独立的可执行包,其中包含运行应用程序所需的一切,包括代码、运行时、系统工具、库和设置。
- 使用清单定义应用程序的所需状态:
Kubernetes 使用清单(manifests)来管理容器的部署和扩缩。清单是描述应用程序期望状态的文件。清单指定了每个容器的副本数量、副本的更新方式以及副本之间如何通信。
- 将您的代码推送到 SCM 平台:
将您的应用程序代码推送到 GitHub 等 SCM 平台。
- 使用 CI/CD 工具实现自动化:
使用专业的 CI/CD 平台(例如 Harness)来自动化部署你的应用程序。设置完成后,你就可以轻松地、经常性地在新代码推送到项目代码库时,分块部署你的应用程序代码。
- 公开应用程序:
部署应用程序后,您需要创建一个 LoadBalancer 或 ExternalName 类型的服务,将应用程序暴露给外部世界。这样,用户就可以通过稳定的 IP 地址或主机名访问应用程序。
- 监控和管理您的应用程序:
部署应用程序后,您可以使用 kubectl 工具监视容器的状态,更改所需状态,以及扩大或缩小应用程序的规模。
这些是在 Kubernetes 上部署应用程序的常规步骤。根据应用程序的复杂程度,可能需要执行其他步骤,例如配置存储、网络策略或安全性。不过,这应该为您在 Kubernetes 上部署应用程序提供了一个良好的起点。
今天,我们将了解如何使用 Harness 自动在 Kubernetes 上进行简单的应用程序部署。
先决条件
- 免费Harness 云帐户
- 下载并安装Node.js 和 npm
- GitHub 帐户,我们将使用我们的示例笔记应用程序
- Kubernetes 集群接入,可以使用Minikube或Kind创建单节点集群
教程
我们将使用 GitHub 仓库中已有的示例应用程序。我们将使用 Kubernetes 集群来部署我们的应用程序。接下来,我们将在本教程中使用 CI/CD 平台 Harness 来展示如何轻松实现软件交付流程的自动化。
步骤 1:在本地测试示例应用程序
复制并克隆示例笔记应用程序
使用以下命令进入应用程序文件夹
cd notes-app-cicd
使用以下命令安装依赖项
npm install
在本地运行应用程序,看看应用程序是否运行良好
node app.js
步骤 2:容器化应用程序
您可以在示例应用程序存储库中看到 Dockerfile。
FROM node:14-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]
使用以下命令构建、标记镜像并将其推送到您选择的任何容器注册表。在本教程中,我们将把它推送到 Docker Hub。
对于 Mac M1,使用以下命令
docker buildx build --platform=linux/arm64 --platform=linux/amd64 -t docker.io/$your docker hub user name/$image name:$tag name --push -f ./Dockerfile .
对于 Mac M1 以外的设备,请使用以下命令来构建和推送映像,
docker build -t $your docker hub user name/$image name .
docker push $your docker hub user name/$image name .
步骤 3:创建或访问 Kubernetes 集群
确保能够访问任何云提供商的 Kubernetes 集群。您甚至可以使用 Minikube 或 Kind 来创建集群。在本教程中,我们将使用 Google Cloud (GCP) 的 Kubernetes 集群。
我已经有一个 Google Cloud 帐户,因此创建集群很容易。
步骤 4:确保 Kubernetes 清单文件整洁干净
您需要部署 yaml 和服务 yaml 文件来部署和公开您的应用程序。请确保这两个文件均已正确配置。
您可以看到示例应用程序存储库中已经有deployment.yaml和service.yaml文件。
下面是我们的deployment.yaml文件。
apiVersion: apps/v1
kind: Deployment
metadata:
name: notes-app-deployment
labels:
app: notes-app
spec:
replicas: 2
selector:
matchLabels:
app: notes-app
template:
metadata:
labels:
app: notes-app
spec:
containers:
- name: notes-app-deployment
image: pavansa/notes-app
resources:
requests:
cpu: "100m"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3000
下面是我们的 service.yaml 文件
apiVersion: v1
# Indicates this as a service
kind: Service
metadata:
# Service name
name: notes-app-deployment
spec:
selector:
# Selector for Pods
app: notes-app
ports:
# Port Map
- port: 80
targetPort: 3000
protocol: TCP
type: LoadBalancer
使用以下命令应用清单文件。首先是部署,然后是服务 yaml 文件。
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
应用 kubectl apply 命令后,验证 pod 是否按预期正常运行。
kubectl get pods
步骤 5:使用 Harness 实现自动化部署
您需要一个 CI/CD 工具来自动化您的持续集成和部署流程。Harness 以其在 CI/CD 领域的创新性和易用性而闻名。因此,我们将使用此平台来设置应用程序的自动化持续部署。
注册并验证账户后,您将收到一条欢迎信息,并看到项目创建设置。请继续创建项目。
设置非常简单,如上图所示;您只需四个简单的步骤即可部署您的应用程序。
选择您的部署类型 i,例如 Kubernetes,然后单击“连接到环境”。
使用 Delegate 连接到您的 Kubernetes 环境。Delegate 是一项在您的基础架构上运行的服务,用于代表 Harness 平台执行任务。
下载 Delegate YAML 文件并通过应用上述步骤中所述的 kubectl apply 命令将其安装到您的 Kubernetes 集群上。
确保kubectl apply -f harness-delegate.yaml
在下载委托 YAML 文件的正确路径中执行该命令。
确保您的 Delegate 安装成功。
恭喜!我们已成功使用 Harness 在 Kubernetes 上部署了应用程序。现在,我们可以使用 Harness CD 模块轻松实现自动化部署。
您可以通过添加触发器来自动化您的持续交付 (CD) 流程。当任何授权人员将任何新代码推送到您的代码库时,您的管道就会被触发并执行持续交付 (CD)。让我们看看如何做到这一点。
在管道工作室中,您可以单击“触发器”选项卡并添加所需的触发器。
添加所需的详细信息并继续。如您所见,我们选择“推送”作为事件。因此,每当我们的存储库发生任何授权推送时,管道都会触发并运行。
现在,只要任何授权人员将任何代码更改推送到您的主/主存储库,管道就会自动触发。
如果您还没有看过我的另外两篇关于持续集成和自动化测试的文章,请看一下。
文章来源:https://dev.to/pavanbelagatti/deploying-an-application-on-kubernetes-a-complete-guide-1cj6