--- vssueId: 21 layout: LearningLayout description: Kubernetes教程_本文详细讲解了Kubernetes_Deployment的概念_并描述了如何使用kubectl_Kuboard创建一个Deployment meta: - name: keywords content: Kubernetes教程,K8S教程,Deployment,K8S培训,Kubernetes培训 --- # 1.部署一个应用程序 本文翻译自 Kubernetes [Using kubectl to Create a Deployment](https://kubernetes.io/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/) ,并有所改写 ### 前提 假设您已经 * 完成 Kubernetes 集群的安装,请参考文档 [离线安装高可用的Kubernetes集群](/install/install-k8s.html) * 完成 Kuboard 的安装,请参考文档 [安装 Kuboard](/install/v3/install.html) * 版本不低于 `v3.1.1.0` ### 目标 - 使用 kubectl 在 k8s 上部署第一个应用程序。 ::: tip * kubectl 是 k8s 的客户端工具,可以使用命令行管理集群。 * 如果参考文档 [离线安装高可用的Kubernetes集群](/install/install-k8s.html),您可以在 master 节点的 root 用户使用 kubectl 操作您的集群 * 您也可以尝试 [从客户端电脑远程管理 Kubernetes](/install/install-kubectl.html) ::: ### Kubernetes 部署 在 k8s 上进行部署前,首先需要了解一个基本概念 **Deployment** **Deployment** 译名为 **部署**。在k8s中,通过发布 Deployment,可以创建应用程序 (docker image) 的实例 (docker container),这个实例会被包含在称为 **Pod** 的概念中,**Pod** 是 k8s 中最小可管理单元。 在 k8s 集群中发布 Deployment 后,Deployment 将指示 k8s 如何创建和更新应用程序的实例,master 节点将应用程序实例调度到集群中的具体的节点上。 创建应用程序实例后,Kubernetes Deployment Controller 会持续监控这些实例。如果运行实例的 worker 节点关机或被删除,则 Kubernetes Deployment Controller 将在群集中资源最优的另一个 worker 节点上重新创建一个新的实例。**这提供了一种自我修复机制来解决机器故障或维护问题。** 在容器编排之前的时代,各种安装脚本通常用于启动应用程序,但是不能够使应用程序从机器故障中恢复。通过创建应用程序实例并确保它们在集群节点中的运行实例个数,Kubernetes Deployment 提供了一种完全不同的方式来管理应用程序。 ## 在 Kubernetes 上部署第一个应用程序 ![Kubernetes教程:部署第一个应用程序](./deploy-app.assets/module_02_first_app.svg) 上图是在第一篇文章的基础上,添加上了Deployment、Pod和Container。 Deployment 处于 master 节点上,通过发布 Deployment,master 节点会选择合适的 worker 节点创建 Container(即图中的正方体),Container 会被包含在 Pod (即蓝色圆圈)里。 ## 实战:部署 nginx Deployment 本套教程提供了两种实战方式: * 使用 kubectl * 使用 Kuboard **创建 YAML 文件** 创建文件 nginx-deployment.yaml,内容如下: **应用 YAML 文件** ``` sh kubectl apply -f nginx-deployment.yaml ``` **查看部署结果** ``` sh # 查看 Deployment kubectl get deployments # 查看 Pod kubectl get pods ``` **打开 Kuboard 首页**,如下图所示: ![Kubernetes教程:Kuboard首页](./deploy-app.assets/image-20210403181224179.png) 假设您已经完成了集群的导入,点击一个 ***已就绪*** 的集群,如下图所示: ![Kuboard首页-选择名称空间](./deploy-app.assets/image-20210403190603062.png) 选择 ***使用 ServiceAccount kuboard-admin*** 并 ***点击 default 名称空间*** 将切换到 ***default*** 名称空间首页,如下所示: ![Kuboard-名称空间首页](./deploy-app.assets/image-20210403201814079.png) 点击左侧菜单的 ***创建工作负载*** ,将打开工作负载编辑器,如下图所示: ![Kuboard-创建工作负载](./deploy-app.assets/image-20210403201918399.png) ​ 并填写表单如下: | 字段名 | 填写内容 | 备注 | | -------- | ----------- | ------------------------------------------------------- | | 服务类型 | Deployment | | | 服务分层 | 展现层 | Kuboard使用这个字段确定将部署显示在微服务架构的哪个分层 | | 服务名称 | nginx | 服务分层的前缀 + 服务名 组成最终的 K8S Deployment name | | 副本数 | 1 | replicas | 点击 ***容器信息*** Tab 页,在 ***容器信息*** Tab 页中点击 ***添加工作容器*** 按钮,如下图所示: ![Kuboard-编辑容器信息](./deploy-app.assets/image-20210403202106052.png) 并填写表单如下: | 字段名 | 填写内容 | 备注 | | -------- | ----------- | ------------------------------------------------------- | | 容器名称 | nginx | | | 镜像 | nginx:1.7.9 | | | 抓取策略 | Always | 每次创建 Pod 都尝试抓取镜像 | | Ports | TCP : 80 | 该容器组监听 TCP 80 端口 | 点击 ***保存*** 点击 ***应用*** 点击 ***完成*** 此时可查看到该应用的部署结果,如下图所示: ![Kuboard-工作负载查看](./deploy-app.assets/image-20210403202337158.png) 点击上图中的 ***代理*** 按钮,可以直接测试部署结果。更多细节请参考 [Kuboard Proxy](/guide/proxy)。 通过代理访问已部署的 nginx 服务时,默认显示结果如下所示: ![Nginx](./deploy-app.assets/image-20210403193943512.png) 可分别查看到一个名为 nginx-deployment 的 Deployment 和一个名为 nginx-deployment-xxxxxxx 的 Pod ~~任务二达成,至此你已经成功在k8s上部署了一个实例的nginx应用程序, ~~想要知道 Deployment(部署)、Pod(容器组) 和 Node(节点) 之间的关系吗? ~~let‘s go-> [查看 Pods(容器组)和 Nodes(节点)](./explore.html)