飞雪团队

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

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

[复制链接]

7645

主题

7733

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
25265
发表于 2022-2-12 14:35:42 | 显示全部楼层 |阅读模式
1 J; d. n3 K( A8 x
<p>kubectl作为我们主要的操作K8S的工具,其具备非常丰富的功能,但是如果不经过打磨,使用起来还是存在诸多不便,今天我们来看看如何将我们的kubectl打磨的更加易用。</p>  d8 V3 }" r4 Q9 g; @2 ?/ k8 N
<p>&nbsp;</p>
$ g5 R* F7 c6 K1 R: U! Q<p>一、命令自动补全</p>
6 k* T" g8 r0 n1 @<p>kubectl中提供非常多的命令,如果每一次都要手动一个字符一个字符的敲未免太累了,那么如何配置自动补全呢?这里以ubuntu系统为例:</p>
1 K. F, v' X# E1 ], [( M<p>1、安装auto-completion工具</p>- I# K6 x5 I+ V, D  A+ i
<div class="cnblogs_code">* i2 j. \; l) q5 L5 T% D
<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> apt update
; s7 L! @' \5 DHit:</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>' G& T, C8 i4 W' F4 n
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>
  M( C9 b5 ^. A5 IHit:<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>5 N, f0 `  E; v5 s! Q! L
Hit:<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>6 ~8 Z' M" _8 y7 T
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>$ \5 K! ]( J. \( P
<span style="color: rgba(0, 0, 0, 1)">Reading package lists... Done
1 i! o2 }! d  Y$ Z6 K! OBuilding dependency tree0 E* ]) y* n+ q' Z/ K# X
Reading state information... Done1 I, a% C( o# {9 K+ w9 _: x3 z3 Y" F
</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.3 O, {  {& Y6 L# k
$ </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
1 n! [" P, P: [. R% GReading package lists... Done* [; ~3 W# t1 S% @
Building dependency tree8 E- j. z, S9 v
Reading state information... Done) x, i8 Z5 ]+ p; j9 B9 ^- R
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)." V6 P& u! Y# z% e
</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>% u; X8 ^0 t; Q) w& ]
</div>0 \4 r4 }! X% E" I
<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>3 k2 c6 ~% Y8 T/ p1 N3 E; |
<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>8 w: D% o" L, s
<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>
: y2 B9 a1 b2 f" [' g% f. C! e<div class="cnblogs_code"># e$ \" S0 @% t; f& U6 U( m
<pre>source &lt;<span style="color: rgba(0, 0, 0, 1)">(kubectl completion bash)
+ Y+ C9 A4 x* H4 p- x. ~: ~# U, {</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>
5 i2 K, z3 ]+ W7 N0 e' g) h8 G( z</div>
1 t6 f% c0 }! z! c9 z<p><strong>Zsh</strong>:</p>5 P) W; M3 @8 Z0 B: j8 Q
<div class="cnblogs_code">
' }6 u0 W6 @% |0 n% \8 [<pre>source &lt;<span style="color: rgba(0, 0, 0, 1)">(kubectl completion zsh)
6 }2 M" v0 G, ~. r) o$ o</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>
- f) S. D' p( U2 D* m& t</div>8 `4 n: c4 [0 R- i3 o1 f; t
<p>配置后就可以通过Tab键自动补全命令啦!</p>
. k) I( X3 [! ?9 c+ j<p>&nbsp;</p>
% i) T2 E! m4 |% }& R. f" B3 ~' N; l<p>二、配置kubectl别名</p>4 _, ^1 {( {7 r
<p>我们可以通过设置别名简化kubectl命令,编辑.bashrc文件,添加如下内容:</p>1 a8 N3 \( E5 u; i2 {% J; [
<div class="cnblogs_code">* }0 B1 I9 r! k0 i8 x
<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)">* `& t. ^2 d* C3 B
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)">
/ W2 |! _( B- [$ k% r* H5 nalias 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)">, T9 v7 z8 x/ ~) ?' L
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)">% F$ f0 y0 k1 s: J7 }8 K1 Z1 D! X+ b
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)">
4 ]  x: t& ^1 j) v* a! Zalias 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)">& L+ z  O4 {( S& y
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>: t( ]' O& V/ E/ x  z( @+ ?# H
</div>
. u) y' u5 k) h6 r+ W. }0 C<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>
. F  |" f" y- @  K; ?3 l<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>
, ?( o4 j4 p, q0 l2 X1 x) V<div class="cnblogs_code">; e( V1 l. `' h) q# O6 z
<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> ka webapp_pod.yaml' x7 c8 J4 z# t8 t% B7 Z9 c
pod</span>/<span style="color: rgba(0, 0, 0, 1)">webapp created
& ~0 _$ _# q8 z$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> kg pods
0 a9 c. B$ ]# |7 U7 _- }' h/ W: GNAME     READY   STATUS              RESTARTS   AGE
1 M! J7 Y, y5 pwebapp   </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)">          7s8 d1 K4 s; E! g7 Q2 ]# N1 G1 L+ t
$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> kd pod webapp
" a; {; c; _1 HName:         webapp" {; D' d* W7 _4 t' {5 `( _9 l
Namespace:    default2 H( G# h& M4 y5 V4 o3 P' @
Priority:     </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
7 M  w/ ~2 k% D) F0 `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)">! s2 w' v2 e- f5 |1 z" X
Start 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)">
0 y5 i2 \# W& d/ f' B0 oLabels:       app</span>=<span style="color: rgba(0, 0, 0, 1)">webapp7 H2 s7 z1 b% z
Annotations:  </span>&lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">+ X8 _* [4 \0 `0 G$ E! ]$ M3 o
Status:       Running7 w3 t( ?$ S3 r! S2 Y3 j# D
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)">
0 q8 y8 V6 ]4 g6 XIPs:5 j; b8 T- k- j( y
  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)">
