|
|
楼主 |
发表于 2024-9-16 17:00:09
|
显示全部楼层
1. token过期处理
, K0 R: _; q: ^k8s的令牌默认24小时过期,逾期需要重新加入
. u7 e' T$ H7 o0 J7 s: x3 m9 ?% X- [6 |- L4 e& P6 u+ `
1.1 master节点创建新令牌
' V' O) `) Z7 Y- e" t: b0 E## 在master节点
3 x, T% i0 q& c# kubeadm token create --print-join-command6 }& V% e4 e& D0 c6 g1 U9 B4 p
, J; F o% d1 J$ s, M& A* Q" S[root@master1 admin]# kubeadm token create --print-join-command
8 S; i5 n& n4 B7 FW0705 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]
7 {: ]' S: H' I: R Kkubeadm join master.k8s.io:6443 --token ime4yx.8fb5jsv0smqkk0aq --discovery-token-ca-cert-hash sha256:ffb3b09434cb153048558614e774221d0ef8107e4f824a415e2f41e84f6ac0b1
. a/ _( B' j4 f e/ d4 A& u& \
. D+ N0 C' T. C9 _" s/ J
2 i3 I% k9 \4 \# T' ?$ E7 _5 @1.2 worker节点或者master集群节点执行命令' w+ g1 s& K! D* d3 L
## 集群的其他master节点, 有 --control-plane
) Y: P& K/ e5 a, a/ j7 }kubeadm join master.k8s.io:6443 --token ime4yx.8fb5jsv0smqkk0aq \
, k& H* C8 p7 m& E6 Y5 Y --discovery-token-ca-cert-hash sha256:ffb3b09434cb153048558614e774221d0ef8107e4f824a415e2f41e84f6ac0b1
( z, [$ g; m6 |7 b+ X/ Y0 k --control-plane
2 S8 Y$ D% x* h2 X
4 A+ Z3 {+ G/ F; Z* t## 集群的worker节点 , 没有 --control-plane
* w5 N/ `0 K" ]. C$ ?3 Okubeadm join master.k8s.io:6443 --token ime4yx.8fb5jsv0smqkk0aq \
/ \+ ^( N/ r4 L# z; w --discovery-token-ca-cert-hash sha256:ffb3b09434cb153048558614e774221d0ef8107e4f824a415e2f41e84f6ac0b16 K' ~; Z! G; k- p$ n' s
9 n8 [; g6 `- o3 O0 z. {
2. 部署dashboard
' s* C9 E( `$ }/ C: G! Y2.1 Kubernetes 官方提供的可视化界面! W( m% y4 i2 ]/ X
URL: https://github.com/kubernetes/dashboard
" U# ?( P- q& r" x1 \% \3 ?1) s1 A! u2 ^% B; v
2.2 下载k8s dashboard
2 D8 G1 M" l% J3 D% U: H) m m# 命令:kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml t5 k6 J* D9 Y6 `2 r) o" K
! Z( J" j3 m' e3 i4 J% D# 或者先下载:wget --no-check-certificate https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml4 t) o& x4 y% \4 e3 j" I
# 再应用 kubectl apply -f recommended.yaml
0 @+ b% b; k0 r% G R
0 O m/ m9 @) d1 P; t
6 Y: {8 `8 @: ^# E4 B- F4 T" O' D[root@master1 admin]# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml6 I# N/ V6 j: ^' D# {
namespace/kubernetes-dashboard created9 Y. y4 p2 X) E1 o. j
serviceaccount/kubernetes-dashboard created
& P5 w/ t) Q6 _9 |. r6 Uservice/kubernetes-dashboard created* k; g8 v: F# Q2 M( o8 S% `# O
secret/kubernetes-dashboard-certs created$ ~, `, @9 N4 h! i& L5 D M! R. b
secret/kubernetes-dashboard-csrf created
6 j7 t- r! _8 {$ \% wsecret/kubernetes-dashboard-key-holder created
: V$ v& |, v* j$ D1 N7 X! Dconfigmap/kubernetes-dashboard-settings created) }; e$ M' N: z9 W) s! b5 N) x7 ~
role.rbac.authorization.k8s.io/kubernetes-dashboard created1 b0 Z4 h& W$ D8 H7 m6 [# q
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
7 h* u8 ]9 {9 ]& D2 Y( ~8 G' E) w r3 brolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created. g* ]# J/ ^: j' `
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
n( [$ K5 p% s1 _3 hdeployment.apps/kubernetes-dashboard created4 K9 B. B K9 A9 w
service/dashboard-metrics-scraper created8 }7 x5 ~0 H% L1 v3 q; o
deployment.apps/dashboard-metrics-scraper created% @7 O: C- M1 | _1 E' ?+ A
5 s+ F2 a' T- |* `
检查:
s# b% L" p( x/ i+ I, B
/ U, \ j. R; h3 x4 v# U0 D4 k% I[root@master1 admin]# kubectl get pods -A7 i5 V' I2 y) z( G B; m
NAMESPACE NAME READY STATUS RESTARTS AGE
0 }( Z l$ L4 Y e) G1 F1 z' ?kubernetes-dashboard dashboard-metrics-scraper-78f5d9f487-s854v 1/1 Running 0 4m8s+ I8 T/ s' F. `, V5 C6 J) ~
kubernetes-dashboard kubernetes-dashboard-6bc5cb8879-8zjj2 1/1 Running 0 4m8s" H7 x, D* L) P) d! N$ o4 T* x* g
1( `3 O2 z; s! p( T0 c& C) L
2 w& z- r' H* E0 s
3
2 y2 h' T9 B2 \42 C2 [, s7 ^4 d& H( s8 j
2.3 设置访问端口
: U6 d. P( `: s7 [) V7 }% {5 \ y' L[root@master1 admin]# kubectl get svc -o wide -A4 e' D/ Q+ {! ?6 r6 b/ }, @5 b
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
: `7 M5 y! Q0 \5 C% Xdefault javademo1 NodePort 10.1.230.223 <none> 8111:31880/TCP 2d23h app=javademo1
2 r( |& C& Z) ? h! x0 `default kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 3d <none>
5 I5 R9 F- j/ U1 S# y) C5 `kube-system kube-dns ClusterIP 10.1.0.10 <none> 53/UDP,53/TCP,9153/TCP 3d k8s-app=kube-dns
& X4 f# Q) B1 R2 k! E$ V7 wkubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.1.110.33 <none> 8000/TCP 8m24s k8s-app=dashboard-metrics-scraper
& {6 ]* `: h$ Z: ^ X7 Q+ `kubernetes-dashboard kubernetes-dashboard ClusterIP 10.1.179.158 <none> 443/TCP 8m24s k8s-app=kubernetes-dashboard
$ ?$ ]# t/ E, v8 d+ C, K[root@master1 admin]# kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
- c; A4 l4 @" a7 ~0 M* Wservice/kubernetes-dashboard edited
" Q9 q* {5 |$ H0 B+ D! Q; P; M8 n7 p* Z( N% V3 X
其中的 type: ClusterIP 改为 type: NodePort5 U. S0 L. ?7 N( ?. ]" f
5 C; ~3 |# M7 M4 u1 _, `3 V; b" m1 |7 W
可以看到,dashboard的端口变成了30798( u2 s8 z4 D2 k+ C* U( {
0 y1 t+ h; f+ H- n, x4 r( K
# 命令: kubectl get svc -A | grep kubernetes-dashboard
, j$ r$ j1 k8 C3 C0 t- G# F% W" t" |1 j# 或者: kubectl get svc -o wide -A, L/ t5 C' }1 x7 D0 o1 P
[root@master1 admin]# kubectl get svc -o wide -A
1 v' H% C0 H9 INAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
, S9 E+ m" S* Q' Cdefault javademo1 NodePort 10.1.230.223 <none> 8111:31880/TCP 2d23h app=javademo1
8 z4 R. m4 w& W5 Zdefault kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 3d <none>1 g7 w' s: h) D" H
kube-system kube-dns ClusterIP 10.1.0.10 <none> 53/UDP,53/TCP,9153/TCP 3d k8s-app=kube-dns/ n2 {8 @, |( C$ @) o$ } `3 ^
kubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.1.110.33 <none> 8000/TCP 12m k8s-app=dashboard-metrics-scraper
I1 D' J# W6 f3 g, O" c4 Vkubernetes-dashboard kubernetes-dashboard NodePort 10.1.179.158 <none> 443:30798/TCP 12m k8s-app=kubernetes-dashboard: E* M5 S- w% f/ j9 g, I9 j: p
& _9 a; d! B& `9 T/ |
+ _: w' b: H w% r4 C( w
! V" u" z( M8 P; r# I2.4 登录
+ {! A& S/ y+ i0 y2.4.1 创建登录用户(masternode), {7 W( v. U1 f: v2 a7 U
URL: https://192.168.8.190:30798/, F* y$ e5 k$ X: {! B* p+ z
创建一个登录账号的文件:dash-user.yaml: V8 I& L& n) B$ g. Y" S4 T
内容: 把一个集群账号admin-user创建出来
& O- U" P1 |. `- q$ Q6 x j# S1 W3 W5 g o% V& U; ~6 h) c. b+ Q
# dash-user.yaml
7 W8 `2 y# H$ n9 Z. DapiVersion: v1
' o7 F4 |8 t# mkind: ServiceAccount4 Q: m ]4 X) U! {( `9 a
metadata:: B7 A5 a1 u4 _9 a4 e/ w% H2 d4 t; Z
name: admin-user
' z7 t& i1 [- o namespace: kubernetes-dashboard
; P! U- v+ Z- H, w. o) G---3 n' D* f: s# y: ?: ^, O
apiVersion: rbac.authorization.k8s.io/v1
, r Z" U! k+ u A; h2 Jkind: ClusterRoleBinding* W" e; n8 R4 |8 [
metadata:
! c' D9 d% E! s! O0 }6 `6 Q name: admin-user; N" d# A7 O( ]' O/ Q4 ^' D
roleRef:* @6 j7 l# G8 K. ?9 ]
apiGroup: rbac.authorization.k8s.io: x5 S9 \# J, d4 @* E6 K5 s7 }# Q
kind: ClusterRole
7 B6 L' H' y* P2 M' X name: cluster-admin
3 k/ D6 h0 ~* C9 C1 ]/ psubjects:- E+ w3 g& E; k1 m, s( ?7 d
- kind: ServiceAccount: F0 M4 N2 P3 P/ c8 o( }& N
name: admin-user
4 z F9 e9 w0 m namespace: kubernetes-dashboard
: P! I3 y) J; _+ i1 ?
1 y2 t' L+ O$ s# a9 Q## 应用/ _1 ` U' J2 W# W9 F
[root@master1 ~]# kubectl apply -f dash-user.yaml
& _+ T7 z0 o* ^' }: {8 C: Lserviceaccount/admin-user created
( z6 ?/ C. x7 ~clusterrolebinding.rbac.authorization.k8s.io/admin-user created
: s. u' i9 h0 p4 V% P: R o9 y' |5 o
2.4.2 获取新建用户的访问令牌
: {* c. S6 N0 [' a2 p+ V命令:. d$ g0 d- N8 q% p- D
. g, w1 G; r7 X! N2 ]kubectl -n kubernetes-dashboard \
/ h. O, K" F1 A' bget secret $(kubectl -n kubernetes-dashboard get sa/admin-user \
: v# ~' j8 H& K-o jsonpath="{.secrets[0].name}") \
4 ]4 v' }- U: ^! C/ x4 L% a-o go-template="{{.data.token | base64decode}}"& g( C; G: z0 m- \% U2 T+ } C# o
* @* g3 {1 ?( ?' L5 c执行后会出现一串令牌,复制后粘贴在dashboard的token输入框中即可
8 b- q+ |8 w6 R/ _
# c7 H Z: A. e5 ?. h6 o. ?5 V1 M% l7 ?2 D0 D) h
3. 工作负载deployment9 I5 p5 [8 ]+ S2 D8 e( O( t! o
控制Pod,使Pod拥有多副本,自愈,扩缩容等能力
: d: R8 T0 q1 M3 m2 V8 ^/ l; _: }$ }. U6 T# i
# 清除所有Pod,比较下面两个命令有何不同效果?/ X) z. r6 \0 ^+ G, R( k6 K4 U5 y, {
kubectl run mynginx --image=nginx
z% ~- y6 x- Z( l: O( ]2 `- D: |" l1 |8 K1 J |0 r: {5 V
kubectl create deployment mytomcat --image=tomcat:8.5.68
# ^/ y+ k9 D3 B7 g5 ^6 o# 自愈能力
! d+ p9 j$ ?2 G# 删除之后,k8s会重新启动一个tomcat。除非删除deployment
2 I) S% W% ]: g5 i; r* b$ L- }- c8 G& y/ C5 `+ Q G
3.1 多副本 Q7 H1 C, M6 W$ d P% A
3.1.1 命令行方式:4 M) N. r2 }2 v6 p4 W
kubectl create deployment my-dep --image=nginx --replicas=3) s' o; P* i1 m0 x' X5 L
$ h% Q8 G* b8 d8 \5 @# L9 W$ A
3.1.22 t9 r# ~0 h7 i; [$ f
yaml文件方式* s& L3 ?& K2 @5 m7 L0 U
% I" Y+ Q ?: m; z) fapiVersion: apps/v1
+ A! n4 _0 S+ Zkind: Deployment8 S* E( j* j% `9 C* {
metadata:
$ |/ ?2 Q, l' a' o( _2 n3 U labels:
- ^3 H, }- x8 O- z1 `3 N app: my-dep6 r' K' t" m* @+ r8 q
name: my-dep
; `6 z" I+ P& W1 ~3 n+ ?spec:
# w( L) ~+ d# f) |9 D3 a replicas: 3
% L. _* _3 p7 V. R6 q% g& n* T, n selector:
4 t, S0 Y7 b& r1 P, j5 |' b; d6 N matchLabels:
7 ~3 b i9 x2 ]4 n1 Z' ^0 r app: my-dep
# K0 w) P' Z; Z5 o: a) O5 u template:) u9 u$ C; J% i% z: N( y
metadata:
7 b1 y. j+ C! u8 f" M labels:
7 D. e. G1 a, N! f7 r( [ app: my-dep
+ p: R' `. M5 J" T spec:- _* y1 G q& A
containers:1 e+ n9 ?$ n1 H5 X0 n+ c
- image: nginx
8 v) B* j) m/ X: N0 M name: nginx0 y- Y, Q' b& v8 c6 x+ U: B
2 }4 j7 M6 p5 _3 ]1 `! |3.2 扩缩容
- j9 O$ \) a, s6 F3 s3.2.1 使用scale方式
9 V; @5 X p* jkubectl scale --replicas=5 deployment/my-dep
7 N1 H( W+ _/ v* d* n3 n6 m: L0 ?6 @+ O# P" w2 G1 H, h; L
3.2.2 修改deployment方式
8 T8 x8 Y- O B, Ikubectl edit deployment my-dep
0 Z0 W4 D( Y( ?7 @
8 p7 k. k0 ?* X, N#修改 replicas 的值
) g. m' \* `2 {/ {* q1 y+ g2 O
- T, b& X' [. L$ l! s- k( U0 b3.3 自愈&故障转移
' I2 L- ^$ v$ c+ k% j1 R● 停机- Y8 l. `' _& L5 Y
● 删除Pod
/ y, x$ @9 ?# b6 F e● 容器崩溃
$ y. ^4 t6 n7 B ]6 T● ....' ]4 T$ |" p: q% n) [
9 P: k, d3 e4 g2 g' O
3.4 滚动更新5 }8 h5 [! G8 i1 f
3.4.1 直接使用命令
) j$ m2 {+ k( Q) l& g% G在以deployment创建一个nginx的情况下
+ F/ N# L0 }3 w! J. l* @4 X; V& n) R) v
; c, i; {; v3 ^## 设置新版本, 该命令会是k8s去下载版本为1.16.1的nginx镜像。 M r9 n) m6 N5 P. _
## 同理,也可以使k8s去指定仓库拉取指定版本的某镜像(比如某服务的新版本)4 C# x( w& q5 q- F- A9 }
kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record
7 Q' x2 x8 v& _0 f, o! m0 ^3 ekubectl rollout status deployment/my-dep/ a$ E2 o# b9 { s% T2 g. o
+ T: s/ J" Z( {- y. G3.4.2 修改deployment的内容
, F8 a" Q9 Y9 |- n; y## 修改image的版本% T/ E) x2 D |1 t+ ^* x5 P
kubectl edit deployment/my-dep
/ N$ ]5 E# F& R) z; ~! ^, {
! Y2 v' {8 `2 y E( F& G% ~! G3.5 版本回退. T- j1 ?* P3 w# ?3 r$ k
#历史记录
+ X5 b( ^/ Z9 z. a# N8 @kubectl rollout history deployment/my-dep* j" u5 X. [7 A! b7 O
+ d- a. n+ {1 R% Z b) w4 [#查看某个历史详情
% n0 y w& @# N: o2 qkubectl rollout history deployment/my-dep --revision=2
- D8 ]4 p+ i+ F; w8 H# z7 E v4 S3 G( l( r2 w# H" u
#回滚(回到上次): Y* F* d9 m, S- }- d
kubectl rollout undo deployment/my-dep. `! W6 t% W2 k# b4 k( t- E- t
9 O4 ?8 F5 ?$ B* i2 ?: o#回滚(回到指定版本)/ i; f6 X% d' M) t; N N" [
kubectl rollout undo deployment/my-dep --to-revision=2/ g+ A! d, Y5 m N: { `/ Y
1 ^7 z+ ~5 S& f2 w% b. {
更多:" W3 `! T. X( u, q9 }' a% t
0 f" H. J) J& h u9 U除了Deployment,k8s还有 StatefulSet 、DaemonSet 、Job 等 类型资源。7 L" c; a/ A3 P
我们都称为 工作负载。
9 @3 k, N4 o- L' U( w2 i! d有状态应用使用 StatefulSet 部署,无状态应用使用 Deployment 部署7 v! k) x' `5 w. A d1 K
url: https://kubernetes.io/zh/docs/concepts/workloads/controllers/
3 D& ^+ S+ R6 W ]+ \
1 b" y8 U, j/ J0 {/ c4 |; m3.6 工作负载小总结; M- Y/ T& D6 U3 w: I5 x
: _4 S, n ?+ I4 vdashboard中的工作负载 |
|