kubernetes(K8s)学习(一)

本文主要是搭建一个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: 1
  selector:
    matchLabels:
      app: demo-server
  template:
    metadata:
      labels:
        app: demo-server
    spec:
      containers:
        - name: demo-server
          image: an/demo_server:v1.0.0
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: demo-server
spec:
  selector:
    app: demo-server
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 31001
  type: 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值