天行健,君子以自强不息;地势坤,君子以厚德载物。
每个人都有惰性,但不断学习是好好生活的根本,共勉!
文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。
文章目录
- 一、环境准备
-
- [1. 系统类型](#1. 系统类型)
- [2. 系统要求](#2. 系统要求)
- [3. 系统配置](#3. 系统配置)
- 二、Docker安装
-
- [1. 安装Docker](#1. 安装Docker)
-
- [1.1 更新安装包](#1.1 更新安装包)
- [1.2 安装依赖](#1.2 安装依赖)
- [1.3 获取证书](#1.3 获取证书)
- [1.4 添加仓库](#1.4 添加仓库)
- [1.5 再次更新安装包](#1.5 再次更新安装包)
- [1.6 安装docker](#1.6 安装docker)
- [2. 配置镜像加速器(不配也行,建议配一下)](#2. 配置镜像加速器(不配也行,建议配一下))
- [3. 开启Docker](#3. 开启Docker)
-
- [3.1 查看docker状态](#3.1 查看docker状态)
- [3.2 重启docker](#3.2 重启docker)
- [3.3 开机自启](#3.3 开机自启)
- 三、K8S组件安装
-
- [1. 组件介绍](#1. 组件介绍)
- [2. 再次确保关闭ufw和swap](#2. 再次确保关闭ufw和swap)
-
- [2.1 关闭防火墙](#2.1 关闭防火墙)
- [2.2 查看防火墙状态](#2.2 查看防火墙状态)
- [2.3 查看交换内存](#2.3 查看交换内存)
- [2.4 关闭交换内存](#2.4 关闭交换内存)
- [3. 组件安装(kubelet、kubectl、kubeadm)](#3. 组件安装(kubelet、kubectl、kubeadm))
-
- [3.1 使用阿里云镜像仓库安装(推荐)](#3.1 使用阿里云镜像仓库安装(推荐))
-
- [3.1.1 更新apt](#3.1.1 更新apt)
- [3.1.2 安装工具](#3.1.2 安装工具)
- [3.1.3 签名秘钥](#3.1.3 签名秘钥)
- [3.1.4 添加k8s的apt仓库](#3.1.4 添加k8s的apt仓库)
- [3.1.5 再次更新apt包](#3.1.5 再次更新apt包)
- [3.1.6 安装组件(两种方式)](#3.1.6 安装组件(两种方式))
-
- [3.1.6.1 指定版本安装(推荐)](#3.1.6.1 指定版本安装(推荐))
- [3.1.6.2 不指定版本安装(不推荐,因为版本默认最新,容易报错)](#3.1.6.2 不指定版本安装(不推荐,因为版本默认最新,容易报错))
- [3.2 脚本方式安装](#3.2 脚本方式安装)
- [3.3 使用官网仓库安装(此路不通请跳过此步,可能是应为在创建虚拟机的时候使用的是阿里云的仓库,相关配置有点问题,如果想用该步骤进行安装,需要自己重新自定义安装虚拟机后进行尝试)](#3.3 使用官网仓库安装(此路不通请跳过此步,可能是应为在创建虚拟机的时候使用的是阿里云的仓库,相关配置有点问题,如果想用该步骤进行安装,需要自己重新自定义安装虚拟机后进行尝试))
- [4. 修改cgroups](#4. 修改cgroups)
- 四、根据主节点克隆两个WORKER节点
-
- [1. 克隆K8S-WORKER1](#1. 克隆K8S-WORKER1)
- [2. 克隆K8S-WORKER2](#2. 克隆K8S-WORKER2)
- [3. 修改主机名称](#3. 修改主机名称)
- [4. 修改IP](#4. 修改IP)
- [5. 激活IP](#5. 激活IP)
- 五、创建集群
-
- [1. putty连接虚拟机](#1. putty连接虚拟机)
- [2. 初始化](#2. 初始化)
-
- [2.1 查看kubernetes版本信息](#2.1 查看kubernetes版本信息)
- [2.2 执行初始化命令](#2.2 执行初始化命令)
- [2.4 报错处理(无报错可以跳过此步)](#2.4 报错处理(无报错可以跳过此步))
-
- [2.4.1 报错排查](#2.4.1 报错排查)
- [2.4.2 重置adm](#2.4.2 重置adm)
- [3. 配置.kube](#3. 配置.kube)
- [4. calico网络配置](#4. calico网络配置)
-
- [4.1 calico网络配置简单命令(推荐)](#4.1 calico网络配置简单命令(推荐))
- [4.2 根据calico官网命令配置(不一定好用,但可一试)](#4.2 根据calico官网命令配置(不一定好用,但可一试))
- [5. 集群节点查看](#5. 集群节点查看)
- [6. 集群添加节点](#6. 集群添加节点)
-
- [6.1 重新生成加入节点的命令](#6.1 重新生成加入节点的命令)
- [6.2 将worker1节点加入集群](#6.2 将worker1节点加入集群)
- [6.3 将worker2节点加入集群](#6.3 将worker2节点加入集群)
- 补:hosts配置
- [6.4 查看已加入集群的节点](#6.4 查看已加入集群的节点)
- 六、dashboard配置
-
- [1. 安装dashboard](#1. 安装dashboard)
- [2. dashboard端口设置及获取](#2. dashboard端口设置及获取)
-
- [2.1 type类型](#2.1 type类型)
- [2.2 获取端口号](#2.2 获取端口号)
- [3. 创建dashboard访问账号](#3. 创建dashboard访问账号)
- [4. 获取dashboard的访问token](#4. 获取dashboard的访问token)
- 5.访问dashboard
-
- [5.1 端口查看](#5.1 端口查看)
- [5.2 ip查看](#5.2 ip查看)
- [5.3 访问地址](#5.3 访问地址)
一、环境准备
1. 系统类型
linux系统安装:ubuntu22.04.3
2. 系统要求
cpu至少两个
每个cpu至少分配一个内核
运行内存至少2G
磁盘存储20G
3. 系统配置
创建服务器并设置系统参数等
参考文章:VMware安装ubuntu系统22.04.3版本
根据上面这篇文章创建的虚拟机,即使换了网络也不会改变ip地址,自己的电脑可以切换WiFi,连接虚拟机的ip地址不变
强烈建议使用VMware来安装系统,在后续的每一阶段的操作都可以生成快照,
并即使回退到想要的位置,相当于是操作失误了或者出现问题可以回到没出问题之前的位置,真的很方便,节省时间,
virtualbox不知道有没有,至少我之前用的时候没发现他有这个功能
二、Docker安装
1. 安装Docker
安装docker的目的是为了为k8s提供运行时容器引擎,即containerd
所以此步骤的主要目的是安装containerd
注: kubernets 自v 1.24.0 后,就不再使用 docker.shim,替换采用 containerd 作为容器运行时端点。docker中包含了 containerd 。
containerd是一个CRI(Container Runtime Interface)组件,在容器运行时调用containerd组件来创建、运行、销毁容器等
1.1 更新安装包
l
sudo apt-get update
1.2 安装依赖
l
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
1.3 获取证书
l
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
1.4 添加仓库
l
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
1.5 再次更新安装包
l
sudo apt update
1.6 安装docker
l
sudo apt-get -y install docker-ce
2. 配置镜像加速器(不配也行,建议配一下)
参考:配置阿里云容器镜像加速
3. 开启Docker
3.1 查看docker状态
l
systemctl status docker
3.2 重启docker
l
sudo systemctl restart docker
3.3 开机自启
l
sudo systemctl enable docker
或
l
sudo systemctl enable docker.service
三、K8S组件安装
1. 组件介绍
安装k8s的三个组件kubelet、kubeadm、kubectl
kubelet
运行在Cluster所有节点上,负责启动Pod和容器
kubeadm
用于初始化Cluster
kubectl
是Kubernetes命令行工具。通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。
2. 再次确保关闭ufw和swap
再检查一下防火墙和交换内存,确保关闭
2.1 关闭防火墙
请参考小短文:正确关闭ubuntu防火墙
l
systemctl stop ufw
l
sudo ufw disable
2.2 查看防火墙状态
l
sudo ufw status
或
l
systemctl status ufw.service
最好两条命令都查看一下,确保关闭,不然后续出了问题不一定会想到这里
如果是inactive则表示已关闭
2.3 查看交换内存
l
sudo free -m
2.4 关闭交换内存
(只能暂时关闭,重启后则会失效)
l
sudo swapoff -a
再执行以下命令则会永久关闭
(修改文件内容,注释掉swap)
l
sudo vim /etc/fstab
i
进入编辑
在swap那行行首加#注释掉
esc
退出编辑
shift+zz
保存退出
然后查看修改后的内容
l
cat /etc/fstab
3. 组件安装(kubelet、kubectl、kubeadm)
这里尝试了两种方式,一种是阿里云的镜像地址进行安装,一种是用官网的地址进行安装
3.1 使用阿里云镜像仓库安装(推荐)
3.1.1 更新apt
更新安装包
l
sudo apt-get update
3.1.2 安装工具
(前面安装docker的时候安装过这些则不需要再次安装)
l
sudo apt-get install -y apt-transport-https ca-certificates curl
3.1.3 签名秘钥
下载k8s软件包仓库的公共签名秘钥
l
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
3.1.4 添加k8s的apt仓库
添加适合k8s的apt仓库
l
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
注:这里的地址必须是http,不可以用https,我这里用了https后报错,改成了http后正常,原因暂不知晓"
3.1.5 再次更新apt包
l
sudo apt-get update
3.1.6 安装组件(两种方式)
一种是指定版本,一种是不指定版本
注意:阿里云的地址与官网的版本存在延时性,官网的比较新的小版本阿里云上可能没有,此时官网最新版为1.28.4,阿里云最新版为1.28.2
3.1.6.1 指定版本安装(推荐)
阿里云镜像地址中最新的版本为1.28.2-00
此处以1.22.9-00为例
查看版本是否存在
l
sudo apt-cache madison kubelet kubectl kubeadm | grep '1.22.9-00'
指定版本进行安装
l
sudo apt install -y kubelet=1.22.9-00 kubectl=1.22.9-00 kubeadm=1.22.9-00
安装成功打印的后半部分内容如下,其中也可以看到三个组件的版本号
标记指定软件包为保留,阻止更新
l
sudo apt-mark hold kubelet kubeadm kubectl
3.1.6.2 不指定版本安装(不推荐,因为版本默认最新,容易报错)
不指定版本时,默认安装最新版
因用的是阿里云的地址,所以最新版是阿里云地址的最新版,不是官网的最新版
l
sudo apt install -y kubelet kubectl kubeadm
安装完成后的后半部分内容如下
标记指定软件包为保留,阻止更新
l
sudo apt-mark hold kubelet kubeadm kubectl
3.2 脚本方式安装
3.1
的安装步骤相当多,如果嫌麻烦可写成一个脚本文件进行执行,简单快捷
创建文件夹k8s,创建后的文件夹在当前路径下
l
sudo mkdir k8s
可用sudo ls命令查看
l
sudo ls
vim命令进入即创建
l
sudo vim k8s/installKube.sh
将以下内容复制(内容为3.1的全部命令集合),然后鼠标右键粘贴进去(这种粘贴方式的前提是使用putty连接服务器后在putty的窗口操作,在虚拟机窗口是粘贴不了的,除非有其他粘贴配置)
l
#!/bin/bash
sudo apt update && sudo apt install apt-transport-https ca-certificates curl
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
sudo apt update
sudo apt-cache madison kubelet kubectl kubeadm | grep '1.22.9-00'
sudo apt install -y kubelet=1.22.9-00 kubectl=1.22.9-00 kubeadm=1.22.9-00
sudo apt-mark hold kubelet kubeadm kubectl
然后shift+zz保存退出
可用cat命令查看
l
sudo cat k8s/installKube.sh
运行脚本执行命令进行安装
l
sh k8s/installKube.sh
安装完成如下,一气呵成
3.3 使用官网仓库安装(此路不通请跳过此步,可能是应为在创建虚拟机的时候使用的是阿里云的仓库,相关配置有点问题,如果想用该步骤进行安装,需要自己重新自定义安装虚拟机后进行尝试)
官网或者阿里云二选一操作即可
更新安装包
l
sudo apt update
安装工具(若前面安装docker时安装过了,可不执行此命令)
l
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
下载k8s软件包仓库的公共签名秘钥,同一个签名秘钥适用于所有仓库,可忽略URL中的版本信息
l
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmour -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
添加适合k8s的apt仓库,需要其他版本可更换v1.28为所需版本
l
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
l
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] http://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
注:要升级 kubectl 到别的次要版本,你需要先升级 /etc/apt/sources.list.d/kubernetes.list 中的版本, 再运行 apt-get update 和 apt-get upgrade。 更详细的步骤可以在更改 Kubernetes 软件包仓库中找到。
再次更新安装包
l
sudo apt update
安装组件
l
sudo apt install -y kubelet kubeadm kubectl
保留版本
l
sudo apt-mark hold kubelet kubeadm kubectl
注:apt-mark的作用是用户将软件包标记为自动安装,或者取消标记为自动安装 hold选项用于将软件包标记为保留,以防止软件包被自动安装、升级或删除 此处主要为了防止kubelet等组件自动升级
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# This overwrites any existing configuration in /etc/apt/sources.list.d/kubernetes.list
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
4. 修改cgroups
和配置镜像加速器那个步骤相同,在/etc/docker/daemon.json文件中添加exec-opts参数
l
sudo vim /etc/docker/daemon.json
或者将原内容删除,复制完整的内容后直接复制
i
-->进入编辑模式将以下exec-opts部分加入,加入后如下
l
{
"exec-opts":[
"native.cgroupdriver=systemd"
],
"registry-mirrors":["https://vj4iipoo.mirror.aliyuncs.com"]
}
esc
-->shift+zz
重新加载生效
重启docker
l
systemctl restart docker
重启kubelet
l
systemctl restart kubelet
修改cgroup管理器的原因:
linux中的ubuntu、debian、centos7使用的是systemd初始化系统,systemd有自己的cgroup管理器
容器运行时和kubelet使用的是另一个cgroup管理器
也就是说linux系统的cgroup管理和kubelet的cgroup管理器是两个不一样,系统中存在两种资源分配视图
当系统资源(如cpu、内存等)不足时,操作系统的进程会不稳定
四、根据主节点克隆两个WORKER节点
通过上面的K8S-MASTER虚拟机克隆创建worker1和worker2两个节点
克隆后的worker1、worker2虚拟机登录的账号密码和master的一样
1. 克隆K8S-WORKER1
将K8S-MASTER虚拟机关机,然后右键K8S-MASTER虚拟机---管理---克隆
下一步---虚拟机中的当前状态---下一步---创建链接克隆---下一步
为虚拟机起名K8S-WORKER1
选择存储位置
完成---关闭
2. 克隆K8S-WORKER2
按照以上步骤克隆K8S-WORKER2节点
3. 修改主机名称
此时只能在虚拟机窗口进行操作
修改worker1和worker2的主机名称hostname
登录worker1
账号libai
密码123456
此时可以看到主机名还是K8S-MASTER
可使用命令
l
hostnamectl set-hostname K8S-WORKER1
查看修改后的结果
l
cat /etc/hostname
对worker2进行相同操作,将worker2的主机名称改为K8S-WORKER2
4. 修改IP
修改worker1和worker2的ip地址(因为克隆后的两台虚拟机ip与被克隆的master主机ip相同,可根据自己的主机ip进行第四段+1进行修改两个worker节点的ip)
打开虚拟机K8S-WORKER1
输入命令查看ip信息
l
cat /etc/netplan/00-installer-config.yaml
可以看到master节点的主机ip信息
我的主节点master的ip为192.168.193.128/24
现在将worker1的ip地址改为192.168.193.129/24
命令如下
l
sudo vim /etc/netplan/00-installer-config.yaml
输入i
进入编辑模式
修改后按esc
退出编辑模式,按shift+zz
快捷保存退出
再用cat命令查看修改后内容:::
l
cat /etc/netplan/00-installer-config.yaml
相同操作,将worker2的ip改为192.168.193.130/24
三台虚拟机的ip如下:
master 192.168.193.128/24
worker1 192.168.193.129/24
worker2 192.168.193.130/24
5. 激活IP
修改ip后需要激活才可用
使用命令
l
sudo netplan apply
该命令需要等几分钟左右生效,可以多等一会,然后使用putty远程连接ip地址,连上则说明激活成功
五、创建集群
1. putty连接虚拟机
开启之前配置好的三台虚拟机
使用putty连接三台虚拟机,在putty窗口进行操作
2. 初始化
在主节点K8S-MASTER上操作
2.1 查看kubernetes版本信息
这里用命令查看
l
kubectl version
输出的信息中包含版本信息
版本号为1.22.9
2.2 执行初始化命令
l
sudo kubeadm init \
--kubernetes-version=v1.22.9 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.24.0.0/16 \
--ignore-preflight-errors=Swap
参数解释:
--image-repository string
指定从什么位置来拉取镜像(1.13版本才有的)
默认值是k8s.gcr.io,改为国内镜像地址:registry.aliyuncs.com/google_containers
--kubernetes-version string
: 指定kubenets版本号
--pod-network-cidr
指定 Pod 网络的范围。
Kubernetes 支持多种网络方案,而且不同网络方案对 --pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。(说明在集群中将会使用10.244.0.0这个网段下面的所有ip地址,比如将tomcat部署在10.244.144.198这个地址,然后再master节点使用curl 10.244.144.198就可以返回tomcat的界面)
--ignore-preflight-errors=all
忽略预检报错内容,指定所有(自己猜的)
注:kubeadm 不支持将没有 --control-plane-endpoint 参数的单个控制平面集群转换为高可用性集群。
这里有个地方我记录一下
初始化开始的时候会提示一个警告信息如下
[警告系统验证]:此Docker版本不在已验证版本列表中:24.0.7。最新验证版本:20.10
因为安装的docker是最新版本,而安装的kube版本为旧版本1.22.9,所以可能有点小问题,但是他是警告不是报错,所以暂时不管他
初始化完成后,出现类似如下内容,表示初始化成功
l
......
......
......
此处省略若干行
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.193.128:6443 --token 1cd07a.h2z8wrgngllonwjt \
--discovery-token-ca-cert-hash sha256:0cc0df38925079b35a0e45e0c43f50f62dc7b3aad2e8414177a18f613c44c9fb
libai@k8s-master:~$
截图如下
仔细阅读初始化成功后的输出信息,也就是上面这部分内容(可以将两个红框中的命令鼠标左键选中后右键粘贴出来,备用)
1
的位置大致就是说你想要用你的集群的话,就必须以非root用户来执行红框里的mkdir等三个命令
2
的位置就是说你想要别的节点加入集群就执行红框里的kubeadm join命令就行(该命令一定要复制下来记住,待会加入节点要用,当然,忘了也没关系,可以重新生成新的)
具体操作请跳到第2.5
小节开始
后续发现初始化完成后在docker中也有体现,使用docker命令查看容器,可发现有以下这些容器正在运行
l
sudo docker ps
输出如下,都是跟k8s相关的容器
l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a2aa58b36373 58b185b3a4da "/usr/local/bin/kube..." 2 days ago Up 2 days k8s_kube-proxy_kube-proxy-8x77k_kube-system_23d83fd9-e960-4883-9396-41b1fe735b8d_0
fce3b3b130c6 registry.aliyuncs.com/google_containers/pause:3.5 "/pause" 2 days ago Up 2 days k8s_POD_kube-proxy-8x77k_kube-system_23d83fd9-e960-4883-9396-41b1fe735b8d_0
ce279ba96039 08a5810c8d30 "kube-apiserver --ad..." 2 days ago Up 2 days k8s_kube-apiserver_kube-apiserver-k8s-master_kube-system_cfc7886a5b41691c59cfc56d5b4a2a56_0
544d55e5b55c 03e6595ccb65 "kube-controller-man..." 2 days ago Up 2 days k8s_kube-controller-manager_kube-controller-manager-k8s-master_kube-system_d702eaa5f3d835c50f8950a583c0f987_0
7ab0d649ad91 a709e983ff7e "kube-scheduler --au..." 2 days ago Up 2 days k8s_kube-scheduler_kube-scheduler-k8s-master_kube-system_943ba9c025cdbb070d1589a0a2b66128_0
0d58002ebf3d 004811815584 "etcd --advertise-cl..." 2 days ago Up 2 days k8s_etcd_etcd-k8s-master_kube-system_0257569b7767afe4e6a429c33d65f7e5_0
6129f538f4ff registry.aliyuncs.com/google_containers/pause:3.5 "/pause" 2 days ago Up 2 days k8s_POD_kube-apiserver-k8s-master_kube-system_cfc7886a5b41691c59cfc56d5b4a2a56_0
b23f5021a220 registry.aliyuncs.com/google_containers/pause:3.5 "/pause" 2 days ago Up 2 days k8s_POD_etcd-k8s-master_kube-system_0257569b7767afe4e6a429c33d65f7e5_0
248a476aa076 registry.aliyuncs.com/google_containers/pause:3.5 "/pause" 2 days ago Up 2 days k8s_POD_kube-scheduler-k8s-master_kube-system_943ba9c025cdbb070d1589a0a2b66128_0
43e71eca317d registry.aliyuncs.com/google_containers/pause:3.5 "/pause" 2 days ago Up 2 days k8s_POD_kube-controller-manager-k8s-master_kube-system_d702eaa5f3d835c50f8950a583c0f987_0
2.4 报错处理(无报错可以跳过此步)
2.4.1 报错排查
如果初始化报错,则需要排查问题
问题大概有以下几个方面,可以参考并尝试
版本小于1.24.0
确认下载的kubelet、kubeadm、kubectl的版本小于1.24.0的,因为从1.24.0开始kube移除了docker作为容器运行时的功能,需要单独安装containerd并开启containerd的运行时功能ufw inactive(dead)
防火墙确认关闭
检查状态命令为systemctl status ufw
先执行关闭命令为sudo stop ufw
然后禁用systemctl ufw disable
swap off
交换内存确认关闭
查看命令cat /etc/fstab
先执行 临时关闭命令sudo swapoff -a
再执行永久关闭命令sudo vim /etc/fstab
,注释掉swap
那行cgroup systemd
cgroup管理器确认已修改为systemd
查看命令cat /etc/docker/daemon.json
如果没有如下exec-opts的systemd设置参数,则用vim命令添加
l
{
"exec-opts":[
"native.cgroupdriver=systemd"
],
"registry-mirrors":["https://vj4iipoo.mirror.aliyuncs.com"]
}
exec-opts
为cgroup管理器的指定参数设置
registry-mirrors
为镜像加速地址(请设置自己的)
2.4.2 重置adm
报错排查完之后,需要重置adm后才能再次进行初始化,执行两个命令如下
重置adm
l
sudo kubeadm reset
删除相关文件
l
sudo rm -fr ~/.kube/ /etc/kubernetes/* var/lib/etcd/*
3. 配置.kube
根据初始化完成后输出信息的命令进行操作如下
创建.kube文件夹
l
sudo mkdir -p $HOME/.kube
将admin.conf文件内容复制到.kube的config文件中
l
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
将文件的所有权限从文件所有者修改到到所有者所在的组的其他用户(user->group)
l
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4. calico网络配置
calico介绍参考:k8s之calico网络
calico是pod之间实现互连的网络技术,因为每个pod之间需要实现隔离,有需要互连,有别的方案,但是他们都有些弊端
calico是专门为适应容器环境来设计的,目前的最优选
部署一个pod网络到集群中
以下配置calico的两种方式二选一,推荐第一种
4.1 calico网络配置简单命令(推荐)
获取calico.yaml文件资源
l
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O
应用到kubectl中
l
sudo kubectl apply -f calico.yaml
4.2 根据calico官网命令配置(不一定好用,但可一试)
直接跳转到Quickstart for Calico on Kubernetes进行安装calico
或者根据以下指示去找到安装文档位置
通过初始化完成输出的内容中的网址https://kubernetes.io/docs/concepts/cluster-administration/addons/进入k8s官网文档
在该网页中的Networking and Network Policy
部分找到Calico并点击Calico跳转到Calico官网
点击Get started
找到TIGERA
的官网
https://docs.tigera.io/calico/latest/about
在该网页下方找到install calico部分
选择Quickstart for Calico on Kubernetes
根据Install Calico部分安装colico
命令如下
安装calico 的操作资源(执行命令报错请参考:资源获取报错解决)
l
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/tigera-operator.yaml
安装calico 的自定义资源文件
l
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/custom-resources.yaml
l
watch kubectl get pods -n calico-system
l
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
kubectl taint nodes --all node-role.kubernetes.io/master-
l
kubectl get nodes -o wide
5. 集群节点查看
查看集群节点
l
kubectl get nodes
或
l
kubectl get nodes -o wide
6. 集群添加节点
master初始化完成时输出的命令如下
鼠标左键将命令选中即可复制,直接到其他节点鼠标右键即可粘贴
l
sudo kubeadm join 192.168.193.128:6443 --token 1cd07a.h2z8wrgngllonwjt \
--discovery-token-ca-cert-hash sha256:0cc0df38925079b35a0e45e0c43f50f62dc7b3aad2e8414177a18f613c44c9fb
sudo kubeadm join 192.168.193.128:6443 --token vn3qhk.zazsy00qnx5zpejb --discovery-token-ca-cert-hash sha256:0cc0df38925079b35a0e45e0c43f50f62dc7b3aad2e8414177a18f613c44c9fb
参数:
join后跟的是master节点IP地址和端口
--token 后的参数为临时令牌,会过期
--discovery-token-ca-cert-hash
注:加入集群的命令中的token24小时后会过期,过期后需要重新再主节点执行命令生成新的token
6.1 重新生成加入节点的命令
如果忘了这个添加节点的join命令,可以在主节点master
用以下命令重新生成新的
l
kubeadm token create --print-join-command
然后将得到的命令加上sudo前缀即可到工作节点执行
6.2 将worker1节点加入集群
在K8S-WORKER1节点中执行生成的join命令即可将节点添加到集群中(用你自己生成的命令)
l
sudo kubeadm join 192.168.193.128:6443 --token vn3qhk.zazsy00qnx5zpejb --discovery-token-ca-cert-hash sha256:0cc0df38925079b35a0e45e0c43f50f62dc7b3aad2e8414177a18f613c44c9fb
没报错继续下一步,如果报错了,参考文章解决:添加节点到集群时报错处理
6.3 将worker2节点加入集群
在K8S-WORKER2节点中执行相同的命令将worker2节点加入结群
l
sudo kubeadm join 192.168.193.128:6443 --token vn3qhk.zazsy00qnx5zpejb --discovery-token-ca-cert-hash sha256:0cc0df38925079b35a0e45e0c43f50f62dc7b3aad2e8414177a18f613c44c9fb
补:hosts配置
将所有的节点的ip对应的名称,添加到每个节点的hosts中
master节点操作如下
l
sudo vim /etc/hosts
进入vim界面按i
进入编辑,将原有ip注释掉
将以下复制后右键粘贴到vim中,按esc
退出编辑后shift+zz
保存退出
l
192.168.193.128 k8s-master
192.168.193.129 k8s-worker1
192.168.193.130 k8s-worker2
重启虚拟机后生效
查看
l
cat /etc/hosts
在worker1和worker2节点分别执行以上操作修改hosts
对worker1和worker2节点操作,修改hostname全改为小写
l
hostnamectl set-hostname k8s-worker1
l
hostnamectl set-hostname k8s-worker2
6.4 查看已加入集群的节点
在主节点master中执行命令查看集群中节点信息
l
kubectl get nodes
然后到工作节点中使用该命令查看集群
报错如下
l
The connection to the server localhost:8080 was refused - did you specify the right host or port?
截图如下
原因是kubectl命令使用时需要用到kubernetes中的admin.conf文件
而此文件只有master节点初始化后生成了,工作节点并没有这个文件
解决方法就是将文件从主节点复制到从节点中,再在从节点中配置环境变量生效后即可
请参考:k8s从节点查看集群报错解决
有点套娃的意思,别笑
解决之后如下
到此k8s的安装配置就完成了,接下来就是如何使用,通过可视化工具dashboard,请接着看
六、dashboard配置
在此之前请再次检查防火墙,我这里又去看了下防火墙,又打开了,不知为何故,然后再次关闭后才进行以下操作
1. 安装dashboard
在主节点master中配置dashboard
l
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
结果如下,表示安装完成(如果失败,可参考文章使用本地创建文件的方式解决:k8s安装配置dashboard)
2. dashboard端口设置及获取
2.1 type类型
默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部
l
kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
或者
l
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
将type对应的参数修改为NodePort
i
-->修改-->esc
-->shift+zz
2.2 获取端口号
获取访问端口(后续用于访问dashboard的端口号)
l
kubectl get svc -A |grep kubernetes-dashboard
就是下图NodePort对应的端口号,即红框中的部分
3. 创建dashboard访问账号
创建dash.yaml文件
l
sudo vim dash.yaml
将以下内容复制(注,文本中的namespace参数与后续操作命令有关,需要注意)
l
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
右键将复制的内容粘贴进dash.yaml文件
按shift++zz
保存退出
应用dash.yaml文件
l
kubectl apply -f dash.yaml
应用成功后输出如下
如出现报错Unable to connect to the server: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
可参考解决
4. 获取dashboard的访问token
获取token
l
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
获取内容如下,其中最后一行为换行包含用户名@主机名libai@k8s-master
访问token为红框内部分
鼠标左键选中红框内部分,即可将内容复制保存,如下
以下为粘贴的token内容
eyJhbGciOiJSUzI1NiIsImtpZCI6ImRFNzN5YTZIV050Tzl5WGJPcldXdDJVWUh0dEpIM0xXS1ZVVVBOdHVSQVkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTd0ejZiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJlYWQzZjdhOC0yNDZhLTRlMGUtODczZS01NjY4MzI4ZTA4MDAiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.NYt1tvFiHylHBpJ37MUbz88UwzWh87azJPpS_yjSrNPVpeLILIkexLk3Vl_d-Cqqz58KtzWamDHU2DcXhcoVFnlxLSoY0py2Qr1Uq-_F1sKxW_hZtrIV9FMGCeun-Y-a7DtP4R6Vq8E6NErRblw9vEA3sCa0vDcGqLPCVIyEY9NJTi2rrKBovH0OEWEwM0PboLgQB1AG2x12JbFCa8AQz_12mI61F0Ysxhoznb3FimSAYGqJ3TNzQzIh3cEgpxNaOeKWIsWLOEQzSeTSE_1W4blfNxw20XM6Gg1oA_1elLtvj4eNrP8Hj-99QPhJquFDSmBDeuOz7WXJSZqSXM2Xew
也可通过命令查看证书token
l
kubectl describe secret -n kubernetes-dashboard
5.访问dashboard
5.1 端口查看
l
kubectl get svc -n kubernetes-dashboard
或者
l
kubectl get service kubernetes-dashboard -n kubernetes-dashboard
5.2 ip查看
查看dashboard服务运行在哪个节点上
l
kubectl get pods -n kubernetes-dashboard -o wide
精准查询kubernetes-dashboard
l
kubectl get pods -n kubernetes-dashboard -o wide | grep kubernetes-dashboard
或者模糊查询含有dashboard字段的服务
l
kubectl get pods -n kubernetes-dashboard -o wide | grep dashboard
可以看到kubernetes-dashboard服务在k8s-worker2节点中
我们到worker2节点使用ifconfig查看ip地址为192.168.193.130
5.3 访问地址
故访问地址为
访问警告,点开高级
选择继续前往连接
将之前复制的token粘贴进去,登录
登录后即可正常使用k8s的dashboard界面
在集群中可以查看我们的节点及命名空间
注意的点:
- 每次重启虚拟机后,防火墙自动开启,需要执行命令关闭systemctl stop ufw
- 每次重启后,需要等几分钟后k8s的相关服务才会启动完成,才可以查看
可能时间比较久,如果查看到pods状态如下,可再等等
然后会慢慢变好
最后恢复正常
- 访问dashboard的ip是kubernetes-dashboard所在的节点ip并不一定是master节点,所以需要先查看在那个节点上,再用对应的节点ip与端口进行访问
感谢阅读,祝君暴富!