易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 27|回复: 2
收起左侧

Kubernetes Token 过期解决方案 使用kubeadm

[复制链接]
发表于 2024-9-16 17:00:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
一、背景
) ]- Y5 i$ T6 a, d) f, U2 eToken 是 Node 节点用来连接 Master 节点的令牌字串,它和 CA 证书的 Hash 值是把一台 Node 节点加入到 kubernetes集群时使用的凭证。如下图所示:
4 f  F1 ?; x) L, y( a; L
2 A8 k8 g8 E# R* F  a/ ?3 l' U3 t

  p4 p7 V. S2 C" a" C在 K8s 1.8 之后,默认生成的 Token 有效期只有 24 小时,过期后 Token 将不可用,如果想新的 Node 节点加入 K8s 集群,则需重新生成新的 Token。生产环境中我们一般都会采用默认的有效期即可(目的是为了 kubenetes 集群的安全),当然你也可以生成永久有效的 Token(但不建议)。1 e9 ]' l9 s, w, U
- L( r# [& q0 J' ?* ]
二、创建 Token
. @" J2 {# u7 s6 H  g8 T1、生成默认 24 小时 Token+ C+ ~& Q. E2 k5 l. z
0 H! N! P7 M6 C; F7 c
kubeadm token create6 T5 v0 @' e2 r( B7 n! q
  L% I1 v1 X2 J
. g% U7 G, ]4 z3 v: \5 z" S$ S
% W6 U8 @4 z6 d( Z/ `
2、生成永久有效 Token
  C- \- q7 {; {. L# S& K' R" B+ z% h+ a) W. `# E3 O% D$ Z' F
kubeadm token create --ttl 0$ c5 a* a) Z! I: ^; n! w1 m
( V2 p( T6 m  K+ x6 G) O
三、管理 Token
3 }  q1 W; z. T) {8 I1、查看 Token
* J# k) R  ~& E( }% b; O0 V$ c: [! r4 m, o: R$ v. J0 `
kubeadm token list
: t$ Q5 w0 c3 p; z: O) P% @! I( D3 d# x6 Y6 _
# 可看到有效期为23h% }/ P3 x' m9 Z' K+ F6 M) f

5 @# l$ R+ n; q! k4 o: c* [2 b& N

" U3 Z7 v( l* G1 x/ a" Q  E" a7 }
$ u2 S% L( s+ n7 C& f2 u7 f5 Q) N( V+ v
2、删除 Token
. \. f: ]( t3 m! i: h
6 I4 Q  |% `; J& t1 Mkubeadm token delete <Token值>
9 H/ b( ]& l( Z! ykubeadm token delete lu8i0r.pzvgyu40c8g73yc1
4 O' S( D: a, p. r1 X; M* T) ~  b/ {5 a$ q
8 a3 r" t: q; C8 {
四、获取 CA 证书 Hash 值) u& D- I! @# c- J% ~
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
5 R9 k* c8 E8 R; F: Y  b! D  x. U! M/ C8 g

5 Q. z0 D, m$ c! s( {; n8 G! C
' a6 h# d% o( i7 o& {" v4 I五、Node 节点加入kubernetes 集群
) q  _0 b, Y% _8 O* pkubeadm join 172.27.0.13:6443 --token lu8i0r.pzvgyu40c8g73yc1 --discovery-token-ca-cert-hash sha256:3ed701329742f7549f73cb065a8677abe8b5b8a3e25bbca7bb26f317ffcf89d4
/ d4 b3 t% ~0 |7 \6 {( o) W8 s7 q/ ?1 M. V) ]* ]
也可以直接生成 Node 加入 kubernetes 集群的完整命令:: d4 k9 J1 z7 d! o

7 z1 r, K) W. A* v& x3 i# Vkubeadm token create --print-join-command
; _7 |  P6 q+ d: Y% q7 n' o8 B
1 [# W1 a' }1 a7 k. C, e, X% V4 a# 这样就很方便了,就不需要单独获取ca证书的hash值了/ Q) Y' Q8 y$ J
* E# S" ]. Z0 m& _) z  q+ c

* D0 o& G# e9 d( c/ r
 楼主| 发表于 2024-9-16 17:00:08 | 显示全部楼层
我们在使用kubeadm部署kubernetes集群时,为了安全问题的考虑,默认生成的token的有效期是24小时,过期将失效,不过也可以在初始化master节点的时候通过指定--ttl的值为0来强制生成一个永不过期的token(不推荐)。  \- [0 C7 [* w+ h7 X  N" @/ O+ y$ N

  T% f% t9 P* O3 l+ o9 j. z为什么会分享这篇文章呢?是因为我在部署k8s集群的时候,步骤进行到刚把第一台master节点初始化完成,需要进行worker节点的加入时,由于要处理一个紧急的生产业务问题,然后就随手关闭了终端,导致初始化完成后回显的提示信息“丢失”。所以将处理此问题的过程形成了此文档加以记录。
2 e  W" `0 F! o$ f4 j+ b
# r/ N) ]$ ?, u6 Y+ k0 U' s下面我就分为以下两种情况进行简单介绍:
; f- V8 D& J  c# R& b3 F* f7 J
  v0 k' q5 X. \% L, n  n/ B9 E3 r1. 类似于我上面的操作:关闭了终端窗口,或者这条命令在后续给忘记了,worker节点还没有开始执行.* d5 Y3 ?; Q6 c6 v4 d
' E: X/ v2 o+ H+ {1 W( `+ E2 R, _
2. token过期.' [: K) Q. [# f! T3 b

. B# c' J2 n$ `/ p# 查看token
- Z) a% f0 `# }* C4 o" q  i' A' w; }8 ]1 v+ o" W' C1 j: \# G
root@master:~# kubeadm token list
" Z8 M2 r' W* S3 Q8 X
; U- S% Y# ?5 t5 {; {" |# 生成一个永不过期的token1 B( T8 H# f  R2 c% D7 n
5 ?2 d+ ^4 P" d" G
root@master:~# kubeadm token create --ttl 0 2 E4 j# t# E8 d' X1 z. ]9 k! @

5 L6 |/ N( u; br089pu.3pjmew8vrv9mimty) R0 o$ K3 r7 k' l* H2 J; E
8 a) @& A6 N: K% K& v2 \  [
root@master:~# kubeadm token list  |* M9 S" }6 s5 |) C8 s# Q( i) x

5 w9 b: u6 k5 }6 x4 s$ {' p6 _TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS2 s' E: s/ h9 _# b1 d5 L

$ o( }3 S! @0 ^( A& t9 A& a2 Dabcdef.0123456789abcdef   23h         2023-09-07T15:59:13Z   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token# Q. X; d3 s  O" s2 c

" C: A$ n: \) @! i1 h1 ir089pu.3pjmew8vrv9mimty   <forever>   <never>   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-toke# K0 `1 ]0 M( q; g3 ^4 v

% z6 e( D" s- j  G9 U. h; X) U9 N由于在创建token的时候指定了ttl的值为0,可以看到新生成的token的有效期就变成了永久。, @3 h4 x, K1 }1 i
9 q" Y9 l1 s% R+ p) M  Y! X
我们在对master节点进行初始化后,正常的情况下,都可以看到如下一些内容,即让worker nodes节点加入的方法:5 g6 q9 q+ ~5 c2 D0 d) c

9 M$ [6 i, U. n0 [9 |5 |kubeadm join 172.19.53.150:6443 --token abcdef.0123456789abcdef \% j/ M  X4 S9 r7 }" D5 c& u

& ?# {& f& c4 x# z2 T! y( S& \  --discovery-token-ca-cert-hash sha256:2c062e93ff47d023801c8ab8a16d46c323e2977e54f7ed0de1a76b778dfe9589
$ p# e% }2 K9 n6 Q
7 X: a4 C* b# s6 O我们来分解上面这条命令的组成:
: k( x# C  D* ^" c% y
* j5 i! w% o  y* k* Z' ?: I& F, @172.19.53.150:6443:指定apiserver的地址及端口,也就是master节点或者是control-plane-endpoint的域名或者地址及端口。
4 E$ i5 K+ r- s: y  z
6 M9 U' [# @! ?- l3 V--token:指定token值. S3 l( V( ?; A2 R
' E+ @7 c. P  }' b# Q7 P
--discovery-token-ca-cert-hash:这个和kubernetes的CA证书有关系。后面会讲如何获取。2 k0 G" Y4 |  L& g7 b

2 k6 k# ~- ?+ ?' D& m, ]" F- i## 忘记token的处理办法(token未过期)) H! c8 Q" C) G
% o! M4 n7 X. _9 W. B

0 `% i- \/ B( A: e9 y% e  ?0 e, o# W- E
1. 查看token值:; U2 ~$ J" V: }' G0 L$ h2 v

9 \% B( F8 }, proot@master:~# kubeadm token list  Q# ?7 v/ u* ~
$ Z" g3 X7 v+ b8 B& l% K% a& Y9 Q
TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS$ Q* W2 g! ^# e/ d* w
# }% l  @5 a( {, k1 h/ ?
abcdef.0123456789abcdef   23h         2023-09-07T15:59:13Z   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token
7 x, B4 b5 A6 N" R8 ~! ^9 P) h" Y2 A  j/ Z- J
这里获取到的token值为:abcdef.0123456789abcdef  y) z0 J  y# n, g: v/ D1 g) J; `

( I( I6 J0 a! }2. 获取ca证书sha256编码hash值(只适用于适用kubeadm方式部署的集群)% G; v" J$ N4 K6 y- G0 N
2 @* X( S% Z4 e$ d
root@master:~# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
+ B( s5 w2 `4 v% J. ]7 C# a& }
) x1 l- y% l: o' F8 _' E2c062e93ff47d023801c8ab8a16d46c323e2977e54f7ed0de1a76b778dfe95891 g+ ?6 m$ h) ]
. E4 M, y  ]' l5 O- ?: d
这里查看到的ca证书的sha256编码的哈希值为:2c062e93ff47d023801c8ab8a16d46c323e2977e54f7ed0de1a76b778dfe9589,如何通过二进制部署,需要按实际情况修改ca证书的存放路径。
/ G  c- K) s# N, @) O
4 }3 I3 S. M; d# Y$ O3. 命令拼装加入节点4 I. T7 n" B4 `4 _: F" p
, Q9 {* {- C6 ], }5 D$ ]( ]1 {5 D
我们上面已经提到了将一个worker节点加入集群的命令组成,我们将以上两个步骤中获取到的token和ca证书的hash值按照格式拼接起来就可以正常执行加入worker节点的操作了。
% T( G  _4 D& v- }1 `( {: m9 F% ]  O7 w4 u0 I
kubeadm join 172.19.53.150:6443 --token abcdef.0123456789abcdef \
/ W. z1 M2 g) H) u/ I7 S; C- s2 l/ d
) E. o4 T! p, m% p7 K  --discovery-token-ca-cert-hash sha256:2c062e93ff47d023801c8ab8a16d46c323e2977e54f7ed0de1a76b778dfe9589' k- P/ Q( H4 c. Q# S* C

+ ^8 R' e6 {' R5 W( D  k## token过期处理办法
* _. |+ s, w! S" Q4 O3 L& w' K9 F2 _. g' q( g4 T( O
4 N3 r! w* G' A9 g
6 H. n; F' b+ ^' Y: `; f
1. 重新生成新的token
# T" L! D, ~% F9 @' z/ A! p) [9 L, S- B
# 生成一个有效期为24小时的token4 s: F8 g4 ^$ Y) }4 P

2 Y2 D* ^- {8 S3 v- X/ \root@master:~# kubeadm token create. c- h9 E" R3 A) A" I- J, `
7 c) s4 o7 B* Q) S
# 生成一个永久的token% g' t: n4 A+ U5 W* x
5 U  B" S( R4 ^. y7 [; z. f" b! x
root@master:~# kubeadm token create --ttl 00 u: @2 }1 G' E' _' o4 d& |) [4 Y3 l
: b, A& }. h; F* O' V! N$ e6 @
# 查看新生成的token( }  p7 ^( W$ {& `5 D4 C; E

6 K; M! s% n& h1 \: t% I1 ~root@master:~# kubeadm token list* S" w/ t$ R0 P7 d& N, \, l% s5 ^0 k

8 F% P$ @4 l- DTOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS9 i. c; B, l; h7 s3 O' @3 n3 G$ w

8 @, W. b4 I- f% jabcdef.0123456789abcdef   23h         2023-09-07T15:59:13Z   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token
' z3 n$ H' Z) W( e
0 }7 s& x3 L5 d- ~) U6 E3 Wr089pu.3pjmew8vrv9mimty   <forever>   <never>   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token
9 w6 N. o" |! O, j9 k  P1 l' `* A% i4 c) f2 f8 r2 j( |8 I
以上集群是我在一小时前刚部署的,可以看到token的默认有效期为24小时,将在23小时后的2023-09-07T15:59:13Z过期。同时生成了一个永久的token。" H* u$ P) f4 ?/ [& T! i

5 K* i1 d/ C6 y1 U
 楼主| 发表于 2024-9-16 17:00:09 | 显示全部楼层
1. token过期处理" H# g7 F2 o7 \* J" T
k8s的令牌默认24小时过期,逾期需要重新加入+ ]8 n, l- M* s$ `0 ?1 X
) z, a  O1 C! I3 ^9 h
1.1 master节点创建新令牌
" ?/ \& r: b4 ^1 a## 在master节点# |5 q5 p1 ~: c3 R. ^! y
# kubeadm token create --print-join-command
3 `$ s6 x- A/ Q4 j' z& D2 `7 a! x9 i# U
[root@master1 admin]# kubeadm token create --print-join-command# c6 l5 S1 b4 N) d7 U2 X' M5 |
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], o5 K: T8 E: H2 ], m& _1 B
kubeadm join master.k8s.io:6443 --token ime4yx.8fb5jsv0smqkk0aq     --discovery-token-ca-cert-hash sha256:ffb3b09434cb153048558614e774221d0ef8107e4f824a415e2f41e84f6ac0b1
% {8 U( a( ]5 U# `( b8 n
: }0 c7 H# U; s
6 w  C! V8 e$ S8 q0 @1.2 worker节点或者master集群节点执行命令/ b4 Q7 X/ i$ K3 O6 ]% i6 c+ t
## 集群的其他master节点, 有 --control-plane. O% {. Q; g. |' h' H
kubeadm join master.k8s.io:6443 --token ime4yx.8fb5jsv0smqkk0aq  \/ C5 o8 ^+ I, A7 n
   --discovery-token-ca-cert-hash sha256:ffb3b09434cb153048558614e774221d0ef8107e4f824a415e2f41e84f6ac0b1
