我可以不吃啊 发表于 2024-6-21 13:07:21

k8s搭建(具体演示完整一篇)

天行健,君子以发奋图强;地势坤,君子以厚德载物。
每个人都有惰性,但不断学习是好好生活的根本,共勉!
文章均为学习整理条记,分享记载为主,如有错误请指正,共同学习进步。


一、环境准备

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 更新安装包

sudo apt-get update


1.2 安装依赖

sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
1.3 获取证书

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
1.4 添加仓库

sudo add-apt-repository "deb http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
1.5 再次更新安装包

sudo apt update


1.6 安装docker

sudo apt-get -y install docker-ce
2. 设置镜像加速器(不配也行,建议配一下)

参考:设置阿里云容器镜像加速
3. 开启Docker

3.1 查看docker状态

systemctl status docker
3.2 重启docker

sudo systemctl restart docker

3.3 开机自启

sudo systemctl enable docker

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防火墙
systemctl stop ufw
sudo ufw disable
2.2 查看防火墙状态

sudo ufw status

systemctl status ufw.service
最好两条命令都查看一下,确保关闭,不然后续出了题目不肯定会想到这里
如果是inactive则表示已关闭
2.3 查看交换内存

sudo free -m
2.4 关闭交换内存

(只能暂时关闭,重启后则会失效)
sudo swapoff -a
再执行以下命令则会永久关闭
(修改文件内容,注释掉swap)
sudo vim /etc/fstab
i进入编辑
在swap那行行首加#注释掉
https://img-blog.csdnimg.cn/direct/30edf2ef6f974fbcb76ebe95a9b14122.png
esc退出编辑
shift+zz生存退出
然后查看修改后的内容
cat /etc/fstab
3. 组件安装(kubelet、kubectl、kubeadm)

这里实验了两种方式,一种是阿里云的镜像地址进行安装,一种是用官网的地址进行安装
3.1 使用阿里云镜像仓库安装(推荐)

3.1.1 更新apt

更新安装包
sudo apt-get update


3.1.2 安装工具

(前面安装docker的时候安装过这些则不必要再次安装)
sudo apt-get install -y apt-transport-https ca-certificates curl
3.1.3 签名秘钥

下载k8s软件包仓库的公共签名秘钥
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
3.1.4 添加k8s的apt仓库

添加适合k8s的apt仓库
sudo add-apt-repository "deb http://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
注:这里的地址必须是http,不可以用https,我这里用了https后报错,改成了http后正常,原因暂不知晓”
3.1.5 再次更新apt包

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为例
查看版本是否存在
sudo apt-cache madison kubelet kubectl kubeadm | grep '1.22.9-00'
https://img-blog.csdnimg.cn/direct/e6abde4147564dd796c1f1fb53bb76ba.png
指定版本进行安装
sudo apt install -y kubelet=1.22.9-00 kubectl=1.22.9-00 kubeadm=1.22.9-00
安装乐成打印的后半部分内容如下,此中也可以看到三个组件的版本号
https://img-blog.csdnimg.cn/direct/0da5d17ef2d0434dbc9dde69999801c0.png
标志指定软件包为保存,阻止更新
sudo apt-mark hold kubelet kubeadm kubectl


3.1.6.2 不指定版本安装(不推荐,因为版本默认最新,轻易报错)

不指定版本时,默认安装最新版
因用的是阿里云的地址,所以最新版是阿里云地址的最新版,不是官网的最新版
sudo apt install -y kubelet kubectl kubeadm
安装完成后的后半部分内容如下
https://img-blog.csdnimg.cn/direct/37123920b3384826bbcabe39c71892c6.png
标志指定软件包为保存,阻止更新
sudo apt-mark hold kubelet kubeadm kubectl


https://img-blog.csdnimg.cn/direct/7cabe1d3701141249d5d0c55b9d6d875.png
3.2 脚本方式安装

3.1的安装步调相当多,如果嫌贫苦可写成一个脚本文件进行执行,简单快捷
创建文件夹k8s,创建后的文件夹在当前路径下
sudo mkdir k8s
可用sudo ls
命令查看
sudo ls
在k8s文件夹中创建脚本文件installKube.sh
vim命令进入即创建
sudo vim k8s/installKube.sh
将以下内容复制(内容为3.1的全部命令集合),然后鼠标右键粘贴进去(这种粘贴方式的前提是使用putty连接服务器后在putty的窗口操作,在假造机窗口是粘贴不了的,除非有其他粘贴设置)
#!/bin/bashsudo apt update


