1、下载离线包
找一台能够联网的机器下载所需安装包
下载工具脚本ezdown,举例使用kubeasz版本3.6.0
export release=3.6.0
wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
chmod +x ./ezdown
下载kubeasz代码、二进制、默认容器镜像
./ezdown -D
如果需要更多组件,请下载额外容器镜像(cilium,flannel,prometheus等)
./ezdown -X flannel
./ezdown -X prometheus
...
下载离线系统包 (适用于无法使用yum/apt仓库情形)
./ezdown -P centos_7(可选)
脚本运行成功后,所有文件(kubeasz代码、二次制作、离线镜像)均已整理好放入目录/etc/kubeasz
/etc/kubeasz 包含 kubeasz 版本为 ${release} 的发布代码 /etc/kubeasz/bin 包含 k8s/etcd/docker/cni 等二进制文件 /etc/kubeasz/down 包含集群安装时需要的离线容器镜像 /etc/kubeasz/down/packages 包含集群安装时需要的系统基础软件
2、离线服务器部署
##关闭防火墙 systemctl stop firewalld ##禁止防火墙开机启动 systemctl disable firewalld ##永久关闭selinux 注:重启机器后,selinux配置才能永久生效 sed -i 's/enforcing/disabled/' /etc/selinux/config ##临时关闭selinux 执行getenforce 显示Disabled说明selinux已经关闭 setenforce 0 ##永久关闭交换分区swap 注:重启机器后,才能永久生效 sed -ri 's/.*swap.*/#&/' /etc/fstab ##临时关闭交换分区swap swapoff -a
上述下载完成后,把/etc/kubeasz整个目录复制到目标离线服务器相同目录,然后在离线服务器先部署docker,不然启动kubeasz 容器报错

离线安装docker:https://www.cnblogs.com/sxFu/p/14142501.html
设置参数允许离线安装系统软件包
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/kubeasz/example/config.yml
在/etc/kubeasz目录下执行:
检查所需安装包是否已经完毕
cd /etc/kubeasz
./ezdown -D
启动 kubeasz 容器
./ezdown -S
#进入容器
docker exec -it kubeasz /bin/bash
# 创建新集群 k8s-01

然后根据提示配置'/etc/kubeasz/clusters/k8s-01/hosts' 和 '/etc/kubeasz/clusters/k8s-01/config.yml':根据节点规划修改hosts 文件和其他集群层面的主要配置选项;其他集群组件等配置项可以在config.yml 文件中修改。
修改hosts文件
其中hosts文件中按规划调整了etcd、kube_master、kube_node三处位置的服务器IP,注意这里只能使用IP,不能使用hostname;另外CONTAINER_RUNTIME应该设置为containerd,CLUSTER_NETWORK设置为calico,其它配置可保持不变。
CONTAINER_RUNTIME="containerd" CLUSTER_NETWORK="calico"
注:config.yml文件中ETCD_DATA_DIR CONTAINERD_STORAGE_DIR KUBELET_ROOT_DIR选项默认存储在/var/lib/目录下,部署时根据实际情况更改目录
配置ssh免密
ssh-copy-id $node1_ip
ssh-copy-id $node2_ip
一键安装(k8s-01可以自定义命名)
docker exec -it kubeasz ezctl setup k8s-01 all
如果执行报错,是因为/etc/kubeasz/clusters/k8s-01/hosts文件中使用的python解释器为ansible_python_interpreter=/usr/bin/python3,而有的机器没有python3,需修改为:
ansible_python_interpreter=/usr/bin/python
fatal: [192.168.71.149]: FAILED! => {"ansible_facts": {}, "changed": false, "failed_modules": {"ansible.legacy.setup": {"failed": true, "module_stderr": "/bin/sh: /usr/bin/python3: No such file or directory\n", "module_stdout": "", "msg": "The module failed to execute correctly, you probably need to set the interpreter.\nSee stdout/stderr for the exact error", "rc": 127}}, "msg": "The following modules failed to execute: ansible.legacy.setup\n"}

再次执行
docker exec -it kubeasz ezctl setup k8s-01 all

如果遇到拉起calico容器时报错

