本部分生成生产级 Kubernetes 自动化安装 Role
目标:
- containerd Runtime
- kubeadm安装
- Kubernetes HA Cluster
- Master初始化
- Worker自动加入
- Calico CNI
- MetalLB
- CoreDNS
- kube-proxy
- Metrics Server
- StorageClass准备
- RBAC基础配置
支持:
Ubuntu 22.04
Ubuntu 24.04
Kubernetes:
v1.30+
v1.31+
Runtime:
containerd 2.x
15.10.1 Kubernetes目录
创建:
roles/kubernetes/
├── defaults/
│ └── main.yml
│
├── tasks/
│ ├── main.yml
│ ├── repo.yml
│ ├── containerd.yml
│ ├── install.yml
│ ├── master.yml
│ ├── worker.yml
│ └── addons.yml
│
├── templates/
│ ├── containerd-config.toml.j2
│ └── kubeadm-config.yaml.j2
│
├── handlers/
│ └── main.yml
│
└── files/
15.10.2 Kubernetes变量
文件:
roles/kubernetes/defaults/main.yml
---
kubernetes_version: "1.31.0"
kubernetes_packages_version:
"1.31.0-1.1"
pod_network_cidr:
192.168.0.0/16
service_cidr:
10.96.0.0/12
container_runtime:
containerd
kubernetes_control_plane_endpoint:
k8s-api.company.com:6443
calico_version:
v3.29.1
metallb_version:
v0.14.8
kube_user:
root
15.10.3 Kubernetes Playbook
文件:
playbooks/kubernetes.yml
---
- name:
Install Kubernetes
hosts:
kubernetes_master:kubernetes_worker
become:
true
roles:
- kubernetes
- name:
Init Kubernetes Master
hosts:
kubernetes_master[0]
become:
true
roles:
- role:
kubernetes
tasks_from:
master.yml
- name:
Join Workers
hosts:
kubernetes_worker
become:
true
roles:
- role:
kubernetes
tasks_from:
worker.yml
- name:
Install Kubernetes addons
hosts:
kubernetes_master[0]
become:
true
roles:
- role:
kubernetes
tasks_from:
addons.yml
15.10.4 安装Kubernetes仓库
文件:
roles/kubernetes/tasks/repo.yml
---
- name:
install dependencies
apt:
name:
- apt-transport-https
- ca-certificates
- curl
- gpg
state:
present
- name:
add kubernetes key
shell:
cmd:
|
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key |
gpg --dearmor -o /etc/apt/keyrings/kubernetes.gpg
- name:
add kubernetes repo
apt_repository:
repo:
deb [signed-by=/etc/apt/keyrings/kubernetes.gpg]
https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /
state:
present
15.10.5 安装kubeadm
文件:
roles/kubernetes/tasks/install.yml
---
- name:
install kubernetes packages
apt:
name:
- kubelet
- kubeadm
- kubectl
state:
present
- name:
hold kubernetes packages
dpkg_selections:
name:
"{{ item }}"
selection:
hold
loop:
- kubelet
- kubeadm
- kubectl
- name:
enable kubelet
systemd:
name:
kubelet
enabled:
yes
15.10.6 主任务入口
文件:
roles/kubernetes/tasks/main.yml
---
- import_tasks:
repo.yml
- import_tasks:
containerd.yml
- import_tasks:
install.yml
15.10.7 containerd配置
文件:
roles/kubernetes/tasks/containerd.yml
---
- name:
install containerd
apt:
name:
containerd
state:
present
- name:
create containerd config
shell:
cmd:
|
containerd config default >
/etc/containerd/config.toml
- name:
enable systemd cgroup
replace:
path:
/etc/containerd/config.toml
regexp:
'SystemdCgroup = false'
replace:
'SystemdCgroup = true'
- name:
restart containerd
systemd:
name:
containerd
state:
restarted
enabled:
yes
15.10.8 系统参数优化
新增:
roles/kubernetes/tasks/sysctl.yml
---
- name:
load kernel modules
modprobe:
name:
"{{ item }}"
state:
present
loop:
- overlay
- br_netfilter
- name:
kubernetes sysctl
copy:
dest:
/etc/sysctl.d/kubernetes.conf
content:
|
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
- name:
reload sysctl
command:
sysctl --system
然后main加入:
- import_tasks:
sysctl.yml
15.10.9 Master初始化
文件:
roles/kubernetes/tasks/master.yml
---
- name:
check cluster
stat:
path:
/etc/kubernetes/admin.conf
register:
kube_exist
- name:
kubeadm init
command:
kubeadm init
--control-plane-endpoint={{ kubernetes_control_plane_endpoint }}
--pod-network-cidr={{ pod_network_cidr }}
--service-cidr={{ service_cidr }}
when:
not kube_exist.stat.exists
- name:
create kube config
shell:
|
mkdir -p ~/.kube
cp /etc/kubernetes/admin.conf ~/.kube/config
when:
not kube_exist.stat.exists
15.10.10 Worker Join
文件:
roles/kubernetes/tasks/worker.yml
---
- name:
check node
shell:
kubectl get node {{ inventory_hostname }}
environment:
KUBECONFIG:
/etc/kubernetes/admin.conf
ignore_errors:
yes
- name:
generate join command
command:
kubeadm token create
--print-join-command
delegate_to:
"{{ groups['kubernetes_master'][0] }}"
register:
join_command
- name:
join cluster
command:
"{{ join_command.stdout }}"
when:
join_command.stdout is defined
15.10.11 Calico CNI安装
文件:
roles/kubernetes/tasks/addons.yml
---
- name:
install calico
command:
kubectl apply -f
https://raw.githubusercontent.com/projectcalico/calico/{{ calico_version }}/manifests/calico.yaml
environment:
KUBECONFIG:
/etc/kubernetes/admin.conf
- name:
install metrics server
command:
kubectl apply -f
https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
environment:
KUBECONFIG:
/etc/kubernetes/admin.conf
15.10.12 MetalLB安装
继续 addons.yml:
- name:
install metallb
command:
kubectl apply -f
https://raw.githubusercontent.com/metallb/metallb/{{ metallb_version }}/config/manifests/metallb-native.yaml
environment:
KUBECONFIG:
/etc/kubernetes/admin.conf
15.10.13 MetalLB地址池
目录:
kubernetes/network/
文件:
metallb-pool.yaml
apiVersion:
metallb.io/v1beta1
kind:
IPAddressPool
metadata:
name:
production
namespace:
metallb-system
spec:
addresses:
- 10.50.10.200-10.50.10.220
部署:
kubectl apply -f metallb-pool.yaml
15.10.14 Kubernetes验证脚本
文件:
scripts/check-k8s.sh
#!/bin/bash
echo "Nodes"
kubectl get nodes
echo "Pods"
kubectl get pods -A
echo "Cluster"
kubectl cluster-info
执行:
bash scripts/check-k8s.sh
15.10.15 部署执行
安装基础:
ansible-playbook playbooks/bootstrap.yml
安装Kubernetes:
ansible-playbook playbooks/kubernetes.yml
部署完成验证
节点
kubectl get nodes
示例:
NAME STATUS
master01 Ready
master02 Ready
master03 Ready
worker01 Ready
worker02 Ready
Pod
kubectl get pods -A
应该包含:
kube-system
calico-system
metallb-system
metrics-server
Part 15.10 完成
已生成:
✅ Kubernetes Role目录
✅ kubeadm安装
✅ containerd配置
✅ kernel优化
✅ Master初始化
✅ Worker Join
✅ Calico CNI
✅ MetalLB
✅ Metrics Server
✅ HA Endpoint设计
✅ Inventory关联
✅ 自动部署Playbook