|
|
楼主 |
发表于 2024-9-10 17:12:32
|
显示全部楼层
vim deploy-kubeadm.yml
+ r/ [, Z$ ^$ i) G2 }0 R3 {) m---
- Y% a0 Q( i( O: a" V8 |$ j" |- name: Deploy kubeadm kubelet kubectl
) J* y8 n+ U4 S0 t y, t hosts: k8s6 s- Q' x& J4 g- G G
gather_facts: no* g$ z- m! v1 x, }$ K+ B7 E
vars:/ L, t" B: |% v- {1 ~# z
pkg_dir: /kubeadm-pkg8 q. ~% r7 ?7 A& Q
pkg_names: ["kubelet", "kubeadm", "kubectl"]
, c9 T- d. i( j( r- \5 x8 Q# |! @) @# h2 T% S& w# w) ^6 S5 [
# 变量 download_host 需要手动设置
' A, A8 f1 P: Z. ?4 f3 R$ f! m; T # 且值需要是此 playbook 目标主机中的一个
* F& U6 Q4 f( S- J1 j( b. l; f/ y$ n # 需要写在 inventory 文件中的名称
" N, J! \1 ^6 n0 @- C download_host: "master"
3 u0 A; Q4 ]/ ] local_pkg_dir: "{{ playbook_dir }}/{{ download_host }}"$ r+ r5 j/ y- k: {# b/ v! I
D$ m0 q& o: M: |& \" m) o tasks:, j+ ?9 w E) O6 q: Y& o
- name: 测试使用 -e 是否设置并覆盖了变量
/ E$ c" e& N, S debug:9 p& b- ]- W2 K" j% n3 B
msg: "{{ local_pkg_dir }} {{ download_host }}"
# Y+ k7 i/ K- x" g, x- H3 q tags:: h1 F* \# h m4 T/ e7 `* C; u
- deploy4 }8 P% b# s( W8 F8 p+ R
- test# w6 t6 W" K8 Y' r: X- N7 p3 M
Z& b" o* Y0 [& i' R
- name: "只需要给 {{ download_host }}安装仓库文件"- M( I( i) G+ I. P7 e7 u
when: inventory_hostname == download_host" r1 L8 h. E1 Y6 `" O
copy:5 D" b& ~% Y1 H# z4 i) @
src: file/kubernetes.repo( p$ e- K+ W5 n
dest: /etc/yum.repos.d/kubernetes.repo
( g* ^- o2 }! P& a% @ tags:
# M5 R3 G6 ]5 ~ - deploy3 G0 Q2 S3 [% e) x7 L$ X
1 {5 d' A t6 J- i1 ?) A+ d
- name: 创建存放 rmp 包的目录2 j+ m: h- O9 e n* A5 I- g
when: inventory_hostname == download_host' ^2 c- r. O* o" l! v1 b( d9 z0 h% `
file:
. A- Q% W% {- s% N- K* c' ? path: "{{ pkg_dir }}"
; T5 U; C$ o8 Q" S, w/ h, _ state: directory
, t" H: n1 w: }4 p tags:
4 ?6 z) `4 G6 f5 t& u4 G% R% X - deploy
* k, {8 e* G+ Z* ?8 @+ a4 u2 r0 w. i
- name: 下载软件包
5 Y: s4 }% n3 H' A; ?7 Z& E: Z1 | when: inventory_hostname == download_host
% E9 H* ]8 t8 ]( C: }6 y% s/ e yum:
: b( X' |( n# U name: "{{ pkg_names }}"
1 C, ^1 a7 L4 C8 }' j( s. h download_only: yes; w5 |5 f- p6 z% V4 P. \
download_dir: "{{ pkg_dir }}"
. M" \0 t$ Z2 \5 j$ y) n% W$ k tags:
% X- i' J6 Y! c- {8 `% T2 r - deploy
4 u, ~% v9 {2 D! H4 {* g( S1 G+ J
- name: 获取下载目录 "{{ pkg_dir }}" 中的文件列表
. J/ X1 @/ _' y8 F; Y9 J when: inventory_hostname == download_host
6 Y3 i6 B7 h& H5 k6 w shell: ls -1 "{{ pkg_dir }}"6 A. D6 o0 r# ^- P7 i _
register: files
+ X1 N, U9 L- w+ @ tags:
& i9 w+ {- w( M& h - deploy
1 v( y0 ]. _- L% ?3 f& x8 i8 X+ T0 A
- name: 把远程主机下载的软件包传输到 ansible 本地9 i7 n" D3 A" M* T! {, g
when: inventory_hostname == download_host
w; e2 K* {$ V/ V fetch:
; I4 p8 w$ z- \ ~+ d src: "{{ pkg_dir }}/{{ item }}"# B/ v& _( T2 l+ _6 }, L! w* u1 q
dest: ./
& D$ X3 L& U8 t* |+ O% P% D; a loop: "{{files.stdout_lines}}"
* }# j- W8 q" ]2 _4 `$ o tags:" v* ]5 A4 Z# k* w4 j
- deploy; W+ f1 d6 `0 b% w# a( a* \ [9 _& Q
6 C+ z: s2 b+ S0 W) I; e - name: 传输 rpm 包到远程节点5 }- ]5 x; j- u/ ]& C2 M
when: inventory_hostname != download_host0 S2 S( M F8 R' i
copy:. e8 W- \# o; U! b
src: "{{ local_pkg_dir }}{{ pkg_dir }}"
1 C/ T2 ^, _5 `, t dest: "/"
* u8 c n4 n+ q/ M tags:2 H* P7 R5 z6 }# W) U
- deploy
6 }4 c* r, H3 o, F% V4 T, b5 ?0 b j& c: m5 R4 D: ]) X& X4 R: O
- name: 正在执行从本地安装软件包
6 c. X) T" x; ?; b3 n shell:
' F0 n2 v) C3 ]6 |$ {1 ? cmd: yum -y localinstall *
; e0 Z0 _9 Z+ f1 J/ J chdir: "{{ pkg_dir }}"* s3 l* w8 F2 W2 l' e5 h
warn: no9 e' c g' R# w
async: 6001 f* b4 {+ R; j- A' O5 k( N* Y
poll: 03 a$ s3 [! q) h0 A
register: yum_info
) ?+ Y! E' ?! [* \ tags:
`" }; a% }9 N7 F/ Z - deploy
3 Z* m7 |0 }* s2 x5 ?5 ^( b) \, U p
0 @& Q9 @; N5 O: Q - name: 打印安装结果! C/ N9 d8 e$ {8 z
debug: var=yum_info.ansible_job_id7 f) N2 H4 H9 ^; ?1 O; \
tags:3 ~' L4 p8 D: D ]0 w9 C
- deploy
8 b9 H) u: _! ^: C& T
8 p; V( I' y+ H- \ W }2 w' S7 r( a% N
# 查看kubernetes依赖的镜像
3 H# A7 {. W! M) P) Nkubeadm config images list
9 v) {+ m t5 N) p5 L$ E! d% o g' t4 I: X
# 不支持高可用的集群初始化1 d& `- D; X) d# g6 Y0 k) T2 y
kubeadm 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
+ _# E2 B T* w g: h
6 P" q! o- D4 ]0 A) C9 Y/ ]# 支持高可用的集群初始化8 m S! C# r! ~ G. D2 i8 S3 D, k2 h
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
- N: m- w0 i& t& a: l9 n0 q' W5 G o m: \4 r: A
; V$ |: e9 S/ N
# 初始化成功后,会有以下信息,复制后直接在node节点使用即可加入集群! M& ^( E* ~; B' a, I
kubeadm join 10.9.29.112:6443 --token en6s67.08rnsg20dc5t8z4n \
Q" r7 p6 P$ \, U6 Z7 c* l --discovery-token-ca-cert-hash sha256:7d034842b9ee7a6b17d9ce7088839f4570da1c61b29922f28e72b855c10003cc ! A# l- g$ f- }( @5 Y$ X% r
; {/ J3 P: Y7 W
# 如果是高可用,还会有一条,这个使用后会添加一个master进入集群+ \% a4 B; a6 H: J' ]
kubeadm join kub-lab:6443 --token s2ccws.tzb7v4olicidp032 \
+ o" X) U ?6 w8 F --discovery-token-ca-cert-hash sha256:29a2b437f79c5e4958c3d73e6c64fe0a4df24f0f3bcabd5ced28392d7a882e10 \
; }* G2 t- G2 @2 p+ d1 y --control-plane --certificate-key c0a9a1c4a067b20dca95447f809d95c973220244c740a47f71d5302e0a759ea7
% h! ]4 h( m2 L/ u% O; w7 W7 Z
r$ C3 N2 T; [$ O# y |
|