目录
一:系统架构
二:资源分配
三:基础环境准备
1)Linux系统准备:
2)Linux内核升级
3)软件升级
4)安装ansible
5)ansible控制端配置免密登录
6)配置时间同步任务
三:kubeasz工具介绍
1)版本对照关系
2)下载对应的版本的kubeasz,二进制服务和离线镜像
四:kubeasz安装k8s集群
1)通过ezctl安装k8s集群
2)通过ezctl new一个k8s集群初始化配置文件
3)通过ezctl 安装k8s集群
五:通过kubeasz实现分步骤安装
1)步骤一:ezctl setup k8s-01 01
2)步骤二:ezctl setup k8s-01 02
3)步骤三:ezctl setup k8s-01 03
4)步骤四:ezctl setup k8s-01 04
5)步骤五:ezctl setup k8s-01 05
6)步骤六:ezctl setup k8s-01 06
7)步骤七:ezctl setup k8s-01 07
一:系统架构
二:资源分配
| 主机IP | 组件资源 | 主机名称 |
| 10.19.14.11 | apiserver/scheduler/controller etcd | k8s-master1 |
| 10.19.14.12 | etcd | k8s-master2 |
| 10.19.14.13 | apiserver/scheduler/controller etcd | k8s-master3 |
| 10.19.14.28 | kubelet/kube-proxy | k8s-node1 |
| 10.19.14.29 | kubelet/kube-proxy | k8s-node2 |
| 10.19.14.30 | kubelet/kube-proxy | k8s-node3 |
三:基础环境准备
1)Linux系统准备:
centos7.6_x86_64_Minimal
2)Linux内核升级
参考文档:kubeasz/kernel_upgrade.md at master · easzlab/kubeasz · GitHub
升级内核版本如果遇到:Error: Package: kernel-lt-5.4.197-1.el7.elrepo.x86_64 (elrepo-kernel)
Requires: linux-firmware >= 20100806-2
解决方案: yum install -y linux-firmware
3)软件升级
由于前面单独对内核做了升级需要单独排除内核:
#排除内核 vim /etc/yum.conf #在[main]当中加入下面字串 exclude=kernel kernel-source #执行升级命令: yum update #安装python: yum install python -y
4)安装ansible
安装过程报错:error in ansible setup command: 'install_requires' must be a string or list of strings containing valid project/version requirement specifiers
解决方法:pip install setuptools -U
# 注意pip 21.0以后不再支持python2和python3.5,需要如下安装 # To install pip for Python 2.7 install it from https://bootstrap.pypa.io/2.7/ : curl -O https://bootstrap.pypa.io/pip/2.7/get-pip.py python get-pip.py python -m pip install --upgrade "pip < 21.0" # pip安装ansible(国内如果安装太慢可以直接用pip阿里云加速) pip install ansible -i https://mirrors.aliyun.com/pypi/simple/
5)ansible控制端配置免密登录
# 传统 RSA 算法
ssh-keygen -t rsa -b 2048 -N '' -f ~/.ssh/id_rsa
#$IPs为所有节点地址包括自身,按照提示输入yes 和root密码
ssh-copy-id $IPs
6)配置时间同步任务
三:kubeasz工具介绍
GitHub - easzlab/kubeasz: 使用Ansible脚本安装K8S集群,介绍组件交互原理,方便直接,不受国内网络环境影响
1)版本对照关系
2)下载对应的版本的kubeasz,二进制服务和离线镜像
# 下载工具脚本ezdown,举例使用kubeasz版本3.1.0
export release=3.1.0
wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
chmod +x ./ezdown
# 使用工具脚本下载
./ezdown -D
#工作原理通过安装docker,通过docker下载各二进制容器,cp容器里的二进制包到/etc/kubeasz/down里
#执行下载命令后各服务包下载路径默认地址为 /etc/kubeasz/down 可以看到各服务版本包信息
#ezdown用法
ezdown --help
Usage: ezdown [options] [args]
option: -{DdekSz}
-C stop&clean all local containers #清除所有本地运行的容器
-D download all into "/etc/kubeasz" #下载安装镜像和安装二进制文件
-P download system packages for offline installing #下载系统的离线安装包
-R download Registry(harbor) offline installer #下载harbor镜像仓库安装包
-S start kubeasz in a container #
-d set docker-ce version, default "20.10.5"
-e set kubeasz-ext-bin version, default "0.9.4"
-k set kubeasz-k8s-bin version, default "v1.21.0"
-m set docker registry mirrors, default "CN"(used in Mainland,China)
-p set kubeasz-sys-pkg version, default "0.4.1"
-z set kubeasz version, default "3.1.0"
四:kubeasz安装k8s集群
1)通过ezctl安装k8s集群
1)通过ezctl安装k8s集群
通过ezctl help 查看帮助
#ezctl --help
Usage: ezctl COMMAND [args]
-------------------------------------------------------------------------------------
Cluster setups:
list to list all of the managed clusters
checkout to switch default kubeconfig of the cluster
new to start a new k8s deploy with name 'cluster'
setup to setup a cluster, also supporting a step-by-step way
start to start all of the k8s services stopped by 'ezctl stop'
stop to stop all of the k8s services temporarily
upgrade to upgrade the k8s cluster
destroy to destroy the k8s cluster
backup to backup the cluster state (etcd snapshot)
restore to restore the cluster state from backups
start-aio to quickly setup an all-in-one cluster with 'default' settings
Cluster ops:
add-etcd to add a etcd-node to the etcd cluster
add-master to add a master node to the k8s cluster
add-node to add a work node to the k8s cluster
del-etcd to delete a etcd-node from the etcd cluster
del-master to delete a master node from the k8s cluster
del-node to delete a work node from the k8s cluster
Extra operation:
kcfg-adm to manage client kubeconfig of the k8s cluster
Use "ezctl help " for more information about a given command.
2)通过ezctl new一个k8s集群初始化配置文件
#初始化k8s-01集群配置文件
ezctl new k8s-01
#配置文件生产路径为ezctl 当前目录的cluster文件夹下即 /etc/kubeasz/clusters
#查看集群初始化配置文件信息,按照具体的信息修改配置项
cat config.yml
3)通过ezctl 安装k8s集群
#一键安装
ezctl setup k8s-01 all
五:通过kubeasz实现分步骤安装
1)步骤一:ezctl setup k8s-01 01
#分步安装
ezctl setup k8s-01 01
1)执行任务os-harden(默认为False)
#os-harden介绍信息https://github.com/easzlab/kubeasz/tree/master/roles/os-harden
#它将会配置:
删除未使用的 yum 存储库并启用 GPG 密钥检查
删除存在已知问题的软件包
配置 pam 以进行强密码检查
安装和配置 auditd
通过软限制禁用核心转储
设置限制性 umask
配置系统路径中文件的执行权限
加强对 shadow 和 passwd 文件的访问
禁用未使用的文件系统
禁用 rhost
配置安全 tty
通过 sysctl 配置内核参数
在基于 EL 的系统上启用 selinux
删除 SUID 和 GUID
配置系统帐户的登录名和密码
2)执行任务chrony
#chrony 读取chrony组里主机IP 并执行playbook
#需要hosts文件里chrony的group组里配置主机IP
3)在安装机器上执行任务deploy
#创建 CA、kubeconfig、kube-proxy.kubeconfig 等
#创建 ezdown和ezctl 到/usr/bin/ezdown软连接
#创建 /usr/bin/kubectl 软连接
#创建 kubeasz环境变量
4)执行任务prepare
删除软件包:firewalld python-firewall firewalld-filesystem
安装基础软件包:bash-completion conntrack-tools ipset ipvsadm libseccomp nfs-utils psmisc rsync socat
临时关闭 selinux
永久关闭 selinux
禁止rsyslog获取journald日志1
禁止rsyslog获取journald日志2
重启rsyslog服务
禁用系统 swap
删除fstab swap 相关配置
设置 nf_conntrack 模块名 NF_CONNTRACK="nf_conntrack" 条件"KERNEL_VER|float >= 4.19"
设置 nf_conntrack 模块名 NF_CONNTRACK="nf_conntrack_ipv4" 条件 "KERNEL_VER|float < 4.19" (此模块为连接跟踪模块,记录连接信息)
加载内核模块:br_netfilter ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh
启用systemd自动加载模块服务
增加内核模块开机加载配置
设置系统参数for k8 消除docker info 警告WARNING: bridge-nf-call-ip[6]tables is disabled https://success.docker.com/article/ipvs-connection-timeout-issue 缩短keepalive_time超时时间为600s
生效系统参数
创建 systemd 配置目录
设置系统 ulimits
把SCTP列入内核模块黑名单
5)创建环境变量
添加 kubectl 命令自动补全
分发 kubeconfig配置文件到各主机/root/.kube/config
分发 kube-proxy.kubeconfig配置文件到各主机/etc/kubernetes/kube-proxy.kubeconfig
分发controller/scheduler kubeconfig配置文件到master主机 /etc/kubernetes/kube-controller-manager.kubeconfig /etc/kubernetes/kube-scheduler.kubeconfig
2)步骤二:ezctl setup k8s-01 02
# ezctl setup k8s-01 02
# /etc/kubeasz/playbooks/02.etcd.yml
# /etc/kubeasz/roles/etcd/tasks/main.yml
下载etcd二进制文件etcd etcdctl
创建etcd证书请求
分发etcd证书相关
创建etcd的systemd unit文件
开机启用etcd服务
开启etcd服务
以轮询的方式等待服务同步完成
3)步骤三:ezctl setup k8s-01 03
/etc/kubeasz/playbooks/03.runtime.yml
/etc/kubeasz/roles/docker/tasks/main.yml
获取是否已经安装docker
获取是否已经安装containerd
获取docker版本信息
通过debug方式输出docker版本信息
转换docker版本信息为浮点数
准备docker相关目录
下载二进制文件到/usr/local/bin/
下载 docker 二进制文件: docker-containerd docker-containerd-shim docker-init docker-runc docker docker-containerd-ctr dockerd docker-proxy (docker版本小于18.09)
下载 docker 二进制文件: containerd containerd-shim docker-init runc docker ctr dockerd docker-proxy containerd-shim-runc-v2
docker命令自动补全
docker国内镜像加速
flush-iptables
创建docker的systemd unit文件
开机启用docker 服务
开启docker 服务
轮询等待docker服务运行
配置 docker 命令软链接
安装docker查询镜像 tag的小工具
4)步骤四:ezctl setup k8s-01 04
ezctl setup k8s-01 04
/etc/kubeasz/playbooks/04.kube-master.yml
#创建kube-apiserver负责均衡
/etc/kubeasz/roles/kube-lb/tasks/main.yml
创建kube-lb目录文件
下载二进制文件kube-lb(nginx)
创建kube-lb的配置文件
创建kube-lb的systemd unit文件
开机启用kube-lb服务
开启kube-lb服务
以轮询的方式等待kube-lb服务启动
#/etc/kubeasz/roles/kube-master/tasks/main.yml
#创建master节点
下载 kube_master 二进制
注册变量 KUBERNETES_SVC_IP 10.68.0.1
设置变量 CLUSTER_KUBERNETES_SVC_IP
创建 kubernetes 证书签名请求
创建 kubernetes 证书和私钥
创建 aggregator proxy证书签名请求
分发 kubernetes证书
修改 kubeconfig 的 apiserver 地址
创建 kube-scheduler 配置文件
创建 master 服务的 systemd unit 文件
开机启动 enable master几点各组件服务
启动 master节点下的kube-apiserver kube-controller-manager kube-scheduler 服务
轮询等待kube-apiserver kube-controller-manager kube-scheduler启动
获取user:kubernetes是否已经绑定对应角色
创建user:kubernetes角色绑定
#/etc/kubeasz/roles/kube-node/tasks/main.yml
创建kube_node 相关目录
下载 kubelet,kube-proxy 二进制和基础网络插件: kubectl kubelet kube-proxy bridge host-local loopback
替换 kubeconfig 的 apiserver 地址
创建 kubelet 相关证书及 kubelet.kubeconfig
准备 cni配置文件
注册变量 DNS_SVC_IP
设置变量 CLUSTER_DNS_SVC_IP
创建kubelet的配置文件
创建kubelet的systemd unit文件
开机启用kubelet 服务
开启kubelet 服务
替换 kube-proxy.kubeconfig 的 apiserver 地址
创建kube-proxy 配置
创建kube-proxy 服务文件
开机启用kube-proxy 服务
开启kube-proxy 服务
轮询等待kube-proxy启动
轮询等待kubelet启动
轮询等待node达到Ready状态
设置node节点role
获取已下载离线镜像信息
尝试推送离线dnscache镜像(若执行失败,可忽略)
获取dnscache离线镜像推送情况
导入dnscache的离线镜像(若执行失败,可忽略)
5)步骤五:ezctl setup k8s-01 05
ezctl setup k8s-01 05
/etc/kubeasz/playbooks/05.kube-node.yml
#创建kube-apiserver负责均衡
/etc/kubeasz/roles/kube-lb/tasks/main.yml
创建kube-lb目录文件
下载二进制文件kube-lb(nginx)
创建kube-lb的配置文件
创建kube-lb的systemd unit文件
开机启用kube-lb服务
开启kube-lb服务
以轮询的方式等待kube-lb服务启动
#/etc/kubeasz/roles/kube-node/tasks/main.yml
创建kube_node 相关目录
下载 kubelet,kube-proxy 二进制和基础网络插件: kubectl kubelet kube-proxy bridge host-local loopback
替换 kubeconfig 的 apiserver 地址
创建 kubelet 相关证书及 kubelet.kubeconfig
准备 cni配置文件
注册变量 DNS_SVC_IP
设置变量 CLUSTER_DNS_SVC_IP
创建kubelet的配置文件
创建kubelet的systemd unit文件
开机启用kubelet 服务
开启kubelet 服务
替换 kube-proxy.kubeconfig 的 apiserver 地址
创建kube-proxy 配置
创建kube-proxy 服务文件
开机启用kube-proxy 服务
开启kube-proxy 服务
轮询等待kube-proxy启动
轮询等待kubelet启动
轮询等待node达到Ready状态
设置node节点role
获取已下载离线镜像信息
尝试推送离线dnscache镜像(若执行失败,可忽略)
获取dnscache离线镜像推送情况
导入dnscache的离线镜像(若执行失败,可忽略)
6)步骤六:ezctl setup k8s-01 06
ezctl setup k8s-01 06
/etc/kubeasz/playbooks/06.network.yml
/etc/kubeasz/roles/flannel/tasks/main.yml
创建flannel 相关目录:/etc/cni/net.d /opt/kube/images
下载flannel cni plugins: bridge flannel host-local loopback portmap
检查是否已下载离线flannel镜像如果有并推送镜像
如果目录下有离线镜像,就把它导入到node节点上
配置 flannel DaemonSet yaml文件
运行 flannel网络
删除默认cni配置
轮询等待flannel 运行,视下载镜像速度而定
7)步骤七:ezctl setup k8s-01 07
ezctl setup k8s-01 7
/etc/kubeasz/playbooks/07.cluster-addon.yml
/etc/kubeasz/roles/cluster-addon/tasks/main.yml
获取所有已经创建的POD信息
获取已下载离线镜像信息
注册变量 DNS_SVC_IP
设置变量 CLUSTER_DNS_SVC_IP
安装coredns coredns.yml
尝试推送离线coredns镜像(若执行失败,可忽略)
获取coredns离线镜像推送情况
导入coredns的离线镜像(若执行失败,可忽略)
准备 DNS的部署文件
创建coredns部署
配置nodelocaldns.yml
准备dnscache的部署文件nodelocaldns.yaml
#一键安装 ezctl setup k8s-01 all
五:通过kubeasz实现分步骤安装
1)步骤一:ezctl setup k8s-01 01
#分步安装
ezctl setup k8s-01 01
1)执行任务os-harden(默认为False)
#os-harden介绍信息https://github.com/easzlab/kubeasz/tree/master/roles/os-harden
#它将会配置:
删除未使用的 yum 存储库并启用 GPG 密钥检查
删除存在已知问题的软件包
配置 pam 以进行强密码检查
安装和配置 auditd
通过软限制禁用核心转储
设置限制性 umask
配置系统路径中文件的执行权限
加强对 shadow 和 passwd 文件的访问
禁用未使用的文件系统
禁用 rhost
配置安全 tty
通过 sysctl 配置内核参数
在基于 EL 的系统上启用 selinux
删除 SUID 和 GUID
配置系统帐户的登录名和密码
2)执行任务chrony
#chrony 读取chrony组里主机IP 并执行playbook
#需要hosts文件里chrony的group组里配置主机IP
3)在安装机器上执行任务deploy
#创建 CA、kubeconfig、kube-proxy.kubeconfig 等
#创建 ezdown和ezctl 到/usr/bin/ezdown软连接
#创建 /usr/bin/kubectl 软连接
#创建 kubeasz环境变量
4)执行任务prepare
删除软件包:firewalld python-firewall firewalld-filesystem
安装基础软件包:bash-completion conntrack-tools ipset ipvsadm libseccomp nfs-utils psmisc rsync socat
临时关闭 selinux
永久关闭 selinux
禁止rsyslog获取journald日志1
禁止rsyslog获取journald日志2
重启rsyslog服务
禁用系统 swap
删除fstab swap 相关配置
设置 nf_conntrack 模块名 NF_CONNTRACK="nf_conntrack" 条件"KERNEL_VER|float >= 4.19"
设置 nf_conntrack 模块名 NF_CONNTRACK="nf_conntrack_ipv4" 条件 "KERNEL_VER|float < 4.19" (此模块为连接跟踪模块,记录连接信息)
加载内核模块:br_netfilter ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh
启用systemd自动加载模块服务
增加内核模块开机加载配置
设置系统参数for k8 消除docker info 警告WARNING: bridge-nf-call-ip[6]tables is disabled https://success.docker.com/article/ipvs-connection-timeout-issue 缩短keepalive_time超时时间为600s
生效系统参数
创建 systemd 配置目录
设置系统 ulimits
把SCTP列入内核模块黑名单
5)创建环境变量
添加 kubectl 命令自动补全
分发 kubeconfig配置文件到各主机/root/.kube/config
分发 kube-proxy.kubeconfig配置文件到各主机/etc/kubernetes/kube-proxy.kubeconfig
分发controller/scheduler kubeconfig配置文件到master主机 /etc/kubernetes/kube-controller-manager.kubeconfig /etc/kubernetes/kube-scheduler.kubeconfig
2)步骤二:ezctl setup k8s-01 02
# ezctl setup k8s-01 02
# /etc/kubeasz/playbooks/02.etcd.yml
# /etc/kubeasz/roles/etcd/tasks/main.yml
下载etcd二进制文件etcd etcdctl
创建etcd证书请求
分发etcd证书相关
创建etcd的systemd unit文件
开机启用etcd服务
开启etcd服务
以轮询的方式等待服务同步完成
3)步骤三:ezctl setup k8s-01 03
/etc/kubeasz/playbooks/03.runtime.yml
/etc/kubeasz/roles/docker/tasks/main.yml
获取是否已经安装docker
获取是否已经安装containerd
获取docker版本信息
通过debug方式输出docker版本信息
转换docker版本信息为浮点数
准备docker相关目录
下载二进制文件到/usr/local/bin/
下载 docker 二进制文件: docker-containerd docker-containerd-shim docker-init docker-runc docker docker-containerd-ctr dockerd docker-proxy (docker版本小于18.09)
下载 docker 二进制文件: containerd containerd-shim docker-init runc docker ctr dockerd docker-proxy containerd-shim-runc-v2
docker命令自动补全
docker国内镜像加速
flush-iptables
创建docker的systemd unit文件
开机启用docker 服务
开启docker 服务
轮询等待docker服务运行
配置 docker 命令软链接
安装docker查询镜像 tag的小工具
4)步骤四:ezctl setup k8s-01 04
ezctl setup k8s-01 04
/etc/kubeasz/playbooks/04.kube-master.yml
#创建kube-apiserver负责均衡
/etc/kubeasz/roles/kube-lb/tasks/main.yml
创建kube-lb目录文件
下载二进制文件kube-lb(nginx)
创建kube-lb的配置文件
创建kube-lb的systemd unit文件
开机启用kube-lb服务
开启kube-lb服务
以轮询的方式等待kube-lb服务启动
#/etc/kubeasz/roles/kube-master/tasks/main.yml
#创建master节点
下载 kube_master 二进制
注册变量 KUBERNETES_SVC_IP 10.68.0.1
设置变量 CLUSTER_KUBERNETES_SVC_IP
创建 kubernetes 证书签名请求
创建 kubernetes 证书和私钥
创建 aggregator proxy证书签名请求
分发 kubernetes证书
修改 kubeconfig 的 apiserver 地址
创建 kube-scheduler 配置文件
创建 master 服务的 systemd unit 文件
开机启动 enable master几点各组件服务
启动 master节点下的kube-apiserver kube-controller-manager kube-scheduler 服务
轮询等待kube-apiserver kube-controller-manager kube-scheduler启动
获取user:kubernetes是否已经绑定对应角色
创建user:kubernetes角色绑定
#/etc/kubeasz/roles/kube-node/tasks/main.yml
创建kube_node 相关目录
下载 kubelet,kube-proxy 二进制和基础网络插件: kubectl kubelet kube-proxy bridge host-local loopback
替换 kubeconfig 的 apiserver 地址
创建 kubelet 相关证书及 kubelet.kubeconfig
准备 cni配置文件
注册变量 DNS_SVC_IP
设置变量 CLUSTER_DNS_SVC_IP
创建kubelet的配置文件
创建kubelet的systemd unit文件
开机启用kubelet 服务
开启kubelet 服务
替换 kube-proxy.kubeconfig 的 apiserver 地址
创建kube-proxy 配置
创建kube-proxy 服务文件
开机启用kube-proxy 服务
开启kube-proxy 服务
轮询等待kube-proxy启动
轮询等待kubelet启动
轮询等待node达到Ready状态
设置node节点role
获取已下载离线镜像信息
尝试推送离线dnscache镜像(若执行失败,可忽略)
获取dnscache离线镜像推送情况
导入dnscache的离线镜像(若执行失败,可忽略)
5)步骤五:ezctl setup k8s-01 05
ezctl setup k8s-01 05
/etc/kubeasz/playbooks/05.kube-node.yml
#创建kube-apiserver负责均衡
/etc/kubeasz/roles/kube-lb/tasks/main.yml
创建kube-lb目录文件
下载二进制文件kube-lb(nginx)
创建kube-lb的配置文件
创建kube-lb的systemd unit文件
开机启用kube-lb服务
开启kube-lb服务
以轮询的方式等待kube-lb服务启动
#/etc/kubeasz/roles/kube-node/tasks/main.yml
创建kube_node 相关目录
下载 kubelet,kube-proxy 二进制和基础网络插件: kubectl kubelet kube-proxy bridge host-local loopback
替换 kubeconfig 的 apiserver 地址
创建 kubelet 相关证书及 kubelet.kubeconfig
准备 cni配置文件
注册变量 DNS_SVC_IP
设置变量 CLUSTER_DNS_SVC_IP
创建kubelet的配置文件
创建kubelet的systemd unit文件
开机启用kubelet 服务
开启kubelet 服务
替换 kube-proxy.kubeconfig 的 apiserver 地址
创建kube-proxy 配置
创建kube-proxy 服务文件
开机启用kube-proxy 服务
开启kube-proxy 服务
轮询等待kube-proxy启动
轮询等待kubelet启动
轮询等待node达到Ready状态
设置node节点role
获取已下载离线镜像信息
尝试推送离线dnscache镜像(若执行失败,可忽略)
获取dnscache离线镜像推送情况
导入dnscache的离线镜像(若执行失败,可忽略)
6)步骤六:ezctl setup k8s-01 06
ezctl setup k8s-01 06
/etc/kubeasz/playbooks/06.network.yml
/etc/kubeasz/roles/flannel/tasks/main.yml
创建flannel 相关目录:/etc/cni/net.d /opt/kube/images
下载flannel cni plugins: bridge flannel host-local loopback portmap
检查是否已下载离线flannel镜像如果有并推送镜像
如果目录下有离线镜像,就把它导入到node节点上
配置 flannel DaemonSet yaml文件
运行 flannel网络
删除默认cni配置
轮询等待flannel 运行,视下载镜像速度而定
7)步骤七:ezctl setup k8s-01 07
ezctl setup k8s-01 7
/etc/kubeasz/playbooks/07.cluster-addon.yml
/etc/kubeasz/roles/cluster-addon/tasks/main.yml
获取所有已经创建的POD信息
获取已下载离线镜像信息
注册变量 DNS_SVC_IP
设置变量 CLUSTER_DNS_SVC_IP
安装coredns coredns.yml
尝试推送离线coredns镜像(若执行失败,可忽略)
获取coredns离线镜像推送情况
导入coredns的离线镜像(若执行失败,可忽略)
准备 DNS的部署文件
创建coredns部署
配置nodelocaldns.yml
准备dnscache的部署文件nodelocaldns.yaml
#分步安装 ezctl setup k8s-01 01 1)执行任务os-harden(默认为False) #os-harden介绍信息https://github.com/easzlab/kubeasz/tree/master/roles/os-harden #它将会配置: 删除未使用的 yum 存储库并启用 GPG 密钥检查 删除存在已知问题的软件包 配置 pam 以进行强密码检查 安装和配置 auditd 通过软限制禁用核心转储 设置限制性 umask 配置系统路径中文件的执行权限 加强对 shadow 和 passwd 文件的访问 禁用未使用的文件系统 禁用 rhost 配置安全 tty 通过 sysctl 配置内核参数 在基于 EL 的系统上启用 selinux 删除 SUID 和 GUID 配置系统帐户的登录名和密码 2)执行任务chrony #chrony 读取chrony组里主机IP 并执行playbook #需要hosts文件里chrony的group组里配置主机IP 3)在安装机器上执行任务deploy #创建 CA、kubeconfig、kube-proxy.kubeconfig 等 #创建 ezdown和ezctl 到/usr/bin/ezdown软连接 #创建 /usr/bin/kubectl 软连接 #创建 kubeasz环境变量 4)执行任务prepare 删除软件包:firewalld python-firewall firewalld-filesystem 安装基础软件包:bash-completion conntrack-tools ipset ipvsadm libseccomp nfs-utils psmisc rsync socat 临时关闭 selinux 永久关闭 selinux 禁止rsyslog获取journald日志1 禁止rsyslog获取journald日志2 重启rsyslog服务 禁用系统 swap 删除fstab swap 相关配置 设置 nf_conntrack 模块名 NF_CONNTRACK="nf_conntrack" 条件"KERNEL_VER|float >= 4.19" 设置 nf_conntrack 模块名 NF_CONNTRACK="nf_conntrack_ipv4" 条件 "KERNEL_VER|float < 4.19" (此模块为连接跟踪模块,记录连接信息) 加载内核模块:br_netfilter ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh 启用systemd自动加载模块服务 增加内核模块开机加载配置 设置系统参数for k8 消除docker info 警告WARNING: bridge-nf-call-ip[6]tables is disabled https://success.docker.com/article/ipvs-connection-timeout-issue 缩短keepalive_time超时时间为600s 生效系统参数 创建 systemd 配置目录 设置系统 ulimits 把SCTP列入内核模块黑名单 5)创建环境变量 添加 kubectl 命令自动补全 分发 kubeconfig配置文件到各主机/root/.kube/config 分发 kube-proxy.kubeconfig配置文件到各主机/etc/kubernetes/kube-proxy.kubeconfig 分发controller/scheduler kubeconfig配置文件到master主机 /etc/kubernetes/kube-controller-manager.kubeconfig /etc/kubernetes/kube-scheduler.kubeconfig
2)步骤二:ezctl setup k8s-01 02
# ezctl setup k8s-01 02
# /etc/kubeasz/playbooks/02.etcd.yml
# /etc/kubeasz/roles/etcd/tasks/main.yml
下载etcd二进制文件etcd etcdctl
创建etcd证书请求
分发etcd证书相关
创建etcd的systemd unit文件
开机启用etcd服务
开启etcd服务
以轮询的方式等待服务同步完成
3)步骤三:ezctl setup k8s-01 03
/etc/kubeasz/playbooks/03.runtime.yml
/etc/kubeasz/roles/docker/tasks/main.yml
获取是否已经安装docker
获取是否已经安装containerd
获取docker版本信息
通过debug方式输出docker版本信息
转换docker版本信息为浮点数
准备docker相关目录
下载二进制文件到/usr/local/bin/
下载 docker 二进制文件: docker-containerd docker-containerd-shim docker-init docker-runc docker docker-containerd-ctr dockerd docker-proxy (docker版本小于18.09)
下载 docker 二进制文件: containerd containerd-shim docker-init runc docker ctr dockerd docker-proxy containerd-shim-runc-v2
docker命令自动补全
docker国内镜像加速
flush-iptables
创建docker的systemd unit文件
开机启用docker 服务
开启docker 服务
轮询等待docker服务运行
配置 docker 命令软链接
安装docker查询镜像 tag的小工具
4)步骤四:ezctl setup k8s-01 04
ezctl setup k8s-01 04
/etc/kubeasz/playbooks/04.kube-master.yml
#创建kube-apiserver负责均衡
/etc/kubeasz/roles/kube-lb/tasks/main.yml
创建kube-lb目录文件
下载二进制文件kube-lb(nginx)
创建kube-lb的配置文件
创建kube-lb的systemd unit文件
开机启用kube-lb服务
开启kube-lb服务
以轮询的方式等待kube-lb服务启动
#/etc/kubeasz/roles/kube-master/tasks/main.yml
#创建master节点
下载 kube_master 二进制
注册变量 KUBERNETES_SVC_IP 10.68.0.1
设置变量 CLUSTER_KUBERNETES_SVC_IP
创建 kubernetes 证书签名请求
创建 kubernetes 证书和私钥
创建 aggregator proxy证书签名请求
分发 kubernetes证书
修改 kubeconfig 的 apiserver 地址
创建 kube-scheduler 配置文件
创建 master 服务的 systemd unit 文件
开机启动 enable master几点各组件服务
启动 master节点下的kube-apiserver kube-controller-manager kube-scheduler 服务
轮询等待kube-apiserver kube-controller-manager kube-scheduler启动
获取user:kubernetes是否已经绑定对应角色
创建user:kubernetes角色绑定
#/etc/kubeasz/roles/kube-node/tasks/main.yml
创建kube_node 相关目录
下载 kubelet,kube-proxy 二进制和基础网络插件: kubectl kubelet kube-proxy bridge host-local loopback
替换 kubeconfig 的 apiserver 地址
创建 kubelet 相关证书及 kubelet.kubeconfig
准备 cni配置文件
注册变量 DNS_SVC_IP
设置变量 CLUSTER_DNS_SVC_IP
创建kubelet的配置文件
创建kubelet的systemd unit文件
开机启用kubelet 服务
开启kubelet 服务
替换 kube-proxy.kubeconfig 的 apiserver 地址
创建kube-proxy 配置
创建kube-proxy 服务文件
开机启用kube-proxy 服务
开启kube-proxy 服务
轮询等待kube-proxy启动
轮询等待kubelet启动
轮询等待node达到Ready状态
设置node节点role
获取已下载离线镜像信息
尝试推送离线dnscache镜像(若执行失败,可忽略)
获取dnscache离线镜像推送情况
导入dnscache的离线镜像(若执行失败,可忽略)
5)步骤五:ezctl setup k8s-01 05
ezctl setup k8s-01 05
/etc/kubeasz/playbooks/05.kube-node.yml
#创建kube-apiserver负责均衡
/etc/kubeasz/roles/kube-lb/tasks/main.yml
创建kube-lb目录文件
下载二进制文件kube-lb(nginx)
创建kube-lb的配置文件
创建kube-lb的systemd unit文件
开机启用kube-lb服务
开启kube-lb服务
以轮询的方式等待kube-lb服务启动
#/etc/kubeasz/roles/kube-node/tasks/main.yml
创建kube_node 相关目录
下载 kubelet,kube-proxy 二进制和基础网络插件: kubectl kubelet kube-proxy bridge host-local loopback
替换 kubeconfig 的 apiserver 地址
创建 kubelet 相关证书及 kubelet.kubeconfig
准备 cni配置文件
注册变量 DNS_SVC_IP
设置变量 CLUSTER_DNS_SVC_IP
创建kubelet的配置文件
创建kubelet的systemd unit文件
开机启用kubelet 服务
开启kubelet 服务
替换 kube-proxy.kubeconfig 的 apiserver 地址
创建kube-proxy 配置
创建kube-proxy 服务文件
开机启用kube-proxy 服务
开启kube-proxy 服务
轮询等待kube-proxy启动
轮询等待kubelet启动
轮询等待node达到Ready状态
设置node节点role
获取已下载离线镜像信息
尝试推送离线dnscache镜像(若执行失败,可忽略)
获取dnscache离线镜像推送情况
导入dnscache的离线镜像(若执行失败,可忽略)
6)步骤六:ezctl setup k8s-01 06
ezctl setup k8s-01 06
/etc/kubeasz/playbooks/06.network.yml
/etc/kubeasz/roles/flannel/tasks/main.yml
创建flannel 相关目录:/etc/cni/net.d /opt/kube/images
下载flannel cni plugins: bridge flannel host-local loopback portmap
检查是否已下载离线flannel镜像如果有并推送镜像
如果目录下有离线镜像,就把它导入到node节点上
配置 flannel DaemonSet yaml文件
运行 flannel网络
删除默认cni配置
轮询等待flannel 运行,视下载镜像速度而定
7)步骤七:ezctl setup k8s-01 07
ezctl setup k8s-01 7
/etc/kubeasz/playbooks/07.cluster-addon.yml
/etc/kubeasz/roles/cluster-addon/tasks/main.yml
获取所有已经创建的POD信息
获取已下载离线镜像信息
注册变量 DNS_SVC_IP
设置变量 CLUSTER_DNS_SVC_IP
安装coredns coredns.yml
尝试推送离线coredns镜像(若执行失败,可忽略)
获取coredns离线镜像推送情况
导入coredns的离线镜像(若执行失败,可忽略)
准备 DNS的部署文件
创建coredns部署
配置nodelocaldns.yml
准备dnscache的部署文件nodelocaldns.yaml
/etc/kubeasz/playbooks/03.runtime.yml /etc/kubeasz/roles/docker/tasks/main.yml 获取是否已经安装docker 获取是否已经安装containerd 获取docker版本信息 通过debug方式输出docker版本信息 转换docker版本信息为浮点数 准备docker相关目录 下载二进制文件到/usr/local/bin/ 下载 docker 二进制文件: docker-containerd docker-containerd-shim docker-init docker-runc docker docker-containerd-ctr dockerd docker-proxy (docker版本小于18.09) 下载 docker 二进制文件: containerd containerd-shim docker-init runc docker ctr dockerd docker-proxy containerd-shim-runc-v2 docker命令自动补全 docker国内镜像加速 flush-iptables 创建docker的systemd unit文件 开机启用docker 服务 开启docker 服务 轮询等待docker服务运行 配置 docker 命令软链接 安装docker查询镜像 tag的小工具
4)步骤四:ezctl setup k8s-01 04
ezctl setup k8s-01 04
/etc/kubeasz/playbooks/04.kube-master.yml
#创建kube-apiserver负责均衡
/etc/kubeasz/roles/kube-lb/tasks/main.yml
创建kube-lb目录文件
下载二进制文件kube-lb(nginx)
创建kube-lb的配置文件
创建kube-lb的systemd unit文件
开机启用kube-lb服务
开启kube-lb服务
以轮询的方式等待kube-lb服务启动
#/etc/kubeasz/roles/kube-master/tasks/main.yml
#创建master节点
下载 kube_master 二进制
注册变量 KUBERNETES_SVC_IP 10.68.0.1
设置变量 CLUSTER_KUBERNETES_SVC_IP
创建 kubernetes 证书签名请求
创建 kubernetes 证书和私钥
创建 aggregator proxy证书签名请求
分发 kubernetes证书
修改 kubeconfig 的 apiserver 地址
创建 kube-scheduler 配置文件
创建 master 服务的 systemd unit 文件
开机启动 enable master几点各组件服务
启动 master节点下的kube-apiserver kube-controller-manager kube-scheduler 服务
轮询等待kube-apiserver kube-controller-manager kube-scheduler启动
获取user:kubernetes是否已经绑定对应角色
创建user:kubernetes角色绑定
#/etc/kubeasz/roles/kube-node/tasks/main.yml
创建kube_node 相关目录
下载 kubelet,kube-proxy 二进制和基础网络插件: kubectl kubelet kube-proxy bridge host-local loopback
替换 kubeconfig 的 apiserver 地址
创建 kubelet 相关证书及 kubelet.kubeconfig
准备 cni配置文件
注册变量 DNS_SVC_IP
设置变量 CLUSTER_DNS_SVC_IP
创建kubelet的配置文件
创建kubelet的systemd unit文件
开机启用kubelet 服务
开启kubelet 服务
替换 kube-proxy.kubeconfig 的 apiserver 地址
创建kube-proxy 配置
创建kube-proxy 服务文件
开机启用kube-proxy 服务
开启kube-proxy 服务
轮询等待kube-proxy启动
轮询等待kubelet启动
轮询等待node达到Ready状态
设置node节点role
获取已下载离线镜像信息
尝试推送离线dnscache镜像(若执行失败,可忽略)
获取dnscache离线镜像推送情况
导入dnscache的离线镜像(若执行失败,可忽略)
5)步骤五:ezctl setup k8s-01 05
ezctl setup k8s-01 05
/etc/kubeasz/playbooks/05.kube-node.yml
#创建kube-apiserver负责均衡
/etc/kubeasz/roles/kube-lb/tasks/main.yml
创建kube-lb目录文件
下载二进制文件kube-lb(nginx)
创建kube-lb的配置文件
创建kube-lb的systemd unit文件
开机启用kube-lb服务
开启kube-lb服务
以轮询的方式等待kube-lb服务启动
#/etc/kubeasz/roles/kube-node/tasks/main.yml
创建kube_node 相关目录
下载 kubelet,kube-proxy 二进制和基础网络插件: kubectl kubelet kube-proxy bridge host-local loopback
替换 kubeconfig 的 apiserver 地址
创建 kubelet 相关证书及 kubelet.kubeconfig
准备 cni配置文件
注册变量 DNS_SVC_IP
设置变量 CLUSTER_DNS_SVC_IP
创建kubelet的配置文件
创建kubelet的systemd unit文件
开机启用kubelet 服务
开启kubelet 服务
替换 kube-proxy.kubeconfig 的 apiserver 地址
创建kube-proxy 配置
创建kube-proxy 服务文件
开机启用kube-proxy 服务
开启kube-proxy 服务
轮询等待kube-proxy启动
轮询等待kubelet启动
轮询等待node达到Ready状态
设置node节点role
获取已下载离线镜像信息
尝试推送离线dnscache镜像(若执行失败,可忽略)
获取dnscache离线镜像推送情况
导入dnscache的离线镜像(若执行失败,可忽略)
6)步骤六:ezctl setup k8s-01 06
ezctl setup k8s-01 06
/etc/kubeasz/playbooks/06.network.yml
/etc/kubeasz/roles/flannel/tasks/main.yml
创建flannel 相关目录:/etc/cni/net.d /opt/kube/images
下载flannel cni plugins: bridge flannel host-local loopback portmap
检查是否已下载离线flannel镜像如果有并推送镜像
如果目录下有离线镜像,就把它导入到node节点上
配置 flannel DaemonSet yaml文件
运行 flannel网络
删除默认cni配置
轮询等待flannel 运行,视下载镜像速度而定
7)步骤七:ezctl setup k8s-01 07
ezctl setup k8s-01 7
/etc/kubeasz/playbooks/07.cluster-addon.yml
/etc/kubeasz/roles/cluster-addon/tasks/main.yml
获取所有已经创建的POD信息
获取已下载离线镜像信息
注册变量 DNS_SVC_IP
设置变量 CLUSTER_DNS_SVC_IP
安装coredns coredns.yml
尝试推送离线coredns镜像(若执行失败,可忽略)
获取coredns离线镜像推送情况
导入coredns的离线镜像(若执行失败,可忽略)
准备 DNS的部署文件
创建coredns部署
配置nodelocaldns.yml
准备dnscache的部署文件nodelocaldns.yaml
ezctl setup k8s-01 05 /etc/kubeasz/playbooks/05.kube-node.yml #创建kube-apiserver负责均衡 /etc/kubeasz/roles/kube-lb/tasks/main.yml 创建kube-lb目录文件 下载二进制文件kube-lb(nginx) 创建kube-lb的配置文件 创建kube-lb的systemd unit文件 开机启用kube-lb服务 开启kube-lb服务 以轮询的方式等待kube-lb服务启动 #/etc/kubeasz/roles/kube-node/tasks/main.yml 创建kube_node 相关目录 下载 kubelet,kube-proxy 二进制和基础网络插件: kubectl kubelet kube-proxy bridge host-local loopback 替换 kubeconfig 的 apiserver 地址 创建 kubelet 相关证书及 kubelet.kubeconfig 准备 cni配置文件 注册变量 DNS_SVC_IP 设置变量 CLUSTER_DNS_SVC_IP 创建kubelet的配置文件 创建kubelet的systemd unit文件 开机启用kubelet 服务 开启kubelet 服务 替换 kube-proxy.kubeconfig 的 apiserver 地址 创建kube-proxy 配置 创建kube-proxy 服务文件 开机启用kube-proxy 服务 开启kube-proxy 服务 轮询等待kube-proxy启动 轮询等待kubelet启动 轮询等待node达到Ready状态 设置node节点role 获取已下载离线镜像信息 尝试推送离线dnscache镜像(若执行失败,可忽略) 获取dnscache离线镜像推送情况 导入dnscache的离线镜像(若执行失败,可忽略)
6)步骤六:ezctl setup k8s-01 06
ezctl setup k8s-01 06
/etc/kubeasz/playbooks/06.network.yml
/etc/kubeasz/roles/flannel/tasks/main.yml
创建flannel 相关目录:/etc/cni/net.d /opt/kube/images
下载flannel cni plugins: bridge flannel host-local loopback portmap
检查是否已下载离线flannel镜像如果有并推送镜像
如果目录下有离线镜像,就把它导入到node节点上
配置 flannel DaemonSet yaml文件
运行 flannel网络
删除默认cni配置
轮询等待flannel 运行,视下载镜像速度而定
7)步骤七:ezctl setup k8s-01 07
ezctl setup k8s-01 7
/etc/kubeasz/playbooks/07.cluster-addon.yml
/etc/kubeasz/roles/cluster-addon/tasks/main.yml
获取所有已经创建的POD信息
获取已下载离线镜像信息
注册变量 DNS_SVC_IP
设置变量 CLUSTER_DNS_SVC_IP
安装coredns coredns.yml
尝试推送离线coredns镜像(若执行失败,可忽略)
获取coredns离线镜像推送情况
导入coredns的离线镜像(若执行失败,可忽略)
准备 DNS的部署文件
创建coredns部署
配置nodelocaldns.yml
准备dnscache的部署文件nodelocaldns.yaml
ezctl setup k8s-01 7 /etc/kubeasz/playbooks/07.cluster-addon.yml /etc/kubeasz/roles/cluster-addon/tasks/main.yml 获取所有已经创建的POD信息 获取已下载离线镜像信息 注册变量 DNS_SVC_IP 设置变量 CLUSTER_DNS_SVC_IP 安装coredns coredns.yml 尝试推送离线coredns镜像(若执行失败,可忽略) 获取coredns离线镜像推送情况 导入coredns的离线镜像(若执行失败,可忽略) 准备 DNS的部署文件 创建coredns部署 配置nodelocaldns.yml 准备dnscache的部署文件nodelocaldns.yaml



