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