0 B+ V" J3 N' T/ r8 S0 P9 @   --control-plane% b+ [3 y+ M! P! L% {( n3 r3 {
  2 W/ _- d  j6 |! U
## 集群的worker节点 , 没有 --control-plane* e" D+ t9 j* g6 |& B, Z2 B! A3 h( o
kubeadm join master.k8s.io:6443 --token ime4yx.8fb5jsv0smqkk0aq  \
% I1 k. @' Q) q8 p- Z1 a   --discovery-token-ca-cert-hash sha256:ffb3b09434cb153048558614e774221d0ef8107e4f824a415e2f41e84f6ac0b1- p) T- V8 g/ W- B4 g
) r' U* y. L! ^% E2 I+ N' K! w+ E& V
2. 部署dashboard
% |# ?. k) O; }. Y; c2.1 Kubernetes 官方提供的可视化界面: i% g5 n# b: w1 E% E( ?
URL: https://github.com/kubernetes/dashboard2 k- ^/ S- L" d5 S
1+ j9 |+ \* H& ^8 N  J
2.2 下载k8s dashboard" K/ Q2 A( s$ h) t) X
# 命令:kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml$ i$ `9 `$ E" Y8 s# a& D) H7 S
% I- {, l" ^- [+ J  C# k
# 或者先下载:wget --no-check-certificate https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
% }1 G2 C9 ~/ R/ a# 再应用 kubectl apply -f recommended.yaml
# I& p0 C9 i, Y- t+ w& q; t& P* R/ Y- {