&& sudo apt install apt-transport-https ca-certificates curlcurl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo add-apt-repository "deb 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命令查看
sudo cat k8s/installKube.sh
运行脚本执行命令进行安装
sh k8s/installKube.sh
安装完成如下,一气呵成
https://img-blog.csdnimg.cn/direct/5e35e04857104982954c0f0fe7b059b2.png
3.3 使用官网仓库安装(此路不通请跳过此步,可能是应为在创建假造机的时候使用的是阿里云的仓库,相干设置有点题目,如果想用该步调进行安装,必要自己重新自界说安装假造机后进行实验)

官网或者阿里云二选一操作即可
更新安装包
sudo apt update


安装工具(若前面安装docker时安装过了,可不执行此命令)
sudo apt-get install -y apt-transport-https ca-certificates curl
gpg 下载k8s软件包仓库的公共签名秘钥,同一个签名秘钥实用于全部仓库,可忽略URL中的版本信息
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为所需版本
echo 'deb https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
echo 'deb 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 软件包仓库中找到。
再次更新安装包
sudo apt update


安装组件
sudo apt install -y kubelet kubeadm kubectl
保存版本
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.listecho 'deb 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 kubectlsudo apt-mark hold kubelet kubeadm kubectl


4. 修改cgroups

和设置镜像加速器那个步调类似,在/etc/docker/daemon.json文件中添加exec-opts参数
sudo vim /etc/docker/daemon.json
或者将原内容删除,复制完整的内容后直接复制
i–>进入编辑模式将以下exec-opts部分参加,参加后如下
{
        "exec-opts":[
                "native.cgroupdriver=systemd"
        ],
        “registry-mirrors”:["https://vj4iipoo.mirror.aliyuncs.com"]
}
esc–>shift+zz
重新加载生效
重启docker
systemctl restart docker
重启kubelet
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假造机—管理—克隆
https://img-blog.csdnimg.cn/direct/3889f48618b24eeb9848fd1a6a106969.png
下一步—假造机中的当前状态—下一步—创建链接克隆—下一步
https://img-blog.csdnimg.cn/direct/e905fa2193014ab5a39f15e415531317.png
为假造机起名K8S-WORKER1
选择存储位置
完成—关闭
https://img-blog.csdnimg.cn/direct/d6ce2b1d2a7342709030c79f58bc153f.png
2. 克隆K8S-WORKER2

按照以上步调克隆K8S-WORKER2节点
https://img-blog.csdnimg.cn/direct/8812a58d851e4e639d0f285f95f1c08a.png
3. 修改主机名称

此时只能在假造机窗口进行操作
修改worker1和worker2的主机名称hostname
登录worker1
账号libai
密码123456
此时可以看到主机名还是K8S-MASTER
https://img-blog.csdnimg.cn/direct/721391c5c8e644bb9c6517e796d08090.png
可使用命令
hostnamectl set-hostname K8S-WORKER1
查看修改后的效果
cat /etc/hostname
https://img-blog.csdnimg.cn/direct/51b545ed3f904972b64a70865ffa6203.png
对worker2进行类似操作,将worker2的主机名称改为K8S-WORKER2
4. 修改IP

修改worker1和worker2的ip地址(因为克隆后的两台假造机ip与被克隆的master主机ip类似,可根据自己的主机ip进行第四段+1进行修改两个worker节点的ip)
打开假造机K8S-WORKER1
输入命令查看ip信息
cat /etc/netplan/00-installer-config.yaml

可以看到master节点的主机ip信息
我的主节点master的ip为192.168.193.128/24
现在将worker1的ip地址改为192.168.193.129/24
命令如下
sudo vim /etc/netplan/00-installer-config.yaml
输入i进入编辑模式
https://img-blog.csdnimg.cn/direct/24db512aaaa74abcbc23976d3ee6b4a3.png
修改后按esc退出编辑模式,按shift+zz快捷生存退出
再用cat命令查看修改后内容:::
cat /etc/netplan/00-installer-config.yaml

https://img-blog.csdnimg.cn/direct/065003c5011d4961aad63664121a37d5.png
类似操作,将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后必要激活才可用
使用命令
sudo netplan apply
该命令必要等几分钟左右生效,可以多等一会,然后使用putty远程连接ip地址,连上则说明激活乐成
五、创建集群

1. putty连接假造机

putty连接服务器指南
开启之前设置好的三台假造机
使用putty连接三台假造机,在putty窗口进行操作
https://img-blog.csdnimg.cn/direct/5a7927a416f8444eaa88980e2c6e3269.png
2. 初始化

在主节点K8S-MASTER上操作
2.1 查看kubernetes版本信息

