一、概述

本次安装采用 Ubuntu Server X64 18.04 LTS 版本安装 kubernetes 集群环境,集群节点为 1 主 2 从模式,此次对虚拟机会有些基本要求,如下:

  • OS:Ubuntu Server X64 18.04 LTS(16.04 版本步骤相同,再之前则不同)
  • CPU:最低要求,1 CPU 2 核
  • 内存:最低要求,2 GB
  • 磁盘:最低要求,20 GB

    1.1 节点配置

    | 主机名称 | IP地址 | 角色 | OS | CPU/内存 | 硬盘 | | —- | —- | —- | —- | —- | —- | | kubernetes-master | 192.168.87.110 | Master | Ubuntu Server 18.04 | 2核心2G | 20G | | kubernetes-node-01 | 192.168.87.120 | Node-01 | Ubuntu Server 18.04 | 2核心2G | 20G | | kubernetes-node-01 | 192.168.87.121 | Node-02 | Ubuntu Server 18.04 | 2核心2G | 20G |

2.配置Kubernetes基础集群(1主-2从)

2.1 统一环境配置

注意:以下步骤请在制作 VMWare 镜像时一并完成,避免逐台安装的痛苦! 本次安装采用的方式是:安装一台虚拟机,操作系统是Ubuntu Server 18.04,机器上安装Docker以及Kubeadm、Kubectl、Kubelet、时间同步服务器,然后在基于本机器克隆Kubernetes-Master机器、Kubernetes-Node-01机器、Kubernetes-Node-02机器。

安装基础虚拟机步骤

配置好虚拟机的存放位置,然后无脑下一步即可。
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
编辑虚拟机选择Server镜像,选择完毕后点击确定。
image.png
image.png
image.png
启动虚拟机,进去虚拟机的配置
语言配置,选择English,然后直接Enter键。
image.png
Tab键切换到选择Done,然后直接Enter键。
image.png
选择Install Ubuntu
image.png
这里使用虚拟机的虚拟网卡根据DHCP配分的动态IP地址,直接Tab键切换到Done,然后直接Enter键。
image.png
这里是配置代理的地址,我们暂时不需要,直接Tab键切换到Done,然后直接Enter键。
image.png
这里需要更改Ubuntu Server安装软件的源,这里我使用的是阿里云的ubuntu软件源,将 http://archive.ubuntu.com/ubuntu 更改为:https://mirrors.aliyun.com/ubuntu,然后Tab切换到Done,然后直接Enter键。
image.png
Tab键切换到Use An Entire Disk And Set Up LVM,然后Enter键。
image.png
直接Enter键。
image.png
选择ubuntu-lv,按Enter键,选择Edit。
image.png
进入编辑界面后,将Size修改,这里Size的最大值是18.996,然后Tab键切换到Save,按Enter键。
image.png
设置好ubuntu-lv之后,Tab键切换到Done,然后按Enter键。
image.png
这里Tab键选择Continue,然后按Enter键。
image.png
然后到设置虚拟机机器信息的界面,Your name:表示你的名字;Your server ‘s name:表示服务器的名称;Pick a username:登录服务器的用户名称;Choose a password:表示服务器的密码;
Confirm your password:再次确认你的服务器密码(必须和上面的Choose a password输入的密码一致),然后Tab键切换到Done,再按Enter键。
image.png
然后到是否开启SSH的界面,这里Tab键切换到 Install OpenSSH server,然后按空格键【成功勾选上之后会出现一个 [X] 的图案】,然后Tab键切换到Done,按Enter键。
image.png
最后的界面是询问是否要提前安装软件,这里直接Tab键切换到Done,然后按Enter键。
image.png
开始安装Ubuntu Server 18.04的界面,等待安装完毕即可。
image.png
安装完成的界面,直接选择Reboot Now,按Enter键。
image.png
这里需要按一下Enter键。
image.png
输入刚刚配置服务器的账户名和密码,按Enter键登录即可。
image.png
这里需要输入:ip a命令获取IP地址。打开Windows的终端【这里我使用的是Windows Terminal】
得到ens33虚拟机的网卡的IP地址是:192.168.87.151
image.png
使用终端的ssh命令连接虚拟机,ssh 用户名@IP地址即可连接上虚拟机,会出现是否使用ssh连接虚拟机,输入yes即可,然后输入该账户的密码即可连接成功!
image.png
ssh命令如下:

  1. # ssh 用户名称@IP地址
  2. ssh matrix@192.168.87.151

