|
|
楼主 |
发表于 2024-9-16 17:00:09
|
显示全部楼层
1. token过期处理3 l( B8 k% N4 A' ]7 Z8 X- w! |: o
k8s的令牌默认24小时过期,逾期需要重新加入
- p8 X; |# U, F1 A3 e3 ]; _
1 i6 Z* s' i4 l1.1 master节点创建新令牌
8 D1 q1 t- K# b ^/ g. n( ^7 n## 在master节点
: l6 o/ U: `' ]" T. i+ w# C5 `# kubeadm token create --print-join-command
! r! e. r" N5 G2 J: h4 ?9 `0 {: z/ _, A% H( u1 h: K
[root@master1 admin]# kubeadm token create --print-join-command5 G: u- f6 F; Y o& X
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]
/ B2 a; a5 e6 c9 m% Y6 @kubeadm join master.k8s.io:6443 --token ime4yx.8fb5jsv0smqkk0aq --discovery-token-ca-cert-hash sha256:ffb3b09434cb153048558614e774221d0ef8107e4f824a415e2f41e84f6ac0b1 - e' F9 Q+ h& j/ _1 {6 r- y& G! o
" _7 L( L+ T2 g* J5 {) ]& L
* X6 K) D, H! \1.2 worker节点或者master集群节点执行命令5 }( K9 ]* r& t* |& f
## 集群的其他master节点, 有 --control-plane7 P' f! N ?. @" F! ]7 o4 c
kubeadm join master.k8s.io:6443 --token ime4yx.8fb5jsv0smqkk0aq \
/ t+ E+ [2 Z/ E5 \0 E j --discovery-token-ca-cert-hash sha256:ffb3b09434cb153048558614e774221d0ef8107e4f824a415e2f41e84f6ac0b1) P5 }; ^ b9 d8 Y* u* n* [* x, j
--control-plane2 X% ^# a- o+ ~6 v2 m7 ?7 t
- q. x- v1 ]; J% K3 K9 Y) Q/ Y) y## 集群的worker节点 , 没有 --control-plane
. J" b# w$ u0 Qkubeadm join master.k8s.io:6443 --token ime4yx.8fb5jsv0smqkk0aq \
5 V' L3 a7 Z8 `+ M6 v5 P2 x --discovery-token-ca-cert-hash sha256:ffb3b09434cb153048558614e774221d0ef8107e4f824a415e2f41e84f6ac0b1 N0 F6 _& T( g f
8 L6 V9 b9 U) T4 l( |
2. 部署dashboard
6 |; H" A$ y( }$ b1 [" K! _7 t2.1 Kubernetes 官方提供的可视化界面
4 ^+ v) R8 d( {URL: https://github.com/kubernetes/dashboard
' B( h! C% H7 Q4 a3 M/ T: G1
; [% \, l; B/ r; |/ d" O2.2 下载k8s dashboard8 [: S9 L* l9 n) y' u$ [
# 命令:kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml+ u9 B+ X# J* p" X0 c# k
4 V" o+ F" _% i2 k8 `
# 或者先下载:wget --no-check-certificate https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml( }3 I$ Q" X, X4 [: G7 o
# 再应用 kubectl apply -f recommended.yaml4 x! y5 E/ C1 _6 E+ {. k Z
2 |" e( M- s9 N
! m& a! y+ o2 U; N5 L2 E6 T* y p[root@master1 admin]# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml: l3 I5 e9 R8 P
namespace/kubernetes-dashboard created' T5 Z L c, f/ y: @! o) y \+ [% C
serviceaccount/kubernetes-dashboard created3 H+ P7 T5 }6 T8 g, b1 R+ I9 G
service/kubernetes-dashboard created6 S: {& o. Z7 ?& @
secret/kubernetes-dashboard-certs created1 J& ~0 |$ s* V1 Z; h( O" u; ^
secret/kubernetes-dashboard-csrf created
9 H/ S& X! `' _! Dsecret/kubernetes-dashboard-key-holder created
+ S5 M/ a& {& F3 `7 Bconfigmap/kubernetes-dashboard-settings created
4 v6 F, {0 z# prole.rbac.authorization.k8s.io/kubernetes-dashboard created
9 b0 `$ q) D4 S. z9 N3 M, Gclusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
, z: a1 V- \( b- F5 _+ s$ lrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created7 _6 b; {3 O6 Z2 J$ m
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created& G, A! ^+ D- A# _+ q3 S! r! J b
deployment.apps/kubernetes-dashboard created
) m# L; C9 W- z5 c( R+ {: N6 pservice/dashboard-metrics-scraper created
% v5 |7 }$ G: @. gdeployment.apps/dashboard-metrics-scraper created
" _/ w& i( {- K# u& v# c% b- X! y
) W7 I( N( f( j检查:
) H8 O5 n, M+ i* w+ f
! {, Y: y0 l. f3 E[root@master1 admin]# kubectl get pods -A6 }% ]2 T6 o7 i$ {. ^
NAMESPACE NAME READY STATUS RESTARTS AGE& P3 z7 `3 g3 n1 J$ j4 Z* _
kubernetes-dashboard dashboard-metrics-scraper-78f5d9f487-s854v 1/1 Running 0 4m8s
2 a8 E0 [1 y8 _kubernetes-dashboard kubernetes-dashboard-6bc5cb8879-8zjj2 1/1 Running 0 4m8s
* ~1 C- W% t' }8 t& o1- b% e9 H, s5 |7 V7 B9 B6 \3 c* s
2
4 Z: Q% v: m2 M/ V. u5 h* }5 u3
9 }+ F4 r! J/ ~+ h' h# s- M1 k4' C9 E+ |/ N4 n+ @/ t
2.3 设置访问端口
1 O D2 F4 Z6 S4 N2 }1 R[root@master1 admin]# kubectl get svc -o wide -A+ x- X, S% Y' a' e# {0 w" v) V
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR( W1 s: x& d1 t( z
default javademo1 NodePort 10.1.230.223 <none> 8111:31880/TCP 2d23h app=javademo13 a7 q9 A0 |) Y* z1 U- a
default kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 3d <none>
0 [6 ?: D3 }$ Z! s9 A- K) L5 rkube-system kube-dns ClusterIP 10.1.0.10 <none> 53/UDP,53/TCP,9153/TCP 3d k8s-app=kube-dns
+ T9 n' W# C( M7 ^* _5 Ckubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.1.110.33 <none> 8000/TCP 8m24s k8s-app=dashboard-metrics-scraper
! i: o1 t' H( E1 f" V+ `/ z( x" ]kubernetes-dashboard kubernetes-dashboard ClusterIP 10.1.179.158 <none> 443/TCP 8m24s k8s-app=kubernetes-dashboard7 w% R9 v: q. l4 l
[root@master1 admin]# kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard: \; G0 q3 }" w
service/kubernetes-dashboard edited
5 z& F/ T5 e/ ^. m
; R0 A+ S; h+ C$ o2 s* P6 x3 X+ a其中的 type: ClusterIP 改为 type: NodePort
% k7 h( h& r9 V' j: g5 O7 G6 f
8 v- H% Y% s. f+ h' | U3 ^( V5 @, [5 B+ X5 A5 S
可以看到,dashboard的端口变成了30798
! G1 n4 G/ k1 L4 Q9 E& F7 @" R+ O; X3 M# B2 p7 W) Y7 J
# 命令: kubectl get svc -A | grep kubernetes-dashboard
) V L; I% I, Z5 }& |: E3 W: ?# 或者: kubectl get svc -o wide -A9 O: X+ r+ F/ |
[root@master1 admin]# kubectl get svc -o wide -A4 C+ G s' f" `8 B5 z9 _: Y- {
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR" W4 Z2 b( m) P& L
default javademo1 NodePort 10.1.230.223 <none> 8111:31880/TCP 2d23h app=javademo1
7 y. g: z- G" P' V1 `1 T2 tdefault kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 3d <none>
& `) k1 K) J2 H6 M9 ^, T/ |1 n: ]/ ekube-system kube-dns ClusterIP 10.1.0.10 <none> 53/UDP,53/TCP,9153/TCP 3d k8s-app=kube-dns
+ Y5 {7 M) O5 Q- `! w& n- M2 \kubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.1.110.33 <none> 8000/TCP 12m k8s-app=dashboard-metrics-scraper
7 z, }$ p. S$ W4 Fkubernetes-dashboard kubernetes-dashboard NodePort 10.1.179.158 <none> 443:30798/TCP 12m k8s-app=kubernetes-dashboard
3 L+ L9 s+ g4 O$ A5 T Y! }
, Q' @7 h+ J! v0 X( k5 _
# O; f( O5 b/ `0 V4 Y; ?4 D: I& E9 s# O" l
2.4 登录
3 r1 R4 S/ V4 o/ J- M2 G9 j( A2.4.1 创建登录用户(masternode)
1 n' ^2 W/ |, `% O8 W" y7 ?' s$ _URL: https://192.168.8.190:30798/
6 x, K6 N# ?3 Q* b2 _创建一个登录账号的文件:dash-user.yaml/ e' N3 o- c- P4 U) S/ C& B1 N
内容: 把一个集群账号admin-user创建出来& y% @& i; C& D# |. l
; }4 }, ^& @" ^5 ^# dash-user.yaml: q2 D+ W L6 L! |; R5 C7 n9 l
apiVersion: v1
- D3 f# ]& H0 c& f* g( X' |* Rkind: ServiceAccount
: n& K7 x3 ]% S& F9 F8 C' bmetadata:
1 I; O9 L9 s" O) u, g& A2 h name: admin-user3 x- h- R% a. S i/ e: S* I
namespace: kubernetes-dashboard$ {( u% C5 d( }
---
0 Q+ h& |" G$ Z- fapiVersion: rbac.authorization.k8s.io/v1, H) p/ G, f+ ^4 \9 O
kind: ClusterRoleBinding& o" ]" ?1 s; y% w' F [/ m, \8 h( }5 ?
metadata:
6 m# \3 @* z, d- L) b name: admin-user
/ I x% U, `$ groleRef:6 |0 d$ C/ K/ A
apiGroup: rbac.authorization.k8s.io9 t+ W; Z! N* P1 B" F: Z8 u
kind: ClusterRole
7 V; o; q8 P9 o name: cluster-admin
8 t/ T$ r3 [3 Y* Jsubjects:! ~+ q: F) q5 d9 s7 _: q) c" T& O8 y1 i4 a
- kind: ServiceAccount, @. Z3 T$ r2 p6 o& | S7 m
name: admin-user
# Y; m: @/ p' h0 A0 r, E namespace: kubernetes-dashboard7 m, d- N+ J. G
: c# {2 r1 f# U2 S; i## 应用 _. [7 n3 t% h; q# {( o
[root@master1 ~]# kubectl apply -f dash-user.yaml . m8 z, H5 X$ X8 ^' o/ W; `
serviceaccount/admin-user created
7 \7 y7 |6 @# w; Xclusterrolebinding.rbac.authorization.k8s.io/admin-user created) G# A" l4 K) i1 i4 e9 A8 a8 f
; ~- Q. N. |2 G7 {+ r# G) P
2.4.2 获取新建用户的访问令牌. s1 q. P0 d$ a2 d) u8 D
命令:% V |) C( J' P- M- Y6 K
& C! S* A+ o& p: n& _! Lkubectl -n kubernetes-dashboard \
0 _# o1 r! C0 f- \5 J% [get secret $(kubectl -n kubernetes-dashboard get sa/admin-user \
9 B8 t" O% C9 u2 {1 ]( A' j- j-o jsonpath="{.secrets[0].name}") \
" ~4 }0 v/ c6 A8 Z4 x! t& j8 e-o go-template="{{.data.token | base64decode}}") O5 I1 N8 Q2 ?7 {* I ]2 v6 W
! P- K7 k, S: X
执行后会出现一串令牌,复制后粘贴在dashboard的token输入框中即可 G% ^- u8 ]. Z, E% n" [8 ]( k, P2 {
1 | }0 Z# N5 ^
4 Q. C/ b9 |) _0 ~0 `' F3. 工作负载deployment
' L8 v0 S+ t0 H" `" c) f( p控制Pod,使Pod拥有多副本,自愈,扩缩容等能力
! L* o: G# Z4 I# W% ?/ d* L ?$ o# g* B; F; \- ~$ o
# 清除所有Pod,比较下面两个命令有何不同效果?3 v) d8 [" L3 K& u D; o2 a
kubectl run mynginx --image=nginx
- T8 G% k. D$ j( Y! Y6 B$ ]6 n& S. Z0 K) }
kubectl create deployment mytomcat --image=tomcat:8.5.68
; s* ~5 |, I4 v! \# 自愈能力
5 o$ n) A" [( ^5 {7 v7 Y. I# 删除之后,k8s会重新启动一个tomcat。除非删除deployment; ~( v$ B- R {( ]
4 i) U P9 Y0 a+ [6 Z% q t; Y* H3.1 多副本" r; I; V0 d' k0 r# y
3.1.1 命令行方式:
& M) F8 j3 d; X8 o' g& T" [kubectl create deployment my-dep --image=nginx --replicas=3+ `6 V& t( u. h9 H/ ]
I c3 p- v3 P5 D! g: V3 X" d3.1.2# o# c/ n9 {, n5 u- c
yaml文件方式7 r+ K+ c4 W& Q
5 [# w3 V) ^. `+ l# ~( {: d1 j0 eapiVersion: apps/v1
& V/ y4 R* y; N! ^% V2 W, k! Mkind: Deployment9 G. ^0 u& t1 g' r
metadata:
6 Z) z }$ o$ k+ G/ k" q labels:) A1 U' x( ?7 E2 o% N4 n* r
app: my-dep
/ s* \6 x; c6 a. k name: my-dep
, J5 A& h& m1 H& v, c+ lspec:
# Y% A. ?( T. F$ G replicas: 33 r$ v4 Q7 M" p: R) ~" X
selector:3 b' U7 |0 q9 J. Q3 @; F
matchLabels:
' N4 ^1 E2 M# u, R app: my-dep6 o& Y/ _' B' r9 Z [7 j
template:
5 B$ n/ a' Z/ ~1 @0 h4 w/ Q metadata:0 r3 a: K6 d2 O3 _: F* F1 ?
labels:) k+ o) Q: u) j8 n% I: I
app: my-dep
- W2 b: V s, \3 {& u spec:
5 \" a$ X$ Q3 ^4 l5 g containers:& f' l& a4 u& I% J
- image: nginx
# R% p( L9 Z5 o! W name: nginx
$ r) U! g7 C9 s1 Z& j' w, E# g5 j" y9 h5 o' A9 |8 V4 g
3.2 扩缩容
o% T- ?" X3 ]. m3.2.1 使用scale方式' ]6 K* o0 j$ F; c: h8 c
kubectl scale --replicas=5 deployment/my-dep
- j1 h. |+ _) D3 A- Y- h( K6 P
* o0 u" D! ~ @% m) I9 K; o7 q3.2.2 修改deployment方式" g8 j, y2 p. `- B/ a
kubectl edit deployment my-dep' v& q* r# D. ]* `% t
( Z% s* a; x& W+ d' ]3 y#修改 replicas 的值
3 p* A! l9 x+ F, W3 _) }1 J2 H
% e% l" [6 j, M7 j3.3 自愈&故障转移( h1 e! }6 j! o( l7 W
● 停机% d. B9 { K* ?- w" e
● 删除Pod8 Z- p( b" {$ r5 D
● 容器崩溃5 c( |/ `1 b9 b4 d/ J9 L
● ....4 {' h- m6 S; r, ^
* x5 D, s: E( `5 s/ ~2 s
3.4 滚动更新9 p: U0 Y- X% h2 _4 \
3.4.1 直接使用命令. f9 @, c9 @% c9 S
在以deployment创建一个nginx的情况下
5 o5 V& L6 B5 ]- }: C! }& y
" T+ @" @3 `7 }9 F% K5 Q9 J7 N4 D## 设置新版本, 该命令会是k8s去下载版本为1.16.1的nginx镜像。+ W7 i8 P& |! M$ T
## 同理,也可以使k8s去指定仓库拉取指定版本的某镜像(比如某服务的新版本)+ j3 U) ]: b# U# F
kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record, r* I% p: ]* w
kubectl rollout status deployment/my-dep
6 Y& n. I) w* Y2 O9 J; ?8 `) `: q, z6 E( O1 Z1 X- u
3.4.2 修改deployment的内容0 l% n6 P1 G4 l& X" J
## 修改image的版本
) [: ?# w& }( |$ P9 vkubectl edit deployment/my-dep9 u- F6 x1 m3 t0 q$ k
5 i$ P1 S0 q$ `3 L: P3.5 版本回退1 H7 `. \/ w" ?5 q7 h
#历史记录
) K6 W6 M9 W2 C8 C- I, R9 g) R8 fkubectl rollout history deployment/my-dep
+ j* {( w( v0 |9 o2 y r4 k0 z- o
7 f7 W6 E% C4 v; O1 p+ y X#查看某个历史详情6 {) v0 r; z" N2 M% c4 _
kubectl rollout history deployment/my-dep --revision=2. U7 V! a- ~* [: I- b1 N# Y
' p: O/ m" R2 |) a3 e& k6 a9 b
#回滚(回到上次)
8 r5 L- E# N9 Z8 B5 r! Wkubectl rollout undo deployment/my-dep
: \ G1 p/ q" A9 m" _
0 O! ]1 T; U1 @* Q# b# r4 m#回滚(回到指定版本)+ d' p- j# _8 q( A' i+ A
kubectl rollout undo deployment/my-dep --to-revision=2* A+ y$ i2 V/ k o1 W# r7 g/ O
$ L( ] D# k+ M: [
更多:! ]$ i1 w; @. z+ H
* C! L* y& \% K+ _6 [& c除了Deployment,k8s还有 StatefulSet 、DaemonSet 、Job 等 类型资源。1 g) g( @& {/ F+ [
我们都称为 工作负载。. e: H; }) H) z. W
有状态应用使用 StatefulSet 部署,无状态应用使用 Deployment 部署
* x1 a3 t3 Q. h9 [% Surl: https://kubernetes.io/zh/docs/concepts/workloads/controllers/6 V+ P0 h) F* [8 r0 L
8 z; F2 \8 J$ r4 t- ^3.6 工作负载小总结
0 H/ w# \- R- ~. I
. C: Z: P4 `! z2 w& m" c' xdashboard中的工作负载 |
|