-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
2004 lines (1348 loc) · 186 KB
/
index.html
File metadata and controls
2004 lines (1348 loc) · 186 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
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
<link rel="dns-prefetch" href="http://blog.flytrap.top">
<title>俗子</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="description" content="野生程序员一枚,传统文化和前沿科技的忠实拥护者,二者并不矛盾">
<meta property="og:type" content="website">
<meta property="og:title" content="俗子">
<meta property="og:url" content="http://blog.flytrap.top/index.html">
<meta property="og:site_name" content="俗子">
<meta property="og:description" content="野生程序员一枚,传统文化和前沿科技的忠实拥护者,二者并不矛盾">
<meta property="og:locale">
<meta property="article:author" content="俗子">
<meta property="article:tag" content="django,后端,python,linux,程序员,形意,易,中医,信息安全">
<meta name="twitter:card" content="summary">
<link rel="alternative" href="/atom.xml" title="俗子" type="application/atom+xml">
<link rel="icon" href="/favicon.png">
<link rel="stylesheet" type="text/css" href="/./main.0cf68a.css">
<style type="text/css">
#container.show {
background: linear-gradient(200deg,#a0cfe4,#e8c37e);
}
</style>
<meta name="generator" content="Hexo 6.3.0"></head>
<body>
<div id="container" q-class="show:isCtnShow">
<canvas id="anm-canvas" class="anm-canvas"></canvas>
<div class="left-col" q-class="show:isShow">
<div class="overlay" style="background: #4d4d4d"></div>
<div class="intrude-less">
<header id="header" class="inner">
<a href="/" class="profilepic">
<img src="" class="js-avatar">
</a>
<hgroup>
<h1 class="header-author"><a href="/"></a></h1>
</hgroup>
<nav class="header-menu">
<ul>
<li><a href="/">主页</a></li>
<li><a href="/tags/%E9%9A%8F%E7%AC%94/">随笔</a></li>
</ul>
</nav>
<nav class="header-smart-menu">
<a q-on="click: openSlider(e, 'innerArchive')" href="javascript:void(0)">所有文章</a>
<a q-on="click: openSlider(e, 'friends')" href="javascript:void(0)">友链</a>
<a q-on="click: openSlider(e, 'aboutme')" href="javascript:void(0)">关于我</a>
</nav>
<nav class="header-nav">
<div class="social">
<a class="github" target="_blank" href="#" title="github"><i class="icon-github"></i></a>
<a class="weibo" target="_blank" href="#" title="weibo"><i class="icon-weibo"></i></a>
<a class="rss" target="_blank" href="#" title="rss"><i class="icon-rss"></i></a>
<a class="zhihu" target="_blank" href="#" title="zhihu"><i class="icon-zhihu"></i></a>
</div>
</nav>
</header>
</div>
</div>
<div class="mid-col" q-class="show:isShow,hide:isShow|isFalse">
<nav id="mobile-nav">
<div class="overlay js-overlay" style="background: #4d4d4d"></div>
<div class="btnctn js-mobile-btnctn">
<div class="slider-trigger list" q-on="click: openSlider(e)"><i class="icon icon-sort"></i></div>
</div>
<div class="intrude-less">
<header id="header" class="inner">
<div class="profilepic">
<img src="" class="js-avatar">
</div>
<hgroup>
<h1 class="header-author js-header-author"></h1>
</hgroup>
<nav class="header-nav">
<div class="social">
<a class="github" target="_blank" href="#" title="github"><i class="icon-github"></i></a>
<a class="weibo" target="_blank" href="#" title="weibo"><i class="icon-weibo"></i></a>
<a class="rss" target="_blank" href="#" title="rss"><i class="icon-rss"></i></a>
<a class="zhihu" target="_blank" href="#" title="zhihu"><i class="icon-zhihu"></i></a>
</div>
</nav>
<nav class="header-menu js-header-menu">
<ul style="width: 50%">
<li style="width: 50%"><a href="/">主页</a></li>
<li style="width: 50%"><a href="/tags/%E9%9A%8F%E7%AC%94/">随笔</a></li>
</ul>
</nav>
</header>
</div>
<div class="mobile-mask" style="display:none" q-show="isShow"></div>
</nav>
<div id="wrapper" class="body-wrap">
<div class="menu-l">
<div class="canvas-wrap">
<canvas data-colors="#eaeaea" data-sectionHeight="100" data-contentId="js-content" id="myCanvas1" class="anm-canvas"></canvas>
</div>
<div id="js-content" class="content-ll">
<article id="post-tech/linux/awk" class="article article-type-post article-index" itemscope itemprop="blogPost">
<div class="article-inner">
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2025/05/25/tech/linux/awk/">awk常用命令及功能</a>
</h1>
<a href="/2025/05/25/tech/linux/awk/" class="archive-article-date">
<time datetime="2025-05-25T08:08:22.000Z" itemprop="datePublished"><i class="icon-calendar icon"></i>2025-05-25</time>
</a>
</header>
<div class="article-entry" itemprop="articleBody">
<p>AWK 是一种强大的文本处理工具,常用在 Unix/Linux 环境中处理和分析结构化数据。以下是 AWK 的常用命令和功能,简要总结:</p>
<h3 id="基本语法"><a href="#基本语法" class="headerlink" title="基本语法"></a>基本语法</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">awk [选项] <span class="string">'模式 {动作}'</span> 文件</span><br></pre></td></tr></table></figure>
<ul>
<li><strong>模式</strong>:指定匹配条件(如正则表达式或逻辑条件)。</li>
<li><strong>动作</strong>:对匹配的行执行的操作(如打印、计算)。</li>
<li><strong>文件</strong>:输入文件,若无文件,可从标准输入读取。</li>
</ul>
<h3 id="常用选项"><a href="#常用选项" class="headerlink" title="常用选项"></a>常用选项</h3><ul>
<li><code>-F</code>:指定字段分隔符(默认是空格或制表符)。<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">awk -F: <span class="string">'{print $1}'</span> /etc/passwd <span class="comment"># 以冒号分隔,打印第一列</span></span><br></pre></td></tr></table></figure></li>
<li><code>-v</code>:定义变量。<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">awk -v var=5 <span class="string">'{print $1 * var}'</span> file.txt <span class="comment"># 使用变量 var</span></span><br></pre></td></tr></table></figure></li>
</ul>
<h3 id="常用内置变量"><a href="#常用内置变量" class="headerlink" title="常用内置变量"></a>常用内置变量</h3><ul>
<li><code>FS</code>:输入字段分隔符(默认空格)。</li>
<li><code>OFS</code>:输出字段分隔符(默认空格)。</li>
<li><code>NR</code>:当前处理的记录(行)号。</li>
<li><code>NF</code>:当前行的字段数。</li>
<li><code>$0</code>:整行内容。</li>
<li><code>$n</code>:第 n 个字段(从 1 开始)。</li>
</ul>
<h3 id="常用命令和模式"><a href="#常用命令和模式" class="headerlink" title="常用命令和模式"></a>常用命令和模式</h3><ol>
<li><p><strong>打印整行或特定字段</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">awk <span class="string">'{print $0}'</span> file.txt <span class="comment"># 打印整行</span></span><br><span class="line">awk <span class="string">'{print $1, $3}'</span> file.txt <span class="comment"># 打印第 1 和第 3 字段</span></span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>条件匹配</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">awk <span class="string">'/pattern/ {print $0}'</span> file.txt <span class="comment"># 打印包含 pattern 的行</span></span><br><span class="line">awk <span class="string">'$1 == "value" {print $2}'</span> file.txt <span class="comment"># 第一字段为 value 时打印第二字段</span></span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>指定行号</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">awk <span class="string">'NR==5 {print $0}'</span> file.txt <span class="comment"># 打印第 5 行</span></span><br><span class="line">awk <span class="string">'NR>=2 && NR<=5 {print $0}'</span> file.txt <span class="comment"># 打印第 2 到第 5 行</span></span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>统计行数或字段</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">awk <span class="string">'END {print NR}'</span> file.txt <span class="comment"># 统计总行数</span></span><br><span class="line">awk <span class="string">'{print NF}'</span> file.txt <span class="comment"># 每行字段数</span></span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>计算(求和、平均值等)</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">awk <span class="string">'{sum += $1} END {print sum}'</span> file.txt <span class="comment"># 计算第一列总和</span></span><br><span class="line">awk <span class="string">'{sum += $1; count++} END {print sum/count}'</span> file.txt <span class="comment"># 计算第一列平均值</span></span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>格式化输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">awk <span class="string">'{printf "%-10s %s\n", $1, $2}'</span> file.txt <span class="comment"># 格式化输出第 1、2 字段</span></span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>处理多文件</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">awk <span class="string">'{print FILENAME, $0}'</span> file1.txt file2.txt <span class="comment"># 打印文件名和内容</span></span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>BEGIN 和 END 块</strong></p>
<ul>
<li><code>BEGIN</code>:在处理文件前执行。</li>
<li><code>END</code>:在处理文件后执行。<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">awk <span class="string">'BEGIN {print "Start"} {print $1} END {print "End"}'</span> file.txt</span><br></pre></td></tr></table></figure></li>
</ul>
</li>
</ol>
<h3 id="常用示例"><a href="#常用示例" class="headerlink" title="常用示例"></a>常用示例</h3><ol>
<li><p><strong>提取日志中特定列</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">awk -F<span class="string">' '</span> <span class="string">'{print $1, $3}'</span> access.log <span class="comment"># 提取日志第 1 和第 3 列</span></span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>统计文件中某值出现次数</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">awk <span class="string">'$1 == "error" {count++} END {print count}'</span> log.txt <span class="comment"># 统计 error 出现次数</span></span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>替换字段</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">awk <span class="string">'{sub("old", "new", $1); print $0}'</span> file.txt <span class="comment"># 将第一字段中的 old 替换为 new</span></span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>处理 CSV 文件</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">awk -F<span class="string">','</span> <span class="string">'{print $1, $2}'</span> data.csv <span class="comment"># 处理逗号分隔的 CSV 文件</span></span><br></pre></td></tr></table></figure></li>
</ol>
<h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><ul>
<li>AWK 脚本可以保存为文件,使用 <code>-f</code> 选项调用:<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">awk -f script.awk file.txt</span><br></pre></td></tr></table></figure></li>
<li>AWK 支持正则表达式、循环、条件语句,适合复杂数据处理。</li>
<li>对于大数据量,AWK 比 sed 或 grep 更高效,尤其在字段操作上。</li>
</ul>
<p>如果需要更详细的 AWK 教程或特定用例,请告诉我!</p>
</div>
<div class="article-info article-info-index">
<div class="article-tag tagcloud">
<i class="icon-price-tags icon"></i>
<ul class="article-tag-list">
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color1">linux</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color4">awk</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color4">字符串</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color4">命令行</a>
</li>
</ul>
</div>
<div class="article-category tagcloud">
<i class="icon-book icon"></i>
<ul class="article-tag-list">
<li class="article-tag-list-item">
<a href="/categories/linux//" class="article-tag-list-link color1">linux</a>
</li>
</ul>
</div>
<p class="article-more-link">
<a class="article-more-a" href="/2025/05/25/tech/linux/awk/">展开全文 >></a>
</p>
<div class="clearfix"></div>
</div>
</div>
</article>
<aside class="wrap-side-operation">
<div class="mod-side-operation">
<div class="jump-container" id="js-jump-container" style="display:none;">
<a href="javascript:void(0)" class="mod-side-operation__jump-to-top">
<i class="icon-font icon-back"></i>
</a>
<div id="js-jump-plan-container" class="jump-plan-container" style="top: -11px;">
<i class="icon-font icon-plane jump-plane"></i>
</div>
</div>
</div>
</aside>
<article id="post-tech/env/istio" class="article article-type-post article-index" itemscope itemprop="blogPost">
<div class="article-inner">
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2024/05/29/tech/env/istio/">istio 配置</a>
</h1>
<a href="/2024/05/29/tech/env/istio/" class="archive-article-date">
<time datetime="2024-05-29T08:01:05.000Z" itemprop="datePublished"><i class="icon-calendar icon"></i>2024-05-29</time>
</a>
</header>
<div class="article-entry" itemprop="articleBody">
<p>Istio 服务网格<br>Istio 使用功能强大的 Envoy 服务代理扩展了 Kubernetes,以建立一个可编程的、可感知的应用程序网络。 Istio 与 Kubernetes 和传统工作负载一起使用,为复杂的部署带来了标准的通用流量管理、遥测和安全性。</p>
<h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -L https://istio.io/downloadIstio | sh -</span><br></pre></td></tr></table></figure>
<h2 id="真实-ip-转发"><a href="#真实-ip-转发" class="headerlink" title="真实 ip 转发"></a>真实 ip 转发</h2><h3 id="生成环境不建议"><a href="#生成环境不建议" class="headerlink" title="生成环境不建议"></a>生成环境不建议</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kubectl patch svc istio-ingressgateway -n istio-system -p <span class="string">'{"spec":{"externalTrafficPolicy":"Local"}}'</span></span><br></pre></td></tr></table></figure>
<h3 id="HTTP-HTTPS-负载均衡"><a href="#HTTP-HTTPS-负载均衡" class="headerlink" title="HTTP/HTTPS 负载均衡"></a>HTTP/HTTPS 负载均衡</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">apiVersion: install.istio.io/v1alpha1</span><br><span class="line">kind: IstioOperator</span><br><span class="line">spec:</span><br><span class="line"> meshConfig:</span><br><span class="line"> defaultConfig:</span><br><span class="line"> gatewayTopology:</span><br><span class="line"> numTrustedProxies: 2</span><br></pre></td></tr></table></figure>
<p>通过负载均衡器, 添加 ip 转发头<br>以 nginx 为例</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">map <span class="variable">$http_upgrade</span> <span class="variable">$connection_upgrade</span> {</span><br><span class="line"> default upgrade;</span><br><span class="line"> <span class="string">''</span> close;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">server {</span><br><span class="line"> listen 80 default_server;</span><br><span class="line"> listen [::]:80 default_server;</span><br><span class="line"></span><br><span class="line"> server_name _;</span><br><span class="line"></span><br><span class="line"> location / {</span><br><span class="line"> proxy_http_version 1.1;</span><br><span class="line"> proxy_set_header Upgrade <span class="variable">$http_upgrade</span>;</span><br><span class="line"> proxy_set_header Connection <span class="string">"upgrade"</span>;</span><br><span class="line"> proxy_set_header Host <span class="variable">$host</span>;</span><br><span class="line"> proxy_set_header X-Forwarded-For <span class="variable">$proxy_add_x_forwarded_for</span>;</span><br><span class="line"> proxy_set_header X-Real-IP <span class="variable">$remote_addr</span>;</span><br><span class="line"> proxy_pass http://192.168.3.161;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
</div>
<div class="article-info article-info-index">
<div class="article-tag tagcloud">
<i class="icon-price-tags icon"></i>
<ul class="article-tag-list">
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color5">tech</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color4">k8s</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color1">kubernetes</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color1">istio</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color3">kubeadm</a>
</li>
</ul>
</div>
<div class="article-category tagcloud">
<i class="icon-book icon"></i>
<ul class="article-tag-list">
<li class="article-tag-list-item">
<a href="/categories/tech//" class="article-tag-list-link color5">tech</a>
</li>
</ul>
</div>
<p class="article-more-link">
<a class="article-more-a" href="/2024/05/29/tech/env/istio/">展开全文 >></a>
</p>
<div class="clearfix"></div>
</div>
</div>
</article>
<aside class="wrap-side-operation">
<div class="mod-side-operation">
<div class="jump-container" id="js-jump-container" style="display:none;">
<a href="javascript:void(0)" class="mod-side-operation__jump-to-top">
<i class="icon-font icon-back"></i>
</a>
<div id="js-jump-plan-container" class="jump-plan-container" style="top: -11px;">
<i class="icon-font icon-plane jump-plane"></i>
</div>
</div>
</div>
</aside>
<article id="post-tech/env/k8s_join" class="article article-type-post article-index" itemscope itemprop="blogPost">
<div class="article-inner">
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2024/05/29/tech/env/k8s_join/">k8s 节点控制</a>
</h1>
<a href="/2024/05/29/tech/env/k8s_join/" class="archive-article-date">
<time datetime="2024-05-29T07:35:20.000Z" itemprop="datePublished"><i class="icon-calendar icon"></i>2024-05-29</time>
</a>
</header>
<div class="article-entry" itemprop="articleBody">
<p>在 Kubernetes 中,节点分为两种, 一种是普通节点,一种是控制平面(control-plane)节点</p>
<ul>
<li>控制平面组件包括 kube-apiserver、kube-controller-manager、kube-scheduler、etcd,是由来支撑平台运行的组件,在集群部署完成时即运行在所有的控制节点上。</li>
<li>node 节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境,</li>
</ul>
<h2 id="etcd"><a href="#etcd" class="headerlink" title="etcd"></a>etcd</h2><ul>
<li>etcd 是兼具一致性和高可用性的键值数据库,是用来保存 Kubernetes 所有集群数据的后台数据库。在生产环境中,为了保证高可用性,一般将 etcd 部署在多个节点上组成集群。</li>
</ul>
<h2 id="kube-apiserver"><a href="#kube-apiserver" class="headerlink" title="kube-apiserver"></a>kube-apiserver</h2><ul>
<li>apiserver 是控制面的前端,对所有资源的操作都要经过 apiserver,apiserver 是无状态的,可以横型扩展,用 Haproxy 或者负载均衡器让多个 apiserver 协同工作。</li>
</ul>
<h2 id="kube-scheduler"><a href="#kube-scheduler" class="headerlink" title="kube-scheduler"></a>kube-scheduler</h2><ul>
<li>scheduler 负责监视新创建的、未指定运行节点(node)的 Pods,选择节点让 Pod 在上面运行。调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。</li>
</ul>
<h2 id="kube-controller-manager"><a href="#kube-controller-manager" class="headerlink" title="kube-controller-manager"></a>kube-controller-manager</h2><ul>
<li>controller-manager 是一系列控制器的集合,这些控制器在逻辑上属于不同的进程,但为了降低复杂性将这些控制器编译在了同一个可执行文件中,控制器包括:</li>
</ul>
<ul>
<li>节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应</li>
<li>任务控制器(Job controller): 监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成</li>
<li>端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)</li>
<li>服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌</li>
<li>以及其他比如 Pod 管理的 Replication 控制器、Deployment 控制器等数十种类型 API 对象的控制器。</li>
</ul>
<h2 id="kube-proxy"><a href="#kube-proxy" class="headerlink" title="kube-proxy"></a>kube-proxy</h2><ul>
<li>kube-proxy 是集群中每个节点上运行的网络代理, 是实现 Kubernetes 服务(Service) 概念的一部分。</li>
<li>kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。</li>
<li>kube-proxy 有两种模式实现流量转发,分别是 iptables 模式和 ipvs(IP Virtual Server)模式,默认是 iptables 模式,是通过每个节点的 iptables 规则实现的,但随着 service 数量增大,iptables 模式由于线性查找匹配、全量更新等特点,性能会显著下降,因此从 Kubernetes 的 1.8 版本开始引入了 ipvs 模式,ipvs 和 iptables 都是基于 netfilter,但 ipvs 使用 hash 表并且运行在内核态,可以显著提升性能。</li>
</ul>
<h2 id="kubelet"><a href="#kubelet" class="headerlink" title="kubelet"></a>kubelet</h2><ul>
<li>kubelet 是一个在集群中每个节点(node)上运行的代理,负责接收并处理控制节点发来的指令,以及管理当前 node 上 pod 对象的容器,它保证容器(containers)都 运行在 Pod 中。</li>
<li>kubelet 接收一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运行状态且健康。</li>
<li>kubelet 不会管理不是由 Kubernetes 创建的容器。</li>
<li>kubelet 支持从 API server 以配置清单形式接收资源定义,或者从指定的目录加载静态 pod 配置清单,通过容器运行时创建、启动和监事容器。</li>
</ul>
<h2 id="普通节点加入"><a href="#普通节点加入" class="headerlink" title="普通节点加入"></a>普通节点加入</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kubeadm <span class="built_in">join</span> <master-ip>:<master-port> --token <your-token> --discovery-token-ca-cert-hash sha256:<your-hash></span><br></pre></td></tr></table></figure>
<h2 id="控制平面节点加入"><a href="#控制平面节点加入" class="headerlink" title="控制平面节点加入"></a>控制平面节点加入</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kubeadm <span class="built_in">join</span> <master-ip>:<master-port> --token <your-token> --discovery-token-ca-cert-hash sha256:<your-hash> --control-plane --certificate-key <your-certificate-key></span><br></pre></td></tr></table></figure>
<h2 id="获取-token"><a href="#获取-token" class="headerlink" title="获取 token"></a>获取 token</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">kubeadm token list</span><br><span class="line"><span class="comment">## 获取hash</span></span><br><span class="line">openssl x509 -pubkey -<span class="keyword">in</span> /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed <span class="string">'s/^.* //'</span></span><br><span class="line"></span><br><span class="line"><span class="comment">## 生成新的证书</span></span><br><span class="line">kubeadm init phase upload-certs --upload-certs</span><br><span class="line"></span><br><span class="line"><span class="comment"># 完整命令打印</span></span><br><span class="line">sudo kubeadm token create --print-join-command --certificate-key $(kubeadm certs certificate-key) <span class="comment"># 如果无效,请使用上述命令重新上传证书</span></span><br></pre></td></tr></table></figure>
</div>
<div class="article-info article-info-index">
<div class="article-tag tagcloud">
<i class="icon-price-tags icon"></i>
<ul class="article-tag-list">
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color5">tech</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color4">k8s</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color1">kubernetes</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color3">kubeadm</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color5">join</a>
</li>
</ul>
</div>
<div class="article-category tagcloud">
<i class="icon-book icon"></i>
<ul class="article-tag-list">
<li class="article-tag-list-item">
<a href="/categories/tech//" class="article-tag-list-link color5">tech</a>
</li>
</ul>
</div>
<p class="article-more-link">
<a class="article-more-a" href="/2024/05/29/tech/env/k8s_join/">展开全文 >></a>
</p>
<div class="clearfix"></div>
</div>
</div>
</article>
<aside class="wrap-side-operation">
<div class="mod-side-operation">
<div class="jump-container" id="js-jump-container" style="display:none;">
<a href="javascript:void(0)" class="mod-side-operation__jump-to-top">
<i class="icon-font icon-back"></i>
</a>
<div id="js-jump-plan-container" class="jump-plan-container" style="top: -11px;">
<i class="icon-font icon-plane jump-plane"></i>
</div>
</div>
</div>
</aside>
<article id="post-tech/env/dns" class="article article-type-post article-index" itemscope itemprop="blogPost">
<div class="article-inner">
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2024/05/13/tech/env/dns/">dns 私有服务器</a>
</h1>
<a href="/2024/05/13/tech/env/dns/" class="archive-article-date">
<time datetime="2024-05-13T06:00:01.000Z" itemprop="datePublished"><i class="icon-calendar icon"></i>2024-05-13</time>
</a>
</header>
<div class="article-entry" itemprop="articleBody">
<p>DNS 服务器是(Domain Name System 或者 Domain Name Service)域名系统或者域名服务,域名系统为 Internet 上的主机分配域名地址和 IP 地址。<br>公司内部通过域名访问内部服务器,但是域名解析又无法访问到内网, 所以内部 dns 解析服务是最好的解决方案</p>
<a class="article-more-a" href="/2024/05/13/tech/env/dns/#more">more >></a>
</div>
<div class="article-info article-info-index">
<div class="article-tag tagcloud">
<i class="icon-price-tags icon"></i>
<ul class="article-tag-list">
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color5">tech</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color4">dns</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color5">域名解析</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color5">docker-compose</a>
</li>
</ul>
</div>
<div class="article-category tagcloud">
<i class="icon-book icon"></i>
<ul class="article-tag-list">
<li class="article-tag-list-item">
<a href="/categories/tech//" class="article-tag-list-link color5">tech</a>
</li>
</ul>
</div>
<p class="article-more-link">
<a class="article-more-a" href="/2024/05/13/tech/env/dns/">展开全文 >></a>
</p>
<div class="clearfix"></div>
</div>
</div>
</article>
<aside class="wrap-side-operation">
<div class="mod-side-operation">
<div class="jump-container" id="js-jump-container" style="display:none;">
<a href="javascript:void(0)" class="mod-side-operation__jump-to-top">
<i class="icon-font icon-back"></i>
</a>
<div id="js-jump-plan-container" class="jump-plan-container" style="top: -11px;">
<i class="icon-font icon-plane jump-plane"></i>
</div>
</div>
</div>
</aside>
<article id="post-tech/env/seafile" class="article article-type-post article-index" itemscope itemprop="blogPost">
<div class="article-inner">
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2024/05/11/tech/env/seafile/">SeaFile 网盘</a>
</h1>
<a href="/2024/05/11/tech/env/seafile/" class="archive-article-date">
<time datetime="2024-05-11T02:10:00.000Z" itemprop="datePublished"><i class="icon-calendar icon"></i>2024-05-11</time>
</a>
</header>
<div class="article-entry" itemprop="articleBody">
<p>Seafile 是一款开源的企业云盘,注重可靠性和性能,支持全平台客户端。Seafile 内置协同文档 SeaDoc ,让协作撰写、管理和发布文档更便捷。<br>Seafile 提供全面的网盘功能,用户可以在 Seafile 中存储、管理和共享文件。支持多种文件类型。支持全平台客户端,包括 Windows、Mac、Linux、iOS、Android 多种操作系统以及移动设备,可以在任何设备上轻松访问和管理文件,体验更为统一。<br>Seafile 的协作功能超越了简单的文件共享。它支持多人协同在线编辑、文档编辑锁定,同时提供权限管理、版本控制和事件通知等功能,使得团队协作更加流畅、可控和高效。</p>
<p>(官网)[<a target="_blank" rel="noopener" href="https://www.seafile.com/]">https://www.seafile.com/]</a></p>
<a class="article-more-a" href="/2024/05/11/tech/env/seafile/#more">more >></a>
</div>
<div class="article-info article-info-index">
<div class="article-tag tagcloud">
<i class="icon-price-tags icon"></i>
<ul class="article-tag-list">
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color5">tech</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color5">docker-compose</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color3">SeaFile</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color3">网盘</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color5">私有网盘</a>
</li>
</ul>
</div>
<div class="article-category tagcloud">
<i class="icon-book icon"></i>
<ul class="article-tag-list">
<li class="article-tag-list-item">
<a href="/categories/tech//" class="article-tag-list-link color5">tech</a>
</li>
</ul>
</div>
<p class="article-more-link">
<a class="article-more-a" href="/2024/05/11/tech/env/seafile/">展开全文 >></a>
</p>
<div class="clearfix"></div>
</div>
</div>
</article>
<aside class="wrap-side-operation">
<div class="mod-side-operation">
<div class="jump-container" id="js-jump-container" style="display:none;">
<a href="javascript:void(0)" class="mod-side-operation__jump-to-top">
<i class="icon-font icon-back"></i>
</a>
<div id="js-jump-plan-container" class="jump-plan-container" style="top: -11px;">
<i class="icon-font icon-plane jump-plane"></i>
</div>
</div>
</div>
</aside>
<article id="post-tech/env/golang_repo" class="article article-type-post article-index" itemscope itemprop="blogPost">
<div class="article-inner">
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2024/05/10/tech/env/golang_repo/">golang 私有包</a>
</h1>
<a href="/2024/05/10/tech/env/golang_repo/" class="archive-article-date">
<time datetime="2024-05-10T07:10:00.000Z" itemprop="datePublished"><i class="icon-calendar icon"></i>2024-05-10</time>
</a>
</header>
<div class="article-entry" itemprop="articleBody">
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">RUN go <span class="built_in">env</span> -w GOPRIVATE=<span class="string">"gitlabIp"</span></span><br><span class="line">RUN go <span class="built_in">env</span> -w GONOPROXY=<span class="string">"gitlabIp"</span></span><br><span class="line">RUN go <span class="built_in">env</span> -w GOINSECURE=<span class="string">"gitlabIp"</span></span><br><span class="line">RUN go <span class="built_in">env</span> -w GONOSUMDB=<span class="string">"gitlabIp"</span></span><br></pre></td></tr></table></figure>
</div>
<div class="article-info article-info-index">
<div class="article-tag tagcloud">
<i class="icon-price-tags icon"></i>
<ul class="article-tag-list">
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color5">tech</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color2">gitlab</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color2">golang</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color4">私有源</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color4">mod</a>
</li>
</ul>
</div>
<div class="article-category tagcloud">
<i class="icon-book icon"></i>
<ul class="article-tag-list">
<li class="article-tag-list-item">
<a href="/categories/tech//" class="article-tag-list-link color5">tech</a>
</li>
</ul>
</div>
<p class="article-more-link">
<a class="article-more-a" href="/2024/05/10/tech/env/golang_repo/">展开全文 >></a>
</p>
<div class="clearfix"></div>
</div>
</div>
</article>
<aside class="wrap-side-operation">
<div class="mod-side-operation">
<div class="jump-container" id="js-jump-container" style="display:none;">
<a href="javascript:void(0)" class="mod-side-operation__jump-to-top">
<i class="icon-font icon-back"></i>
</a>
<div id="js-jump-plan-container" class="jump-plan-container" style="top: -11px;">
<i class="icon-font icon-plane jump-plane"></i>
</div>
</div>
</div>
</aside>
<article id="post-tech/env/verdaccio" class="article article-type-post article-index" itemscope itemprop="blogPost">
<div class="article-inner">
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2024/05/10/tech/env/verdaccio/">verdaccio 前端私有源</a>
</h1>
<a href="/2024/05/10/tech/env/verdaccio/" class="archive-article-date">
<time datetime="2024-05-10T07:10:00.000Z" itemprop="datePublished"><i class="icon-calendar icon"></i>2024-05-10</time>
</a>
</header>
<div class="article-entry" itemprop="articleBody">
<p>我们平时使用 npm publish 进行发布时,上传的仓库默认地址是 npm,公司内部包的管理并不希望发布到公网去,所以需要发布到自己的私有仓库, 之前都是用的 cnpmjs, 由于没有维护了,太老了,所以改用 Verdaccio。 通过 Verdaccio 工具在本地新建一个仓库地址,再把本地的默认上传仓库地址切换到本地仓库地址即可。当 npm install 时没有找到本地的仓库,则 Verdaccio 默认配置中会从 npm 中央仓库下载。</p>
<a class="article-more-a" href="/2024/05/10/tech/env/verdaccio/#more">more >></a>
</div>
<div class="article-info article-info-index">
<div class="article-tag tagcloud">
<i class="icon-price-tags icon"></i>
<ul class="article-tag-list">
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color5">tech</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color5">docker-compose</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color5">verdaccio</a>
</li>
<li class="article-tag-list-item">
<a href="javascript:void(0)" class="js-tag article-tag-list-link color1">前端私有源</a>
</li>
</ul>
</div>
<div class="article-category tagcloud">
<i class="icon-book icon"></i>
<ul class="article-tag-list">
<li class="article-tag-list-item">
<a href="/categories/tech//" class="article-tag-list-link color5">tech</a>
</li>
</ul>
</div>
<p class="article-more-link">
<a class="article-more-a" href="/2024/05/10/tech/env/verdaccio/">展开全文 >></a>
</p>
<div class="clearfix"></div>
</div>
</div>
</article>
<aside class="wrap-side-operation">
<div class="mod-side-operation">
<div class="jump-container" id="js-jump-container" style="display:none;">
<a href="javascript:void(0)" class="mod-side-operation__jump-to-top">
<i class="icon-font icon-back"></i>
</a>
<div id="js-jump-plan-container" class="jump-plan-container" style="top: -11px;">
<i class="icon-font icon-plane jump-plane"></i>
</div>
</div>
</div>
</aside>
<article id="post-tech/env/chrony" class="article article-type-post article-index" itemscope itemprop="blogPost">
<div class="article-inner">
<header class="article-header">
<h1 itemprop="name">
<a class="article-title" href="/2024/04/17/tech/env/chrony/">chrony 时间同步</a>
</h1>
<a href="/2024/04/17/tech/env/chrony/" class="archive-article-date">
<time datetime="2024-04-17T02:04:28.000Z" itemprop="datePublished"><i class="icon-calendar icon"></i>2024-04-17</time>
</a>
</header>
<div class="article-entry" itemprop="articleBody">
<p>Chrony 是一个开源自由的网络时间协议 NTP 的客户端和服务器软软件。它能让计算机保持系统时钟与时钟服务器(NTP)同步,因此让你的计算机保持精确的时间,Chrony 也可以作为服务端软件为其他计算机提供时间同步服务。</p>
<p>Chrony 由两个程序组成,分别是 chronyd 和 chronyc</p>
<p>chronyd 是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。<br>chronyc 提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在 chronyd 实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。</p>
<p>NTP 是网络时间协议(Network Time Protocol)的简称,通过 udp 123 端口进行网络时钟同步。<br>RHEL7 中默认使用 chrony 作为时间服务器,也支持 NTP,需要额外安装。<br>NTP 与 chrony 不能同时存在,只能用其中一个,并将另一个 mask 掉。</p>
<a class="article-more-a" href="/2024/04/17/tech/env/chrony/#more">more >></a>