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:


 

分类: 容器技术

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
19天前
|
Kubernetes 网络协议 应用服务中间件
K8S二进制部署实践-1.15.5
K8S二进制部署实践-1.15.5
31 0
|
28天前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Docker和Kubernetes的实践指南
【2月更文挑战第30天】 在当今快速发展的云计算时代,传统的IT运维模式已难以满足业务的敏捷性和稳定性需求。本文深入探讨了如何通过Docker容器化技术和Kubernetes集群管理工具构建一个高效、可靠的自动化运维体系。文章首先概述了容器化技术和微服务架构的基本概念,随后详细阐述了基于Docker的应用打包、部署流程,以及Kubernetes在自动化部署、扩展和管理容器化应用中的关键作用。最后,文中通过案例分析,展示了如何在实际场景中利用这些技术优化运维流程,提高系统的整体效率和可靠性。
|
14天前
|
数据库 存储 监控
什么是 SAP HANA 内存数据库 的 Delta Storage
什么是 SAP HANA 内存数据库 的 Delta Storage
16 0
什么是 SAP HANA 内存数据库 的 Delta Storage
|
21天前
|
Kubernetes 流计算 Perl
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
30 7
|
4天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
11 4
|
5天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
15 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
3天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
35 17
|
14天前
|
Ubuntu Linux Shell
docker学习笔记3,从入门到精通
docker学习笔记3,从入门到精通
|
14天前
|
应用服务中间件 Shell nginx
docker学习笔记2,入门到精通
docker学习笔记2,入门到精通
|
14天前
|
Ubuntu 网络协议 Docker
docker学习笔记1,入门到精通
docker学习笔记1,入门到精通