飞雪团队

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

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

[复制链接]

6379

主题

6467

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

: d3 `/ P+ k+ C<p>kubectl作为我们主要的操作K8S的工具,其具备非常丰富的功能,但是如果不经过打磨,使用起来还是存在诸多不便,今天我们来看看如何将我们的kubectl打磨的更加易用。</p>0 r* n. y4 m% s
<p>&nbsp;</p>2 j0 W( r+ q9 S5 X2 ]3 P/ a( z
<p>一、命令自动补全</p>
7 `2 z+ V3 m* V9 ^) x+ V* N+ q<p>kubectl中提供非常多的命令,如果每一次都要手动一个字符一个字符的敲未免太累了,那么如何配置自动补全呢?这里以ubuntu系统为例:</p>0 R7 Q4 S  [) t3 i& V+ Z4 G! {
<p>1、安装auto-completion工具</p>" D8 L# c8 ?) r3 H
<div class="cnblogs_code">: k/ N+ O) h6 d& c8 o
<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> apt update8 Q- U6 b3 {  L& d
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>
# W0 S' B8 G$ a8 bHit:<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>: ?/ N) w, C8 w* U! n" J
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>1 ~/ K' j8 ]0 a  B
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>
5 V# }' d" V1 T6 o7 i/ ~( x2 G) vHit:<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>) L3 o+ A3 L2 R' R' D% p# o9 E
<span style="color: rgba(0, 0, 0, 1)">Reading package lists... Done
5 ~6 {; S  W8 \Building dependency tree
: m( e- D% c5 M. Z6 PReading state information... Done. ?) i3 l, m- S0 c7 _$ Q6 e
</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.# Y9 H) J1 i5 f, l+ ?
$ </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
# L8 ~" |0 W8 Y" H1 N5 I; `( oReading package lists... Done4 a& [$ I0 g7 h( Q
Building dependency tree! r( h" ^" y6 v" `
Reading state information... Done
5 H) _7 x: J9 N7 z# i; obash</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).
; g/ ?8 T: H6 T/ L</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>
( o+ k& ]7 M- J- c" [</div>
; ]' Z2 L( R9 F+ @4 A. e5 t<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>
" x1 V8 |. X5 t; J<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>0 U0 j& H, g3 c0 `& U& A% `- U
<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>
# ~! r6 ^, W3 A1 O" e3 ~<div class="cnblogs_code">7 G, F- @) x1 N8 C) k$ h
<pre>source &lt;<span style="color: rgba(0, 0, 0, 1)">(kubectl completion bash)% Q1 _$ _0 Y' F/ O7 T
</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>  t. u6 o8 G4 s8 Y6 o3 V
</div># o+ T: i8 d6 u( o3 M- c) o8 D
<p><strong>Zsh</strong>:</p>7 ~# K% `& f- a% Q4 H
<div class="cnblogs_code">
* `  m! p8 X2 F( z4 k/ I% e<pre>source &lt;<span style="color: rgba(0, 0, 0, 1)">(kubectl completion zsh)2 z* f9 f+ I8 Q1 h
</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>
9 W1 d5 {& i! ^' z</div>
* x- M' c9 O7 @# H# r. [( l. U+ ]- L<p>配置后就可以通过Tab键自动补全命令啦!</p>
5 L4 |& I, Y# e4 `<p>&nbsp;</p>
6 u4 R( Z' `* x% {# W( g& ?<p>二、配置kubectl别名</p>
. y' q$ E& x+ p, i) @: o5 S% o<p>我们可以通过设置别名简化kubectl命令,编辑.bashrc文件,添加如下内容:</p>7 i$ B( l4 ^, i# l7 ^
<div class="cnblogs_code">- ]8 l+ L: a7 A3 d4 ^3 b
<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)"># C3 Z2 @$ p" i4 ?# F- Y5 D  a
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)">
# C  k& P' T! `6 O" Valias 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)">( @) y3 z7 i# B  \; w0 Q
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)">2 T; b" Q: C8 r: P
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)">* U+ h  ~* f) x/ I) c; E, [
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)">: I" |9 b' B9 L& X! I; B7 ^) c: K
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>  d9 v- `! i2 D+ I
</div>6 S+ E: c9 o3 V
<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>% }5 t' o. p& p( b& }$ P  \2 M
<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>& A5 I6 m0 W$ Y; r
<div class="cnblogs_code">- I6 q9 C" H- Q" X
<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> ka webapp_pod.yaml4 a5 W, H: ]* s7 X
pod</span>/<span style="color: rgba(0, 0, 0, 1)">webapp created: s( Z3 i$ ]$ U8 Y% ^7 g% I# W
$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> kg pods2 q% M6 P! T3 P. a' T( Y( v
NAME     READY   STATUS              RESTARTS   AGE. k5 N$ D- Z3 m: w
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
; U% F& O  L! Z! ?. ~9 G$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> kd pod webapp: O2 V( O8 f+ b7 {$ [7 S( E
Name:         webapp
& u- Q$ |) @: FNamespace:    default0 U' d3 G: F) L% k: h& o
Priority:     </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">8 }, H0 s4 i8 q- C% e) d/ s
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)">8 b& K; J' }: y$ q
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)">6 [0 N; u( o9 ]) [
Labels:       app</span>=<span style="color: rgba(0, 0, 0, 1)">webapp
9 ?+ p9 F! H; @/ y+ pAnnotations:  </span>&lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">$ k) ?/ a" K; Q/ l3 n
Status:       Running
  T2 J' I1 Z1 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)">  K6 @5 l' p+ Q$ W3 R  b9 b
IPs:( b- e7 R& `$ X' }
  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)">
