介绍
通过ansible脚本+shell实现自动化部署k8s基础集群(v1.25.0)
部署结构
1. 通过二进制部署包镜像安装k8s集群、目录etcd节点只支持1-3个节点、最多三个etcd节点
2. 因k8s版本相对较新、需要升级内核来支持后台程序、当前版本只支持Cento7,内核版本(5.19.4-1.el7.elrepo.x86_64)
3. 采用k8s二进制安装,通过system进行管理,采用本地yum仓库,版本是:1.25.0
4. 部署节点安装docker的yum源是基于Centos7.5/7.6,版本是:19.03.14
5. 部署节点安装ansible时,使用离线安装,版本:2.9.27
操作步骤
环境准备
作用 | IP地址 | 操作系统 | 配置 |
---|---|---|---|
k8s-node01 | 192.168.59.143 | CentOS7 | 最低配置2C2G |
k8s-master01 | 192.168.59.142 | CentOS7 | 最低配置2C2G |
ansible | 192.168.59.144 | CentOS7 | 最低配置1C1G |
- node节点可以填写多个,根据实际情况确认,但是不能超出单master节点的限制
- master节点至少是三个少一个都不是高可用版本
- 高可用部署时需要为keepalived提前确认好vip的信息
备注
- 单独找一台机器用于部署ansible服务,升级内核时需要重启服务器
- 部署节点部署重启,否则会导致执行报错
- 但是需要确保机器资源充足,且相关的端口不会冲突(38081【yum】、38082【registry】)
- 相关的网络关系需要提前确认
关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
echo "关闭swap !"
配置静态IP 参考下面命令
echo "配置静态IP"
cat >> /etc/sysconfig/network-scripts/ifcfg-ens33 << EOF
IPADDR=192.168.59.143
NETMASK=255.255.255.0
GATEWAY=192.168.59.2
DNS1=8.8.8.8
EOF
sed -i 's/dhcp/static/' /etc/sysconfig/network-scripts/ifcfg-ens33
cat /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
配置部署Ansible 免密登录到其他所有机器
ssh-keygen
ssh-copy-id root@192.168.59.142
ssh-copy-id root@192.168.59.143
解压部署包
#上传部署包(xshell)
yum -y install lrzsz
rz install_k8s_binary_20220905.tar.gz
#解压
tar -xvf install_k8s_binary_20220905.tar.gz -C /opt
修改host文件
#部署机器,初始脚本、安装包镜像
[deploy_server]
192.168.59.144 ansible_user="root" ansible_ssh_pass="1234567" ansible_ssh_port=22 hostname="Ansible"
#apiserver、controller、scheduler
[kubernetes_master]
192.168.59.142 ansible_user="root" ansible_ssh_pass="1234567" ansible_ssh_port=22 hostname="k8s-master01"
#kubelet、proxy
[kubernetes_node]
192.168.59.143 ansible_user="root" ansible_ssh_pass="1234567" ansible_ssh_port=22 hostname="k8s-node01"
#单节点或者三节点其他的暂时不支持
[etcd]
192.168.59.142 ansible_user="root" ansible_ssh_pass="1234567" ansible_ssh_port=22 ETCD_NAME="k8s-master01"
#不填写,则不安装镜像仓库
[docker_repositry]
#192.168.1.136 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-node01"
#双节点
[haproxy_keepalived]
#192.168.1.12 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-haproxy"
#192.168.1.12 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-haproxy"
[nodes:children]
kubernetes_master
kubernetes_node
haproxy_keepalived
etcd
[all:vars]
#interface="ens33" #部署机器的网卡名称
#高可用
master_vip="192.168.59.142"
#布尔值 true or false
install_kubelet_enable="true" #master节点是否安装kubelet、kube-proxy
network_enable="false" #联网状态下,加载网络yum仓库
Basic_enable="true" #安装基础软件包
clear_cert_data="false" #清理上一次生成的证书及清理cfssl的安装包
#k8s 组件服务
dashboard_enable="false" #安装dashboard服务
prometheus_enable="false" #安装Prometheus服务
ingress_enable="false" #安装ingress服务
初始化环境
[root@registry]# cd /opt/install_k8s_binary
[root@registry install_k8s_binary]# sh Run.sh
1) 初始化环境(ansible))
2) 安装k8s集群(v1.25.0)(二进制)
----------------------------------------------------------------------------
请输入对应的数字编号:1
请输入部署机的地址(192.168.59.144):
#部署机的地址,通过脚本获取的地址,确认无误后直接回车即可
执行结果
安装docker服务安装ansible服务,修改ansible.cfg配置准备离线yum仓库挂载点是:部署包的下的yum目录准备离线registry仓库,相关挂载点是: /var/images/
安装k8s集群
登录部署机器上执行Run.sh脚本
执行结果如下:
登录master的节点
因本地虚拟机限制,目前使用单节点测试部署,一主一从的也测试可行高可用版本尚未测试
部署包下载
链接: https://pan.baidu.com/s/1-_yDvPnE7Jt167S_9IzWzw?pwd=egwf
提取码: egwf
- 目前版本,后续会更新
- 初始化环境时,如果启动报错,出现…iptable…的字段这可以重新执行一次初始化即可正常启动
- 目前containerd的镜像仓库配置的是初始化的地址,如果需要使用k8s集群,则需要手动修改containerd的配置文件<自行百度添加>(后续优化
部署验证模板案例
K8S 使用deployment 部署nginx服务
# cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: ngx-service
labels:
app: nginx
spec:
type: NodePort
selector:
app: nginx
ports:
- port: 80
targetPort: 80
nodePort: 32500
创建deploy
# kubectl apply -f deploy.yaml
deployment.apps/nginx-deploy created
service/ngx-service created
查看pod及svc服务
[root@k8s-master01 home]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/my-nginx-cd55c47f5-5z7pr 1/1 Running 0 2m20s
pod/my-nginx-cd55c47f5-dw8qk 1/1 Running 0 2m20s
pod/my-nginx-cd55c47f5-qqrjl 1/1 Running 0 2m20s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 54m
service/ngx-service NodePort 10.106.47.18 <none> 80:32500/TCP 2m20s
[root@k8s-master01 home]#
浏览器访问地址:ip:32500,正常即可.
总结
上述则是当前部署中可运行正常的服务执行Run.sh 输入init,则可以调试脚本,对应的启动文件,修改,则可以进行调试(playbook/tools/deploy_test.yaml)