更新时间:2023年2月
安装 kubernetes 版本:kubenetes 1.25.x
根据 kubernetes 版本,使用 kubeasz 版本为:kubeasz 3.4.3
简介
kubernetes 安装工具 CNCF 认证:Cloud Native Landscape (cncf.io)
kubernetes 各版本安装工具认证:cncf/k8s-conformance
kubernetes 传统安装方式较复杂,各个公司或个人会推出一些简便的安装工具,对传统的二进制安装方式或者 kubeadm 安装方式进行封装。CNCF 针对不同版本的 kubernetes,会对各个工具进行一致性测试,通过后对该安装工具颁发 CNCF 认证。以 kubernetes 1.25.x 为例,通过认证的有 Kubeasz、Kubespray 等等。本文将使用 kubeasz 安装 kubenetes 1.25.x 集群
kubeasz 官方 github 地址: easzlab/kubeasz
kubeasz 是一个部署 k8s
集群的工具,主要特点是基于二进制方式部署和利用 ansible-playbook
实现自动化。kubeasz 可以同时创建、管理多个集群
+----------------+ +-----------------+
|ezctl 1.1.1.1 | |cluster-aio: |
+--+---+---+-----+ | |
| | | |master 4.4.4.4 |
| | +-------------------->+etcd 4.4.4.4 |
| | |node 4.4.4.4 |
| +--------------+ +-----------------+
| |
v v
+--+------------+ +---+----------------------------+
| cluster-1: | | cluster-2: |
| | | |
| master 2.2.2.1| | master 3.3.3.1/3.3.3.2 |
| etcd 2.2.2.2| | etcd 3.3.3.1/3.3.3.2/3.3.3.3 |
| node 2.2.2.3| | node 3.3.3.4/3.3.3.5/3.3.3.6 |
+---------------+ +--------------------------------+
支持的环境
支持环境随版本变更略有不同,请参考:easzlab/kubeasz
**集群版本:**kubernetes v1.22,v1.23,v1.24,v1.25,v1.26
**操作系统:**CentOS/RedHat 7/8,Debian 9/10,Ubuntu 16.04/18.04/20.04/22.04
运行时:containerd v1.6.x,docker 20.10.x (k8s < 1.24)
网络:calico,cilium,flannel,kube-ovn,kube-router
版本选择
kubeasz 会维护近 4~5 个 kubernetes 版本的安装
推荐使用版本对照表
Kubernetes version | kubeasz version |
---|---|
1.22 | 3.1.1 |
1.23 | 3.2.0 |
1.24 | 3.3.1 |
1.25 | 3.4.3 |
1.26 | 3.5.0 |
安装 kubernetes 版本:kubenetes 1.25.x
根据 kubernetes 版本,使用 kubeasz 版本为:kubeasz 3.4.3
准备
主机列表
主机名 | IP | 配置 | 角色 | 安装服务 | 描述 |
---|---|---|---|---|---|
kubeasz-deploy.skynemo.cn | 192.168.111.181 | 1C1G | 部署节点 | kubeasz 3.4.2 | 用于运行 ansible /ezctl 命令 |
etcd-1.skynemo.cn | 192.168.111.182 | etcd 数据库节点 | etcd | 根据 Raft 选举算法,etcd 集群需要奇数个节点 | |
etcd-2.skynemo.cn | 192.168.111.183 | etcd 数据库节点 | etcd | ||
etcd-3.skynemo.cn | 192.168.111.184 | etcd 数据库节点 | etcd | ||
kube-cp-1.skynemo.cn | 192.168.111.185 | 控制面节点 | apiserver kube-controller-manager kube-scheduller |
高可用集群至少 2 个控制面节点 | |
kube-cp-2.skynemo.cn | 192.168.111.186 | 控制面节点 | apiserver kube-controller-manager kube-scheduller |
||
kube-node-1.skynemo.cn | 192.168.111.187 | 工作节点 | kubelet kube-proxy containerd |
运行应用负载的节点 | |
kube-node-2.skynemo.cn | 192.168.111.188 | 工作节点 | kubelet kube-proxy containerd |
注意:默认配置下容器运行时和 kubelet 会占用 /var
的磁盘空间,如果磁盘分区特殊,可以设置 config.yml 中的容器运行时和 kubelet 数据目录:CONTAINERD_STORAGE_DIR
DOCKER_STORAGE_DIR
KUBELET_ROOT_DIR
拓扑结构
其他准备工作
关闭防火墙
所有节点关闭防火墙和 SELinux
# 关闭防火墙和 SELinux
$ systemctl disable --now firewalld
# 关闭 SELinux
$ setenforce 0 && sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
配置主机名解析
$ cat >> /etc/hosts << EOF
192.168.111.181 kubeasz-deploy.skynemo.cn
192.168.111.182 etcd-1.skynemo.cn
192.168.111.183 etcd-2.skynemo.cn
192.168.111.184 etcd-3.skynemo.cn
192.168.111.185 kube-cp-1.skynemo.cn
192.168.111.186 kube-cp-2.skynemo.cn
192.168.111.187 kube-node-1.skynemo.cn
192.168.111.188 kube-node-2.skynemo.cn
EOF
配置 ssh 免密登陆
需要配置从部署节点可以用 root 用户 ssh 免密登录到所有节点,并设置 python 链接
准备
# 安装 sshpass,方便拷贝 ssh 秘钥
dnf install -y sshpass
# 生成 SSH 密钥
[ -f /root/.ssh/id_rsa ] || ssh-keygen -f /root/.ssh/id_rsa -P ''
创建脚本
$ vim ./ssh-copy-key.sh
#!/bin/bash
# 设置节点 IP 列表
export ips=(192.168.111.181 192.168.111.182 192.168.111.183 192.168.111.184 192.168.111.185 192.168.111.186 192.168.111.187 192.168.111.188)
# 设置连接到节点的 SSH 登录密码
export SSHPASS=520123
for i in ${ips[*]}; do
echo "###### 开始设置节点 ${i} ######"
# 拷贝秘钥到节点
sshpass -e ssh-copy-id -o StrictHostKeyChecking=no root@${i}
# 安装 python3
sshpass -e ssh -o StrictHostKeyChecking=no root@${i} 'dnf -y install python3' &> /dev/null
# 设置 python 链接
sshpass -e ssh -o StrictHostKeyChecking=no root@${i} 'ln -s /usr/bin/python3 /usr/bin/python' &> /dev/null
echo "###### 节点 ${i} 设置完成 ######"
done
执行脚本完成设置
$ bash ./ssh-copy-key.sh
配置时区和时间同步
设置时区
$ timedatectl set-timezone Asia/Shanghai
设置时间同步
本文使用 kubeasz 安装时进行配置(参考:kubeasz/chrony.md ),也可以手动设置
kubeasz 的使用
根据 kubernetes 版本,使用 kubeasz 版本为:kubeasz 3.4.3
kubeasz 的组成可以分为两个部分
-
ezdown
:一个简单的下载脚本,用于下载 kubeasz 项目工具、kubernetes 相关的二进制文件及离线镜像 -
ezctl
:使用 shell 脚本封装 ansible-playbook 执行命令,主要用于创建和管理多个 kubernetes 集群
安装使用 kubeasz
参考文档:kubeasz/00-planning_and_overall_intro.md at master
kubeasz 的 github 版本发布地址:Releases · easzlab/kubeasz (github.com)
下载 ezdown
脚本
# 下载 ezdown
$ export release=3.4.3
$ wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
# 授予执行权限
$ chmod +x ./ezdown
下载相关镜像和工具
# 指定下载的 kubernetes 版本为 1.25.4
$ ./ezdown -D -k v1.25.4
容器化运行 kubeasz
$ ./ezdown -S
使用 ezctl
配置命令 alias
,方便执行容器中的 ezctl
命令
$ echo "alias dk='docker exec -it kubeasz'" >> /root/.bashrc
$ source /root/.bashrc
检查是否正常使用 ezctl
$ dk ezctl --help
ezdown
脚本使用方法
帮助文档
# 查看帮助文档
$ ./ezdown
Usage: ezdown [options] [args]
option:
-C stop&clean all local containers
-D download default binaries/images into "/etc/kubeasz"
-P download system packages for offline installing
-R download Registry(harbor) offline installer
-S start kubeasz in a container
-X download extra images
-a <arc> set architecture, default auto-detected by (uname -m)
-d <ver> set docker-ce version, default "20.10.18"
-e <ver> set kubeasz-ext-bin version, default "1.6.2"
-k <ver> set kubeasz-k8s-bin version, default "v1.25.4"
-m <str> set docker registry mirrors, default "CN"(used in Mainland,China)
-p <ver> set kubeasz-sys-pkg version, default "0.5.2"
-z <ver> set kubeasz version, default "3.4.2"
常用的变量和参数
# 可以直接在脚本中查看支持的变量
$ vim ./ezdown
常用的变量如下
# BASE : 用于指定默认的下载路径(包括所有的镜像和二进制文件),默认为 /etc/kubeasz
BASE="/etc/kubeasz"
###### 可以直接在命令行修改环境变量 #######
# DOCKER_VER : 在部署节点安装 docker 的版本,一般无需修改
DOCKER_VER=20.10.18
# KUBEASZ_VER : 使用的 kubeasz 版本,会使用 docker 进行下载构建
# dockerfile 下载的地址为:https://github.com/easzlab/dockerfile-kubeasz
KUBEASZ_VER=3.4.2
# K8S_BIN_VER : 要下载的 kubernetes 版本,,会使用 docker 进行下载构建
# dockerfile 下载的地址为:https://github.com/easzlab/dockerfile-kubeasz-k8s-bin
K8S_BIN_VER=v1.25.4
# EXT_BIN_VER : 指定 helm、containerd、cilium、et