这里用命令查看
kubectl version
输出的信息中包罗版本信息
https://img-blog.csdnimg.cn/direct/40d759aecd824680abd8a636ef4e9433.png
版本号为1.22.9
2.2 执行初始化命令

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,所以可能有点小题目,但是他是告诫不是报错,所以暂时不管他
https://img-blog.csdnimg.cn/direct/dcaa228cb6344d1cbaaafd8332f8167d.png
初始化完成后,出现类似如下内容,表示初始化乐成
......
......
......
此处省略若干行

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 .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:~$
截图如下
https://img-blog.csdnimg.cn/direct/e05f2096d82b42fbae601b630b377506.png
细致阅读初始化乐成后的输出信息,也就是上面这部分内容(可以将两个红框中的命令鼠标左键选中后右键粘贴出来,备用)
1的位置大抵就是说你想要用你的集群的话,就必须以非root用户来执行红框里的mkdir等三个命令
2的位置就是说你想要别的节点参加集群就执行红框里的kubeadm join命令就行(该命令肯定要复制下来记住,待会参加节点要用,当然,忘了也没关系,可以重新生成新的)
具体操作请跳到第2.5小节开始
后续发现初始化完成后在docker中也有表现,使用docker命令查看容器,可发现有以下这些容器正在运行
sudo docker ps
输出如下,都是跟k8s相干的容器
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

https://img-blog.csdnimg.cn/direct/acc7e12837f94935923438ae17df6326.png
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命令添加
{
        "exec-opts":[
                "native.cgroupdriver=systemd"
        ],
        “registry-mirrors”:["https://vj4iipoo.mirror.aliyuncs.com"]
}
exec-opts为cgroup管理器的指定参数设置
registry-mirrors为镜像加速地址(请设置自己的)
2.4.2 重置adm

报错排查完之后,必要重置adm后才能再次进行初始化,执行两个命令如下
重置adm
sudo kubeadm reset
删除相干文件
sudo rm -fr ~/.kube//etc/kubernetes/* var/lib/etcd/*
3. 设置.kube

根据初始化完成后输出信息的命令进行操作如下
创建.kube文件夹
sudo mkdir -p $HOME/.kube
将admin.conf文件内容复制到.kube的config文件中
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
将文件的全部权限从文件全部者修改到到全部者地点的组的其他用户(user->group)
sudo chown $(id -u):$(id -g) $HOME/.kube/config
https://img-blog.csdnimg.cn/direct/8e2cac5e2a8d4223803c898996602c83.png
4. calico网络设置

calico先容参考:k8s之calico网络
calico是pod之间实现互连的网络技术,因为每个pod之间必要实现隔离,有必要互连,有别的方案,但是他们都有些弊端
calico是专门为顺应容器环境来设计的,现在的最优选
部署一个pod网络到集群中
以下设置calico的两种方式二选一,推荐第一种
4.1 calico网络设置简单命令(推荐)

获取calico.yaml文件资源
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O
https://img-blog.csdnimg.cn/direct/516d2bb00a2e4e20a8b6938af1596481.png
应用到kubectl中
sudo kubectl apply -f calico.yaml
https://img-blog.csdnimg.cn/direct/70e07c4820484ea5bee6c0c02dec23d0.png
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 的操作资源(执行命令报错请参考:资源获取报错解决)
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/tigera-operator.yaml
https://img-blog.csdnimg.cn/direct/3ac3fddb8623437da5c1ed8ea65329bc.png
安装calico 的自界说资源文件
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/custom-resources.yaml
https://img-blog.csdnimg.cn/direct/5d498ab9eb824bbe83c4db882d32a064.png
watch kubectl get pods -n calico-system
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
kubectl taint nodes --all node-role.kubernetes.io/master-
kubectl get nodes

-o wide
5. 集群节点查看

查看集群节点
kubectl get nodes

https://img-blog.csdnimg.cn/direct/327bcbcb969b4da9ab49246ea555687e.png

kubectl get nodes

-o wide
https://img-blog.csdnimg.cn/direct/850baaddaf33413a849dfd54591b0b3c.png
6. 集群添加节点

master初始化完成时输出的命令如下
鼠标左键将命令选中即可复制,直接到其他节点鼠标右键即可粘贴
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用以下命令重新生成新的
kubeadm token create --print-join-command
https://img-blog.csdnimg.cn/direct/31d90caf4375403bba73f7ee5c2e4b29.png
然后将得到的命令加上sudo前缀即可到工作节点执行
6.2 将worker1节点参加集群