# B) p6 a" E  `$ g& H; cContainers:
8 |$ }: h, v# O" }6 N  webapp:
  W  F  T) e# X* |  u    Container ID:   docker:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">d9ddf9dd47de12b53f2119bf75df6706bee2e7711509638ad52adc9addeda704</span>
- ?; A4 Z% u6 ]* \    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)">8 V/ n( x6 W. S' r# W4 v! U
    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>/ u: ^9 L& D3 y7 G! n$ l- d
    Port:           <span style="color: rgba(128, 0, 128, 1)">5000</span>/<span style="color: rgba(0, 0, 0, 1)">TCP+ Z1 j, ~, x" a. {6 |4 t
    Host Port:      </span><span style="color: rgba(128, 0, 128, 1)">0</span>/<span style="color: rgba(0, 0, 0, 1)">TCP/ u7 E9 ~( }9 @' I
    State:          Running
' O4 p. q; ~) k) x      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)">
* w8 q0 D# @! g) N% o/ z3 P  t7 m    Ready:          True$ U( S: _+ J  W
    Restart Count:  </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
0 v5 d0 p- @6 N. v! ]% r    Environment:    </span>&lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">
* I# \9 @7 r& \+ e$ z% n    Mounts:4 Q" z: n& U9 i& ^, z
      </span>/tmp from webapp-<span style="color: rgba(0, 0, 0, 1)">logs (rw)" v! I# b( X* `6 s2 O$ b! r
      </span>/var/run/secrets/kubernetes.io/serviceaccount from default-token-<span style="color: rgba(0, 0, 0, 1)">pcr2h (ro)
8 B7 H0 r8 X6 M  busybox:1 b3 T8 i' h+ B1 Z% Y6 u! N
    Container ID:  docker:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">6a6a35a628a782fc643af3dd49986bbc77c23de1ae4726bc521c77f61abbbf5d</span>; ^' j; z. f) z8 w
<span style="color: rgba(0, 0, 0, 1)">    Image:         busybox
1 o5 x: |! ^: a2 P4 l$ A) i4 p    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>
. M; Q1 j7 u) m/ j    Port:          &lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">
4 g( @3 y" x2 t) ]) K    Host Port:     </span>&lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">! ~" Z6 h/ P. a/ ^4 J( C
    Command:4 g$ Z8 x4 x2 q
      </span><span style="color: rgba(0, 0, 255, 1)">sh</span>5 D  m0 A  O8 u* J9 D5 ^2 s3 v" u7 i
      -<span style="color: rgba(0, 0, 0, 1)">c
& L& t/ L6 a3 Z9 K+ O+ y8 K      </span><span style="color: rgba(0, 0, 255, 1)">tail</span> -f /logs/<span style="color: rgba(0, 0, 0, 1)">log.out
9 n4 x" j: b. B9 |' s5 Q    State:          Running9 _0 V( V6 S7 K9 @) D
      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)">7 H. m3 c$ i0 x1 `# Q. E9 ^
    Ready:          True