7 V3 M) t7 }6 G* n[root@master1 admin]# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
' e& {4 {6 U/ c. B4 b" _namespace/kubernetes-dashboard created8 M7 W+ V5 A; y: X4 Z
serviceaccount/kubernetes-dashboard created' ~1 g. ?% w& ?) p0 X
service/kubernetes-dashboard created# x9 ^( Q# Q4 Q# i7 @6 ?
secret/kubernetes-dashboard-certs created8 F2 D: n) B1 K
secret/kubernetes-dashboard-csrf created
4 \' B0 T, f, N8 N' N* `secret/kubernetes-dashboard-key-holder created
  X, ~4 G: v, k/ L, d6 U6 q7 rconfigmap/kubernetes-dashboard-settings created: S% T1 q0 N4 v% t5 H# c- b
role.rbac.authorization.k8s.io/kubernetes-dashboard created
2 \, {4 j3 Q& ]- a' F7 i( E* ~' W8 Qclusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
4 s6 w, G$ x' e* y' Q7 drolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created+ K2 H9 ]( Y6 P! Z; I0 \* o
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created: b* x8 z& q  p  D" N: M" J3 j( _
deployment.apps/kubernetes-dashboard created: P/ `; B7 L& n; }/ G! l
service/dashboard-metrics-scraper created
+ S& e& `4 D. C2 k7 xdeployment.apps/dashboard-metrics-scraper created
5 X/ t& U! I% s4 l7 w5 F8 U: u/ Z  o; v- G4 }1 W
检查:
" j) J; z+ n. \/ {: `$ g% |8 N" y# ~+ H2 s% \$ r( r1 T
[root@master1 admin]# kubectl get pods -A
! O* Y( O7 t/ N( G9 nNAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE- {1 V. Y& K# Y0 I
kubernetes-dashboard   dashboard-metrics-scraper-78f5d9f487-s854v   1/1     Running   0          4m8s: B6 t3 C: _( h' T3 p1 m) q
kubernetes-dashboard   kubernetes-dashboard-6bc5cb8879-8zjj2        1/1     Running   0          4m8s  ?; a" l( X4 c( I7 x
1
3 ?0 Y/ [* C4 @  \9 u2/ q. _, B3 m3 C2 |, Y7 @6 i! U
34 q/ P# d7 S1 }2 y. g% t
4& O$ E  @* K+ D/ u7 z; _
2.3 设置访问端口3 m* ], i, j+ K: S8 ~+ b7 I
[root@master1 admin]# kubectl get svc -o wide -A0 l! F  W) x. t# i0 O+ j
NAMESPACE              NAME                        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                  AGE     SELECTOR1 n) w/ o* Q( K' B! J' x
default                javademo1                   NodePort    10.1.230.223   <none>        8111:31880/TCP           2d23h   app=javademo1, b2 q) F$ E4 l
default                kubernetes                  ClusterIP   10.1.0.1       <none>        443/TCP                  3d      <none>8 j" [" ~* G) r9 d+ f  C
kube-system            kube-dns                    ClusterIP   10.1.0.10      <none>        53/UDP,53/TCP,9153/TCP   3d      k8s-app=kube-dns; {6 r3 a9 `$ E9 V" v
kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.1.110.33    <none>        8000/TCP                 8m24s   k8s-app=dashboard-metrics-scraper
4 C. T" `" a/ B- `  b8 Ukubernetes-dashboard   kubernetes-dashboard        ClusterIP   10.1.179.158   <none>        443/TCP                  8m24s   k8s-app=kubernetes-dashboard
& }$ F6 Q% }+ O1 v$ {5 Q[root@master1 admin]# kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard% Q$ w2 u* q  O' u
service/kubernetes-dashboard edited8 i4 V- i2 W( t$ k) G) f7 d, \
5 C9 m6 q8 E! p% |' W
其中的 type: ClusterIP 改为 type: NodePort
/ w# t$ r7 t9 `, G5 ?, ]& E0 ^# r; T- x

) c( B% H" r, Z" E& q( ]" x可以看到,dashboard的端口变成了307981 z, t1 Q' ?: D! n: x0 H0 z6 z

# H" S* G% |. H; c6 ~# 命令: kubectl get svc -A | grep kubernetes-dashboard+ C) z+ @- r8 K1 o0 h/ V
# 或者: kubectl get svc -o wide -A
; _8 F8 r1 O5 p0 \4 P7 c[root@master1 admin]# kubectl get svc -o wide -A
- ]% w0 F9 ~( p/ YNAMESPACE              NAME                        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                  AGE     SELECTOR
. M& d6 B0 `. C) T) y7 Adefault                javademo1                   NodePort    10.1.230.223   <none>        8111:31880/TCP           2d23h   app=javademo1$ K! R& p. O$ T8 {' b
default                kubernetes                  ClusterIP   10.1.0.1       <none>        443/TCP                  3d      <none>
% s" H- S6 o1 N( @* ^# W+ u+ w9 Ckube-system            kube-dns                    ClusterIP   10.1.0.10      <none>        53/UDP,53/TCP,9153/TCP   3d      k8s-app=kube-dns
: e% w5 g$ e9 X7 Z2 m. }$ `" `; Wkubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.1.110.33    <none>        8000/TCP                 12m     k8s-app=dashboard-metrics-scraper
3 }4 k1 Q$ R+ `$ Fkubernetes-dashboard   kubernetes-dashboard        NodePort    10.1.179.158   <none>        443:30798/TCP            12m     k8s-app=kubernetes-dashboard; }" A# c  d) @( p$ {$ u

; G' Z1 K7 Y/ d/ j. Q) q' r4 L. x- v% |4 x3 B) r8 E

0 W  d- L3 i1 u# ^7 b# ]* z2.4 登录+ c- ^7 O% Q. V. h+ Z. B
2.4.1 创建登录用户(masternode)
$ C0 E9 p8 ^; v7 xURL: https://192.168.8.190:30798// k3 Y& w+ n! c% c& ~
创建一个登录账号的文件:dash-user.yaml2 Q3 F. ^& X& w/ q' w) b1 ^4 _
内容: 把一个集群账号admin-user创建出来; m! q. l0 D) T, {  h

' t# ?4 {7 s. D+ n( I. S* e# dash-user.yaml2 x- l% q: z: O; Y) S4 f  a
apiVersion: v1' o! |  U  u' k, c; S1 `; B
kind: ServiceAccount
5 a; H: r, d* T& X4 Y& Vmetadata:* T4 W8 {. ~3 W  C7 j6 [
  name: admin-user
; m' _; b. R$ S% n9 B  namespace: kubernetes-dashboard* r; B/ Y  O6 g  R) v
---
3 Q3 x' D" U# g1 CapiVersion: rbac.authorization.k8s.io/v17 c1 V" `, ~# L1 ~4 _9 V
kind: ClusterRoleBinding
1 y/ F5 P& V- @: |/ fmetadata:
9 ~3 `- ^4 i* d1 v6 a  name: admin-user
+ h1 c- T: m+ s0 N) M: ~0 BroleRef:
- Q& z! _) b7 G5 G! {9 r  apiGroup: rbac.authorization.k8s.io
0 j$ ]' d: t9 {' u0 c( a. ~% w7 E  kind: ClusterRole" t) _) m, {2 Y" C5 O- _; R
  name: cluster-admin  \! t8 J. f: k; ]0 w8 L
subjects:7 J+ I" R1 p& z/ S- F! g
- kind: ServiceAccount5 b! h0 W+ Q0 ^3 L
  name: admin-user6 T3 n' t/ f6 I( d
  namespace: kubernetes-dashboard, D1 K+ e1 C& ~- P, s

) b; S0 e7 K4 t/ r2 S5 T& c4 u: g. `: e## 应用
# w% `& j) I+ z6 X6 q! Z[root@master1 ~]# kubectl apply -f dash-user.yaml
. `/ p: ^' \1 j* a/ u# Yserviceaccount/admin-user created
) [# a3 e# q8 `clusterrolebinding.rbac.authorization.k8s.io/admin-user created
) I- W; I! U3 n
! N& Y) ]& r$ D. \2.4.2 获取新建用户的访问令牌
: E% V" D% s, k! h2 H9 C0 h命令:
/ d  `& U- {! X, e8 l  h" Z$ q$ v! @3 u8 |
kubectl -n kubernetes-dashboard \4 v! \( n5 L7 q% b
get secret $(kubectl -n kubernetes-dashboard get sa/admin-user \; I2 {% x0 Z6 K/ F, V& x
-o jsonpath="{.secrets[0].name}") \
% l  X: \+ I) J( p4 s-o go-template="{{.data.token | base64decode}}"/ C' \. t3 x& G+ B, H0 t, L
9 [+ i  ^, [/ M) q% d
执行后会出现一串令牌,复制后粘贴在dashboard的token输入框中即可2 }) z# `3 `, O6 q: x0 v' u
7 c9 I& e' k5 A1 V7 x  r3 E
- A% \% |' Z: ~5 T
3. 工作负载deployment
( Q* a) A, N3 D% d4 o6 Q控制Pod,使Pod拥有多副本,自愈,扩缩容等能力
, w# d  `3 g! m& b* S
5 {+ g1 c$ Y; t0 U) R# 清除所有Pod,比较下面两个命令有何不同效果?
8 O& |7 Q9 n9 {/ A& okubectl run mynginx --image=nginx, e' S: B1 @; O1 j7 N) m4 I* _

$ H# m0 w' j1 o9 X/ `kubectl create deployment mytomcat --image=tomcat:8.5.68
) |) Y* Q/ x' d( ~! U+ s) e6 |1 K# 自愈能力
7 J/ y  G) ]7 R" o6 v4 i6 }2 n# 删除之后,k8s会重新启动一个tomcat。除非删除deployment* {5 R: C# O$ I, B; J- ]

