Kubespray 是一个开源的 Kubernetes 部署、配置和管理工具。它的核心目标是提供一种高可用、生产就绪的 Kubernetes 集群部署方案。您可以把它理解为一个强大的、自动化的“Kubernetes 安装器”。
其实就是使用ansible的这么一种方式,以前可以用ansible+kubeadm,现在这CNCF直接提供了一种使用ansible来部署高可用的方法
支持的系统版本
kubernetes-sigs/kubespray: Deploy a Production Ready Kubernetes Cluster
其中2.20版本支持k8s v1.24.6的安装,并且支持Centos7
每个版本在对应分支中都可以查看其支持的版本
加速相关
如果你试过用kubeadm部署k8s,那就一定知道有好几个镜像是需要从gcr上下载的,也就是需要魔法下载的。
就算配置了阿里云的谷歌镜像仓库,也没法下载,所以在国内使用ansible安装k8s,最大的一个挑战就是加速问题,如果没有代理,将寸步难行
另外一种方法,是手动配置registry,自己拉好镜像之后放到私有仓库中,随后配置ansible的变量

1 2 3 4 5 6 7 8 9 10
| Centos8.5.2111 Kubespray 2.23.0 k8s 1.27.5 10.163.2.100 ansible (CentOS9-Stream) 10.163.2.106 master1 10.163.2.102 master2 10.163.2.101 master3 10.163.2.109 worker1 10.163.2.108 worker2 10.163.2.131 worker3
|
配置ansible节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| hostnamectl set-hostname ansible && bash yum -y install python3-pip sshpass
git clone -b release-2.23 https://github.com/kubernetes-sigs/kubespray tar -xf kubespray-2.23.0.tar.gz cd kubespray-2.23.0/
vim inventory/sample/inventory.ini [all] master1 ansible_host=10.163.2.106 master2 ansible_host=10.163.2.102 master3 ansible_host=10.163.2.101 worker1 ansible_host=10.163.2.109 worker2 ansible_host=10.163.2.108 worker3 ansible_host=10.163.2.131
[kube-master] master1 master2 master3
[etcd] master1 master2 master3
[kube-node] master1 master2 master3 worker1 worker2 worker3
[calico_rr]
[k8s_cluster:children] kube-master kube-node calico_rr
pip3 install -r requirements.txt \ -i https://mirrors.aliyun.com/pypi/simple/
|
ansible变量-k8s相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| inventory/sample/group_vars/k8s_cluster/k8s-cluster.yml
kube_version: v1.27.5
cluster_name: cluster.local use_kubernetes_node_name_prefix: false use_kubernetes_node_role_prefix: true
kube_network_plugin: calico kube_service_addresses: 10.233.0.0/18 kube_pods_subnet: 10.233.64.0/18 kube_proxy_mode: ipvs
container_manager: containerd 1.24起,如果选docker,kubespray会自动部署cri-docker
默认使用systemd作为资源隔离驱动
enable_nodelocaldns: true
ingress_nginx_enabled: false
metrics_server_enabled: true
enable_network_policy: true
cert_validity_period: 3650
kubelet_rotate_server_certificates: true kubelet_rotate_certificates: true
|
ansible变量-calico相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| inventory/sample/group_vars/k8s_cluster/k8s-net-calico.yml
默认使用vxlan模式
calico_pool_cidr: "10.233.64.0/18"
|
CrossSubnet模式(推荐)
1 2 3 4 5 6 7 8
| Calico with BGP backend + IPIP mode CrossSubnet 即通过BGP路由,IPIP封装的形式 如果是跨子网则用IPIP封装,如果二层则不封装
calico_network_backend: "bird" calico_ipip_mode: "CrossSubnet" calico_vxlan_mode: "Never" calico_nat_outgoing: true
|
vxlan网络(默认)
但效率低,不推荐,起码打开IPIP
1 2 3 4
| calico_network_backend: "vxlan" calico_ipip_mode: "Never" calico_vxlan_mode: "Always" calico_nat_outgoing: true
|
加速相关ansible变量与部署
如果你试过用kubeadm部署k8s,那就一定知道有好几个镜像是需要从gcr上下载的,也就是需要魔法下载的。
就算配置了阿里云的谷歌镜像仓库,也没法下载,所以在国内使用ansible安装k8s,最大的一个挑战就是加速问题,如果没有代理,将寸步难行
另外一种方法,是手动配置registry,自己拉好镜像之后放到私有仓库中,随后配置ansible的变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| vim inventory/sample/group_vars/all/all.yml http_proxy: "http://192.168.1.7:7897" https_proxy: "http://192.168.1.7:7897"
vim inventory/sample/group_vars/all/all.yml ansible_become_pass: "1"
vim inventory/sample/group_vars/all/docker.yml docker_registry_mirrors: - https://registry.docker-cn.com - https://mirror.aliyuncs.com
vim inventory/sample/group_vars/k8s_cluster/k8s-cluster.yml 添加变量
extra_playbooks/roles/kubernetes/preinstall/tasks/0040-verify-settings.yml 这个剧本的第一个task
ssh-keygen -N '' -f ~/.ssh/id_rsa
ansible -i inventory/sample/inventory.ini -m shell -a "systemctl disable firewalld.service --now" all
ansible-playbook -i inventory/sample/inventory.ini cluster.yml -v -u root --private-key=~/.ssh/id_rsa
部署完成 PLAY RECAP **************************************************************************************** localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 master1 : ok=758 changed=72 unreachable=0 failed=0 skipped=1288 rescued=0 ignored=7 master2 : ok=653 changed=60 unreachable=0 failed=0 skipped=1133 rescued=0 ignored=2 master3 : ok=655 changed=61 unreachable=0 failed=0 skipped=1131 rescued=0 ignored=2 worker1 : ok=508 changed=34 unreachable=0 failed=0 skipped=771 rescued=0 ignored=1 worker2 : ok=508 changed=34 unreachable=0 failed=0 skipped=771 rescued=0 ignored=1 worker3 : ok=508 changed=34 unreachable=0 failed=0 skipped=771 rescued=0 ignored=1
kubectl get nodes NAME STATUS ROLES AGE VERSION master1 Ready control-plane 17h v1.27.5 master2 Ready control-plane 17h v1.27.5 master3 Ready control-plane 17h v1.27.5 worker1 Ready <none> 17h v1.27.5 worker2 Ready <none> 17h v1.27.5 worker3 Ready <none> 17h v1.27.5
|