K8s02.安装
参考文档
安装前提
- 主机可以连通外网
- 主机之间可以ping
- 主机上有权限安装ansible,并且可以在主机之间免密登录
- 至少单数节点的主机数量(1,3,5...),因为etcd的缘故
内核升级
shell
# 更新仓库
yum -y update
# 启用 ELRepo 仓库
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
# 安装最新内核
yum --enablerepo=elrepo-kernel install kernel-ml -y
# 查看所有可用内核
# sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
# 设置启用的内核
sudo grub2-set-default 0
# 生成 grub 配置文件并重启
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
# 重启后检验升级情况
uname -r主机规划(一主二从)
text
# 我的Vmware网关是192.168.235.2, 虚拟机基础系统为CentOS7.9.2009.mini
kube.master.01 192.168.235.203 2c2g
kube.node.01 192.168.235.204 4c8g
kube.node.02 192.168.235.205 2c4gVmware完全克隆三台虚拟机
至于核心数不一样是为了模仿真实环境

配置Vmware虚拟机静态IP
shell
vi /etc/sysconfig/network-scripts/ifcfg-ens33例子: k8s-master-01的静态ip配置
text
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
NAME="ens33"
UUID="534c01e1-a312-49d1-89d3-75f37dcd3ffd"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.235.203
NETMASK=255.255.255.0
GATEWAY=192.168.235.2
DNS1=223.5.5.5
DNS2=8.8.8.8新增和修改的配置项
text
ONBOOT="yes"
BOOTPROTO="static"
IPV6INIT="no"
IPADDR=192.168.235.203
NETMASK=255.255.255.0
GATEWAY=192.168.235.2
DNS1=223.5.5.5
DNS2=8.8.8.8保存配置并重启网络
shell
esc
:wq!
service network restart
配置主机名
shell
# master
hostnamectl set-hostname kube.master.01
# node1、node2
hostnamectl set-hostname kube.node.01
hostnamectl set-hostname kube.node.02每一台主机写host
shell
192.168.235.203 kube.master.01
192.168.235.204 kube.node.01
192.168.235.205 kube.node.02关于python3不用多次重复下载的问题, 可以在master节点下载后复制到其他的节点
shell
# 在k8s-master-01节点操作, 内部网络嘎嘎快
wget https://oss.odboy.cn/blog/files/Python-3.9.9.tar.xz
scp Python-3.9.9.tar.xz root@192.168.235.204:/root/
scp Python-3.9.9.tar.xz root@192.168.235.205:/root/
# 然后通过多窗口同时操作功能编译python3
这个是MobaXterm自带的功能, xshell也有类似的功能

编排k8s集群
在每一个节点下载安装脚本
附加说明
text
### 项目地址
https://github.com/easzlab/kubeasz
#### 发布说明
kubeasz 3.6.3 发布:支持k8s v1.29版本,组件更新和一些bugfix。
### 版本更新
* k8s: v1.29.0
* etcd: v3.5.10
* containerd: 1.6.26
* runc: v1.1.10
* calico: v3.26.4
* cilium: 1.14.5
### 修改kubeasz支持k8s版本对应规则
原有模式每个k8s大版本都有推荐对应的kubeasz版本,这样做会导致kubeasz版本碎片化,追踪问题很麻烦,而且也影响普通用户安装体验。从kubeasz 3.6.2版本开始,默认最新版本kubeasz兼容支持安装最新的三个k8s大版本。具体安装说明如下:
(如果/etc/kubeasz/bin 目录下已经有kube\* 文件,需要先删除 rm -f /etc/kubeasz/bin/kube\*)
* 安装 k8s v1.29: 使用 kubeasz 3.6.3,执行./ezdown -D 默认下载即可
* 安装 k8s v1.28: 使用 kubeasz 3.6.2,执行./ezdown -D -k v1.28.5 下载
* 安装 k8s v1.27: 使用 kubeasz 3.6.2,执行./ezdown -D -k v1.27.9 下载
* 安装 k8s v1.26: 使用 kubeasz 3.6.2,执行./ezdown -D -k v1.26.12 下载
如果k8s版本 >= 1.2.4,是不支持docker作为运行时的(在master节点)下载kubeasz代码、二进制、默认容器镜像(可运行./ezdown 查看参数)
shell
# 国内环境
./ezdown -D
# 海外环境
./ezdown -D -m standard
# 指定版本, k8s版本1.29.0
./ezdown -D -k v1.29.0
# [可选] 按需下载额外容器镜像(cilium,flannel,prometheus等)
./ezdown -X flannel
./ezdown -X prometheus
# [可选] 下载离线系统包 (适用于无法使用yum/apt仓库情形)
./ezdown -P(在master节点)创建集群配置实例
shell
# 容器化运行kubeasz
./ezdown -S
# 创建新集群 kube-master-01
docker exec -it kubeasz ezctl new kube-master-01(在master节点)修改'/etc/kubeasz/clusters/kube-master-01/hosts'
shell
vi /etc/kubeasz/clusters/kube-master-01/hosts
#----------------------------------------------------------
# etcd的节点数量为奇数
[etcd]
192.168.235.203
192.168.235.204
192.168.235.205
[kube_master]
192.168.234.203 k8s_nodename='kube.master.01'
[kube_node]
192.168.234.204 k8s_nodename='kube.node.01'
192.168.234.205 k8s_nodename='kube.node.02'(在master节点)开始安装
shell
# 一键安装
docker exec -it kubeasz ezctl setup kube-master-01 all(在master节点)断开并重新ssh连接master,并用以下命令验证,集群是否准备就绪
shell
kubectl get node
kubectl get svc
text
SchedulingDisabled 这个标记说明这个节点是个污点, 也就是调度器调度的时候, 不会将pod调度到这个
节点上操作实战
text
由于整个集群的调度是Master为首,所以根据最佳实践,Master节点最少为2个,Node节点最少为3个。
这是因为Master节点一般不参与调度,且如果node节点只有一个,不符合最佳实践的容灾情况。
而且etcd的最佳实践最好是奇数节点,所以最佳情况是Master2Node3。
这是最少且容灾允许情况下最少得集群数量。我这个集群只适合用于个人学习。
生产环境请自行斟酌。。。
