|
|
楼主 |
发表于 2024-9-10 17:12:32
|
显示全部楼层
vim deploy-kubeadm.yml. R- v4 a* E: |. K; y+ S
---& ^! o' M: G+ y4 {) u5 k9 ~8 j0 z
- name: Deploy kubeadm kubelet kubectl* B$ ~4 R) t, P& o4 [+ i8 j8 V- E. v3 P( i
hosts: k8s+ ^3 p, v7 \9 J* q' h( P6 J4 B: E
gather_facts: no/ g; m4 D: _* K' O
vars:
( q" T, Q! G. b+ `) A. Q9 y9 q pkg_dir: /kubeadm-pkg9 H; D, w/ Q9 Z/ Y9 A7 s
pkg_names: ["kubelet", "kubeadm", "kubectl"]
: {- H A( a: c( b, P
/ Y9 q( `% H1 T # 变量 download_host 需要手动设置( g4 h3 o8 Q7 n! v
# 且值需要是此 playbook 目标主机中的一个
$ G9 X" o2 z6 w # 需要写在 inventory 文件中的名称
! v& Y2 A2 b8 d9 a- G2 y: } download_host: "master"+ [: F" H+ g8 d# {3 L9 A2 r7 ?
local_pkg_dir: "{{ playbook_dir }}/{{ download_host }}"
2 w. m4 F+ {8 Y' W0 q6 W( X8 O3 y- w% l* Q
tasks:
3 t# Z7 c& F- }9 d - name: 测试使用 -e 是否设置并覆盖了变量5 _$ j( N! z4 }- M, b; @0 t
debug:
, y2 m9 a8 \/ C' T msg: "{{ local_pkg_dir }} {{ download_host }}"
6 Q) O" |0 s# b- h tags:
8 j+ {* |5 l9 J2 J% H) U; g6 r1 [; L9 K - deploy
8 ?: [& ]0 D- t9 [. p - test
, ]9 l0 A2 w/ V
2 t# T6 m, H* z5 I' W* h - name: "只需要给 {{ download_host }}安装仓库文件"* l7 i& G" ]" U7 e& Y. G7 v
when: inventory_hostname == download_host+ J% |' j" X! r8 T7 Y% Q+ C
copy:
7 A% A) T' k- z! n0 w; c w src: file/kubernetes.repo
2 ?7 H5 H3 }/ R0 O( b8 z7 M) M# Y dest: /etc/yum.repos.d/kubernetes.repo
3 X; j8 h0 x2 [ J7 K/ g& A tags:
6 d3 B9 c8 z* \0 f9 I - deploy) i- ^! z7 x1 [" e! _8 G
/ N( I7 u8 b. m8 ?7 G8 L( _# S& L
- name: 创建存放 rmp 包的目录 e7 N, F: M) X1 \. y" F, Q
when: inventory_hostname == download_host6 o- A9 a8 r* F; K
file:7 c' x% G! T. e. X
path: "{{ pkg_dir }}"4 C# s3 N5 h' _
state: directory
9 k7 s2 x4 ^) B0 L- j tags:
+ D: H3 h" @' O( X. g" i1 M) {! b( j, a5 L - deploy. h' [0 a+ q+ f+ c- J8 z. }
5 n3 h* p7 @% Q$ H8 |1 D
- name: 下载软件包
7 H. N9 h& o; c" s5 L! i when: inventory_hostname == download_host5 @1 `1 {& A- l; Z& [2 h
yum:
& h* y2 x2 G2 i1 b; F name: "{{ pkg_names }}": _) w+ N. W+ B
download_only: yes
0 Y3 j5 t8 j7 M( F9 p2 h. a download_dir: "{{ pkg_dir }}"6 [; h- s/ g5 B. i% V3 W$ b5 p3 {
tags:& t/ z: m2 m- i, }! Y. M( @! N& X9 _* a: t
- deploy
' c2 q" I& \- `5 L2 E7 C
# o% k) f4 W" g6 o3 I* I4 t: u, o, o - name: 获取下载目录 "{{ pkg_dir }}" 中的文件列表5 F* T: _3 j% e. Q( N- G6 H' F1 q
when: inventory_hostname == download_host
5 ~. j$ F! b8 ]! W; d% q9 _ shell: ls -1 "{{ pkg_dir }}"
3 t* p# ^4 E% Y register: files
) U- H/ ~! O: { h tags:
4 U9 j0 w. C# x2 V1 ]8 l. g* f - deploy7 s; ?0 k1 i0 S$ w
# T: h: d; m) G) b) C, X
- name: 把远程主机下载的软件包传输到 ansible 本地
4 s$ e6 {( d" q9 G% q A when: inventory_hostname == download_host* R' O: o3 X, E A7 r8 B# i
fetch:
: ^4 M3 g( H* c src: "{{ pkg_dir }}/{{ item }}"
; T4 K. Q1 @: u3 U, ` dest: ./
. A! [# F! j% h0 F0 c1 V3 s: x$ ~9 f loop: "{{files.stdout_lines}}" z: R9 ?3 j" S; W1 ]
tags:
: b- |2 G9 j0 Z7 F/ j - deploy
i% u( T: O7 d
! u, C, X3 p+ }+ c5 j5 c- M3 { - name: 传输 rpm 包到远程节点
# P' F- E1 s: f; W" |- L when: inventory_hostname != download_host" I. G7 G; @' X! e& A' k$ \# [* t9 T# h
copy:
K- t8 R0 v5 \* `# F: j src: "{{ local_pkg_dir }}{{ pkg_dir }}"1 Q7 |& X) ~' U9 j' t( C2 R( \
dest: "/"3 i% Q3 T% q1 o& ]' Q$ r- L0 P
tags:- R, c: N7 V4 s3 ~. J6 i
- deploy
) X. Z3 {" s; x# {. j. `5 K; J
- K3 c! {6 ^# G; R8 X2 E8 [4 n - name: 正在执行从本地安装软件包
5 l% Q, E1 I+ u6 r- U# h shell:3 Y6 p2 s. L" ~5 x0 `
cmd: yum -y localinstall *% W! j$ I: G- j
chdir: "{{ pkg_dir }}"5 Z( g9 x0 Q8 Z0 l5 o8 K3 H/ T: ?
warn: no
1 `+ x; H0 O+ ^6 C* j async: 600
4 V* j0 L1 ^% B4 f9 Z, }+ |4 ~6 Q poll: 0
5 v% s/ @* F' L/ R register: yum_info
* u. T3 A3 x5 Z, V" M9 ~, f tags:6 v- q7 u8 r0 X U4 P: \; h
- deploy( \ i8 U4 P8 M' S8 F3 a$ w
$ z, B# D& S# m- M0 s
- name: 打印安装结果% n" p' g! k: O% ^% R# X
debug: var=yum_info.ansible_job_id
% y2 ^' c% ~0 d M0 c7 s5 ^. Q tags:/ B: ^8 V2 T# M" q
- deploy
) u5 D- V w+ u& S1 K, g# f
9 x+ b6 x. e* O6 }# @2 n3 C0 ]$ s0 O* q& X ~
# 查看kubernetes依赖的镜像
" {7 v$ t- B3 s$ D ]8 E8 _3 f" Ckubeadm config images list4 ~! ~1 B2 ^! X- @
& l. I' l) e+ f( \: d4 B
# 不支持高可用的集群初始化
6 E. ]) @; a; M p2 ^3 Y& Gkubeadm init --kubernetes-version=v1.20.4 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=10.9.29.112 --ignore-preflight-errors=Swap" f0 U4 C# K* f, w' U: {6 S
9 |& T g! ~* a/ O* z% m$ k- {
# 支持高可用的集群初始化2 z1 F, U0 E: M- c# O3 S' L
kubeadm init --kubernetes-version=v1.20.4 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=masterIP --control-plane-endpoint=kube-lab --ignore-preflight-errors=Swap --upload-certs
1 @+ Q8 j# b$ \; s; O
( A. R7 E2 V0 `3 s! \! |( h a4 y* k$ n" Q
# 初始化成功后,会有以下信息,复制后直接在node节点使用即可加入集群( W, b. C2 u3 } }
kubeadm join 10.9.29.112:6443 --token en6s67.08rnsg20dc5t8z4n \+ |& x' z" R Y& c U! p
--discovery-token-ca-cert-hash sha256:7d034842b9ee7a6b17d9ce7088839f4570da1c61b29922f28e72b855c10003cc
1 N7 M* S3 D2 Q. I
# v! [3 h1 s! B$ {! C8 F; e# 如果是高可用,还会有一条,这个使用后会添加一个master进入集群- q9 I$ |8 l6 B& p! W6 H0 V
kubeadm join kub-lab:6443 --token s2ccws.tzb7v4olicidp032 \0 J1 {; X' c5 O+ @1 y
--discovery-token-ca-cert-hash sha256:29a2b437f79c5e4958c3d73e6c64fe0a4df24f0f3bcabd5ced28392d7a882e10 \
1 R' D6 d& Z5 } e' | --control-plane --certificate-key c0a9a1c4a067b20dca95447f809d95c973220244c740a47f71d5302e0a759ea7
- s6 A1 m& Z( b, _5 k7 Y- J& d
) S5 w* J; {1 X! V' ~8 n |
|