k8s集群搭建

目录

一:系统架构

二:资源分配

三:基础环境准备

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.12etcdk8s-master2
10.19.14.13

apiserver/scheduler/controller

etcd

k8s-master3
10.19.14.28kubelet/kube-proxyk8s-node1
10.19.14.29kubelet/kube-proxyk8s-node2
10.19.14.30kubelet/kube-proxyk8s-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 <ver>   set docker-ce version, default "20.10.5"
    -e <ver>   set kubeasz-ext-bin version, default "0.9.4"
    -k <ver>   set kubeasz-k8s-bin version, default "v1.21.0"
    -m <str>   set docker registry mirrors, default "CN"(used in Mainland,China)
    -p <ver>   set kubeasz-sys-pkg version, default "0.4.1"
    -z <ver>   set kubeasz version, default "3.1.0"


#启动kubeasz容器
./ezdown -S


#创建k8s初始集群配置
docker exec -it kubeasz ezctl new k8s-01

四:kubeasz安装k8s集群 

1)通过ezctl安装k8s集群

通过ezctl help 查看帮助

#ezctl --help

Usage: ezctl COMMAND [args]
-------------------------------------------------------------------------------------
Cluster setups:
    list		             to list all of the managed clusters
    checkout    <cluster>            to switch default kubeconfig of the cluster
    new         <cluster>            to start a new k8s deploy with name 'cluster'
    setup       <cluster>  <step>    to setup a cluster, also supporting a step-by-step way
    start       <cluster>            to start all of the k8s services stopped by 'ezctl stop'
    stop        <cluster>            to stop all of the k8s services temporarily
    upgrade     <cluster>            to upgrade the k8s cluster
    destroy     <cluster>            to destroy the k8s cluster
    backup      <cluster>            to backup the cluster state (etcd snapshot)
    restore     <cluster>            to restore the cluster state from backups
    start-aio		             to quickly setup an all-in-one cluster with 'default' settings

Cluster ops:
    add-etcd    <cluster>  <ip>      to add a etcd-node to the etcd cluster
    add-master  <cluster>  <ip>      to add a master node to the k8s cluster
    add-node    <cluster>  <ip>      to add a work node to the k8s cluster
    del-etcd    <cluster>  <ip>      to delete a etcd-node from the etcd cluster
    del-master  <cluster>  <ip>      to delete a master node from the k8s cluster
    del-node    <cluster>  <ip>      to delete a work node from the k8s cluster

Extra operation:
    kcfg-adm    <cluster>  <args>    to manage client kubeconfig of the k8s cluster

Use "ezctl help <command>" 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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值