+ i  A3 _1 C4 b* l9 T9 IContainers:
( P, C+ k' a1 t$ ~  webapp:5 _) O' Y+ n, \, ^, P0 F
    Container ID:   docker:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">d9ddf9dd47de12b53f2119bf75df6706bee2e7711509638ad52adc9addeda704</span>
+ u. I5 A' [4 }2 V8 r; Z    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)">7 w. Z8 q: ]) Y  J) a' Y  d4 ~4 ^
    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>
1 G: Q7 B- W2 D9 b/ F    Port:           <span style="color: rgba(128, 0, 128, 1)">5000</span>/<span style="color: rgba(0, 0, 0, 1)">TCP% Z4 m9 S* ?* G$ S* d
    Host Port:      </span><span style="color: rgba(128, 0, 128, 1)">0</span>/<span style="color: rgba(0, 0, 0, 1)">TCP6 _9 L4 ]* O, e  F
    State:          Running
7 D% g$ \  [6 ]+ y: C      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)">
, |  X' U9 F  H9 G. @8 M& r! S3 F    Ready:          True
) K! v9 ?3 L; ]- t: d    Restart Count:  </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
8 @$ i0 O5 A: F7 |0 w; d    Environment:    </span>&lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">: a$ U6 B( k% w  y2 s# F
    Mounts:
8 T3 Z0 H2 u3 h4 y' C      </span>/tmp from webapp-<span style="color: rgba(0, 0, 0, 1)">logs (rw). e1 Q& e7 W- h# ?& c9 ?* e
      </span>/var/run/secrets/kubernetes.io/serviceaccount from default-token-<span style="color: rgba(0, 0, 0, 1)">pcr2h (ro)
4 y0 y4 @9 j4 [* H1 Q3 m4 o: b  busybox:! t, f# \, j, L. Y* s2 S
    Container ID:  docker:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">6a6a35a628a782fc643af3dd49986bbc77c23de1ae4726bc521c77f61abbbf5d</span>. q, W, p9 Q. Q7 X
<span style="color: rgba(0, 0, 0, 1)">    Image:         busybox
" a+ T$ z5 r. Z4 E( B1 _1 f    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>
2 z; [: [; q2 \' }* \    Port:          &lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">7 S6 F- x( v+ ^
    Host Port:     </span>&lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">
: I; ^' [: k% @/ A6 ^! S! R    Command:: L. F9 a6 l# c: P: {
      </span><span style="color: rgba(0, 0, 255, 1)">sh</span>7 N& U4 P0 W9 V5 d9 F
      -<span style="color: rgba(0, 0, 0, 1)">c
) j' v  X+ M1 S( i. x; J      </span><span style="color: rgba(0, 0, 255, 1)">tail</span> -f /logs/<span style="color: rgba(0, 0, 0, 1)">log.out4 P8 X* F9 c$ V) o
    State:          Running9 ^* j4 z- O5 w' u7 k
      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)">' a+ e& Z3 U2 u3 `
    Ready:          True3 s0 P' E0 U' v) b2 ]
    Restart Count:  </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
