- 准备工作
- 三台节点都安装了containerd 详情见这里
- 节点三台
节点数 >=3台 CPU >=2 Memory >=2G
我这里本地有三台虚拟机ip分别为
192.168.88.130192.168.88.131
192.168.88.132
- 系统设置所有节点都使用root用户执行
1.修改主机名 **以下操作三个节点都需要执行** node-1 192.168.88.130 node-2 192.168.88.131 node-3 192.168.88.132 # 查看主机名 $ hostname # 修改主机名 $ hostnamectl set-hostname <your_hostname> 2.关闭防火墙 # 关闭selinux $ setenforce 0 $ sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config # 关闭防火墙 $ systemctl stop firewalld && systemctl disable firewalld # 设置iptables规则 $ iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT # 关闭swap $ swapoff -a && free –h # 关闭dnsmasq(否则可能导致容器无法解析域名) $ service dnsmasq stop && systemctl disable dnsmasq 3.k8s参数设置 # 制作配置文件 $ cat > /etc/sysctl.d/kubernetes.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_nonlocal_bind = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0 vm.overcommit_memory = 1 EOF # 生效文件 $ sysctl -p /etc/sysctl.d/kubernetes.conf 4.移除docker 软件包 (可选操作) $ yum remove -y docker* $ rm -f /etc/docker/daemon.json
- 使用kubespray部署集群
-
- 首先配置密钥
# 1. 生成keygen(执行ssh-keygen,一路回车下去) $ ssh-keygen # 2. 查看并复制生成的pubkey $ cat /root/.ssh/id_rsa.pub # 3. 分别登陆到每个节点上,将pubkey写入/root/.ssh/authorized_keys $ mkdir -p /root/.ssh $ echo "<上一步骤复制的pubkey>" >> /root/.ssh/authorized_keys
- 依赖软件下载安装(这个操作只需要在操作节点上面执行)
首先cd 到kubespray-2.15.0目录以下操作节点上的操作都在此目录上执行
# 安装基础软件 $ yum install -y epel-release python36 python36-pip git # 下载kubespray源码 $ wget https://github.com/kubernetes-sigs/kubespray/archive/v2.15.0.tar.gz # 解压缩 $ tar -xvf v2.15.0.tar.gz && cd kubespray-2.15.0 # 安装requirements $ cat requirements.txt $ pip3.6 install -r requirements.txt ## 如果install遇到问题可以先尝试升级pip ## $ pip3.6 install --upgrade pip
- 生成配置(此操作只需要在操作节点上执行)
# copy一份demo配置,准备自定义 $ cp -rpf inventory/sample inventory/mycluster # 使用真实的hostname(否则会自动把你的hostname改成node1/node2...这种哦) $ export USE_REAL_HOSTNAME=true # 指定配置文件位置 $ export CONFIG_FILE=inventory/mycluster/hosts.yaml # 定义ip列表(你的服务器内网ip地址列表,3台及以上,前两台默认为master节点) $ declare -a IPS=(192.168.88.130 192.168.88.131 192.168.88.132) # 生成配置文件 $ python3 contrib/inventory_builder/inventory.py ${IPS[@]}
- 一些个性化配置
# 定制化配置文件 # 1. 节点组织配置(这里可以调整每个节点的角色) $ vi inventory/mycluster/hosts.yaml # 2. containerd配置(教程使用containerd作为容器引擎) $ vi inventory/mycluster/group_vars/all/containerd.yml # 3. 全局配置(可以在这配置http(s)代理实现外网访问) $ vi inventory/mycluster/group_vars/all/all.yml 这里如果需要用到http代理的话可以通过proxy关键字来使用http代理(后面操作FQ比较方便很多资源都是在国外的) # 4. k8s集群配置(包括设置容器运行时、svc网段、pod网段等) $ vi inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml 这里做了如下操作的修改 kube_service_addresses: 10.233.0.0/18 -> 10.200.0.0/16 kube_pods_subnet: 10.233.64.0/18 -> 100.233.0.0/16 container_manager: docker -> containerd # 5. 修改etcd部署类型为host(默认是docker)etcd_deployment_type: host $ vi ./inventory/mycluster/group_vars/etcd.yml # 6. 附加组件(ingress、dashboard等) ingress_nginx_enabled: true dashboard_enabled: true $ vi ./inventory/mycluster/group_vars/k8s-cluster/addons.yml
- 首先配置密钥
- 开始一键部署
- 使用以下命令进行部署
# -vvvv会打印最详细的日志信息,建议开启 $ ansible-playbook -i inventory/mycluster/hosts.yaml -b cluster.yml -vvvv
-
下载镜像(可选)三台都要执行
为了减少“一键部署”的等待时间,可以在部署的同时,预先下载一些镜像。(首先要检查每个节点是否已经安装了crictl命令)
$ curl https://gitee.com/pa/pub-doc/raw/master/kubespray-v2.15.0-images.sh|bash -x
- 使用以下命令进行部署
- 遇到的一些问题以及解决方案
-
-
- 最后一步一键安装过程中报如下超时
解决方案
#进入到这个目录kubespray-2.15.0 cd kubespray-2.15.0 vi ansible.cfg 在[default]节点下添加 remote_user=root
- 最后一步一键安装过程中报如下超时
-