在K8S-WORKER1节点中执行生成的join命令即可将节点添加到集群中(用你自己生成的命令)
sudo kubeadm join 192.168.193.128:6443 --token vn3qhk.zazsy00qnx5zpejb --discovery-token-ca-cert-hash sha256:0cc0df38925079b35a0e45e0c43f50f62dc7b3aad2e8414177a18f613c44c9fb

https://img-blog.csdnimg.cn/direct/0d8710cd70e2489f8916b2b9687fd74c.png
没报错继承下一步,如果报错了,参考文章解决:添加节点到集群时报错处置惩罚
6.3 将worker2节点参加集群

在K8S-WORKER2节点中执行类似的命令将worker2节点参加结群
sudo kubeadm join 192.168.193.128:6443 --token vn3qhk.zazsy00qnx5zpejb --discovery-token-ca-cert-hash sha256:0cc0df38925079b35a0e45e0c43f50f62dc7b3aad2e8414177a18f613c44c9fb

https://img-blog.csdnimg.cn/direct/8deaebafe9da40a8aab905f33da8b1c7.png
补:hosts设置

将全部的节点的ip对应的名称,添加到每个节点的hosts中
master节点操作如下
sudo vim /etc/hosts
进入vim界面按i进入编辑,将原有ip注释掉
将以下复制后右键粘贴到vim中,按esc退出编辑后shift+zz生存退出
192.168.193.128 k8s-master
192.168.193.129 k8s-worker1
192.168.193.130 k8s-worker2
重启假造机后生效
查看
cat /etc/hosts
在worker1和worker2节点分别执行以上操作修改hosts
对worker1和worker2节点操作,修改hostname全改为小写
hostnamectl set-hostname k8s-worker1
hostnamectl set-hostname k8s-worker2
6.4 查看已参加集群的节点

在主节点master中执行命令查看集群中节点信息
kubectl get nodes

https://img-blog.csdnimg.cn/direct/e75fdcba924648b0a319953de8475e4d.png
然后到工作节点中使用该命令查看集群
报错如下
The connection to the server localhost:8080 was refused - did you specify the right host or port?
截图如下
https://img-blog.csdnimg.cn/direct/841f5408eeeb4d40ba7bfe18edd90ff5.png
https://img-blog.csdnimg.cn/direct/1cb21304a1f04d15a1c09066b1b7264d.png
原因是kubectl命令使用时必要用到kubernetes中的admin.conf文件
而此文件只有master节点初始化后生成了,工作节点并没有这个文件
解决方法就是将文件从主节点复制到从节点中,再在从节点中设置环境变量生效后即可
请参考:k8s从节点查看集群报错解决
有点套娃的意思,别笑
解决之后如下
https://img-blog.csdnimg.cn/direct/db5b3c13dc474bdeae9d6298f887f6b5.png
https://img-blog.csdnimg.cn/direct/477a8b80cc954a0b96f761b35dad6a59.png
到此k8s的安装设置就完成了,接下来就是如何使用,通过可视化工具dashboard,请接着看
六、dashboard设置

在此之前请再次查抄防火墙,我这里又去看了下防火墙,又打开了,不知为何以,然后再次关闭后才进行以下操作
1. 安装dashboard

在主节点master中设置dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
效果如下,表示安装完成(如果失败,可参考文章使用本地创建文件的方式解决:k8s安装设置dashboard)
https://img-blog.csdnimg.cn/direct/a4405e31f3ec40dc936ff7b76171c144.png
2. dashboard端口设置及获取

2.1 type类型

默认Dashboard只能集群内部访问,修改Service为NodePort类型,袒露到外部
kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
或者
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
https://img-blog.csdnimg.cn/direct/8bbd91b6f684455288c4527f8cd28200.png
将type对应的参数修改为NodePort
i–>修改–>esc–>shift+zz
2.2 获取端标语

获取访问端口(后续用于访问dashboard的端标语)
kubectl get svc -A |grep kubernetes-dashboard
就是下图NodePort对应的端标语,即红框中的部分
https://img-blog.csdnimg.cn/direct/23c03748c2fd48aeb633750ac6d309ee.png
3. 创建dashboard访问账号

创建dash.yaml文件
sudo vim dash.yaml
将以下内容复制(注,文本中的namespace参数与后续操作命令有关,必要注意)
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文件
https://img-blog.csdnimg.cn/direct/7c0eaa77b37f4c3497802695319a8d22.png
按shift++zz生存退出
应用dash.yaml文件
kubectl apply -f dash.yaml
应用乐成后输出如下
https://img-blog.csdnimg.cn/direct/dca8b269efa649edb018c192df07bc17.png
如出现报错Unable to connect to the server: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
可参考解决
4. 获取dashboard的访问token