4 N1 ^/ D: a2 ^9 H5 V    Restart Count:  </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">$ n* c) d- n3 \/ o9 T& F
    Environment:    </span>&lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">
- o1 _  ?1 C& [4 C# y* B4 v: m4 Q    Mounts:
* y2 R3 j  t! t1 C      </span>/logs from webapp-<span style="color: rgba(0, 0, 0, 1)">logs (rw)
5 R9 f- M! G! r9 w3 @2 @      </span>/var/run/secrets/kubernetes.io/serviceaccount from default-token-<span style="color: rgba(0, 0, 0, 1)">pcr2h (ro). d' X$ `% M- f" |8 J! t2 Y1 z
Conditions:
% {6 j# G8 Y- x  Type              Status
- Y' [2 K* G2 O( d. D  Initialized       True7 g- R6 G- V9 x9 H" K# u
  Ready             True
! F5 a5 \# M0 q$ g* U* X  ContainersReady   True
4 X$ o" S$ m+ C, d! O  PodScheduled      True
& T6 B, n1 L. e( p( |7 oVolumes:( }% W8 |" ^4 ~* _! F% K( Z! q
  webapp</span>-<span style="color: rgba(0, 0, 0, 1)">logs:5 K4 Z/ {# ?. |  w
    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>
# G* G# [; p4 I: p  R* z) i<span style="color: rgba(0, 0, 0, 1)">    Medium:
+ X0 v9 c) W5 T* M. Z( T' O    SizeLimit:  </span>&lt;unset&gt;<span style="color: rgba(0, 0, 0, 1)"># s* d8 g+ G$ f* b  i# `
  default</span>-token-<span style="color: rgba(0, 0, 0, 1)">pcr2h:; u( v% D! B4 f9 W% T
    Type:        Secret (a volume populated by a Secret)) ^" F3 v- E4 g2 V% x& z8 f* i) I( [
    SecretName:  default</span>-token-<span style="color: rgba(0, 0, 0, 1)">pcr2h  _. a4 O# \4 Y
    Optional:    </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
. o, C$ k: ~; M, d$ PQoS Class:       BestEffort
4 m0 ]1 [: M  y! _Node</span>-Selectors:  &lt;none&gt;<span style="color: rgba(0, 0, 0, 1)">
* w1 I! ]2 ~2 L3 r9 C( O5 ITolerations:     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
- t% |# f5 G3 {" T* A5 W8 v                 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
! D$ [" |6 |- G2 V8 eEvents:9 x3 Y) F7 R1 u
  Type    Reason     Age    From               Message/ `1 }5 z; f4 P+ C
  </span>----    ------     ----   ----               -------<span style="color: rgba(0, 0, 0, 1)">
4 a- Z/ m$ H6 C3 j. R  Normal  Scheduled  2m23s  default</span>-scheduler  Successfully assigned default/<span style="color: rgba(0, 0, 0, 1)">webapp to ayato1 m) |8 [4 h) I( N: t- D
  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& M& J7 |$ ?" X
  Normal  Created    2m21s  kubelet            Created container webapp
. |# z1 n: H2 g; v  Normal  Started    2m21s  kubelet            Started container webapp3 P6 x! C, V7 H, }( C) v
  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)">
- D: i. a$ {% R6 x* S5 }: k" 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)">.633078305s7 I) u* ~! r/ {; f8 ?3 A8 l
  Normal  Created    15s    kubelet            Created container busybox+ v, U7 c$ i. W. c/ o
  Normal  Started    14s    kubelet            Started container busybox</span></pre>0 w0 l2 ^, _8 b0 {6 h$ w* m0 R
</div>
8 C- C4 \- O7 k' I2 p2 y4 k<p>真的是飞一般的感觉!!!</p>( B) J( v  h5 c. b: }
<p>&nbsp;</p>+ G2 O0 Z( F0 _
<p>三、Context和Namespace切换</p>
: L" i6 m8 R' y9 L<p>我们在公司的容器平台上使用kubectl时,经常需要切换context和namespace,导致命令非常繁琐,那有没有简便的方式呢?—— kubectx</p>
/ X2 h; z6 z7 n' S& E2 k<p>kubectx安装</p>/ n9 T) M; X5 p  ~7 V+ U* x
<div class="cnblogs_code">! z+ H3 O) w/ |0 l& H
<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 Z/ q3 r& \: @/ h5 {  e2 A3 J7 R
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)">...9 x0 {5 C$ z) Q" G/ t; Z7 C
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)">.# ]! }' U/ n. q" T! l5 {! I! d
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)">.
6 ]& Q6 W7 }- [6 nremote: 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)">.
) @% N2 ?" i2 H8 iremote: 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)">4 n" \1 z# Y  ^( g+ 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)">.; R) v0 b! Z0 g! J( @5 C; G7 I7 o  H9 w
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)">.
2 ]5 T9 z/ }- }# n  u) ^1 J+ V) S$ </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
7 W' _# c# q7 b/ `1 D& u$ </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>
+ L! J+ X0 x8 h</div>/ X- D" S( f* e: r% ~: Q
<p>我们来看一下效果:</p>
4 k  [4 ~) `8 I* d8 T% m; @7 n# w& }<div class="cnblogs_code">
$ @- l" m# R7 l( T3 ~# ], Z<pre>$ <span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> k ctx) D9 o: Z1 W" [9 X
minikube' K, m. c# I) s% a7 ?
$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> k ctx minikube3 Q3 d1 V0 W! }! B6 v
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)">.
& p# ~8 h: d0 X/ P* Q5 x2 D$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> k ns
3 D6 ~* a: Y; y/ E5 H" Gdefault
8 p% ^; l  D' n  E) `/ _  akube</span>-node-<span style="color: rgba(0, 0, 0, 1)">lease
. F4 p: D, n8 l9 S0 d- ~kube</span>-<span style="color: rgba(0, 0, 0, 1)">public
/ J6 J. [& |$ m$ O( F% j+ m& Ekube</span>-<span style="color: rgba(0, 0, 0, 1)">system
; I9 I& S# v8 q9 @8 lkubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
# _# m  L8 Y0 ?/ n2 y! b, J$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span> k ns kube-<span style="color: rgba(0, 0, 0, 1)">public5 F% }/ q3 B3 a: \
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.: v% T: Y3 n/ u% X, s, M
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)">.
' i% k) J0 B6 _: N2 A5 R$ </span><span style="color: rgba(0, 0, 255, 1)">sudo</span><span style="color: rgba(0, 0, 0, 1)"> k ns default
2 [7 n+ c* u! d7 RContext </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.
. ~; |9 `! s1 w9 q; P$ TActive 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>6 d1 s, C$ I4 a
</div>8 F+ w$ `% |3 m5 C. M
<p>&nbsp;</p>
; m# c2 m) A: d( s1 _" e<p>四、跟踪查看多个Pod的日志</p>
# A8 k, C6 _5 j$ K<p>我们一般使用kubectl logs命令查看Pod日志,但是它不能通过-f参数同时跟踪查看多个Pod日志,这就不方便了,毕竟实际生产环境中每个服务都会有多个Pod,这时我们可以使用stern这个工具,它具备如下能力:</p>
: G1 _8 K, F+ P! L<ul class="list-paddingleft-2">
8 X8 r9 M9 g7 J3 Z# ?& D<li>
' m7 `* q8 c8 t- [2 a9 h+ k, h& m<p>允许使用正则表达式来选择需要查看的PodName</p>
/ C. Z; i0 C# K+ T9 L: \</li>2 N! b* s2 P: U# B; h
<li>
; p' h$ \# Q8 W2 c9 J<p>为不同 Pod 的日志展示不同的颜色</p>
  G3 C6 h3 ?/ z</li>
) J3 \' P* N) ^6 w9 [<li>2 I9 i5 @  z/ U1 {# x
<p>跟踪日志过程中假如有符合规则的新 Pod 被创建, 那么会自动添加到输出中</p>- E( P  _% D4 }  B3 @7 \: ~& o
</li>/ m1 d$ {& m. s9 Q8 M' k* X
</ul>
2 _: X8 f% l3 m/ j<p>首先安装stern(下载stern时可能较慢可以多试几次):</p># [4 S0 Q6 }( w  A% X* u
<div class="cnblogs_code">7 s. W! k% @' h+ `: r. w( M8 q
<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>
/ {1 |  p# T; {( M<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 \/ l9 `- }& a8 e* K" u
<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>. v$ z, N1 l. K3 J
</div>! A1 J- `( @7 s
<p>安装完毕后让我一起感受一下stern的魅力吧,我的Pod里面有两个容器:webapp和busybox,如果使用kubectl logs 还得指定具体的容器,而使用stern就没有这样的限制。</p>1 {/ C1 v: T. P; o1 B: K( T$ E
<div class="cnblogs_code">9 f7 A9 _& U: z( t' s, l5 Q4 g
<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)"> .
" ^9 @' }0 n# x/ o8 D</span>+<span style="color: rgba(0, 0, 0, 1)"> webapp › busybox
( k5 B; a8 J3 C0 [' T+ q* L</span>+<span style="color: rgba(0, 0, 0, 1)"> webapp › webapp
4 f5 [; @  f: q  X$ Y, X6 N& kwebapp 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)">]( D7 m7 b$ @, s0 S, J, j
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]
8 y# M+ ]$ n% u6 I  ?4 J& f* `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)">]0 c% B4 o  q1 d# q  ^
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
0 y+ k3 J# b, m4 Q+ o  {' 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.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
! V8 K3 f$ |0 F/ T" l. G" r7 qwebapp 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)">+ K7 s  _3 u7 w
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)) o: Q: n/ q$ c4 W
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)">]0 H* C$ k7 Q) z1 C# W% e) w& K5 t
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)">
1 n; Z) u3 T4 m! d, [: c2 z! 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)">). z; e% q/ |/ I
webapp webapp
" e, D' u5 e" S% b1 vwebapp webapp   .   ____          _            __ _ _  y% w, g. ^7 Y8 d+ u9 h
webapp webapp  </span>/\\ / ___<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">_ __ _ _(_)_ __  __ _ \ \ \ \</span>
8 v0 a  I% b; Y# mwebapp 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>
9 w+ S$ K) z2 ^" Y+ Nwebapp webapp  \\/  ___)| |_)| | | | | || (_| |<span style="color: rgba(0, 0, 0, 1)">  ) ) ) ), M$ ^& {  k1 r2 k& h
webapp webapp   </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">  |____| .__|_| |_|_| |_\__, | / / / /</span>- [" f4 i, i2 _  R
webapp webapp  =========|_|==============|___/=/_/_/_/<span style="color: rgba(0, 0, 0, 1)">% K- ^6 V1 m+ ?# Z5 s6 T
webapp webapp  :: Spring Boot ::                (v2.</span><span style="color: rgba(128, 0, 128, 1)">4.2</span><span style="color: rgba(0, 0, 0, 1)">)! V  t' V9 Y# |0 k# |/ n; Q! c
webapp webapp
; }1 c: z! ^  ?" }7 Bwebapp 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)
: c' ?% U  X; E7 e. ywebapp 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
5 C5 Q( g' l8 e# ^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); l% z% J5 \2 R1 S* C/ r- Q+ 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.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)">]% [  ^1 y/ R: r% H! |
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]
6 i% D9 ]1 G6 {& hwebapp 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)">]
* g& \2 M8 G' W! Q9 a0 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)">53.324</span> [INFO ] [main] [org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/<span style="color: rgba(0, 0, 0, 1)">]] Initializing Spring embedded WebApplicationContext: W- ~4 ]2 q# v: a; m
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; p- p* ]6 I0 |' o  Z- p
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)">5 g+ _- h' T4 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)">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)
. S' r  E( O' y- u  K* dwebapp 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)">]; |! [7 S8 y( b
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)">
3 u% q3 `" Q" w4 k0 V" `/ M& h/ T' pwebapp 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>
- [  e2 a1 N, k/ C3 p</div>
6 _' W; R7 }) J/ M- q5 {3 ]<p>&nbsp;</p>
. x6 x3 q$ T- V7 f$ F8 u
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-4-17 14:31 , Processed in 0.096490 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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