# C0 d; s, l9 ^! q8 F6 \) z2 H) e) V    Environment:    </span>&lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">
3 Y' v. Q5 ~7 u; E0 Y- q$ P& ?    Mounts:: d; N! U8 v7 k3 g% ~
      </span>/logs from webapp-<span style="color: rgba(0, 0, 0, 1)">logs (rw)6 X( T6 ~" D7 s1 ^! _( Z
      </span>/var/run/secrets/kubernetes.io/serviceaccount from default-token-<span style="color: rgba(0, 0, 0, 1)">pcr2h (ro)
% l. ~+ q8 s' W, J9 \+ j) ~Conditions:
/ o6 D9 E# k5 O  Type              Status
& D' q+ n- N% `( W  Initialized       True
+ m8 ^% I3 T# |2 L; n6 _  Ready             True6 q  d7 f; q  H. U. L/ b7 V
  ContainersReady   True
& R  w4 B: G$ G% ?  S! b  PodScheduled      True
, o; Q9 Y% }3 \6 u' ^# D" V- Z1 BVolumes:
7 e7 a5 w' F' Z  webapp</span>-<span style="color: rgba(0, 0, 0, 1)">logs:5 z" I1 R% d' a  m
    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>7 n* N4 J0 f" [5 V
<span style="color: rgba(0, 0, 0, 1)">    Medium:! O9 w1 ^9 D1 u* U' x
    SizeLimit:  </span>&lt;unset&gt;<span style="color: rgba(0, 0, 0, 1)">; ?" u$ h" \6 f$ ]9 D2 }; V5 q: ~
  default</span>-token-<span style="color: rgba(0, 0, 0, 1)">pcr2h:5 f$ a3 s4 o. N2 P# S8 ]
    Type:        Secret (a volume populated by a Secret)
& N- t3 G/ V! K5 \! b2 `    SecretName:  default</span>-token-<span style="color: rgba(0, 0, 0, 1)">pcr2h
+ b- V. s& ^! M. c6 r7 {9 H. X    Optional:    </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">- g. q/ V5 l# r
QoS Class:       BestEffort
$ a3 I! r( B. V' [# ?) ONode</span>-Selectors:  &lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">/ H% ^9 P/ A6 Z/ H9 R
Tolerations:     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)"> 300s8 Z' g9 d$ P8 G# v# ?6 V1 }! X
                 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)"> 300s3 T/ J4 d$ h' i( ~+ P+ d) ], k/ K
Events:
; @0 \/ Y! w& A7 |0 l' _  Type    Reason     Age    From               Message
2 ]: `* c' c% h6 X, `! U2 H6 u% {8 @  </span>----    ------     ----   ----               -------<span style="color: rgba(0, 0, 0, 1)">. q. E2 V3 k! M% u& A' }6 C+ \
  Normal  Scheduled  2m23s  default</span>-scheduler  Successfully assigned default/<span style="color: rgba(0, 0, 0, 1)">webapp to ayato
6 h! L* B# o( i( Q  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
& ~2 P  F7 a  f) B+ `; R' k- G  Normal  Created    2m21s  kubelet            Created container webapp
4 r/ _0 i2 `# B5 V) D  Normal  Started    2m21s  kubelet            Started container webapp8 v( Y# b; [8 O* ~3 R! K
  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)">
