飞雪团队

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 14721|回复: 0

Docker 与 K8S学习笔记(二十二)—— 高效使用kubectl的小技巧

[复制链接]

8401

主题

8489

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27533
发表于 2022-2-12 14:35:42 | 显示全部楼层 |阅读模式

1 b8 Q9 I% c5 v7 D6 B& L5 @<p>kubectl作为我们主要的操作K8S的工具,其具备非常丰富的功能,但是如果不经过打磨,使用起来还是存在诸多不便,今天我们来看看如何将我们的kubectl打磨的更加易用。</p>
1 ?0 ]6 W' v# d0 g& F<p>&nbsp;</p>
1 ~7 [+ e, F% O  ~2 h( C% C( d<p>一、命令自动补全</p>
! |; K% n& k9 q" ]: U<p>kubectl中提供非常多的命令,如果每一次都要手动一个字符一个字符的敲未免太累了,那么如何配置自动补全呢?这里以ubuntu系统为例:</p>
# ]- k. e. S" t5 [<p>1、安装auto-completion工具</p>
; [5 d/ S: N5 r: ~- \2 t$ g<div class="cnblogs_code">
) q# t2 |, O% `- ^6 `<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> apt update& h0 [0 F" x2 u$ Q# _+ O
Hit:</span><span style="color: rgba(128, 0, 128, 1)">1</span> http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">archive.ubuntu.com/ubuntu bionic InRelease</span>! E% `. U2 _' R
Hit:<span style="color: rgba(128, 0, 128, 1)">2</span> http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">security.ubuntu.com/ubuntu bionic-security InRelease</span>' u9 w5 @- h! |4 }$ C* Z
Hit:<span style="color: rgba(128, 0, 128, 1)">3</span> http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">archive.ubuntu.com/ubuntu bionic-updates InRelease</span>
6 C8 a% w" V  b, ?" wHit:<span style="color: rgba(128, 0, 128, 1)">4</span> https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">download.docker.com/linux/ubuntu bionic InRelease</span>$ Z% V/ r0 L$ m9 c: x
Hit:<span style="color: rgba(128, 0, 128, 1)">5</span> http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">archive.ubuntu.com/ubuntu bionic-backports InRelease</span># x4 \- x  S1 u$ ?
<span style="color: rgba(0, 0, 0, 1)">Reading package lists... Done) j: d2 ?" U3 e1 `  G7 n$ t5 ]
Building dependency tree
0 h% a1 A/ W7 r7 [Reading state information... Done9 O9 L& a2 [/ J
</span><span style="color: rgba(128, 0, 128, 1)">144</span> packages can be upgraded. Run <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">apt list --upgradable</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)"> to see them.2 o0 w6 p/ F' V) r- g) |4 Z1 S7 o
$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span> apt <span style="color: rgba(0, 0, 255, 1)">install</span> bash-<span style="color: rgba(0, 0, 0, 1)">completion
+ r5 d- b: i3 S/ j$ G2 c. ^5 qReading package lists... Done- X! p" e% C- t  S2 J
Building dependency tree1 s  o' b0 _. f8 a  h
Reading state information... Done7 S1 Y2 ?2 n% T6 L" O& y
bash</span>-completion is already the newest version (<span style="color: rgba(128, 0, 128, 1)">1</span>:<span style="color: rgba(128, 0, 128, 1)">2.8</span>-<span style="color: rgba(0, 0, 0, 1)">1ubuntu1).
  X; c: [/ G; _4 a7 n6 K</span><span style="color: rgba(128, 0, 128, 1)">0</span> upgraded, <span style="color: rgba(128, 0, 128, 1)">0</span> newly installed, <span style="color: rgba(128, 0, 128, 1)">0</span> to remove and <span style="color: rgba(128, 0, 128, 1)">144</span> not upgraded.</pre>; @, K( D9 ~; g2 q$ s! C4 J
</div>
+ I( C. w! j! A* j) U<p>PS:如果是centos系统,则使用<span class="js_darkmode__0" data-darkmode-color-16446330660319="rgb(0, 104, 255)" data-darkmode-original-color-16446330660319="#fff|rgb(0, 82, 255)" data-style="color: rgb(0, 82, 255);"><strong data-darkmode-color-16446330660319="rgb(0, 104, 255)" data-darkmode-original-color-16446330660319="#fff|rgb(0, 82, 255)">yum&nbsp;install&nbsp;bash-completion -y</strong>命令安装</span></p>" T7 T/ X, S: |+ i9 C) S( P
<p>2、<span class="js_darkmode__1" data-darkmode-color-16446330660319="rgb(163, 163, 163)" data-darkmode-original-color-16446330660319="#fff|rgb(0, 0, 0)" data-style="color: rgb(0, 0, 0);">配置自动补全<br></span></p>
5 V* ]6 A# f8 {) ?, S# [; x<p><span class="js_darkmode__2" data-darkmode-color-16446330660319="rgb(163, 163, 163)" data-darkmode-original-color-16446330660319="#fff|rgb(0, 0, 0)" data-style="color: rgb(0, 0, 0);"><strong data-darkmode-color-16446330660319="rgb(163, 163, 163)" data-darkmode-original-color-16446330660319="#fff|rgb(0, 0, 0)">Bash</strong>:</span></p>. h5 Z5 _6 `- e
<div class="cnblogs_code">. {0 N" A8 a6 m2 C  r0 I$ ^% l; c: W
<pre>source &lt;<span style="color: rgba(0, 0, 0, 1)">(kubectl completion bash)
% T+ B% V% D  Z3 \+ X</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">source &lt;(kubectl completion bash)</span><span style="color: rgba(128, 0, 0, 1)">"</span> &gt;&gt; ~/.bashrc</pre>8 c  W, d" M5 C- t
</div>
) l  {- N6 q5 f7 [- V1 F. f<p><strong>Zsh</strong>:</p>4 \1 e) D' [9 h
<div class="cnblogs_code">! z. n, o$ J( P3 e% X
<pre>source &lt;<span style="color: rgba(0, 0, 0, 1)">(kubectl completion zsh)" n9 Z' |6 }2 z& S% n
</span><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">[[ $commands[kubectl] ]] &amp;&amp; source &lt;(kubectl completion zsh)</span><span style="color: rgba(128, 0, 0, 1)">"</span> &gt;&gt; ~/.zshrc</pre>" E5 o7 g; R6 s7 s9 I2 Y
</div>
- Q2 v) [, Q" B% ?1 q<p>配置后就可以通过Tab键自动补全命令啦!</p>
' g# l* i1 m% U# v" t+ f/ {; i<p>&nbsp;</p>, K# _% @( k) w
<p>二、配置kubectl别名</p>2 A/ q% k3 ~  q# y" m# l
<p>我们可以通过设置别名简化kubectl命令,编辑.bashrc文件,添加如下内容:</p>& {5 j! B/ F. n8 k+ `$ p: g" X
<div class="cnblogs_code">: |0 \! `7 H2 j, i! [: e
<pre>alias <span style="color: rgba(0, 0, 255, 1)">sudo</span>=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">sudo </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">* p! v, x, I4 K$ l
alias k</span>=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">kubectl</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
! g6 b' I" t! [$ j% N9 ealias ka</span>=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">kubectl apply --recursive -f</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">6 J: ]) R# s; P4 Z
alias kex</span>=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">kubectl exec -i -t</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">  n) x4 _" f  D' i& y% M+ `: D& R
alias klo</span>=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">kubectl logs -f</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">+ b0 \% Y* r* s% t) i
alias kg</span>=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">kubectl get</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">7 q  R; |" Y% X" \$ h
alias kd</span>=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">kubectl describe</span><span style="color: rgba(128, 0, 0, 1)">'</span></pre>- l7 \: X9 O" f6 @6 p! H7 {6 S
</div>- C' l; B: J7 K3 B" H4 m2 i
<p><span class="js_darkmode__4" data-darkmode-color-16446330660319="rgb(0, 104, 255)" data-darkmode-original-color-16446330660319="#fff|rgb(0, 82, 255)" data-style="color: rgb(0, 82, 255);"><strong data-darkmode-color-16446330660319="rgb(0, 104, 255)" data-darkmode-original-color-16446330660319="#fff|rgb(0, 82, 255)">PS:alias sudo是为了解决sudo下别名不可用问题</strong><br></span></p>
6 P& e$ q# J8 _: W$ Y- k' `<p><span class="js_darkmode__5" data-darkmode-color-16446330660319="rgb(163, 163, 163)" data-darkmode-original-color-16446330660319="#fff|rgb(0, 0, 0)" data-style="color: rgb(0, 0, 0);">保存后记得执行 source ~/.bashrc哈,接着我们体验下:</span></p>
# Q' {( t0 `+ F# F7 O4 ?4 A( Y<div class="cnblogs_code">& v8 A8 v5 [4 P0 t1 b, M1 }
<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> ka webapp_pod.yaml
7 O; u+ T; c) T& K! W7 s1 `pod</span>/<span style="color: rgba(0, 0, 0, 1)">webapp created
  Q/ [' U( x! l$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> kg pods
  [" F5 J' O9 Y" f( fNAME     READY   STATUS              RESTARTS   AGE! v: }( j+ @' J" J1 m" p: T2 \* R
webapp   </span><span style="color: rgba(128, 0, 128, 1)">0</span>/<span style="color: rgba(128, 0, 128, 1)">2</span>     ContainerCreating   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          7s
$ x2 ?2 C2 [+ w4 ]3 ~$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> kd pod webapp
+ A/ Y6 b  o- a1 g8 X5 l+ PName:         webapp
0 ~$ l# m/ b5 p+ j# h( Q5 J7 jNamespace:    default
/ J8 h( z! J7 v% s* q$ SPriority:     </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">) v  [& I0 p! {3 U4 G2 F$ ?
Node:         ayato</span>/<span style="color: rgba(128, 0, 128, 1)">172.16</span>.<span style="color: rgba(128, 0, 128, 1)">194.135</span><span style="color: rgba(0, 0, 0, 1)">
. k2 V+ {! c, D' N' c1 [# pStart Time:   Wed, </span><span style="color: rgba(128, 0, 128, 1)">09</span> Feb <span style="color: rgba(128, 0, 128, 1)">2022</span> <span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">44</span> +<span style="color: rgba(128, 0, 128, 1)">0000</span><span style="color: rgba(0, 0, 0, 1)">
+ L  r) ^, E& I# z1 {% Y6 tLabels:       app</span>=<span style="color: rgba(0, 0, 0, 1)">webapp
. K- o  w9 u" h+ P0 oAnnotations:  </span>&lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">
, X% R/ Y5 W8 i& I- u& s4 N. `2 mStatus:       Running
" G  j, |- u( MIP:           </span><span style="color: rgba(128, 0, 128, 1)">172.17</span>.<span style="color: rgba(128, 0, 128, 1)">0.6</span><span style="color: rgba(0, 0, 0, 1)">
9 W4 A/ ^8 }  ?IPs:
7 r5 M4 J. Z7 V, e- l  IP:  </span><span style="color: rgba(128, 0, 128, 1)">172.17</span>.<span style="color: rgba(128, 0, 128, 1)">0.6</span><span style="color: rgba(0, 0, 0, 1)">
: d% H2 ^( [' h0 UContainers:. i+ R* Q% l* z- H4 S$ |; T
  webapp:; N3 W+ ]+ ?) B
    Container ID:   docker:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">d9ddf9dd47de12b53f2119bf75df6706bee2e7711509638ad52adc9addeda704</span>
+ o* t5 u2 b. ]& R  `3 ?    Image:          <span style="color: rgba(128, 0, 128, 1)">172.16</span>.<span style="color: rgba(128, 0, 128, 1)">194.135</span>:<span style="color: rgba(128, 0, 128, 1)">5000</span>/webapp:<span style="color: rgba(128, 0, 128, 1)">1.0</span><span style="color: rgba(0, 0, 0, 1)">
3 u8 U( ^1 F% [5 X/ G    Image ID:       docker</span>-pullable:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">172.16.194.135:5000/webapp@sha256:df3a447a013ada0642dec67bb31976f42f1a0699a68873d0452f514fa24e5c77</span>" A& L  ?  W+ \7 E0 M
    Port:           <span style="color: rgba(128, 0, 128, 1)">5000</span>/<span style="color: rgba(0, 0, 0, 1)">TCP! k- x$ }8 S/ S8 y6 J
    Host Port:      </span><span style="color: rgba(128, 0, 128, 1)">0</span>/<span style="color: rgba(0, 0, 0, 1)">TCP
4 G* ?( @8 ]" w2 X* O9 ?9 H6 k    State:          Running
% x6 }& h' R$ }* g8 h0 ?) o3 _      Started:      Wed, </span><span style="color: rgba(128, 0, 128, 1)">09</span> Feb <span style="color: rgba(128, 0, 128, 1)">2022</span> <span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">46</span> +<span style="color: rgba(128, 0, 128, 1)">0000</span><span style="color: rgba(0, 0, 0, 1)">  Z" l" @, i0 j, ~! y, T
    Ready:          True
. [5 V' I+ {, `    Restart Count:  </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
# F0 i$ g7 i+ u' w2 T" k    Environment:    </span>&lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">" p0 F" D7 |  }
    Mounts:. Q) R( p! Y" E, f
      </span>/tmp from webapp-<span style="color: rgba(0, 0, 0, 1)">logs (rw)" S, z* W! W( `
      </span>/var/run/secrets/kubernetes.io/serviceaccount from default-token-<span style="color: rgba(0, 0, 0, 1)">pcr2h (ro); c, k+ d& a3 Y; U2 N1 R( d. ^
  busybox:  i  [' t2 ?( U7 ~! H9 }% ~: L
    Container ID:  docker:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">6a6a35a628a782fc643af3dd49986bbc77c23de1ae4726bc521c77f61abbbf5d</span>
% l3 o1 z' _& m5 f; \1 `  ]% A<span style="color: rgba(0, 0, 0, 1)">    Image:         busybox5 w% U$ m- Q0 ]4 H+ H
    Image ID:      docker</span>-pullable:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">busybox@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb</span>$ y3 e) F- F7 i( p. }
    Port:          &lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">) z) N; T1 ~4 @1 {/ J
    Host Port:     </span>&lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">
; O, D) o  {% F8 a- a2 f    Command:
/ Z) f0 s8 H! x/ n) M      </span><span style="color: rgba(0, 0, 255, 1)">sh</span>
- t& b9 s! B! n: `      -<span style="color: rgba(0, 0, 0, 1)">c
" r1 B2 S  F2 \8 Q. y      </span><span style="color: rgba(0, 0, 255, 1)">tail</span> -f /logs/<span style="color: rgba(0, 0, 0, 1)">log.out( a4 _' Q  E2 b) q3 n9 }
    State:          Running
* D+ r  c% Z3 L6 w9 C; n/ m  p      Started:      Wed, </span><span style="color: rgba(128, 0, 128, 1)">09</span> Feb <span style="color: rgba(128, 0, 128, 1)">2022</span> <span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">06</span>:<span style="color: rgba(128, 0, 128, 1)">53</span> +<span style="color: rgba(128, 0, 128, 1)">0000</span><span style="color: rgba(0, 0, 0, 1)">
! w2 i0 ]9 F  d    Ready:          True3 c! Z1 d6 u) P& ]* M( A
    Restart Count:  </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
- h, r8 r2 z5 r% K, t/ K    Environment:    </span>&lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">
/ O' s% n  `. N4 h6 m    Mounts:8 R1 f. Z* T. m9 }
      </span>/logs from webapp-<span style="color: rgba(0, 0, 0, 1)">logs (rw)5 y9 Q- ^2 u& h+ O
      </span>/var/run/secrets/kubernetes.io/serviceaccount from default-token-<span style="color: rgba(0, 0, 0, 1)">pcr2h (ro)# b% X9 t; l3 S
Conditions:
3 i0 t9 @4 \$ ^) K5 S2 o  Type              Status; t' ~* Q/ O6 M, z! }; G
  Initialized       True) E( L! J4 P! j
  Ready             True
1 O+ u: t2 n9 u0 j' ~& X, x  ContainersReady   True7 F' A7 u+ W5 p# e& i" E/ z: ]6 h
  PodScheduled      True9 w6 f$ `+ T8 u" a5 T. G1 e3 Y
Volumes:6 |! _$ b, x' i5 x4 d% i
  webapp</span>-<span style="color: rgba(0, 0, 0, 1)">logs:! h& a  z7 B$ N! M% U
    Type:       EmptyDir (a temporary directory that shares a pod</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">s lifetime)</span>
2 f. M  O! C# R. o& [: W* W) Q+ M<span style="color: rgba(0, 0, 0, 1)">    Medium:6 `7 B+ y8 i  z0 h* r  j
    SizeLimit:  </span>&lt;unset&gt;<span style="color: rgba(0, 0, 0, 1)">7 @! Q1 Q+ O" v" C4 W$ _! z
  default</span>-token-<span style="color: rgba(0, 0, 0, 1)">pcr2h:
5 ?  M( G$ Z$ G, w    Type:        Secret (a volume populated by a Secret)
4 w: p" ^$ W0 r  B' s& [    SecretName:  default</span>-token-<span style="color: rgba(0, 0, 0, 1)">pcr2h
5 `2 _" {1 x' a8 L5 f5 `: \    Optional:    </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
& l& t4 O! Y5 x/ b1 |0 T* qQoS Class:       BestEffort
- ]5 V( q  R% y4 e- KNode</span>-Selectors:  &lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">
, T. Y& v  D8 M7 F9 VTolerations:     node.kubernetes.io</span>/not-ready:NoExecute op=Exists <span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> 300s
. d: i2 u- Z! G0 H3 Q$ b                 node.kubernetes.io</span>/unreachable:NoExecute op=Exists <span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> 300s
( p' y) O7 H1 AEvents:
* B' _$ F- w/ z2 m! Z  Type    Reason     Age    From               Message
. w8 z+ C1 a. Z& t( y+ n' @  </span>----    ------     ----   ----               -------<span style="color: rgba(0, 0, 0, 1)">) \" `% k7 G" v7 g, x; _7 M! J: a
  Normal  Scheduled  2m23s  default</span>-scheduler  Successfully assigned default/<span style="color: rgba(0, 0, 0, 1)">webapp to ayato8 e) C# h" A" n( R/ {! s; X
  Normal  Pulled     2m22s  kubelet            Container image </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">172.16.194.135:5000/webapp:1.0</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> already present on machine
( @  t' ?9 H6 {0 c+ R5 B8 a  Normal  Created    2m21s  kubelet            Created container webapp
  G8 a9 K) W3 j+ P  Normal  Started    2m21s  kubelet            Started container webapp8 X) ~0 W  t& m3 m8 b8 C
  Normal  Pulling    2m21s  kubelet            Pulling image </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">busybox</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
; `6 \( U+ T% C# f# i  Normal  Pulled     15s    kubelet            Successfully pulled image </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">busybox</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(0, 0, 255, 1)">in</span> <span style="color: rgba(128, 0, 128, 1)">14</span><span style="color: rgba(0, 0, 0, 1)">.633078305s6 _& Y( m% J- d4 b
  Normal  Created    15s    kubelet            Created container busybox
4 h; V: y% o+ _* G* v) P- K  Normal  Started    14s    kubelet            Started container busybox</span></pre>
* ^: C/ E: F0 ~  t% l5 ]</div>4 W9 ]3 B; M5 g# b  L
<p>真的是飞一般的感觉!!!</p>6 j+ w5 |4 e% s* |
<p>&nbsp;</p>/ n" m$ l+ F+ k2 g" ?6 i1 r
<p>三、Context和Namespace切换</p>4 c, a, x2 g! [
<p>我们在公司的容器平台上使用kubectl时,经常需要切换context和namespace,导致命令非常繁琐,那有没有简便的方式呢?—— kubectx</p>" ^! [! e6 M; `( c' }, C8 J0 x
<p>kubectx安装</p>
% |' G2 z6 N; c4 A5 G9 ~9 n- W<div class="cnblogs_code">9 I  [$ h4 H* d. u
<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span> git clone https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">github.com/ahmetb/kubectx /opt/kubectx</span>
4 ]( Q! A6 e; b" [Cloning into <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/opt/kubectx</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">...1 n& D! o6 J" u  Q0 F. k( R
remote: Enumerating objects: </span><span style="color: rgba(128, 0, 128, 1)">1457</span>, <span style="color: rgba(0, 0, 255, 1)">done</span><span style="color: rgba(0, 0, 0, 1)">.2 \8 v0 b9 d1 {4 h& ^) O, W! }
remote: Counting objects: </span><span style="color: rgba(128, 0, 128, 1)">100</span>% (<span style="color: rgba(128, 0, 128, 1)">172</span>/<span style="color: rgba(128, 0, 128, 1)">172</span>), <span style="color: rgba(0, 0, 255, 1)">done</span><span style="color: rgba(0, 0, 0, 1)">.( @! m2 K% |" T* U% q
remote: Compressing objects: </span><span style="color: rgba(128, 0, 128, 1)">100</span>% (<span style="color: rgba(128, 0, 128, 1)">115</span>/<span style="color: rgba(128, 0, 128, 1)">115</span>), <span style="color: rgba(0, 0, 255, 1)">done</span><span style="color: rgba(0, 0, 0, 1)">.9 [, B# y/ j. F% @
remote: Total </span><span style="color: rgba(128, 0, 128, 1)">1457</span> (delta <span style="color: rgba(128, 0, 128, 1)">85</span>), reused <span style="color: rgba(128, 0, 128, 1)">97</span> (delta <span style="color: rgba(128, 0, 128, 1)">51</span>), pack-reused <span style="color: rgba(128, 0, 128, 1)">1285</span><span style="color: rgba(0, 0, 0, 1)">, R& e: [/ V8 @4 u
Receiving objects: </span><span style="color: rgba(128, 0, 128, 1)">100</span>% (<span style="color: rgba(128, 0, 128, 1)">1457</span>/<span style="color: rgba(128, 0, 128, 1)">1457</span>), <span style="color: rgba(128, 0, 128, 1)">905.30</span> KiB | <span style="color: rgba(128, 0, 128, 1)">69.00</span> KiB/s, <span style="color: rgba(0, 0, 255, 1)">done</span><span style="color: rgba(0, 0, 0, 1)">.
* i8 x  k/ i6 ~9 F2 {Resolving deltas: </span><span style="color: rgba(128, 0, 128, 1)">100</span>% (<span style="color: rgba(128, 0, 128, 1)">817</span>/<span style="color: rgba(128, 0, 128, 1)">817</span>), <span style="color: rgba(0, 0, 255, 1)">done</span><span style="color: rgba(0, 0, 0, 1)">.
. ]! ]" E' b* {/ S/ V' L$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">ln</span> -s /opt/kubectx/kubens /usr/local/bin/kubectl-<span style="color: rgba(0, 0, 0, 1)">ns3 K' S* A7 f+ w  A; J
$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">ln</span> -s /opt/kubectx/kubectx /usr/local/bin/kubectl-ctx</pre>: j0 D2 F2 R; U# u) U
</div>& q1 K; z  G0 }* I$ P3 I% X
<p>我们来看一下效果:</p>
1 y! Y7 o1 i1 Q<div class="cnblogs_code"># i) z) ~, R, q0 i/ ~- H9 M& J
<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> k ctx% N8 o4 Z$ |" J
minikube
) x- W8 p! D0 v; Z$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> k ctx minikube
1 R% s( X% Y! @Switched to context </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">minikube</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">.
& [7 @% d& ^! `$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> k ns
) k  E. `, H1 H/ k0 t/ P5 odefault
# h. ^0 v7 p# W5 U; b' Ekube</span>-node-<span style="color: rgba(0, 0, 0, 1)">lease( W2 U4 y: I; |/ y9 J* Q6 [; U
kube</span>-<span style="color: rgba(0, 0, 0, 1)">public1 r: b4 U; \5 Y& W- `
kube</span>-<span style="color: rgba(0, 0, 0, 1)">system
; _* d8 D- g" ]) rkubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
3 r! U- l. X7 s" T# @/ P$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span> k ns kube-<span style="color: rgba(0, 0, 0, 1)">public
* y% D' C, n! b% JContext </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">minikube</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> modified.
4 `9 R5 h9 t% BActive namespace is </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kube-public</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">.' G( I& P, r( \- u! Y. j
$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> k ns default: K  \( u  K7 j1 |) v
Context </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">minikube</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> modified.
, M6 {- s; I- O6 G- G) zActive namespace is </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">default</span><span style="color: rgba(128, 0, 0, 1)">"</span>.</pre>3 s; I5 E2 }* T& L3 P) ]
</div>
( |9 K  |) s' ?1 G$ }: n<p>&nbsp;</p>
7 [; f6 L  J- y2 ^6 x# M( M<p>四、跟踪查看多个Pod的日志</p>7 m) i0 |$ x4 e) E0 w
<p>我们一般使用kubectl logs命令查看Pod日志,但是它不能通过-f参数同时跟踪查看多个Pod日志,这就不方便了,毕竟实际生产环境中每个服务都会有多个Pod,这时我们可以使用stern这个工具,它具备如下能力:</p>0 V! P& \9 L! W2 ]/ f4 Z3 F
<ul class="list-paddingleft-2">" o+ s  Q4 L$ `! }6 p  L- X, b
<li>
% B7 W. v- x6 i9 r+ @( G  n<p>允许使用正则表达式来选择需要查看的PodName</p>+ }2 Z" T" c- c$ _
</li>- L  q; U' P6 h6 C; z' i
<li>
8 h0 w8 O0 _9 |1 U) s. R% u<p>为不同 Pod 的日志展示不同的颜色</p>
1 t& @( c8 b3 [' T# i3 Y</li>+ y# c1 f; a, ?0 J' u7 `$ |  D) H
<li>
* W0 Q: \3 {0 s. g<p>跟踪日志过程中假如有符合规则的新 Pod 被创建, 那么会自动添加到输出中</p>. U! n2 c6 A) t' g
</li>
% n/ [/ i! p6 Y( q' N</ul>9 B$ A* X9 y" W  n& H* U, \
<p>首先安装stern(下载stern时可能较慢可以多试几次):</p>: A2 B" {0 j0 g' F! F$ L+ K0 k
<div class="cnblogs_code">" f+ w' u/ c. @
<pre><span style="color: rgba(0, 0, 255, 1)">wget</span> https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">github.com/wercker/stern/releases/download/1.11.0/stern_linux_amd64</span>
5 b& X( j2 h" J( V0 A* L. s4 y, V, n, L<span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">mv</span> stern_linux_amd64 /usr/local/bin/kubectl-<span style="color: rgba(0, 0, 255, 1)">tail</span>
9 W1 }) b/ c4 b6 S$ [<span style="color: rgba(0, 0, 255, 1)">sudo</span> chomd +x /usr/local/bin/kubectl-<span style="color: rgba(0, 0, 255, 1)">tail</span></pre>
7 _5 J6 t$ F! W, u1 F' A* k8 V</div>
; v  ?3 l4 u$ |4 ~; r<p>安装完毕后让我一起感受一下stern的魅力吧,我的Pod里面有两个容器:webapp和busybox,如果使用kubectl logs 还得指定具体的容器,而使用stern就没有这样的限制。</p>
$ e" A; ~& F$ R  T# |<div class="cnblogs_code">
6 {) Y6 E, q8 H2 ]# c8 b<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span> k <span style="color: rgba(0, 0, 255, 1)">tail</span><span style="color: rgba(0, 0, 0, 1)"> .- _  K2 k6 G& R! {3 Y
</span>+<span style="color: rgba(0, 0, 0, 1)"> webapp › busybox
1 N# U1 i4 z* [* m- p3 [</span>+<span style="color: rgba(0, 0, 0, 1)"> webapp › webapp
  n) X3 r' n/ M9 [1 N4 x$ Dwebapp busybox </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">53.197</span> [INFO ] [main] [org.apache.coyote.http11.Http11NioProtocol] Initializing ProtocolHandler [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http-nio-4567</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">]
' m: b; l% Z0 @# O+ }webapp busybox </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">53.200</span><span style="color: rgba(0, 0, 0, 1)"> [INFO ] [main] [org.apache.catalina.core.StandardService] Starting service [Tomcat]) L* C) i3 Z: J5 s- `6 D+ L8 L
webapp busybox </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">53.201</span> [INFO ] [main] [org.apache.catalina.core.StandardEngine] Starting Servlet engine: [Apache Tomcat/<span style="color: rgba(128, 0, 128, 1)">9.0</span>.<span style="color: rgba(128, 0, 128, 1)">41</span><span style="color: rgba(0, 0, 0, 1)">]( @5 B% ~. O3 L: x1 x
webapp busybox </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">53.324</span> [INFO ] [main] [org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/<span style="color: rgba(0, 0, 0, 1)">]] Initializing Spring embedded WebApplicationContext. F! N$ z- o7 I  [' R3 _/ O
webapp busybox </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">53.325</span> [INFO ] [main] [org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext] Root WebApplicationContext: initialization completed <span style="color: rgba(0, 0, 255, 1)">in</span> <span style="color: rgba(128, 0, 128, 1)">2952</span><span style="color: rgba(0, 0, 0, 1)"> ms
. n3 {2 u! \1 owebapp busybox </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">53.801</span> [INFO ] [main] [org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor] Initializing ExecutorService <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">applicationTaskExecutor</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">9 [1 P/ A  N" @* c. {
webapp busybox </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">54.264</span> [WARN ] [main] [org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration] Cannot <span style="color: rgba(0, 0, 255, 1)">find</span> template location: classpath:/templates/<span style="color: rgba(0, 0, 0, 1)"> (please add some templates or check your Thymeleaf configuration)' u9 l3 u  ?/ d: m$ k/ q( a% X
webapp busybox </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">54.377</span> [INFO ] [main] [org.apache.coyote.http11.Http11NioProtocol] Starting ProtocolHandler [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http-nio-4567</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">]
6 f! B; D8 _/ s5 fwebapp busybox </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">54.481</span> [INFO ] [main] [org.springframework.boot.web.embedded.tomcat.TomcatWebServer] Tomcat started on port(s): <span style="color: rgba(128, 0, 128, 1)">4567</span> (http) with context path <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">
$ b+ O% t- g5 v& B% Owebapp busybox </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">54.509</span> [INFO ] [main] [org.demo.webapp.todolist.TodoListApplication] Started TodoListApplication <span style="color: rgba(0, 0, 255, 1)">in</span> <span style="color: rgba(128, 0, 128, 1)">6.235</span> seconds (JVM running <span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(128, 0, 128, 1)">8.074</span><span style="color: rgba(0, 0, 0, 1)">)
0 M0 ^) l1 j! U- }- {webapp webapp* b. S- s9 Q& O( u$ a2 p7 _& }; y
webapp webapp   .   ____          _            __ _ _' n* U* s' |2 b1 T
webapp webapp  </span>/\\ / ___<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">_ __ _ _(_)_ __  __ _ \ \ \ \</span>
9 d; F! v) x8 c5 `1 [webapp webapp ( ( )\___ | <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">_ | </span><span style="color: rgba(128, 0, 0, 1)">'</span>_| | <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">_ \/ _` | \ \ \ \</span>" o: C# v, D& Z5 d
webapp webapp  \\/  ___)| |_)| | | | | || (_| |<span style="color: rgba(0, 0, 0, 1)">  ) ) ) )8 A  M1 J2 t$ \
webapp webapp   </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">  |____| .__|_| |_|_| |_\__, | / / / /</span>
7 x' @2 M& D& M1 g# d# i3 awebapp webapp  =========|_|==============|___/=/_/_/_/<span style="color: rgba(0, 0, 0, 1)">
6 k* f7 I$ d- J) z' Hwebapp webapp  :: Spring Boot ::                (v2.</span><span style="color: rgba(128, 0, 128, 1)">4.2</span><span style="color: rgba(0, 0, 0, 1)">)6 d! y. c; ]6 I
webapp webapp
; b) i4 k; ^4 |1 Y" iwebapp webapp </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">50.124</span> [INFO ] [main] [org.demo.webapp.todolist.TodoListApplication] Starting TodoListApplication v1.<span style="color: rgba(128, 0, 128, 1)">0</span>-SNAPSHOT using Java <span style="color: rgba(128, 0, 128, 1)">1.8</span>.0_111 on webapp with PID <span style="color: rgba(128, 0, 128, 1)">1</span> (/opt/soft/webapp.jar started by root <span style="color: rgba(0, 0, 255, 1)">in</span> /opt/<span style="color: rgba(0, 0, 0, 1)">soft)' U$ a! S; m; n9 F5 W& h3 J
webapp webapp </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">50.165</span><span style="color: rgba(0, 0, 0, 1)"> [INFO ] [main] [org.demo.webapp.todolist.TodoListApplication] No active profile set, falling back to default profiles: default: X: J, Y  w2 ^3 O
webapp webapp </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">53.158</span> [INFO ] [main] [org.springframework.boot.web.embedded.tomcat.TomcatWebServer] Tomcat initialized with port(s): <span style="color: rgba(128, 0, 128, 1)">4567</span><span style="color: rgba(0, 0, 0, 1)"> (http)
5 L6 |8 [5 X. T8 ~webapp webapp </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">53.197</span> [INFO ] [main] [org.apache.coyote.http11.Http11NioProtocol] Initializing ProtocolHandler [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http-nio-4567</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">]
+ j! `  z1 ?! A6 `& `webapp webapp </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">53.200</span><span style="color: rgba(0, 0, 0, 1)"> [INFO ] [main] [org.apache.catalina.core.StandardService] Starting service [Tomcat]
4 T  }4 B. @- W$ Qwebapp webapp </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">53.201</span> [INFO ] [main] [org.apache.catalina.core.StandardEngine] Starting Servlet engine: [Apache Tomcat/<span style="color: rgba(128, 0, 128, 1)">9.0</span>.<span style="color: rgba(128, 0, 128, 1)">41</span><span style="color: rgba(0, 0, 0, 1)">]$ y* y; w- F4 r& \1 ^0 O
webapp webapp </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">53.324</span> [INFO ] [main] [org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/<span style="color: rgba(0, 0, 0, 1)">]] Initializing Spring embedded WebApplicationContext
/ |  R% W  P! z5 T. k2 d: j+ Owebapp webapp </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">53.325</span> [INFO ] [main] [org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext] Root WebApplicationContext: initialization completed <span style="color: rgba(0, 0, 255, 1)">in</span> <span style="color: rgba(128, 0, 128, 1)">2952</span><span style="color: rgba(0, 0, 0, 1)"> ms' b  T: s2 i% L3 ]% q( c
webapp webapp </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">53.801</span> [INFO ] [main] [org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor] Initializing ExecutorService <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">applicationTaskExecutor</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
1 \$ {; ?2 y7 X3 I+ L0 T0 }webapp webapp </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">54.264</span> [WARN ] [main] [org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration$DefaultTemplateResolverConfiguration] Cannot <span style="color: rgba(0, 0, 255, 1)">find</span> template location: classpath:/templates/<span style="color: rgba(0, 0, 0, 1)"> (please add some templates or check your Thymeleaf configuration)
, K0 q6 G$ c6 x" U2 Jwebapp webapp </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">54.377</span> [INFO ] [main] [org.apache.coyote.http11.Http11NioProtocol] Starting ProtocolHandler [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http-nio-4567</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">]/ d% M/ L& g+ ^, L
webapp webapp </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">54.481</span> [INFO ] [main] [org.springframework.boot.web.embedded.tomcat.TomcatWebServer] Tomcat started on port(s): <span style="color: rgba(128, 0, 128, 1)">4567</span> (http) with context path <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">
0 U. ?: B* [2 h* ~6 nwebapp webapp </span><span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>:<span style="color: rgba(128, 0, 128, 1)">54.509</span> [INFO ] [main] [org.demo.webapp.todolist.TodoListApplication] Started TodoListApplication <span style="color: rgba(0, 0, 255, 1)">in</span> <span style="color: rgba(128, 0, 128, 1)">6.235</span> seconds (JVM running <span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(128, 0, 128, 1)">8.074</span>)</pre>$ {$ P3 C7 W! X
</div>
/ h- z7 m; ~9 O  p% _<p>&nbsp;</p># [5 _( R0 U: q3 D; {  }$ t
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|飞雪团队

GMT+8, 2026-3-16 12:50 , Processed in 0.072738 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表