找回密码
 注册
查看: 32|回复: 2

Kubernetes Token 过期解决方案 使用kubeadm

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2024-9-16 17:00:07 | 显示全部楼层 |阅读模式
一、背景) C- s# T9 M: S1 {" o3 |" t
Token 是 Node 节点用来连接 Master 节点的令牌字串,它和 CA 证书的 Hash 值是把一台 Node 节点加入到 kubernetes集群时使用的凭证。如下图所示:
9 N/ s; ]/ V, \
3 P8 B+ T/ A% S2 ~' `6 Q2 o. c  \
# z. X. T# l/ p( `& C
在 K8s 1.8 之后,默认生成的 Token 有效期只有 24 小时,过期后 Token 将不可用,如果想新的 Node 节点加入 K8s 集群,则需重新生成新的 Token。生产环境中我们一般都会采用默认的有效期即可(目的是为了 kubenetes 集群的安全),当然你也可以生成永久有效的 Token(但不建议)。
+ D9 _/ X  U! d5 E3 j! N
( P3 R/ I. I. T7 K6 Q; y3 b$ v( X二、创建 Token0 q* }0 X. [: \/ D7 d
1、生成默认 24 小时 Token
) u7 j3 p+ }- y* t& U8 @3 {- V/ A( o5 n) E+ ^/ G4 G0 s: K7 Y) L% E! b
kubeadm token create
9 L+ Z: h& J' Y3 c" z$ B; [! R$ q% |, `4 }8 R6 p* E
/ w, z- `. K7 Z2 O5 z* I
7 |4 }* |$ x  F
2、生成永久有效 Token
! e$ Z# z! m1 z2 w, l2 o: C; N3 K) `& L+ d
kubeadm token create --ttl 0
& A  T- H- G# Y  D/ g  \# s9 M( @' t, \! B/ u0 _) R5 d" _
三、管理 Token& U7 q- ^1 \  M
1、查看 Token' ~* {' E% F& q& S- u) w

1 b' G5 `9 S6 r, e) ~' |kubeadm token list
. m, a7 Z4 P: W* F$ o
& ^% S  s+ T* ?* I# o5 H# 可看到有效期为23h
6 o) \  r# Q  r
, q% U  C7 U; c5 H+ m: K. h* ]
& F" ~7 @8 I4 S+ D% x- w; z3 l; F5 _( w' j

' j( A4 r* X- ^/ z1 B1 B& }) n$ J; D1 n. u; z
2、删除 Token/ w" c1 U' s0 k' H: G; W

6 m6 U# P% {8 Y3 k6 ckubeadm token delete <Token值>2 k  l0 ]/ n) P$ j
kubeadm token delete lu8i0r.pzvgyu40c8g73yc1$ L+ x8 T- ~! Q# ?3 c! ^" @
  m# l* k0 S# d0 ~; G
: `" P4 `3 v# e  U7 s* A! ]6 d) U& U) k
四、获取 CA 证书 Hash 值
$ Q6 ]% A* i# `$ zopenssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
1 M$ P7 F  ~7 w8 ]6 o' X5 b0 D: D5 U% e* P8 E+ O; p

