kubernetes谷歌浏览器 谷歌beta浏览器

大家好,感谢邀请,今天来为大家分享一下kubernetes谷歌浏览器的问题,以及和谷歌beta浏览器的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

kubernetes谷歌浏览器 谷歌beta浏览器

本文目录

  1. springbootmavenplugin必须要有吗
  2. Kubernetes(K8S)入门与安装配置
  3. k8s组件coredns以及dashboard

一、springbootmavenplugin必须要有吗

Created-By: Maven Archiver 3.4.0

Implementation-Title: springbootfirst

Implementation-Version: 0.0.1-SNAPSHOT

SpringBoot插件生成的jar包结构为

BOOT-INF/classes中包含项目所有的class文件,BOOT-INF/lib下包含项目依赖的第三方jar包,MANIFEST.MF文件内容为

Created-By: Maven Archiver 3.4.0

Implementation-Title: springbootfirst

Implementation-Version: 0.0.1-SNAPSHOT

Main-Class: org.springframework.boot.loader.JarLauncher

Start-Class: com.imooc.springbootfirst.SpringbootfirstApplication

Spring-Boot-Version: 2.1.6.RELEASE

Spring-Boot-Classes: BOOT-INF/classes/

Spring-Boot-Lib: BOOT-INF/lib/

描述文件中的Start-Class就是我们项目的启动类,我们可以查看插件源码来分析

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

<version>2.2.1.RELEASE</version>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-loader</artifactId>

<version>2.2.1.RELEASE</version>

RepackageMojo就是repackage打包要执行的逻辑,核心类为Repackager

在插件创建MANIFEST.MF文件过程中,如果我们没有配置MainClass属性,就会通过MainClassFinder类来查找MainClass

private static final String SPRING_BOOT_APPLICATION_CLASS_NAME="org.springframework.boot.autoconfigure.SpringBootApplication";

