kubernetes(K8s)学习(一)

ops/2024/10/19 1:33:15/

本文主要是搭建一个k8s平台,并部署一个springboot的jar包,后续以此作为学习k8s的环境。

1. 搭建k8s集群

        网上有很多指导,大家可以在网上搜索一下,比如这个:K8s搭建集群-CSDN博客,本人通过VMware安装3台虚拟机,部署了3个节点,最终的效果如下,master节点的ip是192.168.102.10,node1节点的ip是192.168.102.11,node2节点的ip是192.168.102.12:

2. 编写java代码

        本文实现一个springboot访问接口,在外部可通过80端口访问,关键代码如下:

package com.kingyal.test.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;@RestController
public class HelloWorldController {private static int count = 0;@RequestMapping("/hello")public String hello(String name){count++;String time = getCurrenttime();String printLog = "hello String boot, current time is :"+time +" ,count = " + String.valueOf(count);System.out.println(printLog);return printLog;}private String getCurrenttime() {LocalDateTime currentDateTime = LocalDateTime.now();DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");String timestamp = currentDateTime.format(formatter);return timestamp;}
}

3. 编写Dockerfile文件

        dockerfile文件的目的是编译出对应的docker镜像,该文件必须命名为Dockerfile:

#基础镜像 java打包需要依赖jdk
FROM openjdk:8-jre-alpine
#将日志打印到/var/log目录下
VOLUME /var/log
#将虚拟机的war包,cp到docker容器内部
COPY springboot_demo-1.0-SNAPSHOT.jar springboot_demo-1.0-SNAPSHOT.jar
#指定docker容器时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Beijing' >/etc/timezone
# 脚本启动
ENTRYPOINT ["sh","-c","java -server -Dfile.encoding=utf-8 -Xms1024m -Xms1536m -jar -Dserver.port=80  -Dspring.profiles.active=prod springboot_demo-1.0-SNAPSHOT.jar"]

4. 编写yaml文件

        编写yaml文件是k8s的关键文件,通过该文件,可以指定pod的相关参数,,该文件的命名必须以.yaml后缀结果,比如可取名为deployment.yaml,详情后续再说:

apiVersion: apps/v1
kind: Deployment
metadata:name: demo-server
spec:replicas: 1selector:matchLabels:app: demo-servertemplate:metadata:labels:app: demo-serverspec:containers:- name: demo-serverimage: an/demo_server:v1.0.0ports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: demo-server
spec:selector:app: demo-serverports:- protocol: TCPport: 80targetPort: 80nodePort: 31001type: NodePort

5. 部署到k8s,查看结果

将Dockerfile,yaml文件deployment.yaml,以及jar包上传到master节点的某个目录下:

将Dockerfile,以及jar包分别上传到node1,node2节点的某个目录下:

由于没有做镜像仓库,因此,需要在3个节点都编译镜像,在3个节点都执行此命令:docker image build -t an/demo_server:v1.0.0 .

执行docker images命令可看到镜像已经编译完成:

在master节点执行yaml文件,即执行此命令 kubectl apply -f deployment.yaml:

执行此命令 kubectl get pod -A -owide 查看pod运行状态,此时可以看到jar包对应的镜像在node2节点上生成了一个pod,并且正在运行中:

在mster节点执行此命令 curl http://192.168.102.12:31001/hello ,可以访问到pod中的tomcat返回的数据:

也可以在浏览器中输入 http://192.168.102.12:31001/hello,访问到数据:

至此,已经实现在k8s中部署jar包并成功访问,后续基于此环境继续深入学习k8s。


http://www.ppmy.cn/ops/122390.html

相关文章

ip的类型有多少种?我想做大数据需要使用哪一种

IP地址主要分为两种类型: IPv4(Internet Protocol version 4): 由32位二进制数组成,通常以四个十进制数表示(例如:192.168.1.1)。每个十进制数的范围是0到255。IPv4地址的总数量约为…

亲测无限坐席在线客服系统源码/二开版/基于ThinkPHP+搭建教程

源码简介: 亲测了一款实用的无限坐席在线客服系统源码,这可是基于ThinkPHP框架开发的二开版哦!里面还附带了一份超详细的搭建教程。 安装过程简直不能更简单,只需一键操作,启动两个端口就搞定了。而且,它…

【查找算法概念】与【线性表的相关查找算法】

1.知识回顾 2.查找算法相关问题汇总 2.1在哪里查找 查找表 2.2通过什么进行查找 关键字的对应 主关键字:比如我们可以通过一个学号来唯一确定一名学生 这里的学号就是一种主关键字。 次关键字:而通过一个名字李华,我们可能会确定不止一名…

Python项目文档生成常用工具对比

写在前面: 通过阅读本片文章,你将了解:主流的Python项目文档生成工具(Sphinx,MkDocs,pydoc,Pdoc)简介及对比,本文档不涉及相关工具的使用。 概述 近期,由于…

鸿蒙next开发者第一课02.DevEcoStudio的使用-习题

【习题】DevEco Studio的使用 通过/及格分80/ 满分100 判断题 1. 如果代码中涉及到一些网络、数据库、传感器等功能的开发,均可使用预览器进行预览。F 正确(True)错误(False) 预览器不能进行传感器等特殊功能的开发,需要使用真机开发 2. module.json5文件中的…

【python】对象池的使用,如何封装一个对象池管理器

对象池是一种用于管理和复用对象实例的设计模式,通过在需要时从对象池中获取对象,使用完毕后再归还给对象池,可以提高性能和减少资源消耗。下面是一个简单的对象池使用和对象池管理器的封装示例:首先,我们需要定义一个…

MQ(仅供自己参考)

同步通讯的优缺点: 优点:时效高,数据一致,过程简单 缺点:耦合度高。性能下降。CPU等待资源的浪费。级联失败。 2、异步通讯:异步调用常见的实现就是事件驱动模式 异步的优缺点: 优点&#xf…

1.Python 引入(字面量、注释、变量、数据类型、数据类型转换、标识符、运算符、字符串扩展)

一、字面量 1、基本介绍 在代码中,被写直接下来的、不需要通过变量存储的值,称之为字面量 2、常用值类型 类型说明数字(Number)整数(int),例如:10、-10浮点数(float&…