1是因为拉起calico容器耗时较久,解决方案:修改/etc/kubeasz/roles/calico/tasks/main.yml文件中的轮询次数
2是查看系统内核,linux 3.10版本的内核不支持网络插件Calico3.23等版本,需内核版本5.1及以上(此处为centos7 升级内核操作)
uname -a #安装所需软件包 yum install -y perl wget#下载所需内核版本的 RPM 包,更多版本可以从中寻找(http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/) wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.278-1.el7.elrepo.x86_64.rpm wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.278-1.el7.elrepo.x86_64.rpm wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-headers-5.4.278-1.el7.elrepo.x86_64.rpm wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-tools-5.4.278-1.el7.elrepo.x86_64.rpm wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-tools-libs-5.4.278-1.el7.elrepo.x86_64.rpm # 卸载旧版工具(安装kernel-lt-tools会和旧版本的kernel-tools导致冲突,需要卸载旧版本的) yum remove kernel-tools kernel-tools-libs -y#安装下载的 RPM 包 rpm -ivh kernel-lt-tools-libs-5.4.278-1.el7.elrepo.x86_64.rpm rpm -ivh kernel-lt-tools-5.4.278-1.el7.elrepo.x86_64.rpm rpm -ivh kernel-lt-5.4.278-1.el7.elrepo.x86_64.rpm rpm -ivh kernel-lt-devel-5.4.278-1.el7.elrepo.x86_64.rpm #验证安装,可以看到新版本的和旧版本的 rpm -qa | grep kernel kernel-lt-devel-5.4.278-1.el7.elrepo.x86_64 kernel-3.10.0-1160.el7.x86_64 kernel-lt-tools-libs-5.4.278-1.el7.elrepo.x86_64 kernel-lt-tools-5.4.278-1.el7.elrepo.x86_64 kernel-lt-5.4.278-1.el7.elrepo.x86_64 #查看默认启动顺序 awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg 0 : CentOS Linux (5.4.278-1.el7.elrepo.x86_64) 7 (Core) 1 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core) 2 : CentOS Linux (0-rescue-1dab4e7c87a5456480b08e70172d44ac) 7 (Core) #设置默认启动内核顺序 grub2-set-default 0 #重启 reboot #重启后进行检查是否成功切换到新内核 uname -r 5.4.278-1.el7.elrepo.x86_64
清理集群
docker exec -it kubeasz ezctl destroy k8s-01
修改完后继续执行一键部署命令
查看最后结果

查看节点状态,可以看到各节点就绪 (Ready) 状态、角色、运行时间以及版本号
kubectl get nodes

查看组件状态,可以看到scheduler/controller-manager/etcd组件状态为Healthy
kubectl get cs

查看所有pod状态,默认已安装网络插件calico、coredns、metrics-server
kubectl get po --all-namespaces

查看svc状态
kubectl get svc --all-namespaces

登录dashboard界面

从master节点查看token并使用token登陆(这里为了方便,我们可以直接使用admin-user的token)
# 查看含有token的secret [root@master-01 k8s-01]# kubectl get secret -n kube-system NAME TYPE DATA AGE admin-user kubernetes.io/service-account-token 3 18m calico-etcd-secrets Opaque 3 19m dashboard-read-user kubernetes.io/service-account-token 3 18m kubernetes-dashboard-certs Opaque 0 18m kubernetes-dashboard-csrf Opaque 1 18m kubernetes-dashboard-key-holder Opaque 2 18m # 查看admin-user对应的token [root@master-01 k8s-01]# kubectl describe secret -n kube-system admin-user Name: admin-user Namespace: kube-system Labels: <none> Annotations: kubernetes.io/service-account.name: admin-userkubernetes.io/service-account.uid: f6fc7af9-9168-45d5-8dbd-f09cc5adb8a8Type: kubernetes.io/service-account-tokenData ==== ca.crt: 1310 bytes namespace: 11 bytes token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImJFSGVFeTJleWlWVFY0bm1SWF9RMXZPZWxlYi1wbDNXM2ZuSkJ1YUw5RWMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJmNmZjN2FmOS05MTY4LTQ1ZDUtOGRiZC1mMDljYzVhZGI4YTgiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.HNp3Yd39_NQnG2rW6bXf3QnIYC2WjA13Mv1DKQp3pp7EWq_mXtmrG_7yuHavdpq0GQcplfpX0lsb6yIxMaSj-LBJeiSUbBgRkmvYBOGUnz0-J4Eekvw2km41CJf-xPEFCE_fPTAQNbhzevcUJp3WOtPzd6WFNB9tum_eaL8wfSo982ezETnKrfyz8zeAIzix3IzfzjQoFZdKhCgA9aLiNKgKeotroCAFFrgy7KyvvyC140xpisGtkd6lslg_8i3oGTzG2rG5QlBeCXb93cYFfDc9bf0Ei67gKTCw9nNKbms_bQC8eOmDiJMKYzJjbxlBS-8AfaGnrl_7CL_5lKsG5Q

使用token登录

【参考:https://github.com/easzlab/kubeasz】