- 积分
- 16843
在线时间 小时
最后登录1970-1-1
|

楼主 |
发表于 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中的工作负载 |
|