1 i; o6 X9 m3 E$ T  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)">.633078305s
1 o: h& ~" y( M1 q) T9 f' X  ]- z' w  Normal  Created    15s    kubelet            Created container busybox* r" J7 d0 A, L) l5 l9 [! V4 d( i/ N
  Normal  Started    14s    kubelet            Started container busybox</span></pre>. @4 z) u" M) ~
</div>( _" a7 T. p% Q4 c' n
<p>真的是飞一般的感觉!!!</p>/ z/ ~& g$ H5 ~
<p>&nbsp;</p>
; P* e0 M. t- f2 w; V8 b<p>三、Context和Namespace切换</p>: F$ e$ c( W; x7 P( u  X# @9 O
<p>我们在公司的容器平台上使用kubectl时,经常需要切换context和namespace,导致命令非常繁琐,那有没有简便的方式呢?—— kubectx</p>
" g; d) e" c% E# r  h& T<p>kubectx安装</p>6 y. ]) ]+ e' x7 u7 [
<div class="cnblogs_code">3 R6 t6 ?& c3 U1 {
<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>2 Y" \% F4 }$ @/ E6 M3 B* F  L4 F. q
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)">...6 S& ?# \/ ]% |" V
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)">.
4 V( c/ J) H/ g  [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)">.+ ]% S8 V# \% m& m5 l- I
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)">.$ N% b& S; W, f- e( k
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)">. i# q0 o9 [; C" I( U- o5 f8 O7 c) Q
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)">.
% y# D; O* A6 `/ W* U% fResolving 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)">.
* T4 v7 ~) _# }$ </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)">ns
" j. b2 i0 _5 q  m$ </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>5 a( }: R- w+ V4 S) h
</div>! [+ u9 _8 ^# h/ R' c
<p>我们来看一下效果:</p>
4 i' i  q( I  A- v( h<div class="cnblogs_code">
2 i8 U9 B  X0 w. D; w( o<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> k ctx  T/ i, D( i( ^/ ?( S, T5 T) H
minikube
/ [: O- Z7 F6 a& Z  e* W5 A# V$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> k ctx minikube
- ]% [2 P  A2 |0 J1 Q1 j! sSwitched 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)">.
( I/ g2 n, H+ X; ~* q( |3 ]$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> k ns
/ G9 h5 S7 c# l7 O5 tdefault
& i: A  k0 W6 {6 ?# xkube</span>-node-<span style="color: rgba(0, 0, 0, 1)">lease8 I9 E) W  N$ z& r
kube</span>-<span style="color: rgba(0, 0, 0, 1)">public
: {( u" V% C8 S( qkube</span>-<span style="color: rgba(0, 0, 0, 1)">system! X* Q  u( d$ U$ w
kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
1 b# m$ N* Q3 f! Z$ ~; _1 c$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span> k ns kube-<span style="color: rgba(0, 0, 0, 1)">public; G) X: W' W5 C8 G( [
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.! `$ \- q$ w! [0 l. d/ B
Active 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)">.
$ F5 R/ g* J5 D- ?" B$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> k ns default9 J9 X* X' Z& O- y5 Q
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.' g' T$ J# C- f3 a* G
Active 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>
) M8 V& c7 |* ^</div>
# y: h& b: S0 T* R6 G<p>&nbsp;</p>& [! W' a/ ^+ Q9 w4 T% G
<p>四、跟踪查看多个Pod的日志</p>: k& C1 Y- Q* \9 i1 B1 L' ?  c1 }
<p>我们一般使用kubectl logs命令查看Pod日志,但是它不能通过-f参数同时跟踪查看多个Pod日志,这就不方便了,毕竟实际生产环境中每个服务都会有多个Pod,这时我们可以使用stern这个工具,它具备如下能力:</p>
  U7 M" d1 w$ P0 H# u& L<ul class="list-paddingleft-2">
- A# |; |+ v: i' ^! o6 c# C( V: M<li>
+ v5 x( s) [4 T<p>允许使用正则表达式来选择需要查看的PodName</p>
1 F% Q; R8 `/ y& t5 Y$ V6 a</li>
) s4 i% p7 C6 a) \) G! ^<li>6 p4 }3 V) w9 v, i6 I2 X. m
<p>为不同 Pod 的日志展示不同的颜色</p>
6 [9 ]& A; t$ b</li>
. `( X% w4 H. H3 g5 g/ ]  G7 U( F& z. O<li>
4 i" p7 {# a: ?<p>跟踪日志过程中假如有符合规则的新 Pod 被创建, 那么会自动添加到输出中</p>
" c/ b+ g1 M' v8 {6 I</li>
; Z, d! B7 C, \2 @+ l' ^% a</ul># ~0 H8 a0 a3 p7 h
<p>首先安装stern(下载stern时可能较慢可以多试几次):</p>
5 P# K1 G4 x- M% i<div class="cnblogs_code">  P! _9 Y$ i& A! t3 E- u- V
<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>
) D* N! E! E. q6 ^9 B: a<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>6 i" Z% y% A4 y: U$ `1 q
<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>
. a* N: y( r  \; U</div>
& z$ _- g( y" z: f6 P<p>安装完毕后让我一起感受一下stern的魅力吧,我的Pod里面有两个容器:webapp和busybox,如果使用kubectl logs 还得指定具体的容器,而使用stern就没有这样的限制。</p>
, z4 t0 o) W& c) G' G* c<div class="cnblogs_code">3 L- A2 w3 A( {0 x5 ?
<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)"> .
& Z$ F" n0 `, r' i7 Z/ |/ @</span>+<span style="color: rgba(0, 0, 0, 1)"> webapp › busybox
2 j! C( J/ G) ~' `5 q</span>+<span style="color: rgba(0, 0, 0, 1)"> webapp › webapp
" b  k) @+ |8 _! Mwebapp 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)">]# K( v3 C. `5 d- }3 s
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]
* t' m/ K6 Q5 A" K, Iwebapp 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)">]7 d& z9 t  ?. ~* M8 R, u4 G
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
8 w: }! y' \$ C  O1 b% J, f3 Gwebapp 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; m$ T+ C+ U$ C# q: e
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.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)">
8 O* A2 H1 K% r& n, {7 K$ H+ vwebapp 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)9 X: G& N+ Y& 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)">]  _% G5 Z: u1 a' `1 x) J1 _) Y8 `
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.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)">
/ L, k) g- X6 i2 i& Lwebapp 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)">)
+ N9 d% C* d9 `& Q9 A3 wwebapp webapp! n  V: U* z: v! g# @) z
webapp webapp   .   ____          _            __ _ _
, K1 x! h8 {* w% \webapp webapp  </span>/\\ / ___<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">_ __ _ _(_)_ __  __ _ \ \ \ \</span>: L5 {+ j9 I& a/ ]& C
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>
0 w4 u# H6 e% l; E) vwebapp webapp  \\/  ___)| |_)| | | | | || (_| |<span style="color: rgba(0, 0, 0, 1)">  ) ) ) )
$ S+ j+ U4 H# l+ N: n& v4 P* k* ywebapp webapp   </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">  |____| .__|_| |_|_| |_\__, | / / / /</span>
+ D" h* a, A" @8 h4 U3 Y' m  p+ ?webapp webapp  =========|_|==============|___/=/_/_/_/<span style="color: rgba(0, 0, 0, 1)">
! n* m+ S8 {8 {- l6 g. O" t- ^1 zwebapp webapp  :: Spring Boot ::                (v2.</span><span style="color: rgba(128, 0, 128, 1)">4.2</span><span style="color: rgba(0, 0, 0, 1)">)1 ~3 r! X! C' T1 e, |
webapp webapp
, N  f1 r, J* U! y( J5 l# ]+ D3 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)">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)
* Q0 U6 Z! Q7 |8 I. @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: default5 k: t8 j1 D4 q2 \  k7 W! y5 _
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); x5 c& Q/ [4 [- T% W) T8 p8 Q
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)">]) v. X1 Y" R$ r8 `
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]5 r$ ?. Q" R  O' N
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.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)">]: q1 |+ P4 Q. Y! W8 x
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 WebApplicationContext3 M, \. J4 N' H5 t6 q
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.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( x: S# g4 C1 E$ w$ |9 `( }5 W
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)">
6 T  B/ S  p" gwebapp 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)
7 ?+ K% C& J& g9 @/ n& ^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.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)">]) H- s% Q' 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)">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 N7 G) T- a; F' L) i3 Y$ V' w) swebapp 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># i& O  u6 s- u+ k: V
</div>6 g! ^- z9 i. e6 F
<p>&nbsp;</p>
) x; j: ]4 E; M1 D' W
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-10-16 23:33 , Processed in 0.079396 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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