获取token
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets.name}") -o go-template="{{.data.token | base64decode}}"
获取内容如下,此中末了一举动换行包罗用户名@主机名libai@k8s-master
访问token为红框内部分
https://img-blog.csdnimg.cn/direct/0752a6f47f16464f9c78ef8ca7880648.png
鼠标左键选中红框内部分,即可将内容复制生存,如下
https://img-blog.csdnimg.cn/direct/14f6b242aee74af88b9a55cc14e1f4c7.png
以下为粘贴的token内容
eyJhbGciOiJSUzI1NiIsImtpZCI6ImRFNzN5YTZIV050Tzl5WGJPcldXdDJVWUh0dEpIM0xXS1ZVVVBOdHVSQVkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTd0ejZiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJlYWQzZjdhOC0yNDZhLTRlMGUtODczZS01NjY4MzI4ZTA4MDAiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.NYt1tvFiHylHBpJ37MUbz88UwzWh87azJPpS_yjSrNPVpeLILIkexLk3Vl_d-Cqqz58KtzWamDHU2DcXhcoVFnlxLSoY0py2Qr1Uq-_F1sKxW_hZtrIV9FMGCeun-Y-a7DtP4R6Vq8E6NErRblw9vEA3sCa0vDcGqLPCVIyEY9NJTi2rrKBovH0OEWEwM0PboLgQB1AG2x12JbFCa8AQz_12mI61F0Ysxhoznb3FimSAYGqJ3TNzQzIh3cEgpxNaOeKWIsWLOEQzSeTSE_1W4blfNxw20XM6Gg1oA_1elLtvj4eNrP8Hj-99QPhJquFDSmBDeuOz7WXJSZqSXM2Xew
也可通过命令查看证书token
kubectl describe secret -n kubernetes-dashboard
5.访问dashboard

5.1 端口查看

kubectl get svc -n kubernetes-dashboard
或者
kubectl get service kubernetes-dashboard -n kubernetes-dashboard
https://img-blog.csdnimg.cn/direct/c407eb231bda496890d5955427bf54ca.png
https://img-blog.csdnimg.cn/direct/63ed242f83844d7694bbe58384993145.png
5.2 ip查看

查看dashboard服务运行在哪个节点上
kubectl get pods -n kubernetes-dashboard -o wide
精准查询kubernetes-dashboard
kubectl get pods -n kubernetes-dashboard -o wide
| grep kubernetes-dashboard 或者含糊查询含有dashboard字段的服务
kubectl get pods -n kubernetes-dashboard -o wide
| grep dashboard https://img-blog.csdnimg.cn/direct/61c37126fda54410a1d7b9e09383df0e.png
可以看到kubernetes-dashboard服务在k8s-worker2节点中
我们到worker2节点使用ifconfig查看ip地址为192.168.193.130
5.3 访问地址

故访问地址为
https://192.168.193.130:30919
访问告诫,点开高级
https://img-blog.csdnimg.cn/direct/5a3714a9db6b44e9a029008f0723f6df.png
选择继承前往连接
https://img-blog.csdnimg.cn/direct/5a31a68c896349ed9fea1dc786b328fb.png
https://img-blog.csdnimg.cn/direct/15fe1fa874e8480eb3ad8a7e27c8c761.png
将之前复制的token粘贴进去,登录
https://img-blog.csdnimg.cn/direct/4030c5283b094916a5d6f4f7c35ef803.png登录后即可正常使用k8s的dashboard界面
https://img-blog.csdnimg.cn/direct/d39d9ccbe8df4dab8cb4bc4ff689bd72.png
在集群中可以查看我们的节点及定名空间
https://img-blog.csdnimg.cn/direct/90611bae7766443c95782bf6522f930c.png
注意的点:


[*]每次重启假造机后,防火墙自动开启,必要执行命令关闭systemctl stop ufw

[*]每次重启后,必要等几分钟后k8s的相干服务才会启动完成,才可以查看
可能时间比力久,如果查看到pods状态如下,可再等等
https://img-blog.csdnimg.cn/direct/416d6e19fa9a4a8a995339e05708a666.png
然后会渐渐变好
https://img-blog.csdnimg.cn/direct/15712408d20e453298817c9989f3e7d4.png
末了恢复正常
https://img-blog.csdnimg.cn/direct/43bcc2cee3344b88b4c1ce60c7a63893.png
[*]访问dashboard的ip是kubernetes-dashboard地点的节点ip并不肯定是master节点,所以必要先查看在那个节点上,再用对应的节点ip与端口进行访问
感谢阅读,祝君暴富!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: k8s搭建(具体演示完整一篇)