一、 k8s集群简单介绍
上图描述的是拥有一个Master(主)节点和六个Worker(工作)节点的k8s集群
Master 负责管理集群 负责协调集群中的所有活动,例如调度应用程序,维护应用程序的状态,扩展和更新应用程序。
Worker节点(即图中的Node)是VM(虚拟机)或物理计算机,充当k8s集群中的工作计算机。 每个Worker节点都有一个Kubelet,它管理该Worker节点并负责与Master节点通信。该Worker节点还应具有用于处理容器操作的工具,例如Docker或是containerd
二、前置条件
- 完成 Kubernetes 集群的安装
- 完成 Kuboard 的安装,版本不低于 v3.1.1.0
三、了解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 上部署第一个应用程序
Deployment 处于 master 节点上,通过发布 Deployment,master 节点会选择合适的 worker 节点创建 Container(即图中的正方体),Container 会被包含在 Pod (即蓝色圆圈)里。
五、实战部署 nginx Deployment
方式一:使用 Kuboard
打开 Kuboard 首页,如下图所示:
假设您已经完成了集群的导入,点击一个 已就绪 的集群,如下图所示:
选择 使用 ServiceAccount kuboard-admin 并 点击 default 名称空间 将切换到 default 名称空间首页,如下所示:
点击左侧菜单的 创建工作负载 ,将打开工作负载编辑器,如下图所示:
并填写表单如下:
服务类型: Deployment
服务分层:展现层 (Kuboard使用这个字段确定将部署显示在微服务架构的哪个分层)
服务名称: nginx (服务分层的前缀 + 服务名 组成最终的 K8S Deployment name)
副本数:1 (replicas)
点击 容器信息 Tab 页,在 容器信息 Tab 页中点击 添加工作容器 按钮,如下图所示:
并填写表单如下:
容器名称: nginx
镜像: nginx:1.7.9
抓取策略: Always (每次创建 Pod 都尝试抓取镜像,集群必须是能连外网的)
Ports: TCP : 80 (该容器组监听 TCP 80 端口)
点击 保存
点击 应用
点击 完成
此时可查看到该应用的部署结果,如下图所示:
点击上图中的 代理 按钮,可以直接测试部署结果
通过代理访问已部署的 nginx 服务时,默认显示结果如下所示:
方式二:使用 kubectl
kubectl 是 k8s 的客户端工具,可以使用命令行管理集群
创建 YAML 文件
创建文件 nginx-deployment.yaml,内容如下:
apiVersion: apps/v1 #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment #该配置的类型,我们使用的是 Deployment
metadata: #译名为元数据,即 Deployment 的一些基本属性和信息
name: nginx-deployment #Deployment 的名称
labels: #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
app: nginx #为该Deployment设置key为app,value为nginx的标签
spec: #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
replicas: 1 #使用该Deployment创建一个应用程序实例
selector: #标签选择器,与上面的标签共同作用,目前不需要理解
matchLabels: #选择包含标签app:nginx的资源
app: nginx
template: #这是选择或创建的Pod的模板
metadata: #Pod的元数据
labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
app: nginx
spec: #期望Pod实现的功能(即在pod中部署)
containers: #生成container,与docker中的container是同一种
- name: nginx #container的名称
image: nginx:1.7.9 #使用镜像nginx:1.7.9创建container,该container默认80端口可访问
应用 YAML 文件
kubectl apply -f nginx-deployment.yaml
查看部署结果
# 查看 Deployment
kubectl get deployments
# 查看 Pod
kubectl get pods
可分别查看到一个名为 nginx-deployment 的 Deployment 和一个名为 nginx-deployment-xxxxxxx 的 Pod。