* u& t. }- i8 o$ c3 d- }3.1 多副本9 p/ b" U& \9 a3 j7 \" |/ |0 a- k- D
3.1.1 命令行方式:% y. \( d7 j! Y; E7 r
kubectl create deployment my-dep --image=nginx --replicas=3
& W7 F0 w* p! t
+ m; K1 U# H# w4 {4 N! H# `3.1.2
% n3 V7 R& O3 T# m; syaml文件方式# H% j: s  s5 S1 S( `! o
: ]! V( c/ O4 ]( S, y$ F
apiVersion: apps/v1
4 a( w3 `3 c4 i8 y( ykind: Deployment3 M8 j1 n5 Z# E# S, P
metadata:+ A1 L) z6 H. h, Y+ ?
  labels:( ]& j: J* {- b2 C0 w0 G$ U; b
    app: my-dep) `" l& D  M- F) S, ]( a. Z7 p
  name: my-dep
( u: P5 R4 M5 W! T+ n& uspec:
! Z% b4 F# B9 p+ x  replicas: 3
  I5 \) W' I9 K# k0 P6 q  selector:
1 M% D' L/ T5 M  E& f    matchLabels:2 {- I& `# J$ p8 n# K/ ~/ Y
      app: my-dep
# L/ K3 [; }- `$ f  d2 P- e  template:
/ l8 K1 u3 d4 i6 g0 i0 P! j    metadata:) t' w2 E. c+ m
      labels:7 v# ]/ C8 F6 K& [3 A$ M( Z: {
        app: my-dep8 C4 k3 v  s+ p5 A: M
    spec:
# t+ R2 _- e$ @3 ~  Y, _/ K3 D      containers:
9 S9 O) m9 D  o- a/ h. {      - image: nginx1 \* M9 y- R; b0 C# _
        name: nginx
6 a& o- o1 R& D3 \7 }" w
! n4 l4 m- E9 I$ k3.2 扩缩容) k- b& r$ {2 H) I: \; S, m
3.2.1 使用scale方式/ V- o! S- T# c: R0 n/ w/ \$ M* Y
kubectl scale --replicas=5 deployment/my-dep4 a1 K9 K, Z6 x

