|
|
楼主 |
发表于 2024-9-10 17:12:32
|
显示全部楼层
vim deploy-kubeadm.yml
5 [+ x- x4 }: R6 [( e8 k3 I, Q& C---$ ?8 l% p1 }6 m7 p& A. D
- name: Deploy kubeadm kubelet kubectl% o* z% ]2 g/ x+ f) r+ L1 C6 U
hosts: k8s
6 A, H1 N( `, D. v+ B8 l gather_facts: no
9 n# R2 Y) X2 j+ v% Q8 ~! D vars:: X* C9 }$ Y% U" n: I. i7 Y3 N
pkg_dir: /kubeadm-pkg
0 n/ D1 b+ O. o* P pkg_names: ["kubelet", "kubeadm", "kubectl"]
* V, S" K {. s" t' L* ]6 w2 V, h3 I' T% g" d" l/ a
# 变量 download_host 需要手动设置& {! |! S5 j6 X$ ^
# 且值需要是此 playbook 目标主机中的一个* M! z, u7 y5 x' i
# 需要写在 inventory 文件中的名称! @: Y F7 y) g9 j j) z
download_host: "master"
3 q- D6 p9 u# c& @/ m local_pkg_dir: "{{ playbook_dir }}/{{ download_host }}") C- W# M! @$ M X3 L- U% b
( }. E2 v( R! a2 V2 b2 M& f tasks:
' p+ `- J/ V/ b2 t, n7 a! d - name: 测试使用 -e 是否设置并覆盖了变量
1 P4 r, q7 ^, z1 Z$ n debug:( V% s' m* f0 i" n2 E. o1 i9 ]
msg: "{{ local_pkg_dir }} {{ download_host }}"1 p# `1 @4 f. q& n6 a- R& a) D
tags:
/ x# L- f3 B# O5 g3 ^ - deploy& V$ R4 m( {4 c& w: G; k/ _6 t2 f$ L
- test" U9 s( m( f' ^( E; @* F
8 ]- |! Q( L$ v* N" J C: ? - name: "只需要给 {{ download_host }}安装仓库文件"
+ {& Q% u; ]9 L' [9 d( `8 ? when: inventory_hostname == download_host
9 H0 C( {2 B6 v5 B copy:- r- ^8 q) V( U
src: file/kubernetes.repo
9 d6 T, Z! e, d+ `: r$ f6 W* C$ Q dest: /etc/yum.repos.d/kubernetes.repo2 Q% M' a% [! x2 v
tags:
0 e5 ?! L" Y' D+ E9 G* k# C p - deploy
+ M9 _9 W+ l/ v% h6 O! X
4 Y- d5 }7 K' W; n0 k - name: 创建存放 rmp 包的目录
/ O; R4 g7 E9 M `' Y5 L- d: f when: inventory_hostname == download_host5 Y {7 c" E) d& Y' C/ c& B, N
file:
+ f' ]+ D" \ {! ^. f path: "{{ pkg_dir }}"; X1 z% ^$ q( i2 _
state: directory6 F& | D! M% d: Z$ w2 B: d+ ]
tags:
# v* `7 H. L1 ?& w' y# C# | - deploy2 |0 |$ N0 V8 O$ I& r; X1 l5 K
: N5 n W, @3 G3 M4 c- o7 {, e$ B( g
- name: 下载软件包2 w$ Q1 |, J% Q$ ]# t6 V& U- n
when: inventory_hostname == download_host8 i. A: E( p7 M9 g" K) _, d7 S
yum:; n+ L4 S" R# f7 D! f) @0 R
name: "{{ pkg_names }}"
2 J/ j3 i' T! y% X/ B B$ y6 v download_only: yes
) ] O8 Y& J L* S! q download_dir: "{{ pkg_dir }}"
5 A% G9 N$ l9 Z; l4 m) H tags:0 g' `" G! N* k* s5 B/ ]7 e2 I
- deploy- P+ P. l3 Y/ s8 t
" O( e8 z+ Z+ f a8 T6 P3 {
- name: 获取下载目录 "{{ pkg_dir }}" 中的文件列表$ O7 n5 q3 B* C6 ^, ~" h( h$ ^
when: inventory_hostname == download_host
. e( n& g+ q; q/ X shell: ls -1 "{{ pkg_dir }}"2 B( K% m3 k7 b0 g5 z4 j
register: files
- Z ]7 B9 ~8 _: a# d tags:: z+ D% r3 q b; L1 n: O0 N# Y
- deploy7 h5 u8 G* U% m
/ q( O! n9 t+ V$ X# x
- name: 把远程主机下载的软件包传输到 ansible 本地
3 ?, Y/ o b, U; H when: inventory_hostname == download_host
1 J: ~3 @+ m& H6 x fetch:
3 ]0 E1 E8 ]# k src: "{{ pkg_dir }}/{{ item }}"/ ^) U. B0 o1 Y! f7 v" p
dest: ./0 ~1 X# f+ G& W2 y; f
loop: "{{files.stdout_lines}}"
. Q& K8 Y I! | E tags:) t0 J0 m' A6 O# d/ Q- E
- deploy
9 g2 `6 J" F. e: n1 u
6 k- i! o6 o. h - name: 传输 rpm 包到远程节点
8 u8 c Z( o. L+ O- V2 F3 n' S" x when: inventory_hostname != download_host
( `; \5 j# s; N" L2 @. t Q copy:
: t8 e# I% J. Q$ ~4 {' F src: "{{ local_pkg_dir }}{{ pkg_dir }}"
* Y) \, p2 x( @9 P8 n5 y dest: "/"
, s2 ]0 V0 y4 H4 W2 k5 \5 c tags:
( M; c. f# M1 S/ y y; F7 h - deploy) ~% B' }& m) l9 q& S7 D8 `
; `+ T5 C4 B6 }
- name: 正在执行从本地安装软件包% f5 T2 t% a& g+ ]
shell:
. J H( R* q; I cmd: yum -y localinstall *
2 P2 G' {9 @1 s' V$ S9 x chdir: "{{ pkg_dir }}"/ ?, Y7 P- G+ D
warn: no, o; q; Q1 z, |3 q! m0 p# j s! w
async: 600
3 H# T6 S7 R2 S% H poll: 0
, z ?9 v: n% u7 _+ W8 S n register: yum_info3 B7 G' B& i0 Y2 h) x3 O" Q. b( f( O! t
tags:
! K- k; g" g# z. A6 ~ - deploy7 m/ i9 v9 O, A0 x. A% @0 h6 o
9 }5 j' x0 ]4 f' k3 e. b3 t; f
- name: 打印安装结果# n1 ]* o; E; R( H& J& H
debug: var=yum_info.ansible_job_id
" u F% _% d* u5 w tags:
5 J5 s+ \( b2 v5 C2 U, k" i$ J# d - deploy
+ G3 a$ y- a- g9 k8 p# b' L0 u9 l, d: R. _1 e5 ]+ T+ y
+ [7 d: }8 K6 V" ?+ ^# 查看kubernetes依赖的镜像, R* T1 b7 `( w3 c, k
kubeadm config images list& k6 B0 V/ s& \ @) t( c
, _: k9 |8 @6 z- u3 L( i
# 不支持高可用的集群初始化
/ k% e* M: V; L# e3 Y7 [) b# _7 ukubeadm 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( u: q! k2 n% E+ K2 n
) R/ ?& c D K0 c& @ c- e
# 支持高可用的集群初始化9 l% m @& H1 V' J
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) S+ Z% E8 F9 w* ^# I
0 }9 R L% x% J3 E" K5 }$ r: Y5 ^- ~8 @! V/ I+ a
# 初始化成功后,会有以下信息,复制后直接在node节点使用即可加入集群/ Q! F1 a2 [9 ~ F
kubeadm join 10.9.29.112:6443 --token en6s67.08rnsg20dc5t8z4n \
; z' A6 L. J$ b, O% }4 x --discovery-token-ca-cert-hash sha256:7d034842b9ee7a6b17d9ce7088839f4570da1c61b29922f28e72b855c10003cc
" r; e2 V) s4 P7 c( `5 n. N! b
" ]$ d, Z! o) `8 N3 b! Z) {+ k# 如果是高可用,还会有一条,这个使用后会添加一个master进入集群/ T# n; m) h& h8 m: x& @2 k
kubeadm join kub-lab:6443 --token s2ccws.tzb7v4olicidp032 \$ A" v ?8 l' c0 T
--discovery-token-ca-cert-hash sha256:29a2b437f79c5e4958c3d73e6c64fe0a4df24f0f3bcabd5ced28392d7a882e10 \
$ |' y: E' ^" T; w+ o% F; Z" M --control-plane --certificate-key c0a9a1c4a067b20dca95447f809d95c973220244c740a47f71d5302e0a759ea7
& \: |. y; K6 g/ B) E6 K$ g
4 A9 J4 t, o6 V5 t3 w* l9 ?: E |
|