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