1.确认系统上已经有了2.7版本python
# 作者所用的系统环境:
CentOS Linux release 7.6.1810 (Core)
Linux version 3.10.0-957.12.2.el7.x86_64
#一般CentOS系统上都会自带2.7版本python
python -V
资源包下载地址:
https://download.csdn.net/download/hehj369986957/12706752
需要使用Root用户上传到离线服务器的自定义目录
ps:本项目中使用到了K8s部署的开源ansible剧本项目easzlab/kubeasz。该项目只包含了ansible剧本以及K8S和docker的离线包,其余离线包均由作者自行整理。
#有的操作系统是有pip的,而有的系统没有,可以看看找不到找得到pip命令
#解压pip压缩包
tar zvxf pip-20.1.1.tar.gz
#切换到解压后的文件夹
cd pip-20.1.1
#安装pip
python setup.py install
#解压
tar zvxf ipython-0.10.tar.gz
#切换到解压后的文件夹
cd ipython-0.10
#安装
python setup.py install
#安装所有whl
pip install *.whl
#解压每个压缩包并安装
tar zvxf Cheetah-2.4.4.tar.gz
cd Cheetah-2.4.4
python setup.py install
tar zvxf ipaddr-2.2.0.tar.gz
cd ipaddr-2.2.0
python setup.py install
tar zvxf MarkupSafe-1.1.1.tar.gz
cd MarkupSafe-1.1.1
python setup.py install
tar zvxf oauth-1.0.1.tar.gz
cd oauth-1.0.1
python setup.py install
tar zvxf prettytable-0.7.2.tar.gz
cd prettytable-0.7.2
python setup.py install
tar zvxf PyYAML-5.1.1.tar.gz
cd PyYAML-5.1.1
python setup.py install
tar zvxf scandir-1.10.0.tar.gz
cd scandir-1.10.0
python setup.py install
#安装完以后需要使用netaddr命令验证下
[root@iZ2zeapu1bn3mei5byvasrZ ~]# netaddr
netaddr shell 0.7.20 - an interactive shell for the netaddr library
In [1]:
# 显示如上则安装成功,输入exit()退出即可
#解压安装包
tar zxf ansible-2.4-rpms.el7.tar.gz
#进入解压后的目录
cd ansible-2.4-rpms.el7
#安装ansible依赖内容
rpm -ivh PyYAML*rpm libyaml*rpm python-babel*rpm python-backports*rpm python-backports-ssl_match_hostname*rpm python-cffi*rpm python-enum34*rpm python-httplib2*rpm python-idna*rpm python-ipaddress*rpm python-jinja2*rpm python-markupsafe*rpm python-paramiko*rpm python-passlib*rpm python-ply*rpm python-pycparser*rpm python-setuptools*rpm python-six*rpm python2-cryptography*rpm python2-jmespath*rpm python2-pyasn1*rpm sshpass*rpm --nodeps --force
#安装ansible
rpm -ivh ansible-2.4.2.0-2.el7.noarch.rpm
#测试是否安装成功
ansible --version
#该文件夹中包含了k8s和docker离线包。
cp -r etc/ansible /etc/
在这里作者所部署的K8S环境为单主节点集群,如果需要部署高可用集群将配置文件中的[kube-master]配置多个按照本文操作顺序正常运行即可。
# 将etc中的hosts复制到配置文件目录:
cd /etc/ansible && cp example/hosts.multi-node hosts
# 修改文件内容
vim /etc/ansible/hosts
#[必须配置]etcd集群主机的ip+端口,为单数个
[etcd]
192.168.1.1:19222 NODE_NAME=etcd1
# [必须配置]主节点的IP和端口
[kube-master]
192.168.1.1:19222
# [必须配置]工作节点的IP和端口
[kube-node]
192.168.1.3:19222
192.168.1.4:19222
192.168.1.5:19222
# [可选项] 私人镜像仓库的配置
# NEW_INSTALL yes为安装新的harbor服务器,false 为使用另外的harbor服务器,
[harbor]
#192.168.1.8 HARBOR_DOMAIN="harbor.yourdomain.com" NEW_INSTALL=no SELF_SIGNED_CERT=yes
# [可选项] 从外部访问k8s的负载平衡配置
[ex-lb]
#192.168.1.6 LB_ROLE=backup EX_APISERVER_VIP=192.168.1.250 EX_APISERVER_PORT=8443
#192.168.1.7 LB_ROLE=master EX_APISERVER_VIP=192.168.1.250 EX_APISERVER_PORT=8443
# [可选项] 集群的ntp服务器
[chrony]
#192.168.1.1
[all:vars]
# --------- Main Variables ---------------
# 支持集群运行的容器:docker, containerd
CONTAINER_RUNTIME="docker"
# 支持的网络插件: calico, flannel, kube-router, cilium, kube-ovn
CLUSTER_NETWORK="calico"
#kube-proxy的服务代理模式: 'iptables' or 'ipvs'
PROXY_MODE="ipvs"
# K8S服务CIDR,不与节点(主机)联网重叠
SERVICE_CIDR="10.68.0.0/16"
# 集群CIDR(Pod CIDR),不与节点(主机)网络重叠
CLUSTER_CIDR="172.20.0.0/16"
# 节点端口范围
NODE_PORT_RANGE="20000-40000"
# 集群的DNS域
CLUSTER_DNS_DOMAIN="cluster.local."
# -------- 其他变量,建议不修改 ---
# 二进制目录
bin_dir="/opt/kube/bin"
# CA和其他组件cert/key目录
ca_dir="/etc/kubernetes/ssl"
# 部署目录(kubeasz workspace)
base_dir="/etc/ansible"
将ansible控制节点的公钥放到所有出现在ansible配置文件的的节点的/root/.ssh/authorized_keys文件内
# 查看公钥
cat .ssh/id_rsa.pub
# 如果没有的话生成公钥,输入完命令一直回车即可
ssh-keygen -t rsa
# 复制公钥粘贴到authorized_keys文件
vim /root/.ssh/authorized_keys
# 运行ansible all -m ping测试是否添加成功
ansible all -m ping
192.168.1.1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.4 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.5 | SUCCESS => {
"changed": false,
"ping": "pong"
}
# 显示如上结果为ansible成功
#配置easzup的版本号
export release=2.2.1
# 离线安装K8s/docker,检查本地文件,正常会提示所有文件已经下载完成
./easzup -D
# 这里笔者使用的k8s 版本 v1.18.2,docker 19.03.8
# 如需要其他版本可复制easzup到可联网机器上执行以下命令
#./easzup -D -d 19.03.5 -k v1.18.2
# 下载离线系统软件包
#./easzup -P
#下载完成后复制/etc/ansible的文件到离线机器的/etc/ansible路径即可继续以下操作。
# 启动 kubeasz 容器
./easzup -S
# 设置参数允许离线安装
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/ansible/roles/chrony/defaults/main.yml
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/ansible/roles/ex-lb/defaults/main.yml
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/ansible/roles/kube-node/defaults/main.yml
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/ansible/roles/prepare/defaults/main.yml
#切换到/etc/ansible路径下(也可以不切,注意命令路径即可)
cd /etc/ansible
#执行angsible剧本:
ansible-playbook 01.prepare.yml
ansible-playbook 02.etcd.yml
ansible-playbook 03.docker.yml
ansible-playbook 04.kube-master.yml
ansible-playbook 05.kube-node.yml
ansible-playbook 06.network.yml
ansible-playbook 07.cluster-addon.yml
步骤01.prepare.yml主要完成 创建证书和环境准备
步骤02.etcd.yml主要完成 安装etcd集群
步骤03.docker.yml主要完成 安装docker服务
步骤 04.kube-master.yml主要完成 安装kube-master节点
步骤 05.kube-node.yml主要完成 安装kube-node节点
步骤 06.network.yml主要完成 安装网络组件
步骤 07.cluster-addon.yml主要完成 安装集群主要插件
# 验证集群版本
kubectl version
# 验证节点就绪 (Ready) 状态
kubectl get node
# 验证集群pod状态,默认已安装网络插件、coredns、metrics-server等
kubectl get pod -A
# 验证集群服务状态
kubectl get svc -A