栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

k8s集群搭建

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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    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集群

通过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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968424.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号