! U6 I: X4 O+ }* B$ q+ y1 t# r+ q# ~  }9 E0 i0 s: s, ^
五、Node 节点加入kubernetes 集群: C( P( u+ g/ H' A/ M4 C; r5 ^
kubeadm join 172.27.0.13:6443 --token lu8i0r.pzvgyu40c8g73yc1 --discovery-token-ca-cert-hash sha256:3ed701329742f7549f73cb065a8677abe8b5b8a3e25bbca7bb26f317ffcf89d4
- a& t% \! Y5 I/ R5 j) c
% I/ ]9 K$ t( x8 g) @也可以直接生成 Node 加入 kubernetes 集群的完整命令:7 u' y5 J" R6 i0 C9 J* h: U
# _/ x1 a" j) q
kubeadm token create --print-join-command
; P7 |1 O4 O" P1 U+ }- G( ^6 }2 p9 j3 Q
# 这样就很方便了,就不需要单独获取ca证书的hash值了
; G6 c. o4 s( T* Z; h0 A% d1 [7 m/ |. D% e0 D& R+ J: \
0 v0 B( D' l- L7 c( ~- f$ l

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-9-16 17:00:08 | 显示全部楼层
我们在使用kubeadm部署kubernetes集群时,为了安全问题的考虑,默认生成的token的有效期是24小时,过期将失效,不过也可以在初始化master节点的时候通过指定--ttl的值为0来强制生成一个永不过期的token(不推荐)。; l: z, Z; c5 o$ K; [- _; B, z

  R% t5 ]" k  B8 M为什么会分享这篇文章呢?是因为我在部署k8s集群的时候,步骤进行到刚把第一台master节点初始化完成,需要进行worker节点的加入时,由于要处理一个紧急的生产业务问题,然后就随手关闭了终端,导致初始化完成后回显的提示信息“丢失”。所以将处理此问题的过程形成了此文档加以记录。# W5 b# P! H; m& j0 N6 [, Z
9 M; ?9 r4 h7 v, j
下面我就分为以下两种情况进行简单介绍:& W% L- w9 _/ W
& i. [. a2 y* _2 L9 x2 P
1. 类似于我上面的操作:关闭了终端窗口,或者这条命令在后续给忘记了,worker节点还没有开始执行.
5 j# v  e. K9 _  t0 Q5 k$ l
% F% k8 ?2 M/ i. L, H9 ~; a2. token过期.
3 j3 j$ d# U$ r8 b0 N8 O" s1 f. R* }7 B4 @( S7 V& U! ?
# 查看token7 Q1 m3 @9 x+ b; N  ?# ?$ K
6 q1 G1 S: g: F. @
root@master:~# kubeadm token list
. j* @, Z( F' H7 T6 U. F
# f+ D" u' H0 T" B4 g! e0 h  q# 生成一个永不过期的token9 l8 q! Y9 C: \- _2 X7 x

" c+ C6 ?) x! e, `; @root@master:~# kubeadm token create --ttl 0
5 C3 n6 t. T0 N! S- q, v( _  m$ y9 G0 O
r089pu.3pjmew8vrv9mimty! ]3 q3 T* B4 ?/ L# ^2 F
2 z' `# U9 s3 @" P' |
root@master:~# kubeadm token list) z" `' l6 }' v
  h0 P& U. t/ J3 @
TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS
4 }8 J9 {1 b9 g# }; p; g+ u2 ~& Y/ v
/ S! r' z& {' y2 F+ O7 T! ?abcdef.0123456789abcdef   23h         2023-09-07T15:59:13Z   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token
" m$ b$ E' K3 |# c
5 l* |% D/ P. x) V1 wr089pu.3pjmew8vrv9mimty   <forever>   <never>   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-toke3 |( Z+ H- K7 u9 h8 E
! \6 `( h- B) e# |: ?) g
由于在创建token的时候指定了ttl的值为0,可以看到新生成的token的有效期就变成了永久。1 w( O& O8 F) X" `& N6 W
% `  ~# H6 v6 B6 S& @9 j
我们在对master节点进行初始化后,正常的情况下,都可以看到如下一些内容,即让worker nodes节点加入的方法:6 c# R, v* i9 _
* }3 \( q: n4 i# D- I
kubeadm join 172.19.53.150:6443 --token abcdef.0123456789abcdef \$ g3 @5 F1 M, k, d9 i# b% D7 e
1 r' i, d! u8 a; N( V: G% ?/ C
  --discovery-token-ca-cert-hash sha256:2c062e93ff47d023801c8ab8a16d46c323e2977e54f7ed0de1a76b778dfe9589& I# |) n* I- U4 c2 X) l

" [- K2 e; |8 K3 y8 b2 Q9 [我们来分解上面这条命令的组成:# X5 d/ \8 p* v: g% z& N- W
+ E" B( K# s* Q* T/ W( d1 j
172.19.53.150:6443:指定apiserver的地址及端口,也就是master节点或者是control-plane-endpoint的域名或者地址及端口。
: |( B9 L* h0 n# R4 }
" y0 Z/ j8 \* f) L. P7 k--token:指定token值
0 _6 r  }6 Q: d( `6 @# Z
2 N+ a- @3 I% b' I1 |) |--discovery-token-ca-cert-hash:这个和kubernetes的CA证书有关系。后面会讲如何获取。* N' |, {. l1 \7 ?9 z" p5 w' X

4 {7 s2 Y3 k) W# M2 Q## 忘记token的处理办法(token未过期)1 y0 `0 o& H1 b

& F; d; l/ H% j$ a0 `7 S  f1 Y8 G

: U2 ?/ q0 O4 ]. A5 l3 |$ ?! u" u$ ?1. 查看token值:
: y0 \# D) @" S" U3 A- c: D3 q$ Q
; d2 E, C1 Q/ [6 ]0 B2 [) Mroot@master:~# kubeadm token list
7 N( F8 i: K( S6 d4 g* U& [# t5 \- Q8 |( c
TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS9 N& B& x- H. L* A, n, c$ ~

4 k7 |0 S  Z2 A$ o9 N  ~abcdef.0123456789abcdef   23h         2023-09-07T15:59:13Z   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token
2 v0 K- R' l$ C5 {  g. A8 f* F
! d0 Z! l9 u: G4 n( q( X这里获取到的token值为:abcdef.0123456789abcdef5 S% e- v9 b+ F+ Q
  c+ Y( N/ E' D2 z. U' C0 N
2. 获取ca证书sha256编码hash值(只适用于适用kubeadm方式部署的集群)& H1 ?/ {5 I9 A' F7 M

8 f$ w" k! V! @" r' Iroot@master:~# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
3 U" T0 A0 Q9 N% Z/ t) n- r" G, L# a& G# ]4 x$ P- n
2c062e93ff47d023801c8ab8a16d46c323e2977e54f7ed0de1a76b778dfe9589
5 H0 H% S/ F! J8 @7 y" c+ W/ [7 i6 @4 D, P9 l' Y" r+ M
这里查看到的ca证书的sha256编码的哈希值为:2c062e93ff47d023801c8ab8a16d46c323e2977e54f7ed0de1a76b778dfe9589,如何通过二进制部署,需要按实际情况修改ca证书的存放路径。" ?- ?/ n; w# [9 n' s8 a; X: U
  X0 v) N1 k$ l+ f# V3 }" t
3. 命令拼装加入节点# Q) _( @, M: q7 J- j* V

* E' v' G* x* k( q6 q1 c! U我们上面已经提到了将一个worker节点加入集群的命令组成,我们将以上两个步骤中获取到的token和ca证书的hash值按照格式拼接起来就可以正常执行加入worker节点的操作了。! l- v3 F1 w. A' Q4 H4 i

' _3 s% c  Y" L/ wkubeadm join 172.19.53.150:6443 --token abcdef.0123456789abcdef \
' K5 S5 \' E& z) X
* U# M4 [$ U, w  --discovery-token-ca-cert-hash sha256:2c062e93ff47d023801c8ab8a16d46c323e2977e54f7ed0de1a76b778dfe9589" ?6 q4 @  b; m8 X! l7 H* i
3 I4 k2 ^2 D: C3 j* B% X
## token过期处理办法, `( B$ p" J" z( c2 A. A! J* e) W

7 A" v7 a; X/ ?  A4 G) _. I. B# u0 S0 I" v5 v
: Q' [( G6 A. L: C, ^7 I2 s4 j/ E
1. 重新生成新的token' N* D8 i8 L! j& G3 a+ u

9 }" A7 W8 h0 q- f# 生成一个有效期为24小时的token
3 O. ]+ T7 J( s/ M
5 T  v/ w! ?8 Z6 Aroot@master:~# kubeadm token create
% D- r( A5 |+ O$ w3 O2 H- k9 Y" V' D, W2 O0 p! g
# 生成一个永久的token+ w4 ?" R2 ^# j. A3 R- a% v
- x9 Z1 ?( A) x9 N& u, t! j" ^
root@master:~# kubeadm token create --ttl 0
( u) d$ A! t  u
, k! ^4 ?: N+ \# 查看新生成的token0 {8 {; ?2 m! ^4 r

5 E" u9 K, X9 K* u5 `root@master:~# kubeadm token list9 t; d' q8 Z: q$ k3 q3 z4 t

- m. W5 Y) M8 _/ P+ UTOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS
3 p& M% j  i+ x' J8 i8 X
# Y5 B& D/ U; V# B2 `! s+ yabcdef.0123456789abcdef   23h         2023-09-07T15:59:13Z   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token
; N- r+ e& c  K' X; c2 G( s+ u. ?* U7 o6 p# l( J/ _; g
r089pu.3pjmew8vrv9mimty   <forever>   <never>   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token
/ e; {5 ?: `/ L' `+ t$ C1 f! ~: q; w5 o. _/ W; C
以上集群是我在一小时前刚部署的,可以看到token的默认有效期为24小时,将在23小时后的2023-09-07T15:59:13Z过期。同时生成了一个永久的token。' X/ @# y9 [% ^) k

2 w! }( p  H- O$ F( R8 b

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-9-16 17:00:09 | 显示全部楼层
1. token过期处理
8 h% X6 U; L+ r  w- H* qk8s的令牌默认24小时过期,逾期需要重新加入) z. w, ~3 G# S5 {0 b9 @

4 ]: V$ q, J6 \8 ^9 J7 s# C8 d1.1 master节点创建新令牌
' A' i' [( y3 X2 \2 p0 R5 M## 在master节点
/ j# y8 o' M! X$ W# kubeadm token create --print-join-command2 S! K4 J+ @' X" A( W+ L
4 P) A; X' M9 B6 w; h5 K' R
[root@master1 admin]# kubeadm token create --print-join-command( N  f+ d( d. O; g7 k! l
W0705 23:14:39.436166    7030 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]1 I' t( m& g4 Q+ a* L+ N" E6 @
kubeadm join master.k8s.io:6443 --token ime4yx.8fb5jsv0smqkk0aq     --discovery-token-ca-cert-hash sha256:ffb3b09434cb153048558614e774221d0ef8107e4f824a415e2f41e84f6ac0b1
2 Y  r( h9 k5 u% s2 ~! B- S, m' k7 t1 R- e( M7 D
9 g* ~* }/ K* O+ I- R
1.2 worker节点或者master集群节点执行命令
" H1 u9 A" O$ F& [5 ?## 集群的其他master节点, 有 --control-plane
6 E( V8 e4 M& w% I9 u4 @* {1 J6 |& ikubeadm join master.k8s.io:6443 --token ime4yx.8fb5jsv0smqkk0aq  \+ @- S& t: \) i# T% N
   --discovery-token-ca-cert-hash sha256:ffb3b09434cb153048558614e774221d0ef8107e4f824a415e2f41e84f6ac0b1* ~; ^$ _- T4 ?
   --control-plane
( d4 `. S3 l4 x3 `( Y7 y) m  ; B  Z( e3 B8 {) Q
## 集群的worker节点 , 没有 --control-plane6 a7 D& n9 W0 g1 j  U, A+ P- O" x
kubeadm join master.k8s.io:6443 --token ime4yx.8fb5jsv0smqkk0aq  \
1 Z' q5 e2 f5 E1 Z, U% U7 U   --discovery-token-ca-cert-hash sha256:ffb3b09434cb153048558614e774221d0ef8107e4f824a415e2f41e84f6ac0b1  a6 T5 d: G0 l) i
# |* _$ t5 V& z0 L4 ?0 D+ e2 q
2. 部署dashboard
+ @! d1 [% Q$ L" P) N2.1 Kubernetes 官方提供的可视化界面5 q1 F' [& l  ]! j  t& w' h
URL: https://github.com/kubernetes/dashboard
6 T  `- a- L: a/ N$ Z1
, I+ O1 }: R( ?0 v, `2 \6 W0 `* M2.2 下载k8s dashboard
! |; |$ j% u: d# 命令:kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
* c4 \2 A) v8 O$ ?* C
- M" r. @- D$ @* X. M; T7 F# 或者先下载:wget --no-check-certificate https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
) x- g$ l6 m) Y: ~# 再应用 kubectl apply -f recommended.yaml
% s& B0 @+ @# R1 V, f. k9 I7 J3 R0 h, Q# G" D) r! b' E

- i+ ~" N# h5 }+ m4 S, e[root@master1 admin]# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
7 |8 U+ q4 U9 {9 O' I& Y2 T1 f+ Ynamespace/kubernetes-dashboard created# d* v8 i$ \1 R  `9 s
serviceaccount/kubernetes-dashboard created1 v; ^/ ~3 E6 s5 i! M/ f! u
service/kubernetes-dashboard created! |8 y2 ^7 t2 A9 i7 Y2 b/ x2 h
secret/kubernetes-dashboard-certs created  w& A7 R8 m$ L7 `: ?
secret/kubernetes-dashboard-csrf created
- m9 k: a% b7 j% X; ]& msecret/kubernetes-dashboard-key-holder created
4 a; n8 A$ w7 R% }* l2 G0 dconfigmap/kubernetes-dashboard-settings created
, q0 u2 p% u% c( Irole.rbac.authorization.k8s.io/kubernetes-dashboard created
! Q9 P$ z+ r. b+ tclusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
2 V* \( k/ ^1 `; S$ yrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created+ n+ U5 ^: }1 Q" E7 V" ?
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created+ i4 m0 c+ }+ U# v( n3 ?3 V8 |
deployment.apps/kubernetes-dashboard created& l- H9 E# U7 N- L# H  |% D# z
service/dashboard-metrics-scraper created
6 N+ \5 M: Y: l- kdeployment.apps/dashboard-metrics-scraper created
$ B- H0 a& I. o5 g" a# {8 L- T/ ~$ w1 o7 r0 Z4 J, Y/ h
检查:
; t0 v& g' w9 ]' J( d) P. ]$ @' s2 E" [
0 A3 d! b3 j( {) n, P0 z[root@master1 admin]# kubectl get pods -A
" S# c, e6 k3 t! F" `) N( `NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE
) d' \( A$ d( |: U3 ^0 t5 H7 ^7 skubernetes-dashboard   dashboard-metrics-scraper-78f5d9f487-s854v   1/1     Running   0          4m8s
" k6 p- y5 Y, E* l7 n3 a" j' ?9 Zkubernetes-dashboard   kubernetes-dashboard-6bc5cb8879-8zjj2        1/1     Running   0          4m8s# c) e2 q* Y$ u) l/ I& F1 B
1
* \! y8 m! z- @) B1 Y/ a" `8 h2
" X5 h' ?& e' c3
6 t, Z) a2 l; k+ v) l48 F0 j1 e- y4 Q/ B% R1 b
2.3 设置访问端口0 l& `; q6 o# u3 U
[root@master1 admin]# kubectl get svc -o wide -A
- `& d, U& s$ Q  ZNAMESPACE              NAME                        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                  AGE     SELECTOR' ~/ L' l. V' Y% S" Z
default                javademo1                   NodePort    10.1.230.223   <none>        8111:31880/TCP           2d23h   app=javademo1
  \8 h& }3 s. o5 Z8 h# Mdefault                kubernetes                  ClusterIP   10.1.0.1       <none>        443/TCP                  3d      <none>
! D; n- C; a' m, ukube-system            kube-dns                    ClusterIP   10.1.0.10      <none>        53/UDP,53/TCP,9153/TCP   3d      k8s-app=kube-dns0 K5 _. _: C2 I/ s& U; Q
kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.1.110.33    <none>        8000/TCP                 8m24s   k8s-app=dashboard-metrics-scraper1 Q0 o" R6 `: r( \7 ~
kubernetes-dashboard   kubernetes-dashboard        ClusterIP   10.1.179.158   <none>        443/TCP                  8m24s   k8s-app=kubernetes-dashboard! o: Z; C& v; i" T" H  M& Q
[root@master1 admin]# kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard& M+ o! m% S8 P
service/kubernetes-dashboard edited3 |; T0 J5 f% M1 @1 p# m4 k
8 }9 K, W! q) e* J+ M. l8 J8 ]) g
其中的 type: ClusterIP 改为 type: NodePort  n8 H- J' K8 c. F8 ]- m/ L

