m一6一yoh重坦(m6a2e1重型坦克)
重甲匹夫,从未上过战场的重型坦克,二战美国T1/M6系列重型坦克
在第二次世界大战爆发前后,当时世界上主要的装甲强国下辖的坦克装备体系中,一般都包含了轻型坦克、中型坦克和重型坦克三种不同级别的坦克。轻、中、重三种不同规格的坦克,在实际的战斗中,能够根据自身的优势执行不同的侦查、协同和攻击任务,综合作战效果比只使用单一种类的坦克效果会来得更好。
大部分人对苏德重型坦克更熟悉一些
但是在第二次世界大战中,在欧洲战场奋战的美军装甲部队,在大部分情况下,都是使用轻型坦克和中型坦克来执行作战任务。即使是在遭遇了德国装甲部队的新式坦克之后,也是使用M10/36系列和“地狱猫”反坦克歼击车来与德军对抗,难道二战美军装甲部队就没有重型坦克吗?
美军大部分情况下用反坦克歼击车代替重型坦克执行任务
其实早在第二次世界大战爆发之初,美国装甲兵委员会和美械局就已经开始着手为美军装甲部队研制相配套的重型坦克,而T1/M6系列重型坦克,就是美国二战期间众多重型坦克项目中的一个。而今天,本文就为各位读者大致介绍一下美国的T1/M6系列重型坦克,让各位读者对二战美国早期的重型坦克有更清晰的了解。
重甲匹夫诞生前的铺垫——从T1重型坦克到T1E3重型坦克的探索之路在第二次世界大战爆发前,美国陆军中只装备有两种类型的坦克,分别是配属给骑兵部队使用的轻型坦克和配属给步兵用于协同进攻的中型坦克。虽然当时美械局已经基于苏联等国家的多炮塔坦克方案,向美国陆军提交过多炮塔重型坦克的设计方案,但是美国陆军认为重型坦克行驶速度太慢,在未来战争中不具备优势,因此拒绝掉了这些重型坦克的提案。
同时期苏联装备的T-100多炮塔重型坦克
当德国闪击波兰,并快速击败了法国之后,美国陆军这才惊觉自己手上的装甲力量在德军新锐坦克的面前,并无任何性能上的优势。于是美国陆军从1940年前后开始责成相关机构为美国陆军研制全新的轻型、中型、重型坦克。
基于苏联多炮塔重型坦克在包括苏芬战争中的糟糕表现,美国陆军并不看好多炮塔坦克,于是美国陆军建议美械局直接研制一款全重50吨,采用单炮塔设计的重型坦克,原型车获得了T1的试验车编号,T1重型坦克项目正式起步。
T1重型坦克的小比例模型
作为美军历史上的第一款重型坦克,T1重型坦克上汇集了当时美国在坦克领域的所有现成技术。为了能够使用威力更大的主炮,T1重型坦克拥有一个直径达1.75米的炮塔座圈,以承载体积更大的新式炮塔。新式炮塔可以电动旋转,在电动装置出问题的情况下,也可以由车组成员手动进行旋转。
在主炮方面,T1重型坦克搭载了一门3英寸火炮作为主炮。为了防止在3英寸主炮出现故障时坦克无法进行反击,3英寸主炮左侧还布置了一门37毫米同轴反坦克炮。而在自卫火力方面,除了车体前方的2挺7.62毫米自卫机枪和驾驶员右侧的双联装12.7毫米重机枪之外,T1重型坦克的炮塔后部还安装有一挺由车长操纵的12.7毫米重机枪,用于对坦克后部出现的目标进行攻击。
T1重型坦克布置图
作为一款战斗全重超过50吨的重型坦克,美械局估计T1重型坦克至少需要1000马力的发动机才能够进行正常行驶作战。但是此时美国国内的各大发动机生产商均有供货任务在身,最终,美械局挑中了960马力的怀特G-200型汽油发动机,作为T1重型坦克的动力。
T1重型坦克的四视图
在防护方面,T1重型坦克的正面为30度角布置的83毫米钢装甲,侧面装甲的厚度为70毫米,且为垂直装甲,炮塔周身装甲同样也为83毫米,为了保护行走装置,负重轮、诱导轮和悬挂装置还有裙甲保护。单纯从纸面数据上来看,T1重型坦克的防御水平在当时还是十分出色的。
原本T1重型坦克使用的是液压变速箱,但是在T1原型车生产阶段,因为工厂方面的原因,原有的液压变速箱不能够按时交货。不得已之下,美械局只好改用全新的油电混合传动变速箱作为T1原型车的变速装置,使用全新油电混合传动变速箱的T1原型车也随之改名为T1E1原型车。
采用新油电混合传动装置的T1E1原型车
但是等到了1941年,通用公司的油电混合传动变速箱也出现了问题,无法按时交付。不得已之下,美械局只好重新选择柏德林工厂的T-16001型扭矩传动变速箱作为原型车的传动装置,此时的原型车试验编号,也从T1E1改为了T1E2。
1941年年底,T1E2原型车第一次正式向美国陆军进行性能演示。不过和美械局一开始对其的高期望不同,T1E2原型车在演示过程中频频出错,不是传动装置失灵,就是在上下坡车体大于一定的角度时,电动炮塔失灵,且以人力无法进行正常转动。
正在进行越障测试的T1E2原型车
按照正常情况,T1E2原型车项目基本上就要下马了。但是此时的美国陆军装甲部队并没有更好的备用方案,只好要求美械局以T1E2原型车为基础,针对演示中所暴露出来的问题,继续进行深度改进。美械局根据美国陆军装甲部队的意见,对T1E2原型车从传动装置到车体外形进行了全面改进。
在传动装置方面,美械局采用更加稳定可靠的双盘式变矩器替代了原来的扭矩传动变速箱。在车体方面,取消了原来前车体底部布置的2挺7.62毫米航向机枪,同时,取消了驾驶员前部的观察窗,以提升坦克正面整体的防御能力,并且为车长增加了新的观瞄设备,提升了车长的观测体验。
上面为铸造车体的M6,下面是焊接车体的M6A1
因为当时美械局通过“谢尔曼”中型坦克的研制和生产,已经掌握了铸造车体和焊接车体技术。所以,除了稳步推动铸造车体的T1E2原型车改进之外,美械局同时也在推动使用焊接车体的T1E3原型车的研制。最终,美械局在1942年年初,正式通过了这两款重型坦克的测试验收。其中使用铸造车体的T1E2获得了M6的装备编号,使用焊接车体的T1E3则获得了M6A1的编号。
此时的M6系列重型坦克,虽然表面上看起来非常不错,但是其基本设计思想还停留在过去。其高约3米的车身在欧洲平原上几乎没有任何隐蔽性可言,而其侧面装甲虽然厚度不错,但是都呈垂直布置,极易被击穿。
整个侧面车体都是垂直布置
当然,美国陆军装甲兵在此时也看到了M6系列重型坦克的不足和缺陷。因此在M6和M6A1重型坦克正式定型之后,马上展开了相应的升级工作。
重甲匹夫的进化——从M6A2到M6A2E1上文我们曾提到过使用油电混合传动变速箱的T1E1原型车,虽然通用公司并未及时在原型车阶段生产出合格的油电混合传动变速箱,但是后来赶上了。因为油电混合传动变速箱的综合表现更好,因此,美械局就将使用油电混合传动变速箱的T1E1原型车定型为M6A2。
M6A2重型坦克
此时,美国各大生产厂商一共接收到了230辆M6系列重型坦克的生产订单,其中115辆为性能更好的M6A2型。虽然英国方面一开始就向美国订购了M6系列重型坦克,但是美国陆军出于私心,决定将115辆性能较好的M6A2留作自用,性能较差的M6基本型和M6A1则全部提供给英国方面。
不过,此时战场的变化影响了M6系列重型坦克的量产工作。随着德军新式坦克的出现,美军装甲部队认为M6系列重型坦克并无法满足自己的使用需要,于是拒绝接收,不得已之下,美国陆军只好将已经生产出来的40辆M6系列重型坦克用于训练之用。
美军自用的都是较好的M6A2型
在M6系列重型坦克彻底停产前,美械局曾想用全新的90毫米火炮取代其原先装备的3英寸主炮,来提升M6系列重型坦克的整体性能。虽然在安装和“杰克逊”反坦克歼击车同款的T7型90毫米火炮后,M6系列重型坦克的反装甲火力确实增强了不少,但是也造成炮塔内部空间过小,操作不便等问题,最终这个项目也不了了之。
安装T7型90毫米火炮的M6重型坦克
除了90毫米火炮之外,为了直接对抗德军最新的“黑豹”中型坦克,美械局在1944年还曾尝试给M6系列重型坦克安装105毫米榴弹炮,并为这门长身管的105毫米榴弹炮设计了一个大型的炮塔。因为炮塔的重量太大,车体上的炮塔座圈直径也由原来的1.75米扩展到2.3米,这辆全新的M6重型坦克就是著名的M6A2E1。
虽然美械局对M6A2E1寄予了极大的期待,但是该车完全不适合上战场。首先是其整车战斗全重高达77吨,在当时的欧洲战场上机动会很困难。其次,是其硕大的炮塔过于沉重,即使是使用电力进行驱动,其转速也非常低下,最终M6A2E1也没有获得上战场的机会。
身形高大的M6A2E1
美械局在M6系列重型坦克的改进过程中,一直都未能解决M6系列重型坦克重量过大的问题。甚至在后期的M6A2E1重型坦克上,超重问题反而变得更加明显。这也让这位美国的“重甲匹夫”到最后都没能上战场真实检验下自己的战斗力。
总结——被动力和传动系统所拖累的重型坦克作为美军在二战时正儿八经设计的第一款重型坦克,M6系列重型坦克不仅承担了技术变革的风险,本身也承担了作战理念变革的风险。从初期的垂直装甲到后来倾斜的车体前装甲,早期的3英寸主炮到后面的105毫米榴弹炮,M6系列重型坦克还是取得了非常不错的成绩。
过重的体重给传动机构带来了极大的负担
但是这种成绩和当时美苏两国的重型坦克相比,却又显得有些上不了台面。以德国的虎式坦克为例,虽然其使用了垂直装甲布置,但是却使用了质量更好的装甲板和焊接技术,因此在保证车内空间的同时,其最大重量仅有68吨,远小于M6A2E1的77吨,M6A2E1的装甲厚度虽然看起来不错,但是布置方式和制造工艺导致其实际防护能力并不如预期。
此外,虽然也有备用的柴油机设计方案,但是美军更偏向于喜欢汽油机方案,导致M6系列重型坦克一直面临动力不足的问题,而其使用的油电混合传动变速箱虽然性能不错,但是整体结构却比较复杂,可靠性相对也比较低了一点。
法国的ARL-44重型坦克
如果真的要为M6系列重型坦克找一位比较靠近的对手,法国在战后研制的ARL-44重型坦克相对来说比较合适,这两款坦克都属于落后于时代的重型坦克,无论是制造技术还是搭配使用的作战理念,均已不再满足当时的作战需要。
从未上过战场的M6重型坦克
身材高大、体重过人的M6系列重型坦克,就像一个披挂了重型铠甲的匹夫一样。虽然看起来气势汹汹且战力一流,但是却始终没有上战场的机会,只能够静静地端坐在后方观望,这对于一款武器来说,并不算是太好的结局。
Gitlab+Jenkins Pipeline+k8s在生产环境中的应用
系统环境说明GitLab Community Edition 11.9.8Jenkins ver. 2.190.3仓库使用阿里的镜像仓库Kubernetes v1.14.2gitlab和jenkins-master可以选择自建或者部署到k8s中,当前场景是部署在k8s集群之外;
镜像仓库可以选择使用harbor或者阿里镜像仓库,当前场景使用的是阿里的镜像仓库;
编译发布流程流程很简单,提交代码到不同的分支,触发通知到jenkins,jenkins pipeline会根据Jenkinsfile文件中定义k8s环境,动态生成一个jenkins slave在不同k8s环境中构建镜像,推送镜像到仓库,然后在部署到对应k8s环境,部署结束后jenkins slave会自动终止
集成配置过程因为都是现有的环境,所以部署过程就省略了,直接开始做集成配置;如果你是全新安装的Jenkins,选择安装推荐插件+kubernetes插件;现在假如插件都已经安装完成了,jenkins登陆默认账户admin,密码查看/var/jenkins_home/secrets/initialAdminPassword文件,下面开始配置
点击左侧系统管理,打开系统配置,我们这里要实现部署发布到2个k8s环境,所以我们配置两个云,先新增一个云
名称:随便填,后面Jenkinfile会用到
Kuberneters地址:填写apiserver地址
Kuberneters服务证书key:需要拿k8s的crt和key做格式转换,下面会介绍
Kubernetes 命名空间:填写jenkins slave要生成的命名空间,这个自己看着填吧
凭据:需要拿k8s的crt和key做格式转换,然后生成jenkins全局凭据
Jenkins地址:填写jenkins master地址,也就是当前jenkins地址
Jenkins通道:填写jenkins master与jenkins slave通信地址,jenkins通信端口默认是50000
配置第一个k8s相关信息,过程中会用到认证k8s apiserver的key和凭证,所以我们先获取下需要的key和凭证(在要配置的k8s master机器操作)
$ cat /root/.kube/config apiVersion: v1clusters:- cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRFNU1EWXdOakV3TWpZd09Wb1hEVEk1TURZd016RXdNall3T1Zvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSlBSCmFnUlVKVytleDlKeTFZOXEzUVpNZk0wWnFJbkxjOE43RFVnZnM4TktlUVh2SUFCNkxxdjBSNFY4VUNnYnZ6dEMKVitxdElGNUM5bmE5VFQzT3hVNkUwQnVmWTcwTmJBZ2dPN0RTN1FvQVc3ZG5HUnBDTmNieWg5dytZYi9vbkNCdgo3M28vRi9scnhFZ01jNFhuYTR6OGhXbm5STmdjcVBSVnNyWGFiVSt6TStsbVZEaEpwWE96dnVmMmZRb3creGF4CndaWnVwUmF5VDBESHVHbmpaQnkrNnFwQVdZampqaE9WOUhGcTlQQUpMUXAzR2xZdklueFgxUkJscTYyVFdZMW8KcjIvTFBRTUhjOUV6VFlVN21Qb0laQ3dqa1dPTzZmc1NFVHpBTk9ad1NlSlBRSW5XV1NlQXlsWjA4V2tNWjdVcQpDNkZHVml1REFVbE1HczBMMlhzQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFFc1I5T2VSRW45NXdSaTA2UnI2SVhUcDhJeHkKSytmdFJyM1pZckZ5VWZZYTBWdU9Mc1NZdzByN1o5Zmk0ZUFlMEk4dnR2cWpqWWl6RzFnUFAyS3V4d0h4RmtJRApMQnlNRmRTSG5yVEVZeWo2NVFnbUtCWVpEZ0VkMnZpVnBTeHM4Y3dCZXgvT201VnErZnROanAwK2swaGdhV2xxCjBDZmtkbjM0MkY2bUhSZFNyeGg3eURleGNtNEtGck5OVnNPY0h5MEJhQXhwZ0JOUmErMG5oZ1dDbHh1M0F4OWgKaVRELzAyczRCcWZKTFZjZXk0Q2VnWW8zUDVDYWVjTTZSaTg4TVFKYlZ1OWx6RVZPUzlBRGNKZ0VkWkdHUFUyVwpEcHBhZXdZNjhSVVg1MG9ObXN2S2h1RGNCSWxyeHJ4T2J4Wk1wYm5hYldUMlFaKzM4ampEaDNwVmxhcz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= server: https://192.168.0.54:6443 name: kubernetescontexts:- context: cluster: kubernetes user: kubernetes-admin name: kubernetes-admin@kubernetescurrent-context: kubernetes-admin@kuberneteskind: Configpreferences: {}users:- name: kubernetes-admin user: client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQWRxZ0F3SUJBZ0lJSzZSZWRVQ2NNS0V3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB4T1RBMk1EWXhNREkyTURsYUZ3MHlNREEyTURVeE1ESTJNVEZhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTBrcW1jci9DNHBaSTgwUTAKTzBOaklRV1hPelQ0TmVPVFJQd0N1UW1CaDlZcUJ0QTBkZnJvVnRzT2JRTEdlWE5GUVlhRzM5V2ZsN292YURCNwp3Wm11WVo3alZKUm9BZmpldEg3d0lIN3pNYUdCbk1hN3RoTUNqWXBmdXRpQyszQm51cjFLRmFJR2FKcDNlK0NQCjAyVjdSVDJjUXFPbHVOVUtFSEl2UG15YTdKM0pHWUpLNFVBVEhQOVhIMVZNemVoc3N5ZjF5UTZZb1BxTTR1b08KVGVNN3g0NFcvS2hrWjBMWkhncnB5RDJQNlN2NGVoaGl6YTQrdUk1Si80OFhhVFJwMUxINmdGODVhalkwNXIybApQUW95dDFPTEdIVHZtRnA3ei9QMHBKbUJpcGQwcktBeFNJLzU5SU93elYyRFNpQmp4TjQwSWpKNWhidlczNHNFCmtHNTFTUUlEQVFBQm95Y3dKVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFFWGM0VUhiOVFMSisvU2t0S3dhOVpydVJ3THBhV0NVeE80Sgo1Mml0eHdZK3JLdE9WQVBsKzdNRjVmcWU3UUhmcW0yMjFmR1V6UW50VERpM1RjOVNsdUVDdjdxdHBCcHczZ1pYCnZpSmIvakRRTWwrdmhvZW95UlpiUmhWZG5kUU5lS1FoUzl4UEw3Rmx2d0pRUnNsWTlCdWJ4L3lsVC9KRElKcFcKRzJhanM4ZGNyWUlLeGlEbjdQSTZqeFB1OURRVUgraGVza1M5VXRwcUF3M3pBdjFCaG5kV2FEWUNQc293MnloVAp1RFNrWG9XVE9rTlQ2UDVWREdob3VZbzJ4emhJeDl4NWllMVpLOHlnODY5THZvZkJQNk5oRnZRNDRPQkFyR29JCnNJcDNJT0ZpaWJjVW1wVXNZNWJ2OEVXbjBNdXkxN1VjVTlvMkYvTnpuQ1hZV1JEVUViVT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBMGtxbWNyL0M0cFpJODBRME8wTmpJUVdYT3pUNE5lT1RSUHdDdVFtQmg5WXFCdEEwCmRmcm9WdHNPYlFMR2VYTkZRWWFHMzlXZmw3b3ZhREI3d1ptdVlaN2pWSlJvQWZqZXRIN3dJSDd6TWFHQm5NYTcKdGhNQ2pZcGZ1dGlDKzNCbnVyMUtGYUlHYUpwM2UrQ1AwMlY3UlQyY1FxT2x1TlVLRUhJdlBteWE3SjNKR1lKSwo0VUFUSFA5WEgxVk16ZWhzc3lmMXlRNllvUHFNNHVvT1RlTTd4NDRXL0toa1owTFpIZ3JweUQyUDZTdjRlaGhpCnphNCt1STVKLzQ4WGFUUnAxTEg2Z0Y4NWFqWTA1cjJsUFFveXQxT0xHSFR2bUZwN3ovUDBwSm1CaXBkMHJLQXgKU0kvNTlJT3d6VjJEU2lCanhONDBJako1aGJ2VzM0c0VrRzUxU1FJREFRQUJBb0lCQUE3bXcweTJVZlVFZVQ3agp3bC9Bc3JHUVY5c1dNZEIvdzl2TGo5WFUycHpwakNqWGNDQThHMktzT3lWMllPSVNUUUlMcWxzS0pEajROSXZKCmc3dUFURjhXaHoxakZzdXMrdnNIVTdTNXlqbm1HKzBrR0FFYTc3OWY0dEMycnZGcVVhOWw0bTRPQVM1QVk5OGYKVnBIQVN5L280YjNISXVNcUZZQjgxdVF4aGZqbVJHTWJ3dFdRM090dUU1d2xQRDJwOFBqTElaQVNsVTZ2RlpoQQpMWCs0ZjIyMWRjSkxTVGhqTDFiVHFPM1NkazE3WjZOV1M1Ym9TMFptY0JSOFhLUHNqUHFVek5zRFVxeCs1cDdKCkFXVGNlYjB4dWZYTldDV3Y3N3NUcTBjdyt6UXNwbVZwbFkzMjA4d0c5Tm9FYm5hMGFNQ1ZacG1oK3BSR2xOelkKRlNZNU9rRUNnWUVBMGxLcjI2S3IvMU1KcGFGMHRtWWNHcVRzd093bklBMzBNemk2blN5SVd1Q21qRWs3ZU5zSgpTRUk5cWRPRzhhWGw3VGZpa2VYUko1b3MxcDFZZzh2TUdpam01NGI3ejYybFZRUWtsOWZPSlVGM1YzQkgyR2p2CjRpOFZVTUl5ZmNSRmZUUFZEeGtKbHZtdnZCS0kwZU9UV0daVmFxb1AzZ0d0SW5lVDlmbEgwUTBDZ1lFQS8vWTgKbzZaelRtejIyVWVXZW5aemlNOHBxRHBqVU5DRnlKemJqajNvN1ZsTGRSc0FybnpFZnVNaUo5YjZ2dVpaWXQzRwp2bEZFMDBiYnNQWmRVbzArenJvSEZMK2JqQ1QrODl1UUFJRHFHcGtyYUdIZ0IxelZyMHF2L0NXajlnbzkrdUxhCjJKQk5ud1RSczlsbzE1ZzV1YnJPRWFBNzlBaExEeEFuZFA3Z0RpMENnWUFyODBpa2NmN2RNUDRBRlpndEVYTm8KQWZUVGI4WFJSZmsweHZNQUt6RW5SSENwT2hocWJlTW5yV2Z6V0JlSDRiSUZlenNtWDg3d0pxQ2VERzFWeFQyVwpiZHVxb0NONHg0R1lIWENFSm4yV2ZYS3gyKzIzaEY0MGRzQk9pdlpBSDhhaG5qWTBuSGZMaTh1MFVtOHk1UXFDClc0Z1g3UWU1emNIZlJQdXZWL013OVFLQmdRQy8rKzFYd2cxU2thQkZNTkRKWWZjZWNtUUlibUwzeHEvUjNQVkIKSjJhQ1FDdTgxbGdZaURUS0I0c2kzcmlNWHpKRVdad3NPOENueDhvWVhYRjU3YjlpUjEzd1RoZFpjcFpZU2lNawpmWTBhRGpEa3hpVEc0UGJWMSt0UDhOdWVPK2hwT2FaME1TaEhVZElJVjlXdmY5b3NXTlVmbTFQY29pdktUSStMCnpYQTRzUUtCZ0ZsUnpoeDlYczJ2L1h1VGl0NE1mNUpMU2ppNk93c3pZVXNmTzVMQ1BVbGQrcjA5dmFsS0tPQlcKU1FUVDhTdnBpMzZhQVFTV0xCUUdVYkh2VlJ0QkJHOWxiY2JSSHlla1RrYksxTEwxVk0zKzdtRXZCUDFZZU9qZQpwWkRlTWcrZWQyY3F5MDJhZWwxbGhBK3dJRmlnUzV5bGY0Z25paFBnMVZ2WmJIUGIzREdGCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
我们用到的Kubernetes 服务证书转换 keycertificate-authority-data,凭据转换client-certificate-data和client-key-data
获取/root/.kube/config中certificate-authority-data的内容并转化成base64 encoded文件,将生成的ca.crt文件内容填写到jenkins kubernetes的Kubernetes 服务证书key中
$ echo LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRFNU1EWXdOakV3TWpZd09Wb1hEVEk1TURZd016RXdNall3T1Zvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSlBSCmFnUlVKVytleDlKeTFZOXEzUVpNZk0wWnFJbkxjOE43RFVnZnM4TktlUVh2SUFCNkxxdjBSNFY4VUNnYnZ6dEMKVitxdElGNUM5bmE5VFQzT3hVNkUwQnVmWTcwTmJBZ2dPN0RTN1FvQVc3ZG5HUnBDTmNieWg5dytZYi9vbkNCdgo3M28vRi9scnhFZ01jNFhuYTR6OGhXbm5STmdjcVBSVnNyWGFiVSt6TStsbVZEaEpwWE96dnVmMmZRb3creGF4CndaWnVwUmF5VDBESHVHbmpaQnkrNnFwQVdZampqaE9WOUhGcTlQQUpMUXAzR2xZdklueFgxUkJscTYyVFdZMW8KcjIvTFBRTUhjOUV6VFlVN21Qb0laQ3dqa1dPTzZmc1NFVHpBTk9ad1NlSlBRSW5XV1NlQXlsWjA4V2tNWjdVcQpDNkZHVml1REFVbE1HczBMMlhzQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFFc1I5T2VSRW45NXdSaTA2UnI2SVhUcDhJeHkKSytmdFJyM1pZckZ5VWZZYTBWdU9Mc1NZdzByN1o5Zmk0ZUFlMEk4dnR2cWpqWWl6RzFnUFAyS3V4d0h4RmtJRApMQnlNRmRTSG5yVEVZeWo2NVFnbUtCWVpEZ0VkMnZpVnBTeHM4Y3dCZXgvT201VnErZnROanAwK2swaGdhV2xxCjBDZmtkbjM0MkY2bUhSZFNyeGg3eURleGNtNEtGck5OVnNPY0h5MEJhQXhwZ0JOUmErMG5oZ1dDbHh1M0F4OWgKaVRELzAyczRCcWZKTFZjZXk0Q2VnWW8zUDVDYWVjTTZSaTg4TVFKYlZ1OWx6RVZPUzlBRGNKZ0VkWkdHUFUyVwpEcHBhZXdZNjhSVVg1MG9ObXN2S2h1RGNCSWxyeHJ4T2J4Wk1wYm5hYldUMlFaKzM4ampEaDNwVmxhcz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= | base64 -d > /tmp/ca.crt$ cat /tmp/ca.crt -----BEGIN CERTIFICATE-----MIICyDCCAbCgAwIBAgIBADANBgkqhkiG9w0BAQsFADMRMwEQYDVQQDEwprdWJlcm5ldGVzMB4XDTE5MDYwNjEwMjYwOVoXDTI5MDYwMzEwMjYwOVowFTETMBEGA1UEAxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJPRagRUJW+ex9Jy1Y9q3QZMfM0ZqInLc8N7DUgfs8NKeQXvIAB6Lqv0R4V8UCgbvztCV+qtIF5C9na9TT3OxU6E0BufY70NbAggO7DS7QoAW7dnGRpCNcbyh9w+Yb/onCBv73o/F/lrxEgMc4Xna4z8hWnnRNgcqPRVsrXabU+zM+lmVDhJpXOzvuf2fQow+xaxwZZupRayT0DHuGnjZBy+6qpAWYjjjhOV9HFq9PAJLQp3GlYvInxX1RBlq62TWY1or2/LPQMHc9EzTYU7mPoIZCwjkWOO6fsSETzANOZwSeJPQInWWSeAylZ08WkMZ7UqC6FGViuDAUlMGs0L2XsCAwEAAaMjMCEwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAEsR9OeREn95wRi06Rr6IXTp8IxyK+ftRr3ZYrFyUfYa0VuOLsSYw0r7Z9fi4eAe0I8vtvqjjYizG1gPP2KuxwHxFkIDLByMFdSHnrTEYyj65QgmKBYZDgEd2viVpSxs8cwBex/Om5Vq+ftNjp0+k0hgaWlq0Cfkdn342F6mHRdSrxh7yDexcm4KFrNNVsOcHy0BaAxpgBNRa+0nhgWClxu3Ax9hiTD/02s4BqfJLVcey4CegYo5CaecM6Ri88MQJbVu9lzEVOS9ADcJgEdZGGPU2WDppaewY68RUX50oNmsvKhuDcBIlrxrxObxZMpbnabWT2QZ+38jjDh3pVlas=-----END CERTIFICATE-----
获取/root/.kube/config中client-certificate-data和client-key-data的内容并转化成base64 encoded文件
$ echo LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQWRxZ0F3SUJBZ0lJSzZSZWRVQ2NNS0V3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB4T1RBMk1EWXhNREkyTURsYUZ3MHlNREEyTURVeE1ESTJNVEZhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTBrcW1jci9DNHBaSTgwUTAKTzBOaklRV1hPelQ0TmVPVFJQd0N1UW1CaDlZcUJ0QTBkZnJvVnRzT2JRTEdlWE5GUVlhRzM5V2ZsN292YURCNwp3Wm11WVo3alZKUm9BZmpldEg3d0lIN3pNYUdCbk1hN3RoTUNqWXBmdXRpQyszQm51cjFLRmFJR2FKcDNlK0NQCjAyVjdSVDJjUXFPbHVOVUtFSEl2UG15YTdKM0pHWUpLNFVBVEhQOVhIMVZNemVoc3N5ZjF5UTZZb1BxTTR1b08KVGVNN3g0NFcvS2hrWjBMWkhncnB5RDJQNlN2NGVoaGl6YTQrdUk1Si80OFhhVFJwMUxINmdGODVhalkwNXIybApQUW95dDFPTEdIVHZtRnA3ei9QMHBKbUJpcGQwcktBeFNJLzU5SU93elYyRFNpQmp4TjQwSWpKNWhidlczNHNFCmtHNTFTUUlEQVFBQm95Y3dKVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFFWGM0VUhiOVFMSisvU2t0S3dhOVpydVJ3THBhV0NVeE80Sgo1Mml0eHdZK3JLdE9WQVBsKzdNRjVmcWU3UUhmcW0yMjFmR1V6UW50VERpM1RjOVNsdUVDdjdxdHBCcHczZ1pYCnZpSmIvakRRTWwrdmhvZW95UlpiUmhWZG5kUU5lS1FoUzl4UEw3Rmx2d0pRUnNsWTlCdWJ4L3lsVC9KRElKcFcKRzJhanM4ZGNyWUlLeGlEbjdQSTZqeFB1OURRVUgraGVza1M5VXRwcUF3M3pBdjFCaG5kV2FEWUNQc293MnloVAp1RFNrWG9XVE9rTlQ2UDVWREdob3VZbzJ4emhJeDl4NWllMVpLOHlnODY5THZvZkJQNk5oRnZRNDRPQkFyR29JCnNJcDNJT0ZpaWJjVW1wVXNZNWJ2OEVXbjBNdXkxN1VjVTlvMkYvTnpuQ1hZV1JEVUViVT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= | base64 -d > /tmp/client.crt$ echo LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBMGtxbWNyL0M0cFpJODBRME8wTmpJUVdYT3pUNE5lT1RSUHdDdVFtQmg5WXFCdEEwCmRmcm9WdHNPYlFMR2VYTkZRWWFHMzlXZmw3b3ZhREI3d1ptdVlaN2pWSlJvQWZqZXRIN3dJSDd6TWFHQm5NYTcKdGhNQ2pZcGZ1dGlDKzNCbnVyMUtGYUlHYUpwM2UrQ1AwMlY3UlQyY1FxT2x1TlVLRUhJdlBteWE3SjNKR1lKSwo0VUFUSFA5WEgxVk16ZWhzc3lmMXlRNllvUHFNNHVvT1RlTTd4NDRXL0toa1owTFpIZ3JweUQyUDZTdjRlaGhpCnphNCt1STVKLzQ4WGFUUnAxTEg2Z0Y4NWFqWTA1cjJsUFFveXQxT0xHSFR2bUZwN3ovUDBwSm1CaXBkMHJLQXgKU0kvNTlJT3d6VjJEU2lCanhONDBJako1aGJ2VzM0c0VrRzUxU1FJREFRQUJBb0lCQUE3bXcweTJVZlVFZVQ3agp3bC9Bc3JHUVY5c1dNZEIvdzl2TGo5WFUycHpwakNqWGNDQThHMktzT3lWMllPSVNUUUlMcWxzS0pEajROSXZKCmc3dUFURjhXaHoxakZzdXMrdnNIVTdTNXlqbm1HKzBrR0FFYTc3OWY0dEMycnZGcVVhOWw0bTRPQVM1QVk5OGYKVnBIQVN5L280YjNISXVNcUZZQjgxdVF4aGZqbVJHTWJ3dFdRM090dUU1d2xQRDJwOFBqTElaQVNsVTZ2RlpoQQpMWCs0ZjIyMWRjSkxTVGhqTDFiVHFPM1NkazE3WjZOV1M1Ym9TMFptY0JSOFhLUHNqUHFVek5zRFVxeCs1cDdKCkFXVGNlYjB4dWZYTldDV3Y3N3NUcTBjdyt6UXNwbVZwbFkzMjA4d0c5Tm9FYm5hMGFNQ1ZacG1oK3BSR2xOelkKRlNZNU9rRUNnWUVBMGxLcjI2S3IvMU1KcGFGMHRtWWNHcVRzd093bklBMzBNemk2blN5SVd1Q21qRWs3ZU5zSgpTRUk5cWRPRzhhWGw3VGZpa2VYUko1b3MxcDFZZzh2TUdpam01NGI3ejYybFZRUWtsOWZPSlVGM1YzQkgyR2p2CjRpOFZVTUl5ZmNSRmZUUFZEeGtKbHZtdnZCS0kwZU9UV0daVmFxb1AzZ0d0SW5lVDlmbEgwUTBDZ1lFQS8vWTgKbzZaelRtejIyVWVXZW5aemlNOHBxRHBqVU5DRnlKemJqajNvN1ZsTGRSc0FybnpFZnVNaUo5YjZ2dVpaWXQzRwp2bEZFMDBiYnNQWmRVbzArenJvSEZMK2JqQ1QrODl1UUFJRHFHcGtyYUdIZ0IxelZyMHF2L0NXajlnbzkrdUxhCjJKQk5ud1RSczlsbzE1ZzV1YnJPRWFBNzlBaExEeEFuZFA3Z0RpMENnWUFyODBpa2NmN2RNUDRBRlpndEVYTm8KQWZUVGI4WFJSZmsweHZNQUt6RW5SSENwT2hocWJlTW5yV2Z6V0JlSDRiSUZlenNtWDg3d0pxQ2VERzFWeFQyVwpiZHVxb0NONHg0R1lIWENFSm4yV2ZYS3gyKzIzaEY0MGRzQk9pdlpBSDhhaG5qWTBuSGZMaTh1MFVtOHk1UXFDClc0Z1g3UWU1emNIZlJQdXZWL013OVFLQmdRQy8rKzFYd2cxU2thQkZNTkRKWWZjZWNtUUlibUwzeHEvUjNQVkIKSjJhQ1FDdTgxbGdZaURUS0I0c2kzcmlNWHpKRVdad3NPOENueDhvWVhYRjU3YjlpUjEzd1RoZFpjcFpZU2lNawpmWTBhRGpEa3hpVEc0UGJWMSt0UDhOdWVPK2hwT2FaME1TaEhVZElJVjlXdmY5b3NXTlVmbTFQY29pdktUSStMCnpYQTRzUUtCZ0ZsUnpoeDlYczJ2L1h1VGl0NE1mNUpMU2ppNk93c3pZVXNmTzVMQ1BVbGQrcjA5dmFsS0tPQlcKU1FUVDhTdnBpMzZhQVFTV0xCUUdVYkh2VlJ0QkJHOWxiY2JSSHlla1RrYksxTEwxVk0zKzdtRXZCUDFZZU9qZQpwWkRlTWcrZWQyY3F5MDJhZWwxbGhBK3dJRmlnUzV5bGY0Z25paFBnMVZ2WmJIUGIzREdGCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg== | base64 -d > /tmp/client.key
将上面生成的文件转换为P12认证文件cert.pfx,并下载至本地;生成过程中设置的密码要记住,后面有用
$ openssl pkcs12 -export -out /tmp/cert.pfx -inkey /tmp/client.key -in /tmp/client.crt -certfile /tmp/ca.crtEnter Export Password:Verifying - Enter Export Password: $ sz /tmp/cert.pfx
然后回到jenkins配置全局凭据
最终新增kubernetes云配置,点击连接测试,提示成功即可
配置第二个k8s相关信息,过程和配置第一个k8s一样,不再过多说明了
创建流水线项目打开Bule Ocean,请创建你的第一个流水线,选择代码仓库为Git
输入要创建流水线的Git项目仓库地址,输入后jenkins会自动生成公钥,把生成的公钥配置在gitlab的ssh key中,然后点击创建流水线
创建流水线时候,Jenkins会自动检测git项目各个分支的根目录是否存在文件“Jenkinsfile”,如果存在就生成一个分支流水线,下图中生成了分支master和分支docker流水线
到目前为止流水线已经配置完成,但是还无法实现自动触发构建,需要配置扫描多分支流水线触发器;设置1分钟检测一次
触发构建之前我们先看下流水线执行构建部署的Jenkinsfile文件内容,文件保存在git项目的各个分支
def label = "slave-${UUID.randomUUID().toString()}"podTemplate(cloud: 'kubernetes', label: label, containers: [ containerTemplate(name: 'docker', image: 'docker', command: 'cat', ttyEnabled: true), containerTemplate(name: 'kubectl', image: 'bitnami/kubectl', command: 'cat', ttyEnabled: true),], volumes: [ hostPathVolume(mountPath: '/root/.kube', hostPath: '/root/.kube'), hostPathVolume(mountPath: '/var/run/dockerck', hostPath: '/var/run/dockerck')]) { node(label) { def myRepo = checkout scm def gitCommit = myRepo.GIT_COMMIT def gitBranch = myRepo.GIT_BRANCH def imageTag = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim() def dockerRegistryUrl = "registry-beijing.aliyuncs" def imageEndpoint = "addnewer-dsc/approval-fe" def image = "${dockerRegistryUrl}/${imageEndpoint}" stage('构建 Docker 镜像') { withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'DockerRegistry', usernameVariable: 'DOCKER_HUB_USER', passwordVariable: 'DOCKER_HUB_PASSWORD']]) { container('docker') { echo "3. 构建 Docker 镜像阶段" sh """ docker login ${dockerRegistryUrl} -u ${DOCKER_HUB_USER} -p ${DOCKER_HUB_PASSWORD} docker build -t ${image}:${imageTag} . docker push ${image}:${imageTag} """ } } } stage('Run kubectl') { container('kubectl') { sh """ sed -i "s#<IMAGE>#${image}#g" *.yaml sed -i "s#<IMAGE_TAG>#${imageTag}#g" *.yaml kubectl apply -f . """ } } }}
podTemplate(cloud: 'kubernetes' 我们要实现不同分支部署到不同k8s环境,所以我们不同分支中Jenkinsfile中pod模版要指定不同的cloud,这个很重要;默认名称为kubernetes,这个名称对应我们在jenkins中新增k8s云的名称containerTemplate(name: 'docker' 指定我们需要构建镜像需要用到的docker镜像containerTemplate(name: 'kubectl' 指定我们部署容器到k8s需要用到的kubectl镜像hostPathVolume(mountPath: 上面指定镜像依赖的映射文件def imageTag 生成镜像tag名称def dockerRegistryUrl 定义docker仓库地址stage('构建 Docker 镜像') 定义流水线构建docker镜像执行步骤 credentialsId: 'DockerRegistry', 从jenkins全局凭据获取docker仓库id usernameVariable: 'DOCKER_HUB_USER',从jenkins全局凭据获取docker仓库用户名 passwordVariable: 'DOCKER_HUB_PASSWORD'从jenkins全局凭据获取docker仓库密码stage('Run kubectl') 定义流水线部署应用到k8s执行步骤,部署应用的yaml文件也是在git项目中后缀为yaml的文件
了解了上面的Jenkinsfile流水线文件的执行流程后,可以看到我们还没有在jenkins中添加docker仓库的全局凭据,下面我们添加
流水线构建测试提交任何变更到git项目,1分钟后jenkins会自动检测到变更,开始执行流水线;这里我随便提交下测试代码,就可以看到流水开始执行了
通行证高级房打累了试试中级房?坦克世界6级重坦实用推荐
通行证高级房打累了试试中级房?坦克世界6级重坦实用推荐
在《坦克世界》新版本更新之后,不少玩家都表示由于HE弹伤害机制的改动,导致许多8级金币车在进了高级房之后游戏体验极差。胜率不高、没有伤害,进而导致通行证的进度也受到了一定的影响。如今,中级房应该是游戏体验最好的了一个分房了。在没有了KV-2和120吨I型的超火力HE威慑之后,这个级别的游戏环境可以说是优化了不少。下面小编就给大家来推荐一下,适合用来打通行证的中级房实用重坦。
KV2
或许有人看到这个车会有这样的疑问:它152喷子炮都不好使了怎么还推荐?这里我们就不得不提到曾经在5级KV年代的两种流派了:107流和152流。要知道,KV当年是可以选择两门主炮的,一门是长身管的107炮,另一门就是神教152炮。与近几年清一色的152炮不同,早年还是有不少玩家会选择107炮的,小编就是其中之一。在升级到6级之后,152炮的表现更加突出。不过新版本更新之后,152炮已经彻底走下神坛。然而即使只有107炮,KV2的火力依旧非常凶猛可堪一战。
T150
选择T150同样是因为这门107炮,而且与KV2相比,T150的防御力提高了不止一个档次。小编认为,大家完全可以把T150当做一个防护强化版的KV2去玩。只要计算好开火时机,T150的输出将会非常恐怖。
ARL44
这辆车可谓是“一炮遮百丑”,90毫米传家宝拥有冠绝中级房重坦的穿深。实战当中手感也是极其优秀,在HE改版之后,其主炮高穿深的优势更是得以发挥得淋漓尽致。可以说在目前所有的6级重坦当中,ARL44在高级房的游戏体验应该是最好的一个。而且以目前WG的平衡计划来看,8级以下车很少会吃到锉刀。也就是说,这辆车的火力优势还将会持续很长的一段时间。
244工程
这是目前当之无愧的6级第一重坦。尽管它的单发伤害并不出色,但是DPM、火炮手感以及防护能力等方面综合起来之后,244工程在中级房当中的实力无出其右。小编在最近的一场对局当中,甚至完成了1V6的夸张表。在中级房的对线当中,用“一夫当关万夫莫开”来形容244的强大,根本毫不为过。
最后要说的是是一位老将——M系6级重坦M6。这辆车在各个方面,其实都不是特别突出。但是,它强就强在综合性能突出。虽然说M系的特色就在于均衡,但是如今放眼整个M系,过于均衡的它们在游戏当中的表现已经趋近于弱势了。但是在M6身上,我们还能够看到一些全能战士的影子。
各位小伙伴你们觉得还有哪些6级的重坦可以用来肝通行证呢?欢迎大家在下方的评论区说出你的想法哦!喜欢游戏的朋友们一定要记得点关注哦!小编会持续为大家带来与游戏圈相关的优质内容,兔司机爱你哟~
声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送至邮件举报,一经查实,本站将立刻删除。转载务必注明出处:http://www.hixs.net/article/20240422/169624451132396.html