Docker 与 K8S学习笔记(十七)—— 在K8S集群中部署应用

简介: 我们今天来通过在在K8S集群中部署web应用来体验一下K8S的使用,我们需要提前准备一个基于springboot的web应用镜像,这个应用也很简单,就一个hello接口: @RestController @RequestMapping("/api") public class ApiControll

Docker 与 K8S学习笔记(十七)—— 在K8S集群中部署应用


我们今天来通过在在K8S集群中部署web应用来体验一下K8S的使用,我们需要提前准备一个基于springboot的web应用镜像,这个应用也很简单,就一个hello接口:


@RestController
@RequestMapping("/api")
public class ApiController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello my friend";
    }
}

 

一、创建Deployment


我们首先创建Deployment文件webapp.yaml,内容如下:


apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: webapp
  name: webapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: 172.16.194.135:5000/webapp:latest
        ports:
        - containerPort: 4567


对于这个文件,这里有几个属性需要说明下:


  • replicas:定义Pod的副本数量


  • selector:目标Pod的标签选择器


  • template:用于自动创建新Pod副本的模板


接着我们使用如下命令创建Deployment对象:


$ sudo kubectl apply -f webapp.yaml
deployment.apps/webapp created

我们来看下Deployment的信息:


$ sudo kubectl get deployments
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
webapp   2/2     2            2           5s


  • READY:当前Pod数与期望Pod数


  • UP-TO-DATE:最新版本的Pod数量,用于指示在滚动升级的过程中,有多少个Pod副本已经成功升级


  • AVAILABLE:当前集群中可用的Pod副本数量,即当前集群中存储的Pod数量


我们通过Deployment信息可以看到Pod都启动完毕,通过一下命令可以查看Pod信息:


$ sudo kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
webapp-5fb8547b77-d9txl   1/1     Running   0          8m7s
webapp-5fb8547b77-jtmt7   1/1     Running   0          8m7s


我们还可以通过docker命令查看正在运行的容器信息,我们可以发现除了webapp容器外还有pause容器,这个就是Pod的根容器:


$ sudo docker ps | grep webapp
f098a5f6e54e   172.16.194.135:5000/webapp                                      "java -jar /opt/soft…"   8 minutes ago       Up 8 minutes                                                   k8s_webapp_webapp-5fb8547b77-d9txl_default_cc7450ec-3949-4051-9c4b-b955195fcb87_0
7146447c160e   172.16.194.135:5000/webapp                                      "java -jar /opt/soft…"   8 minutes ago       Up 8 minutes                                                   k8s_webapp_webapp-5fb8547b77-jtmt7_default_fbf22e91-f72a-439e-ac92-74f1ec76487b_0
332672e7ad5a   registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2   "/pause"                 8 minutes ago       Up 8 minutes                                                   k8s_POD_webapp-5fb8547b77-d9txl_default_cc7450ec-3949-4051-9c4b-b955195fcb87_0
816e9e983d7c   registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2   "/pause"                 8 minutes ago       Up 8 minutes


Deployment资源对象其实还与ReplicaSet资源对象密切相关,Kubernetes内部会根据Deployment对象自动创建相关联的ReplicaSet对象,我们通过以下命令来看看ReplicaSet对象信息:


$ sudo kubectl get replicasets
NAME                DESIRED   CURRENT   READY   AGE
webapp-5fb8547b77   2         2         2       4m48s

 

二、创建Service


最后我们创建一个Service文件webapp_service.yaml,其文件内容如下:


apiVersion: v1
kind: Service
metadata:
  name: webapp
spec:
  type: NodePort
  ports:
  - port: 4567
    nodePort: 30001
  selector:
    app: webapp


其中,metadata.name是Service的服务名,spec.type设置为NodePort意味着这个服务开启了NodePort格式的外网访问模式,这样在集群外就可以通过客户端访问此服务,spec.selector确定了哪些Pod关联于本服务。接下来我们通过如下命令创建Service对象:


$ sudo kubectl create -f webapp_service.yaml
service/webapp created


我们来看看所创建的Service的信息:


$ sudo kubectl get svc webapp
NAME     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
webapp   ClusterIP   10.108.237.8   <none>        4567/TCP   2m32s


我们可以看到kubernetes集群为webapp服务分配了一个10.108.237.8地址,这意味着在集群中其它Pod都可以通过此IP+端口号来访问。


截至目前我们的webapp应用已经部署上去了,我们通过浏览器访问对应URL:


 

分类: 容器技术

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
0
0
0
6
分享
相关文章
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
90 9
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
224 79
使用ArgoCD管理Kubernetes部署指南
ArgoCD 是一款基于 Kubernetes 的声明式 GitOps 持续交付工具,通过自动同步 Git 存储库中的配置与 Kubernetes 集群状态,确保一致性与可靠性。它支持实时同步、声明式设置、自动修复和丰富的用户界面,极大简化了复杂应用的部署管理。结合 Helm Charts,ArgoCD 提供模块化、可重用的部署流程,显著减少人工开销和配置错误。对于云原生企业,ArgoCD 能优化部署策略,提升效率与安全性,是实现自动化与一致性的理想选择。
153 0
无感改造,完美监控:Docker 多阶段构建 Go 应用无侵入观测
本文将介绍一种基于 Docker 多阶段构建的无侵入 Golang 应用观测方法,通过此方法用户无需对 Golang 应用源代码或者编译指令做任何改造,即可零成本为 Golang 应用注入可观测能力。
237 85
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
362 33
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
208 19
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
使用容器服务ACK快速部署QwQ-32B模型并实现推理智能路由
阿里云最新发布的QwQ-32B模型,通过强化学习大幅度提升了模型推理能力。QwQ-32B模型拥有320亿参数,其性能可以与DeepSeek-R1 671B媲美。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等