/ Z9 B# R9 h& N& V  P0 y
2 I- F7 E7 m2 D6 `. b可以看到,dashboard的端口变成了30798
3 E& \7 n& J: T! X+ x5 ]
* l) e4 _: L7 T# 命令: kubectl get svc -A | grep kubernetes-dashboard
$ `% t% y) g* G) F5 D$ E1 g# 或者: kubectl get svc -o wide -A% m0 z- z& b  N) z/ B. R# ]
[root@master1 admin]# kubectl get svc -o wide -A
& O' K+ P7 r. \6 `4 HNAMESPACE              NAME                        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                  AGE     SELECTOR& }- X  p4 \. b% ]9 C
default                javademo1                   NodePort    10.1.230.223   <none>        8111:31880/TCP           2d23h   app=javademo13 }9 x1 q% p  [5 E, V( X1 y
default                kubernetes                  ClusterIP   10.1.0.1       <none>        443/TCP                  3d      <none>+ G' }) k# f3 I1 e4 X
kube-system            kube-dns                    ClusterIP   10.1.0.10      <none>        53/UDP,53/TCP,9153/TCP   3d      k8s-app=kube-dns
1 C9 b0 n' c+ Y0 w' F* L% ~- Bkubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.1.110.33    <none>        8000/TCP                 12m     k8s-app=dashboard-metrics-scraper
$ T/ \. [+ E1 `) U7 K9 w" ^$ ^kubernetes-dashboard   kubernetes-dashboard        NodePort    10.1.179.158   <none>        443:30798/TCP            12m     k8s-app=kubernetes-dashboard! N9 i4 c6 X4 R! X

1 D. A9 ^9 L, K% s8 [* I
% o# O( R, h8 A% [' t$ [3 F) h. z/ [6 b+ m
2.4 登录
: k, n+ h6 Q4 t% Z" p* ^2.4.1 创建登录用户(masternode)
1 o8 I& ~, ?& t' g  |9 X& GURL: https://192.168.8.190:30798/* V$ N( b) c" {$ Z! h( x
创建一个登录账号的文件:dash-user.yaml$ |, p! i" C$ h( v
内容: 把一个集群账号admin-user创建出来% s* b: G8 l* e# X3 I' b
. d3 ?( |! `2 X* H
# dash-user.yaml
% F2 l8 \) N! FapiVersion: v1
; m* z% p* c+ Q2 f' v" p, kkind: ServiceAccount
$ u/ w7 G, {) u2 }metadata:
$ f! v  Y5 S4 I6 M6 M% l  B  name: admin-user
, e$ s% E4 R, g5 Z. _! J* [  namespace: kubernetes-dashboard4 F' ^9 L, ]" y. R) B
---
  G( E1 U5 c. c: fapiVersion: rbac.authorization.k8s.io/v19 D$ p( @3 P' P' m% h& w
kind: ClusterRoleBinding5 F* |/ v. L$ p- R
metadata:
" n( n; q2 M; R- z0 t6 Q6 ^/ W  name: admin-user
1 K- C1 G7 z+ E; ~4 \roleRef:) t" D# X% ^' Y4 O( Y
  apiGroup: rbac.authorization.k8s.io
: X1 X% O& L2 o* V- ^% d6 k7 E1 S  kind: ClusterRole2 r4 I3 F4 a7 [
  name: cluster-admin1 y' Z$ }8 x# S5 @( l7 Z
subjects:
  y* {: A5 Z, x; E5 {- kind: ServiceAccount
6 w. y/ N. x: m  name: admin-user/ Z5 V% l! }% _
  namespace: kubernetes-dashboard
# v. [/ d5 R7 o
) Y$ A% l% M# j6 s, S## 应用% B! y& s5 D( k- ]
[root@master1 ~]# kubectl apply -f dash-user.yaml 6 G" S! _# c- V3 b0 ~+ w3 j) C
serviceaccount/admin-user created
+ r8 D- ~; }3 A$ A0 }clusterrolebinding.rbac.authorization.k8s.io/admin-user created
3 {2 o# Y" v( q) I# O" [
5 y9 R7 }5 X6 N- z- k- u* O2.4.2 获取新建用户的访问令牌# x, g; l: o, F/ x2 ^) E3 O
命令:" R# c- \5 ?. o1 J9 E5 m: |+ _% `
) e( l4 y( k; p, C
kubectl -n kubernetes-dashboard \
/ t! ^$ f3 S& m2 S9 x3 @/ E* @get secret $(kubectl -n kubernetes-dashboard get sa/admin-user \
- O! f& v; s3 J/ ?+ v0 M-o jsonpath="{.secrets[0].name}") \. W  b3 _5 S7 ?$ Y8 w2 u, e
-o go-template="{{.data.token | base64decode}}"
( f. ?9 c4 _8 h: y. x$ I8 A! l8 Z8 R3 s
执行后会出现一串令牌,复制后粘贴在dashboard的token输入框中即可
* V3 k" V5 s6 z% M% V" b
  K5 e$ e+ x* J! v5 w& ^, }7 z0 n/ T
3. 工作负载deployment
# U3 v% N1 M$ O) z! E控制Pod,使Pod拥有多副本,自愈,扩缩容等能力& p- `6 b) \8 f3 R* W8 P! y/ R! k' q1 L

, ~2 I0 [, r6 A0 P: u2 {% x6 h# 清除所有Pod,比较下面两个命令有何不同效果?
. S3 p. n% l6 Qkubectl run mynginx --image=nginx+ D# \" i; L, x8 @. o2 _, S  s8 {

# C! P% Y5 J" y' y9 U8 Hkubectl create deployment mytomcat --image=tomcat:8.5.685 J# Z8 x7 e( J* f. @7 H
# 自愈能力# C( \! q8 \2 Y2 B+ k6 u
# 删除之后,k8s会重新启动一个tomcat。除非删除deployment' N* c/ \# t4 @9 ]: o* h9 c3 z
% `0 A# E0 j% J4 _
3.1 多副本
6 N3 u9 Q6 Y4 w0 u8 H+ [3 w3.1.1 命令行方式:2 v7 g9 q% {6 n8 Z; U% A
kubectl create deployment my-dep --image=nginx --replicas=3
% ]3 Q/ P+ T2 ]$ u+ J3 _& a; G# B" t  S
3.1.22 P" w4 V' H7 d5 h+ H1 k
yaml文件方式
2 d' S. G: o  d0 o) B% F/ D. G* r. J& Y! \" d
apiVersion: apps/v1# C* v) \4 k1 W6 G
kind: Deployment
5 p* {+ k1 B, C! dmetadata:6 c' y( R7 O! B+ n5 l
  labels:
# Q+ L+ x8 H9 _$ k9 p' W    app: my-dep0 F4 w& b- f" u7 L$ U/ b% u  U
  name: my-dep
. X# h5 y8 i& D8 u; V- j# ?2 f  Mspec:) R' C& y6 E1 X- J+ |
  replicas: 3. X4 N8 A5 i0 G
  selector:8 g4 s# r, O* y+ n* g4 G. n" F
    matchLabels:
$ {6 ~/ N# ]" a6 Q5 V) ?8 ?/ X5 E8 T* L      app: my-dep
- w8 z3 g* R( [* N& t7 [/ q7 {2 y  template:
* q2 t9 f7 O" u" V0 N1 c. V    metadata:% Q( t( S4 u' G0 w% r2 L2 l
      labels:6 x) n8 C: w  M1 B3 |- D
        app: my-dep* d( U( A/ l# o, K5 w2 t
    spec:
4 g7 _" |9 z. o, |      containers:
3 x) Y. Y/ ?0 ]8 s  I" K      - image: nginx; p# W) @  ]# q, h2 P5 T
        name: nginx
" k  T$ l- h& q9 I. x. \3 k" ]
8 D; p# h" v# P9 m8 r& s- A3.2 扩缩容1 o% b) c3 `5 f2 {9 A' j& X6 ]
3.2.1 使用scale方式
3 q; E  ~& J3 J/ Tkubectl scale --replicas=5 deployment/my-dep
3 d. ^2 L  T0 h7 F6 q) X) f$ @7 r. Y7 I0 B. o) g8 J
3.2.2 修改deployment方式
3 Z0 N/ F1 u7 N8 f. |kubectl edit deployment my-dep
) R! C' M. m: a" I( u
8 {: o4 x& v: V" A$ n% x: K#修改 replicas 的值) C7 W8 g  r- A3 H2 {& M

6 o. @! R- t8 L- t4 ~; U& s# `0 D9 Q3.3 自愈&故障转移
0 W& ~: v" ~* a$ ?/ h" @● 停机
3 b! y' |& J5 w● 删除Pod2 A# r% |7 T8 n4 A' X% V$ c8 B
● 容器崩溃
% `  p: ^% D' f2 I# }% [0 @& x● ....% M3 w  n7 C6 h7 o
6 Z8 E# [# }; O/ @
3.4 滚动更新/ ?5 L9 ]3 @" H* c0 V1 Y
3.4.1 直接使用命令8 e$ M, Z* O) U5 r& \1 f. u
在以deployment创建一个nginx的情况下+ G$ F5 c, B7 r, \

% I/ s# y8 B0 F8 w" U) C. x## 设置新版本, 该命令会是k8s去下载版本为1.16.1的nginx镜像。
3 L6 O5 \4 j' x; A( x## 同理,也可以使k8s去指定仓库拉取指定版本的某镜像(比如某服务的新版本)
. q% b7 h% h2 K; b6 dkubectl set image deployment/my-dep nginx=nginx:1.16.1 --record  t1 _% h! v  b: a9 w2 y
kubectl rollout status deployment/my-dep$ j9 R5 T' v' {) n( }$ C% [# ^
% P0 n/ G) n2 c4 U2 L
3.4.2 修改deployment的内容
, n* q6 u( h% Q## 修改image的版本
; t5 t6 v5 _- x% Y6 P4 Wkubectl edit deployment/my-dep
, E  u. h, F! a9 E: w; n. p3 h! b& O: _& E- s& _+ _
3.5 版本回退3 ^( P  s, M' g0 u- H# l: B+ J3 i
#历史记录
( m" d9 s6 \# o+ o: ekubectl rollout history deployment/my-dep
% {4 N& D$ I& r  `; j3 J$ }, w: J* h  y& o
#查看某个历史详情
  r+ W( s$ K5 Y" R9 Pkubectl rollout history deployment/my-dep --revision=2' k+ r$ A9 F. m/ y/ z5 N1 G
; I$ q2 u+ m3 ^
#回滚(回到上次)
9 n' ?! a* b& w) fkubectl rollout undo deployment/my-dep. {9 l; B2 k' {- H) \

: H4 t) |& ~+ r, O- J( p' _% ?#回滚(回到指定版本)+ ~* g1 Y) M$ S+ U
kubectl rollout undo deployment/my-dep --to-revision=2
3 O; m" @' M% D9 p0 w) m* f7 B2 R
更多:! G7 h' J" V6 p& G  @/ b: q
5 q5 R& R8 a7 _; M, f+ K$ I
除了Deployment,k8s还有 StatefulSet 、DaemonSet 、Job  等 类型资源。# _* U; t! E  n# S& x0 J0 Z4 f
我们都称为 工作负载。2 K7 j5 q7 k* t0 _8 A
有状态应用使用  StatefulSet  部署,无状态应用使用 Deployment 部署
3 G! ?- @4 J1 n7 N. Lurl: https://kubernetes.io/zh/docs/concepts/workloads/controllers/
6 k$ \/ m8 x% ^# `1 a0 [$ L4 l% F( g- g. k  @0 U$ y
3.6 工作负载小总结5 {0 N! F/ ~( v8 z
. k9 f+ F" d- Z3 x
dashboard中的工作负载
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:28 , Processed in 0.021072 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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