9 N9 W5 ?  g9 y# o3.2.2 修改deployment方式" m8 S9 G5 w9 c- R2 p8 k
kubectl edit deployment my-dep. p$ _+ v% g! ~( T1 r9 [" ~
! X5 W1 B- ~9 d! ]0 G
#修改 replicas 的值
  S# r* Y+ {  u  n: b: \8 |6 I: C7 z
3.3 自愈&故障转移
' |$ G4 o# a" ?$ |9 g. ^● 停机7 _( ~5 E- m3 ~' L: `
● 删除Pod, `. ~/ Q# M1 V2 l% u- K) t
● 容器崩溃  J& b5 d5 `5 L1 Y! s
● ...., `9 c; }5 N# ]# [% r! O
1 ?/ y" H5 O+ H' N3 ]$ w
3.4 滚动更新" h& M: y; s" _# _
3.4.1 直接使用命令4 X9 k$ E" V8 ^9 y0 w3 l- D
在以deployment创建一个nginx的情况下& m  o. a, [9 ?% N5 J7 I
9 `2 S3 X, }4 r1 C
## 设置新版本, 该命令会是k8s去下载版本为1.16.1的nginx镜像。
8 q$ r- C$ b% s6 a5 o4 x## 同理,也可以使k8s去指定仓库拉取指定版本的某镜像(比如某服务的新版本)
8 ~" h$ `( w. I8 C$ nkubectl set image deployment/my-dep nginx=nginx:1.16.1 --record
& t1 T# Y9 e; g4 e7 Xkubectl rollout status deployment/my-dep; R3 J+ O& H0 ]: M
( m5 A6 O! b) \, a! h5 R6 s! n5 v  \$ c
3.4.2 修改deployment的内容
% h. k7 ^' I$ G$ r8 W$ E## 修改image的版本1 A5 D# Y, L, C3 O: D; m
kubectl edit deployment/my-dep
9 z- j8 }) @# }0 P7 E1 @( c! e( q! _1 m* w) X
3.5 版本回退  g: b" F6 c0 O. {7 k: ]
#历史记录
. W2 ]& q+ h# u7 r$ f0 G6 v+ _kubectl rollout history deployment/my-dep0 X. b7 Q5 e0 |

