|
|
楼主 |
发表于 2024-9-10 17:12:32
|
显示全部楼层
vim deploy-kubeadm.yml
) |3 E+ s( l: N% l$ z( g1 p3 Y---
' {5 Q U8 P8 S" n# S* x- |- name: Deploy kubeadm kubelet kubectl
! k1 |& _* A$ E hosts: k8s* H5 ~( Q% b4 G5 \* n8 |! P6 Q
gather_facts: no
; T ?) a+ J; J+ L' [ vars:7 F% A) P. U( u* D- K! r0 m2 a$ [- b
pkg_dir: /kubeadm-pkg( c) v; Z% Y5 p, e {2 l
pkg_names: ["kubelet", "kubeadm", "kubectl"]1 f6 f5 E8 Q( N9 T+ n* D$ n2 T( @
% n% u. e4 Z M6 D: K' M # 变量 download_host 需要手动设置: B7 B- k* W$ f# L3 T6 e/ F
# 且值需要是此 playbook 目标主机中的一个
/ N# @# c3 _# J' ~5 h7 C # 需要写在 inventory 文件中的名称: T0 V+ R% h ^" ~! o
download_host: "master"2 ]% J% p+ x' @. o( y' j
local_pkg_dir: "{{ playbook_dir }}/{{ download_host }}"
" I' p% u! L* }- e# z# @! w
4 Q6 U) I4 u @. l f% ~3 a tasks:# ~9 q. a- P, j6 S( b# _& ~! g" v
- name: 测试使用 -e 是否设置并覆盖了变量
$ X" x( ?) p7 {9 ^0 Z6 l debug:
( g5 P7 E/ k" T3 |2 U9 f msg: "{{ local_pkg_dir }} {{ download_host }}"7 k4 J: P$ r% b( I) J
tags:
" ^0 C" k2 r, z! h9 ~3 K - deploy- c7 _( B* Z6 T/ Z# a7 Q" z2 K J
- test
! ?4 W' m9 ~, O' f" x* S5 O; j# ]/ {4 F4 z
- name: "只需要给 {{ download_host }}安装仓库文件"
0 H3 ^7 V, o& O6 H( n) J, q; E when: inventory_hostname == download_host
, Z8 t% l/ B/ j1 V8 ? copy:# {# m4 X7 J) P; N0 E! r
src: file/kubernetes.repo
, R, Q3 G# `/ ^) H9 [7 s dest: /etc/yum.repos.d/kubernetes.repo
d" I5 }+ ] J9 m/ r$ S$ S tags:6 W2 N; C. O) q: [3 s
- deploy
- w) C2 t3 Z/ C5 h5 }, X3 _2 G% ~3 K! X3 y& Z, J D
- name: 创建存放 rmp 包的目录
/ ~" C$ F4 Y8 C# Y0 r( H when: inventory_hostname == download_host
$ j v8 `' ]: N# K, R( z file:1 h) K* ~% Q5 ~" K% D4 Z% V
path: "{{ pkg_dir }}"
! y. m7 t5 `- ^8 E- j) }6 h) _, l state: directory
# b6 T* H+ C- ~4 S* f1 y: d* }. `$ j tags:1 S$ Q8 a8 i: \, d, B0 ?+ w
- deploy( g O( t1 _' s2 T/ `9 ~7 Y. B1 @+ ^
- C P2 k: Z2 s+ l4 p+ K( @ - name: 下载软件包
2 K A$ o6 c8 B0 h when: inventory_hostname == download_host
3 y2 w$ q7 X3 X' c, I5 L' c1 R yum:; u6 D& S: @0 c4 [; x8 \! b( E% K
name: "{{ pkg_names }}"6 c$ T# S5 J% K9 x; o; R2 L% t3 h' y
download_only: yes
' @. B8 n: I$ _. h1 s. B download_dir: "{{ pkg_dir }}"2 T7 M! {) f2 e- x/ |+ g
tags:
: K# x1 j; z- @# z/ u: _ ~3 R( h2 y - deploy
# ~5 E2 N4 |' c* w. C+ X4 u' Z% D9 _$ O4 X* ^
- name: 获取下载目录 "{{ pkg_dir }}" 中的文件列表
$ I f2 e) L. C, Z) f: y. N when: inventory_hostname == download_host
( I" ~# A# ~1 {1 F shell: ls -1 "{{ pkg_dir }}"
: ^; x/ V+ v; _; H2 S register: files
6 X! i8 V$ U& f9 M' g tags:/ r% f' N- B8 {
- deploy
) `3 A: y, O# U9 F& B8 q
* M1 F* ^5 G) ]7 R6 w7 W- Q0 G: ^ - name: 把远程主机下载的软件包传输到 ansible 本地
" \7 ?2 |6 v: j8 R1 {% N7 ~ when: inventory_hostname == download_host
2 N, `) U, r2 P fetch:: e! u0 R5 S3 b! ]
src: "{{ pkg_dir }}/{{ item }}"
' B- c3 |, x7 z) I! |# q3 o dest: ./9 n9 o4 F! M: G4 v
loop: "{{files.stdout_lines}}"
& f. D( O: l- @% `- g, \/ B \ tags:
( B+ a4 o# N& r$ j- b - deploy# M5 K# C0 g! h- x' h
% Q$ M( q7 u8 U: s" H) a - name: 传输 rpm 包到远程节点
" b1 u: x" R+ P ` C. n" u4 l9 } when: inventory_hostname != download_host; c. T# _1 h& i, ]: ^ p
copy:
5 @0 |; R. x& T% u& Q' w src: "{{ local_pkg_dir }}{{ pkg_dir }}"- [% D3 q/ z( l! w0 O
dest: "/"
; t7 k; y& p/ \0 q& m8 n0 T- k tags:
: O0 H$ V" Q% w" l1 K, h - deploy
8 H2 y& y: |! |) y' r' ^3 s9 W
L+ w) ?- |! ^" ]9 a - name: 正在执行从本地安装软件包2 G! w' L: |" q; \6 Q6 Y
shell:
* t( d' S: A9 N3 l, _: G, H cmd: yum -y localinstall *
9 b" l3 N# I8 E4 r chdir: "{{ pkg_dir }}"
3 t3 s4 f! Q, N2 T% S2 i9 k' Z warn: no
' j1 ]* v0 b& { async: 600
% d @; d1 ?6 `' t7 v poll: 0 X6 e, m" _! y% L3 q- y1 U( s0 W) `
register: yum_info9 Z) y6 N b: n
tags:. Y* ]; A" M3 E
- deploy8 e) Q" n& _" q4 i; l" Y- ^5 W" j
2 V* [0 o/ T& t; E7 e4 d0 _8 T6 o - name: 打印安装结果
; n& X- M$ A5 Z+ \ Z6 O. k. p debug: var=yum_info.ansible_job_id4 y8 h6 M5 |8 L: }- M2 {
tags:
! Y" ?+ E$ m4 L- q# {% r - deploy) c3 a2 G3 p0 B8 [. ]
* w/ s) {8 C0 L8 ~" W O4 p. ?- u9 I0 k2 i0 M r
# 查看kubernetes依赖的镜像& e9 }9 Q. s+ I7 v
kubeadm config images list
6 O6 l- `( a$ n0 P. P7 _; [# |7 b1 d2 o/ k, u. f& P- @& a3 H
# 不支持高可用的集群初始化/ c* U+ @/ r& L# r" U# Q
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/ T7 S: d9 ]+ x" `! Q* u9 }1 t
9 b9 f& K0 u! l* @1 t' v+ H P, i# 支持高可用的集群初始化' {" ^& b2 k4 O' J7 i4 ~
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
, B- v8 x3 ]) a7 \' I/ R2 C5 |; y$ U( V$ G$ \. n" X" f
1 i7 z. o# r; @0 D% {, Q" W
# 初始化成功后,会有以下信息,复制后直接在node节点使用即可加入集群1 O! y; ^5 G8 i' f
kubeadm join 10.9.29.112:6443 --token en6s67.08rnsg20dc5t8z4n \
( u2 `7 ?. r& z/ j8 r' G7 U --discovery-token-ca-cert-hash sha256:7d034842b9ee7a6b17d9ce7088839f4570da1c61b29922f28e72b855c10003cc - B: [4 Z+ E6 r9 Z a( D
0 g3 N9 ~- n# l. O# j( Q$ B. E# 如果是高可用,还会有一条,这个使用后会添加一个master进入集群+ [. m$ X9 r M- W, H6 e. G: a/ ?8 S
kubeadm join kub-lab:6443 --token s2ccws.tzb7v4olicidp032 \2 R7 h6 H7 c$ Q1 w( S
--discovery-token-ca-cert-hash sha256:29a2b437f79c5e4958c3d73e6c64fe0a4df24f0f3bcabd5ced28392d7a882e10 \7 W2 n4 I0 S0 }6 V t
--control-plane --certificate-key c0a9a1c4a067b20dca95447f809d95c973220244c740a47f71d5302e0a759ea7
+ D2 w$ i7 E8 t1 r9 T
9 k; Z" U: m3 F" m! c: Y |
|