连接上虚拟机开始配置root超级管理员账户的密码
image.png

# 配置root账户的密码
sudo passwd root

# 输出如下:
[sudo] password for matrix:    # 这个matrix账户是我刚刚配置虚拟机时的账户,输入这个账户的密码即可
Enter new UNIX password: # 配置root账户的新密码
Retype new UNIX password: # 再次确认root账户的新密码
passwd: password updated successfully # 说明配置成功

使用su命令切换到root账户
image.png

# su 用户名称
su root

# 输出如下:
Password: #这里要输入刚刚配置的root账户的密码

配置ssh登录可以使用root账户
image.png

# 编辑sshd_config配置文件,按Enter查看sshd_config文件
vi /etc/ssh/sshd_config

# 找到PermitRootLogin prohibit-password,按i键进去编辑模式,将前面的#号删除
# 然后将PermitRootLogin prohibit-password修改成:PermitRootLogin yes
# 再然后按ESC键,按shift键 + ;键,然后出现一个:  在: 后面输入wq!,再按Enter键位接口。
PermitRootLogin yes

修改sshd_config文件后,需要然修改的配置生效。

# 让刚刚配置的ssh生效
service ssh restart

关闭终端,重新打开一个,使用root账户登录,显示下图表示登录成功:
image.png
然后使用apt命令检查刚刚配置服务器时使用的阿里云的软件源是否配置成功!
image.png

# 获取需要更新的软件包信息
apt-get update

# 输出如下:
Hit:1 https://mirrors.aliyun.com/ubuntu bionic InRelease
Hit:2 https://mirrors.aliyun.com/ubuntu bionic-updates InRelease
Hit:3 https://mirrors.aliyun.com/ubuntu bionic-backports InRelease
Hit:4 https://mirrors.aliyun.com/ubuntu bionic-security InRelease
Reading package lists... Done

然后开始配置Kubernetes的基础虚拟机,然后再克隆三台虚拟机,分别是Kubernetes-Master、Kubernetes-Node-01、Kubernetes-Node-02

关闭交换空间

# 关闭交换空间
swapoff -a

# 查看交换空间情况 Swap全部为0
free

设置交换空间,避免开启启动交换空间

# 注释 swap 开头的行
vi /etc/fstab

关闭防火墙

# 防火墙在系统启动时停止并禁用
ufw disable

# 输出如下
Firewall stopped and disabled on system startup

配置DNS

# 取消 DNS 行注释,并增加 DNS 配置如:114.114.114.114,修改后重启下计算机【使用shutdown -r now】
vi /etc/systemd/resolved.conf

安装Docker

# 更新数据源
apt-get update
# 安装所需依赖,这里会出现界面需要选择yes
apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# 安装 GPG 证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 新增数据源
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 再次更新软件源
apt-get -y update
# 更新并安装 Docker CE
apt-get update && apt-get install -y docker-ce
# 设置Docker开机启动
systemctl enable docker

lsb_release -ca:显示Linux版本信息。

配置Docker镜像加速

注意:国内镜像加速器可能会很卡,请替换成你自己阿里云的镜像加速器,地址如:https://yourseif.mirror.aliyuncs.com,在阿里云控制台的 容器镜像服务 -> 镜像加速器 菜单中可以找到。

在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
以下阿里云镜像加速源是我自己的,你可以换成你们自己的。

# 非root账户权限下配置

# etc配置文件目录下创建docker目录
sudo mkdir -p /etc/docker

# docker目录下创建daemon.json配置文件,并追加docker镜像源
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fp7j9ykk.mirror.aliyuncs.com"]
}
EOF

# 重新加载配置文件
sudo systemctl daemon-reload

# 重启docker
sudo systemctl restart docker
# root账户权限下配置

# etc配置文件目录下创建docker目录
mkdir -p /etc/docker

# docker目录下创建daemon.json配置文件,并追加docker镜像源
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fp7j9ykk.mirror.aliyuncs.com"]
}
EOF

# 重新加载配置文件
systemctl daemon-reload

# 重启docker
systemctl restart docker

配置Docker Cgroup Driver

# 使用docker info 查看 Docker的Cgroup Driver
docker info

# 需要将Docker Cgroup Driver的cgroupfs更改为systemd
# 在daemon.json文件中追加如下内容:"exec-opts": ["native.cgroupdriver=systemd"]
vi /etc/docker/daemon.json

# 重新加载配置文件
systemctl daemon-reload

# 重启docker
systemctl restart docker

修改后的daemon.json内容如下:

{
  "registry-mirrors": ["https://fp7j9ykk.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

安装 Kubernetes 必备工具

安装三个 Kubernetes 必备工具,分别是 kubeadmkubeletkubectl

# 安装系统工具
apt-get update && apt-get install -y apt-transport-https

# 安装 GPG 证书
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

# 写入软件源;注意:我们用系统代号为 bionic,但目前阿里云不支持,所以沿用 16.04 的 xenial
cat << EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

# 再次更新软件源
apt-get -y update

# 查看kubuadm、kubectl、kubelet 可下载的版本
apt-cache madison <软件包名称>

# 安装指定版本的 kubernetes 版本号:1.23.6-00
apt-get update && apt-get install -y kubelet=1.23.6-00 kubeadm=1.23.6-00 kubectl=1.23.6-00

同步时间

  • 设置时间

    # Ubuntu linaro(Lubuntu) 修改系统时区 (Cubieboard CC-A80修改系统时区)dpkg-reconfigure tzdata 
    dpkg-reconfigure tzdata
    
  • 选择 Asia(亚洲)

image.png

  • 选择 Shanghai(上海)

image.png

  • 时间同步 ```shell

    安装 ntpdate

    apt-get install ntpdate

设置系统时间与网络时间同步(cn.pool.ntp.org 位于中国的公共 NTP 服务器)

ntpdate cn.pool.ntp.org

将系统时间写入硬件时间

hwclock —systohc


- **确认时间**
```shell
# 确认虚拟机的时间是否和宿主机的一致
date

# 输出如下:
Wed May 18 17:16:08 CST 2022

修改 cloud.cfg

主要作用就是防止重启虚拟机后主机名称还原

# 防止虚拟机主机名还原
vi /etc/cloud/cloud.cfg

# 该配置默认为 false,修改为 true 即可
preserve_hostname: true

2.2 重启虚拟机再关机

# 重启
shutdown -r now

# 关机
shutdown -h now

3.单独节点配置

3.1 分别克隆三台虚拟机

将刚刚配置好的Kubernetes虚拟机再克隆三台虚拟机,分别为:Kubernetes-Master、Kubernetes-Node-01、Kubernetes-Node-02
image.png
image.png
image.png
image.png
image.png
安装以上图片的步骤克隆好即可。

注意:需要为 Master 和 Node 节点单独配置对应的 IP地址 主机名称

配置IP地址

配置IP地址前先获取宿主机的网关地址。

# 获取宿主机网关地址【配置IP地址时需要将网关地址写到ens33网卡的gateway4、nameservers的addresses里面】
route -n

# 输出如下,可以得到我这台机器的网关地址为192.168.87.2
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.87.2    0.0.0.0         UG    100    0        0 ens33
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.87.0    0.0.0.0         255.255.255.0   U     0      0        0 ens33
192.168.87.2    0.0.0.0         255.255.255.255 UH    100    0        0 ens33

编辑 vi /etc/netplan/50-cloud-init.yaml 配置文件,修改内容如下:

3.2 Kubernetes-Master配置

network:
    ethernets:
        ens33:
          addresses: [192.168.87.110/24]
          gateway4: 192.168.87.2
          nameservers:
            addresses: [192.168.87.2]
    version: 2

使用 netplan apply 命令让配置生效,然后修改主机名和配置host。

# 修改主机名
hostnamectl set-hostname kubernetes-master

# 配置 hosts
cat >> /etc/hosts << EOF
192.168.87.110 kubernetes-master
EOF

3.3 Kubernetes-Node-01配置

network:
    ethernets:
        ens33:
          addresses: [192.168.87.120/24]
          gateway4: 192.168.87.2
          nameservers:
            addresses: [192.168.87.2]
    version: 2

使用 netplan apply 命令让配置生效,然后修改主机名和配置host。

hostnamectl set-hostname kubernetes-node-01

# 配置 hosts
cat >> /etc/hosts << EOF
192.168.87.120 kubernetes-node-01
EOF

3.4 Kubernetes-Node-02配置

network:
    ethernets:
        ens33:
          addresses: [192.168.87.121/24]
          gateway4: 192.168.87.2
          nameservers:
            addresses: [192.168.87.2]
    version: 2

使用 netplan apply 命令让配置生效,然后修改主机名和配置host。

# 修改主机名
hostnamectl set-hostname kubernetes-node-02

# 配置 hosts
cat >> /etc/hosts << EOF
192.168.87.121 kubernetes-node-02
EOF