; _9 ?0 y& Z1 |, J9 x6 g+ n#查看某个历史详情9 X/ I. K' \* n& f( ^
kubectl rollout history deployment/my-dep --revision=2
. t6 y% o, d* J9 e2 w2 P
$ ]) y3 ?4 a* e1 p5 l6 F- Y: Y#回滚(回到上次)
2 z" m2 G) `+ c+ D6 K3 |kubectl rollout undo deployment/my-dep
3 c9 [; e, T. l  p1 ]" w9 W! n, e3 f& }/ D
#回滚(回到指定版本)
8 I, D) b$ f" Y8 I( U1 hkubectl rollout undo deployment/my-dep --to-revision=24 F  l3 a& N+ N# B
+ M7 M3 }2 R% I! ~. H/ d2 q. E
更多:0 u( x3 c4 r/ u. b0 L, q
8 `0 d6 _  X, `; h+ p
除了Deployment,k8s还有 StatefulSet 、DaemonSet 、Job  等 类型资源。
* N: m+ s( A  o5 r我们都称为 工作负载。
! u4 M9 l4 B( O4 I4 l1 m6 Q有状态应用使用  StatefulSet  部署,无状态应用使用 Deployment 部署
( V) d/ q' A6 D* B- X+ J/ Eurl: https://kubernetes.io/zh/docs/concepts/workloads/controllers/
. R: i% @" U& x& X5 W1 I. q0 @$ n( o4 W2 T9 u
3.6 工作负载小总结6 T9 R$ n4 h+ Z

) d% _; z5 G7 s0 zdashboard中的工作负载
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 23:59 , Processed in 0.048788 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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