当前位置: 首页 > news >正文

Kubenetes-基于kubespray 部署集群

Kubenetes-基于kubespray 部署集群

kubespray 是一个部署生产级别的kubernetes集群的github 开源项目,基于ansible-playbook实现自动化部署。github地址: https://github.com/kubernetes-sigs/kubespray,具体支持的比如OS以及插件等功能详见github。
在这里插入图片描述

角色IP系统/内核备注
部署机10.18.1.115CentOS 7.4/Kernel 3.10.0能翻墙
master/node10.18.217.135/172.22.4.4Ubuntu 22.04 LTS/Kernel 5.15.0能翻墙
master/node10.18.217.124/172.22.3.50Ubuntu 22.04 LTS/Kernel 5.15.0能翻墙
master/node10.18.217.139/172.22.2.55Ubuntu 22.04 LTS/Kernel 5.15.0能翻墙

PS:上面主机全部都能翻墙国外下载docker镜像,如果无法翻墙则需要考虑离线的方式

一、部署机上准备环境
1. SSH root 免密登录

(忽略)

#mkdir /root/inventory/sample
#docker run -it --mount type=bind,source="$(pwd)"/inventory/sample,dst=/inventory \
  --mount type=bind,source="${HOME}"/.ssh/id_rsa,dst=/root/.ssh/id_rsa \
  quay.io/kubespray/kubespray:v2.27.0 bash
#cp -rf inventory/sample /inventory/my-cluster

2. 配置主机清单
#vim /inventory/my-cluster/inventory.ini 

#这里kubestrap 将ssh ip和cluster 通信的ip 在inventory里面区分开了,这块设计的挺好

# This inventory describe a HA typology with stacked etcd (== same nodes as control plane)
# and 3 worker nodes
# See https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html
# for tips on building your # inventory

# Configure 'ip' variable to bind kubernetes services on a different ip than the default iface
# We should set etcd_member_name for etcd cluster. The node that are not etcd members do not need to set the value,
# or can set the empty string value.
[kube_control_plane]
# node1 ansible_host=95.54.0.12  # ip=10.3.0.1 etcd_member_name=etcd1
# node2 ansible_host=95.54.0.13  # ip=10.3.0.2 etcd_member_name=etcd2
# node3 ansible_host=95.54.0.14  # ip=10.3.0.3 etcd_member_name=etcd3
node1 ansible_host=10.18.217.135 ip=172.22.4.4 etcd_member_name=etcd1
node2 ansible_host=10.18.217.124 ip=172.22.3.50 etcd_member_name=etcd2
node3 ansible_host=10.18.217.139 ip=172.22.2.55 etcd_member_name=etcd3


[etcd:children]
kube_control_plane

[kube_node]
# node4 ansible_host=95.54.0.15  # ip=10.3.0.4
# node5 ansible_host=95.54.0.16  # ip=10.3.0.5
# node6 ansible_host=95.54.0.17  # ip=10.3.0.6
node1 ansible_host=10.18.217.135 ip=172.22.4.4 
node2 ansible_host=10.18.217.124 ip=172.22.3.50 
node3 ansible_host=10.18.217.139 ip=172.22.2.55                                                      
3. 配置集群信息
#vim /inventory/my-cluster/group_vars/k8s_cluster/k8s-cluster.yml

这里使用了cilium cni插件,同时pod以及service subnet有需要可以更改

# Choose network plugin (cilium, calico, kube-ovn, weave or flannel. Use cni for generic cni plugin)
# Can also be set to 'cloud', which lets the cloud provider setup appropriate routing
#kube_network_plugin: calico
kube_network_plugin: cilium

# Setting multi_networking to true will install Multus: https://github.com/k8snetworkplumbingwg/multus-cni
kube_network_plugin_multus: false

# Kubernetes internal network for services, unused block of space.
kube_service_addresses: 10.233.0.0/18

# internal network. When used, it will assign IP
# addresses from this range to individual pods.
# This network must be unused in your network infrastructure!
kube_pods_subnet: 10.233.64.0/18
4. 部署
#ansible-playbook -i /inventory/my-cluster/inventory.ini --private-key /root/.ssh/id_rsa cluster.yml

部署完成,在线部署还是很顺利的~

# kubectl get nodes
NAME    STATUS   ROLES           AGE     VERSION
node1   Ready    control-plane   3m25s   v1.31.4
node2   Ready    control-plane   3m9s    v1.31.4
node3   Ready    control-plane   3m5s    v1.31.4
5. 启动pod测试
# kubectl apply -f https://k8s.io/examples/application/deployment.yaml
## kubectl get pods -o wide
NAME                               READY   STATUS    RESTARTS   AGE   IP              NODE    NOMINATED NODE   READINESS GATES
nginx-deployment-d556bf558-24w64   1/1     Running   0          33s   10.233.64.149   node1   <none>           <none>
nginx-deployment-d556bf558-hc6fc   1/1     Running   0          33s   10.233.66.106   node3   <none>           <none>

相关文章:

  • 鸿蒙开发-编译器使用
  • 如何 在 Cesium 中选取特定经纬度区域,特定视角 ,渲染成图片
  • 什么叫“架构”
  • 交通运输部4项网络与数据安全标准发布
  • Bash脚本编写基础指南
  • 对接印度尼西亚股票数据源API
  • Linux ELF文件格式
  • 【笔记ing】AI大模型-03深度学习基础理论
  • 深入剖析C++中 String 类的模拟实现
  • Java实现快速排序算法
  • Java 数据库访问工具 dbVisitor 的技术解析与同类工具比较
  • Kimi-VL 解读:高效 MoE 视觉语言模型VLM,兼顾长上下文与高分辨率
  • MySQL——学习InnoDB(1)
  • LabVIEW配电器自动测试系统
  • Xmind 2025 中文思维导图
  • MySQL表的使用(4)
  • 【3GPP核心网】【5G】精讲5G系统的策略和计费控制框架
  • 【口腔粘膜鳞状细胞癌】文献阅读
  • 《AI大模型应知应会100篇》第17篇:大模型的偏见与公平性问题
  • 多卡集群 - Docker命令来启动一个容器的实例
  • 聚焦各领域顶尖工匠,《上海工匠》第十季于五一播出
  • 张炜琳已任三明市委常委、宣传部部长
  • 美国参议院投票通过戴维·珀杜出任美国驻华大使
  • 发出“美利坚名存实亡”呼号的卡尼,将带领加拿大走向何方?
  • 美航母一战机坠海,美媒:为躲避胡塞武装攻击,损失超六千万美元
  • 保利发展去年净利润约50亿元,在手现金1342亿元