-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrss.xml
More file actions
13856 lines (9928 loc) · 560 KB
/
rss.xml
File metadata and controls
13856 lines (9928 loc) · 560 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
<channel>
<title>WR's Blog</title>
<link>https://blog.vgmdj.cn/</link>
<description>vgmdj's personal blog.</description>
<generator>Hugo 0.62.2 https://gohugo.io/</generator>
<language>en-US</language>
<managingEditor>vgmdj.wr@gmail.com (VGMDJ)</managingEditor>
<webMaster>vgmdj.wr@gmail.com (VGMDJ)</webMaster>
<copyright>[VGMDJ.WR](https://blog.vgmdj.cn)</copyright>
<lastBuildDate>Wed, 08 Jan 2020 13:43:06 +0800</lastBuildDate>
<atom:link rel="self" type="application/rss+xml" href="https://blog.vgmdj.cn/rss.xml" />
<item>
<title>2019年度总结</title>
<link>https://blog.vgmdj.cn/post/2019%E5%B9%B4%E5%BA%A6%E6%80%BB%E7%BB%93/</link>
<guid isPermaLink="true">https://blog.vgmdj.cn/post/2019%E5%B9%B4%E5%BA%A6%E6%80%BB%E7%BB%93/</guid>
<pubDate>Thu, 26 Dec 2019 19:53:52 +0800</pubDate>
<description><![CDATA[<h1 id="回顾">回顾</h1>
<p>2019匆匆而过,审视整个一年中的自己,虽然仍没有达到理想中的目标,但好在进程仍在推进,没有虚度一年时间。</p>
<ul>
<li>对于年度目标,基本已完成</li>
<li>对于对比目标,目前而言还差30%左右</li>
<li>对于长期目标,目前确实还差的远,还差80%左右</li>
</ul>
<h1 id="目标">目标</h1>
<p>遥想最初来北京的时候,面试遇到一个面试官,各种嘲讽、蔑视,难受的同时,更多的是尴尬和羞愧,也发现了自己有很多的问题。后面不断的学习,也是为了以后再也不会遇到这种情况吧。</p>
<ul>
<li>19年的年度目标
<ul>
<li>减肥30斤,已达成(年初时180斤左右,目前143斤左右)</li>
<li>读30本书,已达成(原来是想只看专业类书,但没刷够数,近期离职期间,大量刷了一些心理学,健身方面的书,算是凑够数了)</li>
<li>尝试找女朋女,已达成(19年目标是尝试,虽然结果没成,但也算是完成了)</li>
<li>补足基础问题,已达成(leetcode 刷了200左右补算法,网络和操作系统把考研题刷了一轮)</li>
</ul></li>
<li>对比目标,对比目标算是长期目标的一种,只是是一个很模糊的概念,目前而言的对比对象,就是同级中的中上游水平的那批人,或是在同年毕业的同学或同年毕业的同事中的上游水平的人。</li>
<li>长期目标
<ul>
<li>一直以来的职业规划中,都是向着架构师的目标前进的。</li>
<li>我目前的优势在于毕业后目标基本明确,中间没有试图去转型成前端或区块链,每年都是在积累学习相关方面的内容。</li>
<li>我目前的劣势在于,对于架构师的理解还是太片面,虽然经过学习,大体上有了一个概念,但是没有见过活生生的,符合标准的例子(要与其一起工作,并且工作能体现出来他的专业才算)。</li>
</ul></li>
</ul>
<h1 id="事件">事件</h1>
<ul>
<li>前端入门</li>
<li>小程序入门</li>
<li>初步实践项目管理</li>
<li>初步实践整体架构设计(视野不够开阔,实践整体上还是小家子气)</li>
<li>跳槽</li>
</ul>
<h1 id="提升">提升</h1>
<p>一年里最大的提升就是磨平,耐住了性子,慢慢养成了阅读、健身、总结的习惯。</p>
<p>生活方面:</p>
<ul>
<li>羽毛球水平 upup</li>
<li>网球水平 upup</li>
<li>人际交流更为流畅</li>
<li>英语学了小半年,学了忘,忘了学,词汇量还是扩充了不少</li>
</ul>
<p>专业方面:<br>
基本上还是在还大学的债,大学没学明白的东西,现在再拾起来。总的来讲,工科还是一个实践的学科,理论不与实践结合,不自己亲自动手试一下,学了的东西还是会忘,而且难有明显的进步。</p>
<ul>
<li>算法能力有提升
<ul>
<li>动态规划问题,回溯问题基本都能有思路,并解决,但总体速度还是慢。</li>
<li>分治问题中等水平</li>
<li>贪心算法的问题,基本还是欠练</li>
</ul></li>
<li>网络
<ul>
<li>全部过了一轮</li>
<li>tcp基本是很细的过了几遍</li>
<li>剩余部分,仍然需要再好好过学一下,但是优先级可以向下排</li>
</ul></li>
<li>操作系统
<ul>
<li>全部过了一轮</li>
<li>进程,线程这块重点过了几遍</li>
<li>剩余部分还差得远</li>
</ul></li>
<li>分布式
<ul>
<li>微服务基本有了概念</li>
<li>常见问题基本了解</li>
</ul></li>
</ul>
<h1 id="仍需加强的点">仍需加强的点</h1>
<p>其实现在再回头看,大学学的内容真是的重点中的重点,来回学多少遍都不为过。很多东西,只学会使用方式,不能说没用,但是作用确实有限。基础作为根本,多年的完善,起码从理论方面已经不会大改,每次变动,只要学会变动部分,更新一下自己的知识图谱就可以了,和从头学比要简单太多。</p>
<p>基础篇:</p>
<ul>
<li>算法(leetcode 接着刷)</li>
<li>网络(与 unix 网络编程结合,更深入的理解 socket)</li>
<li>操作系统(与 linux 结合)</li>
<li>Mysql (开始更细致的学,主要从常遇到的问题入手)</li>
<li>Redis (源码级熟悉,实在不行抄一遍)</li>
<li>RabbitMQ(与Kafka 对比着学,主要从架构设计,怎么保证数据的不丢失,怎么保证吞吐量方面入手)</li>
<li>ElasticSearch (深入理解)</li>
</ul>
<p>项目篇:</p>
<ul>
<li>细致分析项目架构</li>
<li>细致分析工作中的高并发、分布式问题,并记录所做的操作与对应的解决问题的原理</li>
<li>细致学习软件工程在工作中的实践</li>
</ul>
<h1 id="2020年度目标">2020年度目标</h1>
<ul>
<li>健身刷脂,体重保持在140斤以下,体脂保持在18%以下</li>
<li>看书30本,并总结笔记
<ul>
<li>本专业书15本,主要学习软件工程,操作系统,分布式,互联网常用中间件方面,使已会的内容梳理地更系统,理解地更深入</li>
<li>非专业书15本,主要学习心理学,话术,历史,文学,管理学方面</li>
</ul></li>
<li>leetcode 刷300题(主要是要养成把刷题当成业余休闲的习惯,并熟悉 Python)</li>
<li>实践一个全栈项目(前端用 vue,后端用 python)</li>
</ul>]]></description>
<category domain="https://blog.vgmdj.cn/categories/%E8%81%8C%E4%B8%9A%E5%8F%91%E5%B1%95/">职业发展</category>
<category domain="https://blog.vgmdj.cn/tags/%E8%81%8C%E4%B8%9A%E5%8F%91%E5%B1%95/">职业发展</category>
</item>
<item>
<title>健身学习</title>
<link>https://blog.vgmdj.cn/post/%E5%81%A5%E8%BA%AB%E5%AD%A6%E4%B9%A0/</link>
<guid isPermaLink="true">https://blog.vgmdj.cn/post/%E5%81%A5%E8%BA%AB%E5%AD%A6%E4%B9%A0/</guid>
<pubDate>Wed, 24 Jul 2019 16:23:51 +0000</pubDate>
<description><![CDATA[<h1 id="健身学习">健身学习</h1>
<p>健身可使用自重和器械,都可以对自身进行锻炼,但也有些不同之处。在此记录的,是健身学习的总结和经验,学习和实践时间尚短,需要不时的来更新和更正,切记,切记。</p>
<h1 id="拉伸">拉伸</h1>
<p>拉伸分为静态拉伸和动态拉伸,运动前进行拉伸可以很好的避免受伤,但运动前进行静态拉伸,则会降低运动的能力。所以,在运动前适合使用动态拉伸,来活动开身体,避免运动中受伤;在运动后使用静态拉伸,消减延迟性肌肉疼痛。
注意点:静力拉伸的时候,不要大幅晃动,以免造成拉伸拉伤。</p>
<h1 id="肌群划分">肌群划分</h1>
<p>大肌群分为三部分:</p>
<ul>
<li>胸</li>
<li>背</li>
<li>腿</li>
</ul>
<p>小肌群主要有:</p>
<ul>
<li>肩</li>
<li>肱二头肌</li>
<li>肱三头肌</li>
<li>小臂</li>
<li>小腿</li>
<li>腹</li>
</ul>
<h1 id="计划安排原则">计划安排原则</h1>
<p>健身计划的安排,以能达到每个部位都锻炼和各部位锻炼间影响最小为基准进行。
练胸是推的动作,需要肱三头肌进行配合;练背是拉的动作,需要肱二头肌进行配合。即胸和肱三是协同肌,背和肱二是协同肌。若肌耐力较差,背+肱二的组合,会使练胸时,肱二不能完全恢复,使不上力气,从而让胸的训练效果减弱。</p>
<ul>
<li>胸+肱三头肌+肩</li>
<li>背+肱二头肌</li>
<li>腿+臀</li>
<li>腰腹穿插</li>
</ul>
<h1 id="训练注意点">训练注意点</h1>
<p>找准自身强弱点,来相应安排顺序(摸索动作发力阶段)。
比如练胸时一般会代偿到肱三头肌和肩,可以先让肩疲劳,这样更容易找到胸的发力感觉。但是如果肩和肱三头太弱,胸较强,如果先练肩和肱三头,会使练胸时重量加不上去。</p>
<h1 id="训练组数">训练组数</h1>
<p>一般我们要练的都是红肌,即线条好看,耗能大户,不易发胖体质必备。这时最好是让心率在130-150,先从低重量高次数,再加重量减次数。
完成后再来一组渐降组,即依次减重量,再加次数,直到彻底没力气,一次训练就算完成了</p>
<h1 id="训练达标标准">训练达标标准</h1>
<p>以休息后(心率下降到正常水平),仍无力做动作。或完成最低标准动作时,仍会出现大量借力和核心不稳等问题时,表明已经无法完成当前训练,训练已到位。
需要注意的是,如果换低重量仍可以继续,则表明仍然可以训练。如果换动作后仍可以继续,可能是协同的肌肉疲劳,而不是训练的部位到位,需要自己感受判断自身的情况是属于哪一种。</p>
<h1 id="练肩">练肩</h1>
<ul>
<li>弹力带</li>
<li>蝴蝶机反向飞鸟</li>
<li>哑铃侧平举</li>
</ul>
<h1 id="练胸动作">练胸动作</h1>
<ul>
<li>俯卧撑</li>
<li>杠铃卧推</li>
<li>哑铃飞鸟</li>
<li>龙门架夹胸</li>
<li>蝴蝶机夹胸</li>
</ul>
<h1 id="练背动作">练背动作</h1>
<ul>
<li>引体向上</li>
<li>高位下拉</li>
<li>俯身哑铃划船</li>
<li>坐姿绳索划船</li>
</ul>
<h1 id="练腿动作">练腿动作</h1>
<ul>
<li>深蹲</li>
<li>硬拉</li>
<li>杠铃负重深蹲</li>
</ul>
<h1 id="练腹">练腹</h1>
<ul>
<li>卷腹</li>
<li>俯卧挺身</li>
<li>龙旗</li>
</ul>]]></description>
<category domain="https://blog.vgmdj.cn/categories/%E7%94%9F%E6%B4%BB/">生活</category>
<category domain="https://blog.vgmdj.cn/tags/%E5%AD%A6%E4%B9%A0/">学习</category>
<category domain="https://blog.vgmdj.cn/tags/%E7%94%9F%E6%B4%BB/">生活</category>
</item>
<item>
<title>js学习-总览</title>
<link>https://blog.vgmdj.cn/post/js%E5%AD%A6%E4%B9%A0-%E6%80%BB%E8%A7%88/</link>
<guid isPermaLink="true">https://blog.vgmdj.cn/post/js%E5%AD%A6%E4%B9%A0-%E6%80%BB%E8%A7%88/</guid>
<pubDate>Tue, 16 Jul 2019 10:46:12 +0000</pubDate>
<description><![CDATA[<h1 id="javascript">JavaScript</h1>
<p>JavaScript 是一种可以给网站增加交互性的编程语言。JavaScript 是一种客户端语言,也就是说,设计它的目的是在用户的机器上而不是服务器上执行任务。因此,JavaScript 有一些固有的限制,这些限制主要出于如下安全原因。</p>
<ul>
<li>JavaScript 不允许写服务器机器上的文件。</li>
<li>JavaScript 不能关闭不是由它自己打开的窗口。这是为了避免一个站点关闭其他任何站点的窗口,从而独占浏览器。</li>
<li>JavaScript 不能从来自另一个服务器的已经打开的网页中读取信息。换句话说,网页不能读取已经打开的其他窗口中的信息,因此无法探察访问这个站点的使用者还在访问其他哪些站点。</li>
</ul>
<h1 id="javascript-脚本放在-head-和-body-中的区别">JavaScript 脚本放在 head 和 body 中的区别</h1>
<ul>
<li>在HTML body部分中的JavaScripts会在页面加载的时候被执行。</li>
<li>在HTML head部分中的JavaScripts会在被调用的时候才执行。</li>
</ul>
<p>如果放在 body 中,我们需要在页面加载完成后,再运行,可以在 js :</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">window.onload = initAll;
function initAll(){
......
}</code></pre></td></tr></table>
</div>
</div>
<h1 id="javascript-针对缓存的处理">JavaScript 针对缓存的处理</h1>
<p>针对使用 back 时,window.onload 不触发,可以使用 window.onunload 来解决,如果 window.onunload 被设置后,页面在后退时,不会使用缓存。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">window.onload = initAll;
window.onunload = function(){};</code></pre></td></tr></table>
</div>
</div>
<h1 id="javascript-的面向对象特性">JavaScript 的面向对象特性</h1>
<ul>
<li>Object, 就是某种东西。对于 JavaScript来说,它处理的对象都在 Web 浏览器中,比如窗口、表单,以及如按钮和复选框的表单元素。</li>
<li>Property, 在 JavaScript 环境中,文档有标题,表单可以有复选框。改变对象的属性就修改了这个对象。相同的属性名可以用于完全不同的对象。假设有一个名为 empty 的属性。在任何合适的地方都可以使用 empty,所以可以说猫的肚子空了,也可以说猫的食盆空了。注意,计算机的键盘和自行车的轮子不仅仅是属性,它们本身也是对象,可以具有自己的属性。所以,对象可以有子对象。</li>
<li>Method,对象可以做的事情称为方法。JavaScript 对象也有方法:按钮的 click(),窗口的 open(),文本的 selected()。圆括号表示它们是方法,而不是属性。</li>
</ul>
<h1 id="浏览器内核">浏览器内核</h1>
<p>浏览器内核是浏览器所彩的渲染内核。主流浏览器的内核有</p>
<ul>
<li>IE - Trident</li>
<li>Chrome - Webkit/Blink</li>
<li>Firefox - Gecko</li>
<li>Safari - Webkit</li>
<li>Opera - Presto</li>
</ul>
<h1 id="dom-document-object-model">DOM(Document Object Model)</h1>
<p>JavaScript 将 文档树中的每一项都当做对象,可以使用 JavaScript 操纵这些对象。用来表示文档中对象的标准模型就 称为 DOM.</p>
<h1 id="图像处理">图像处理</h1>
<p>翻转器是用 JavaScript 实现的一种常见且有效的效果,当用户将鼠标移动到图像上时,会改变网页上的图像,这样页面就能对用户的操作及时做出反应。</p>
<h1 id="事件处理">事件处理</h1>
<p>事件(event)是用户在访问页面时执行的操作。提交表单和在图像上移动鼠标就是两种事件。JavaScript 使用称为事件处理程序(event handler)的命令来处理事件。常见的事件有:</p>
<ul>
<li>窗口事件</li>
<li>表单事件</li>
<li>鼠标事件</li>
<li>键事件</li>
</ul>
<h1 id="窗口和框架处理">窗口和框架处理</h1>
<p>可实现对 iframe 和 window 的操作,包括且不限于 iframe 内内容替换(需同源),window 的重载与新建。</p>]]></description>
<category domain="https://blog.vgmdj.cn/categories/js/">js</category>
<category domain="https://blog.vgmdj.cn/tags/js/">js</category>
<category domain="https://blog.vgmdj.cn/tags/%E5%AD%A6%E4%B9%A0/">学习</category>
</item>
<item>
<title>容器学习-k8s证书更换</title>
<link>https://blog.vgmdj.cn/post/%E5%AE%B9%E5%99%A8%E5%AD%A6%E4%B9%A0-k8s%E8%AF%81%E4%B9%A6%E6%9B%B4%E6%8D%A2/</link>
<guid isPermaLink="true">https://blog.vgmdj.cn/post/%E5%AE%B9%E5%99%A8%E5%AD%A6%E4%B9%A0-k8s%E8%AF%81%E4%B9%A6%E6%9B%B4%E6%8D%A2/</guid>
<pubDate>Mon, 29 Apr 2019 09:14:15 +0000</pubDate>
<description><![CDATA[<h1 id="k8s证书-更换">k8s证书更换</h1>
<p>一般正常安装k8s集群,集群证书的有效期是一年,包括以下证书:</p>
<ul>
<li>apiserver</li>
<li>apiserver-kubelet-client</li>
<li>apiserver-etcd-client</li>
<li>front-proxy-client</li>
<li>etcd/server</li>
<li>etcd/peer</li>
<li>etcd/healthcheck-client</li>
</ul>
<h1 id="证书过期问题解决办法">证书过期问题解决办法</h1>
<ul>
<li>升级k8s集群,这是推荐方式</li>
<li>重新生成证书,这是懒人方式</li>
</ul>
<h1 id="过期表现">过期表现</h1>
<ul>
<li><p>kubectl 命令报错</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">$ kubectl get pods
Unable to connect to the server: x509: certificate has expired or is not yet valid
或
The connection to the server xxxxxx:6443 was refused - did you specify the right host or port?
ps:因证书过期,apiserver可能会挂掉,
如果存活,会报第一个错,
如果挂掉,会报第二个错</code></pre></td></tr></table>
</div>
</div></li>
<li><p>证书时间
cfssl-certinfo -cert /etc/kubernetes/pki/apiserver.crt | grep not</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">"not_before": "2017-04-26T14:03:35Z",
"not_after": "2018-04-23T06:57:24Z",</code></pre></td></tr></table>
</div>
</div></li>
</ul>
<h1 id="cfssl安装">cfssl安装</h1>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo</code></pre></td></tr></table>
</div>
</div>
<h1 id="操作-步骤">操作步骤</h1>
<h2 id="删除apiserver证书">删除apiserver证书</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">rm -f /etc/kubernetes/pki/apiserver*</code></pre></td></tr></table>
</div>
</div>
<h2 id="删除front-proxy-client证书">删除front-proxy-client证书</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">rm -f /etc/kubernetes/pki/front-proxy-client.*</code></pre></td></tr></table>
</div>
</div>
<h2 id="删除etcd证书">删除etcd证书</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">rm -rf /etc/kubernetes/pki/etcd/healthcheck-client.*
rm -rf /etc/kubernetes/pki/etcd/server.*
rm -rf /etc/kubernetes/pki/etcd/peer.*</code></pre></td></tr></table>
</div>
</div>
<h2 id="配置代理">配置代理</h2>
<p>因kubeadm alpha phase certs 会访问 <a href="https://dl.k8s.io" target="_blank">https://dl.k8s.io</a> ,然后跳转到 <a href="https://storage.googleapis.com/kubernetes-release" target="_blank">https://storage.googleapis.com/kubernetes-release</a> ,所以需要配置代理。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">#代理地址以实际为准
export http_proxy=socks5://127.0.0.1:1080
export https_proxy=socks5://127.0.0.1:1080</code></pre></td></tr></table>
</div>
</div>
<h2 id="重新生成证书">重新生成证书</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">kubeadm alpha phase certs apiserver --apiserver-cert-extra-sans xxxxxx --apiserver-advertise-address xxxxxx
kubeadm alpha phase certs apiserver-kubelet-client
kubeadm alpha phase certs front-proxy-client
kubeadm alpha phase certs apiserver-etcd-client
kubeadm alpha phase certs etcd-healthcheck-client
kubeadm alpha phase certs etcd-server
kubeadm alpha phase certs etcd-peer</code></pre></td></tr></table>
</div>
</div>
<h2 id="删除配置文件">删除配置文件</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">rm -f /etc/kubernetes/\*.conf</code></pre></td></tr></table>
</div>
</div>
<h2 id="重新生成配置文件">重新生成配置文件</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">kubeadm alpha phase kubeconfig all --apiserver-advertise-address xxxxxx</code></pre></td></tr></table>
</div>
</div>
<h2 id="重启kubelet">重启kubelet</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">systemctl restart kubelet</code></pre></td></tr></table>
</div>
</div>
<h1 id="新-slave-节点加入">新 slave 节点加入</h1>
<h2 id="生成token">生成token</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">在master节点上
$ kubeadm token create --print-join-command</code></pre></td></tr></table>
</div>
</div>
<p>运行后会创建有效期一天的token,并打印出 <strong>kubeadm join</strong> 指令</p>
<h2 id="ssh到要新加入节点运行指令">ssh到要新加入节点运行指令</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">$ kubeadm join ...... # 上一步打印出的指令</code></pre></td></tr></table>
</div>
</div>]]></description>
<category domain="https://blog.vgmdj.cn/categories/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F/">分布式系统</category>
<category domain="https://blog.vgmdj.cn/tags/k8s/">k8s</category>
<category domain="https://blog.vgmdj.cn/tags/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F/">分布式系统</category>
</item>
<item>
<title>grpc学习-总览</title>
<link>https://blog.vgmdj.cn/post/grpc%E5%AD%A6%E4%B9%A0-%E6%80%BB%E8%A7%88/</link>
<guid isPermaLink="true">https://blog.vgmdj.cn/post/grpc%E5%AD%A6%E4%B9%A0-%E6%80%BB%E8%A7%88/</guid>
<pubDate>Sat, 27 Apr 2019 08:16:21 +0000</pubDate>
<description><![CDATA[<h1 id="总览">总览</h1>
<ul>
<li>GRPC</li>
<li>protocol-buffers</li>
<li>protoc</li>
</ul>
<h2 id="grpc">GRPC</h2>
<p>gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C++, Python, Ruby, Objective-C, PHP, C#.</p>
<p>gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。</p>
<p>官方文档:</p>
<ul>
<li><a href="https://www.grpc.io/docs" target="_blank">https://www.grpc.io/docs</a></li>
</ul>
<p>中文文档(v1.0版本):</p>
<ul>
<li><a href="https://doc.oschina.net/grpc" target="_blank">https://doc.oschina.net/grpc</a></li>
</ul>
<h2 id="protocol-buffers">protocol-buffers</h2>
<p>gRPC 默认使用 protocol buffers,这是 Google 开源的一套成熟的结构数据序列化机制(当然也可以使用其他数据格式如 JSON)。</p>
<p>官方文档:</p>
<ul>
<li><a href="https://developers.google.com/protocol-buffers/" target="_blank">https://developers.google.com/protocol-buffers/</a></li>
</ul>
<h2 id="安装">安装</h2>
<p>以 <a href="https://github.com/vgmdj/grpc-example/tree/master/helloworld" target="_blank">https://github.com/vgmdj/grpc-example/tree/master/helloworld</a> 为例</p>
<ul>
<li>install protobuf compiler</li>
</ul>
<blockquote>
<p><a href="https://github.com/protocolbuffers/protobuf/blob/master/README.md#protocol-compiler-installation" target="_blank">https://github.com/protocolbuffers/protobuf/blob/master/README.md#protocol-compiler-installation</a></p>
</blockquote>
<ul>
<li>Install the protoc Go plugin</li>
</ul>
<blockquote>
<p>$ go get -u github.com/golang/protobuf/protoc-gen-go</p>
</blockquote>
<ul>
<li>Rebuild the generated Go code</li>
</ul>
<blockquote>
<p>$ protoc -I helloworld –go_out=plugins=grpc:./helloworld helloworld/helloworld.proto</p>
</blockquote>
<h2 id="protoc">protoc</h2>
<blockquote>
<p>protoc –proto_path=IMPORT_PATH –go_out=DST_DIR path/to/file.proto</p>
</blockquote>
<ul>
<li><p>–proto_path
指定了 .proto 文件所在的 <strong>目录</strong> 路径,如果为空,则默认为当前路径</p></li>
<li><p>-I IMPORT_PATH的简写,–proto_path 的简写使用</p></li>
<li><p>–go_out 生成GO代码在目标目录,go文件名和 proto文件相同,如file.proto ,生成后的go文件为 file.pb.go</p></li>
<li><p>plugins=grpc 与 –go_out结合,可以指定生成适配 grpc 的代码,使用方式为: –go_out=plugins=grpc:DST_DIR</p></li>
<li><p>*.proto IMPORT_PATH下的 proto文件,可以指定多个</p></li>
</ul>
<h1 id="举例">举例</h1>
<h2 id="定义-proto-格式">定义 proto 格式</h2>
<p>指定 proto3 语法,并指定一个 package,以避免包名的冲突问题。
如果提供了 go_package , 则GO package name以 go_package为主。
即便是提供了 go_package,package 也是需要的,这可以避免 Protocol Buffers name space 和非go语言中的定义冲突。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-go" data-lang="go"><span class="nx">syntax</span> <span class="p">=</span> <span class="s">"proto3"</span><span class="p">;</span>
<span class="kn">package</span> <span class="nx">grpc</span><span class="p">.</span><span class="nx">example</span><span class="p">;</span>
<span class="nx">option</span> <span class="nx">go_package</span> <span class="p">=</span> <span class="nx">address</span><span class="p">.</span><span class="nx">book</span>
<span class="kn">import</span> <span class="s">"google/protobuf/timestamp.proto"</span><span class="p">;</span></code></pre></td></tr></table>
</div>
</div>
<h2 id="定义-message">定义 message</h2>
<p>message 是包含有一系列定义的集合,可以使用一些标准的数据类型,包括 bool, int32, float, double, 和 string。 也可以自己定义结构体,使用 <strong>message</strong> 关键字进行定义。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">message Person {
string name = 1;
int32 id = 2; // Unique ID number for this person.
string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
string number = 1;
PhoneType type = 2;
}
repeated PhoneNumber phones = 4;
google.protobuf.Timestamp last_updated = 5;
}
// Our address book file is just one of these.
message AddressBook {
repeated Person people = 1;
}
// define response .
message Reply {
int32 code = 1;
string msg = 2;
}</code></pre></td></tr></table>
</div>
</div>
<p>在上面的例子中, Person message 包含了 PhoneNumber messages,同时 AddressBook message 包含了 Person messages。
当然,也可以如上面的例子一样,在message里定义一个messag(PhoneNumber就是定义在Person里)。
也可以使用 enum 指定field的取值范围</p>
<p>” = 1”, “ = 2” 标识了每一个元素,标识号1-15比更大的数字少一个字节进行编码,所以作为优化,应该使用1-15作为常用的或重复的元素的标号。将16及以上的数字作为不常用的可选元素的标号。重复字段中的每个元素都需要重新编码标记号,因此重复字段尤其适合于此优化。</p>
<p>如果未设置字段值,则使用默认值:对于数值类型为零,对于字符串为空字符串,对于布尔值为假。对于嵌入的message,默认值始终是消息的“默认实例”或“原型”,它没有设置任何字段。调用访问器以获取尚未显式设置的字段的值,始终返回该字段的默认值。</p>
<p>如果一个字段重复,该字段可以重复任意次数(包括零)。在protocol buffer中,重复值的顺序将保留,并将重复字段视为动态大小的数组。</p>
<p>您将在<a href="https://developers.google.com/protocol-buffers/docs/proto3" target="_blank">Protocol Buffer Language Guide</a>中找到一个完整的.proto文件编写指南,包括所有可能的字段类型。不过,不要去寻找类似于类继承的工具——protocol buffer不会这样做。</p>
<h2 id="定义-service">定义 service</h2>
<p>要定义一个服务,就必须在 .proto 文件中进行指定,然后在服务中定义 rpc 方法,指定请求和响应的类型。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">service Manage {
rpc Add(AddressBook) returns (Reply){};
}</code></pre></td></tr></table>
</div>
</div>
<h2 id="client-server">client & server</h2>
<p>client & server 及更多例子详可见:</p>
<ul>
<li><a href="https://github.com/vgmdj/grpc-example" target="_blank">https://github.com/vgmdj/grpc-example</a></li>
</ul>]]></description>
<category domain="https://blog.vgmdj.cn/categories/grpc/">grpc</category>
<category domain="https://blog.vgmdj.cn/tags/grpc/">grpc</category>
<category domain="https://blog.vgmdj.cn/tags/rpc/">rpc</category>
</item>
<item>
<title>设计模式学习-模板方法模式</title>
<link>https://blog.vgmdj.cn/post/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E5%AD%A6%E4%B9%A0-%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F/</link>
<guid isPermaLink="true">https://blog.vgmdj.cn/post/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E5%AD%A6%E4%B9%A0-%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95%E6%A8%A1%E5%BC%8F/</guid>
<pubDate>Mon, 18 Feb 2019 13:40:48 +0000</pubDate>