protected String findMainMethod(JarFile source) throws IOException{

return MainClassFinder.findSingleMainClass(source, this.layout.getClassesLocation(),

SPRING_BOOT_APPLICATION_CLASS_NAME);

在所有类中查找包含SpringBootApplication注解且包含main方法的类,并当做启动类,内部通过ASM字节码库来解析class文件得到类信息。

java-jar springbootfirst-0.0.1-SNAPSHOT.jar

java启动jar包会找META-INF/MANIFEST.MF文件中的Main-Class来启动,SpringBoot插件最终生成的Main-Class为 org.springframework.boot.loader.JarLauncher类。

public class JarLauncher extends ExecutableArchiveLauncher{

static final String BOOT_INF_CLASSES="BOOT-INF/classes/";

static final String BOOT_INF_LIB="BOOT-INF/lib/";

protected JarLauncher(Archive archive){

protected boolean isNestedArchive(Archive.Entry entry){

return entry.getName().equals(BOOT_INF_CLASSES);

return entry.getName().startsWith(BOOT_INF_LIB);

public static void main(String[] args) throws Exception{

new JarLauncher().launch(args);

最终运行的是MANIFEST.MF文件中Start-Class,值为com.imooc.springbootfirst.SpringbootfirstApplication,其实就是我们项目中配置的启动类。

public abstract class Launcher{

protected void launch(String[] args) throws Exception{

JarFile.registerUrlProtocolHandler();

//根据BOOT-INF/classes下的class文件和BOOT-INF/lib下的第三方jar包创建Archive

//创建的ClassLoader为LaunchedURLClassLoader类型

ClassLoader classLoader= createClassLoader(getClassPathArchives());

launch(args, getMainClass(), classLoader);

*创建新的LaunchedURLClassLoader,从多个URL中加载class

protected ClassLoader createClassLoader(URL[] urls) throws Exception{

return new LaunchedURLClassLoader(urls, getClass().getClassLoader());

*将新的类加载器设置到线程上下文中,并启动应用程序

protected void launch(String[] args, String mainClass, ClassLoader classLoader) throws Exception{

Thread.currentThread().setContextClassLoader(classLoader);

createMainMethodRunner(mainClass, args, classLoader).run();

*创建一个Main方法运行器来启动应用程序

protected MainMethodRunner createMainMethodRunner(String mainClass, String[] args, ClassLoader classLoader){

return new MainMethodRunner(mainClass, args);

创建新的ClassLoader类型LaunchedURLClassLoader,从BOOT-INF/classes下和BOOT-INF/lib下的所有jar包中加载class。加载我们整个项目的都是LaunchedURLClassLoader类加载器。

public class MainMethodRunner{

private final String mainClassName;

* Create a new{@link MainMethodRunner} instance.

*@param mainClass the main class

*@param args incoming arguments

public MainMethodRunner(String mainClass, String[] args){

this.mainClassName= mainClass;

this.args=(args!= null)? args.clone(): null;

public void run() throws Exception{

//使用线程上下文类加载器加载MainClass,就是我们项目中的SpringbootfirstApplication

Class<?> mainClass= Thread.currentThread().getContextClassLoader().loadClass(this.mainClassName);

Method mainMethod= mainClass.getDeclaredMethod("main", String[].class);

mainMethod.invoke(null, new Object[]{ this.args});

springboot打包插件spring-boot-maven-plugin打包机制及内部结构分析

«上一篇: IDEA中对非Maven项目导出jar包

»下一篇: java实现对图片打马赛克

posted@ 2021-11-04 18:50  strongmore 阅读(6395) 评论(0) 编辑 收藏 举报

登录后才能查看或发表评论,立即登录或者逛逛博客园首页

【推荐】阿里云新人特惠,爆款云服务器2核4G低至0.46元/天

·一次 SQL调优,聊一聊 SQLSERVER数据页

·终于弄明白了 RocketMQ的存储模型

·应届毕业生程序员在面试时如何做好自我介绍?

·不规则图形背景排版高阶技巧--酷炫的六边形网格背景图

·来自一位十年.net研发老人的吐血整理:.Net技术栈-网址导航

·做算法的这一年——2022年个人年终总结

·.Net 7团队把国内的龙芯确实当做一等公民和弃用的项目

·我希望来年,更多是靠关系和模式挣钱——2022年我的总结与思考

·平淡详和的一年——2022年个人总结与思考

1.单元测试框架之Junit使用及原理分析

3.Kotlin学习之Kotlin和Java之间相互调用

8.SpringMVC整合Swagger简单使用及原理分析

9.SpringMVC源码分析之一个请求的处理

4. jdk8升级jdk11踩坑记录(lombok版本不兼容)(7465)

5. IDEA版本和Maven版本不兼容的问题(6840)

1. Lombok原理分析及简单实现(4)

2. java中BloomFilter(布隆过滤器)简单使用(3)

3. java中如何通过程序检测线程死锁(1)

4. Spring中表达式语言spring-expression简单使用(1)

5.关于100个人随机给钱的模拟实验(1)

3. java进行PDF和图片之间的相互转换(2)

1. Re:Spring中表达式语言spring-expression简单使用

2. Re:java中BloomFilter(布隆过滤器)简单使用

@strongmore好的好的,感谢回复~~...

3. Re:java中BloomFilter(布隆过滤器)简单使用

4. Re:java中BloomFilter(布隆过滤器)简单使用

您好,请问您这是是如何查看内存使用情况的?您是在eclipse上运行的代码吗?

博主介绍的短链接生成核心代码的确挺实用的,短链接就是将长的网页址通过技术方法进行缩短为短串。其实短链接只有生成和跳转还不能满足实际业务需求,还需要考虑其使用场景,目前短链接使用场景主要是短信内带短链接...

Copyright© 2023 strongmore

Powered by.NET 7.0 on Kubernetes

3. 插件是如何找到启动类的

二、Kubernetes(K8S)入门与安装配置

Kubernetes是一个跨主机集群的开源的容器调度平台,它可以自动化应用容器的部署、扩展和操作,提供以容器为中心的基础架构。谷歌旗下开源软件,江湖人称K8S。

上图是一个通过K8S搭建的集群环境,采用三台物理机搭建(三台机器是K8S搭建集群的最低要求),我先简单介绍一下几个重点名词。

Centos7Master*1(注意必须是双核以上的CPU,否则无法初始化K8S)

网盘地址:

提取码:aew7

运行dockerimages可以看到以下几个关键应用

kube-proxy容器间通讯代理、kube-apiserverAPI服务端、kube-scheduler任务调度器、kube-controller-manager集群控制器、corednsK8S内置的DNS服务器、etcd用于保存集群所有的网络配置和对象的状态信息、pause前面已经提到用于容器间的通讯以及数据卷的挂载。至此K8S安装完成

图中的第一个红框的命令是需要管理员手动复制,然后在master服务器上执行的。

PS:admin.conf是kubeadm集群管理的核心配置文件,包含整个集群各个节点的授权信息,以及本身的一些配置信息

第二个红框中的命令是在node节点上执行,里面包含了一个加入集群的token认证信息以及ca证书的hashcode。通过该token可以加入K8S集群.

从图中看到master节点处于NotReady状态,说明节点中存在有问题的Pod,查看存在问题的pod,执行以下命令查看所有Pod状态

如果某个Pod的STATUS处于CrashLoopBackOff状态表示创建失败了,那么它会不断自动重新创建。上图中两个coredns处于pending状态,原因是我们没有配置K8S网络通讯协议fannel,从上传的文件中加载并创建flannel网络组件

3.在node节点上执行刚刚由kubeadm生成的节点加入命令

如果出现反复无法加入节点的情况,运行kubeadmreset这条命令还原当前节点上kubeadminit或者kubeadmjoin所做的所有更改。当想加入新节点忘记token时可以使用kubeadmtokenlist查看token,或者kubeadmtokencreate创建token,采用跳过ca安全认证的方式加入节点。

4.三台机器设置kubelet开机自启,至此通过kubeadm集群配置完成

在主节点上执行以下命令,以下三个配件都是已经配置好的,装载即可。

图中dashboard服务已经被创建,配置文件中关闭了密码验证,只需要浏览器打开无需登录。

三、k8s组件coredns以及dashboard

我们创建的service并不存在coredns里面而是存在了etcd中当我们请求某个域名的时候会把请求发给coredns coredns再把请求发给apiserver apiserver再去etcd中拿取数据返回给dns dns返回给客户端

nginx想要请求后端的tomcat首先nginx会把tomcat的service地址发送给coredns coredns发给apiserver apiserver去etcd中拿取对应的解析地址返回给coredns nginx从coredns中拿到tomcat的ip地址后就会把客户端请求转发给tomcat

当pod需要访问k8s集群外的域名时 pod还是会把解析请求发给coredns我们会在coredns里面配置forward转发到我们公司内部的域名服务器(bind)如果域名是公司内部使用的 bind就会解析此域名并把ip返回给coredns

如果此域名为外部互联网域名我们还会在bind中配置forward转发到公网dns中进行解析

我们配置service地址段的时候此地址段的第一个IP默认分发给apiserver第二个IP默认分发给dns

在kubenetes的安装包中包含了许多组件的yaml模板我们可以通过模板来安装coredns

打开github搜索kubernetes选择右下角的release选择k8s相应版本

查看_ DNS__DOMAIN _的值此值为/etc/kubeasz/clusters/qijia01/hosts里面CLUSTER_DNS_DOMAIN的值

替换coredns中的k8s.gcr.io/coredns/coredns:v1.8.0镜像为coredns/coredns:1.8.0应为k8s.gcr.io/coredns/coredns:v1.8.0镜像是谷歌的在国外法拉取成功

完整的yaml文件,修改了dns_doman地址 dns_forward地址 coredns镜像 dns地址内存大小

实时修改coredns的副本数,把replicas修改为2

node级别 localdns-cache(需要每个node节点都缓存一份,node过多不建议使用)

pod级别 dnsmasq(需要每个pod都缓存一份,pod过多不建议使用)

coredns延长coredns缓存的时间(最优但是需要消耗内存)

添加一个forword,假如我有一个域名为myserver.online是公司内部使用的测试域名,当k8s中的pod访问这个后缀的域名时我希望他把解析请求交给内部的bind服务器(172.16.16.16:53)

在核心文件Corefile最下面加上forward

删掉再重新创建也可以直接用apply

使用nslookup测试dns解析,前提是你的 net-test1要有nslookup没有的话需要安装bind-utils

先看一下k8s的版本,然后选择兼容版本的dashboard

github上面提供了dashboard的镜像还有yaml文件

查看dashboard的service是否创建成功

我们发现kubernetes-dashboard这个service默认使用的是 ClusterIP,并没有把443端口给映射到宿主机,所以此端口只能在集群内部使用,我们并没有办法通过浏览器访问

解决方法:在dashboard.yaml中找到kubernetes-dashboard这个service的配置信息并将service的类型改为nodeport,默认是ClusterIP

重新部署后发现service已经把443端口暴露出来了

3004会监听在任意一个宿主机上面(master和node)因为这些宿主机都是通过apiserver从etcd统一拿取的数据

此时我们可以通过任意一个master或者node的ip加上30004通过https协议来访问dashboard

此时我们需要创建一个登录的账号并且授予权限

如果你还想了解更多这方面的信息,记得收藏关注本站。

声明:信息资讯网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者东方体育日报所有。若您的权利被侵害,请联系 删除。

本文链接:http://www.gdxhedu.com/news/125359.html