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

打印 上一主题 下一主题

主题 704|帖子 704|积分 2112

天行健,君子以发奋图强;地势坤,君子以厚德载物。

每个人都有惰性,但不断学习是好好生活的根本,共勉!

文章均为学习整理条记,分享记载为主,如有错误请指正,共同学习进步。

  

一、环境准备

1. 体系类型

linux体系安装:ubuntu22.04.3
2. 体系要求

cpu至少两个
每个cpu至少分配一个内核
运行内存至少2G
磁盘存储20G
3. 体系设置

创建服务器并设置体系参数等
参考文章:VMware安装ubuntu体系22.04.3版本
根据上面这篇文章创建的假造机,即使换了网络也不会改变ip地址,自己的电脑可以切换WiFi,连接假造机的ip地址稳定
  1. 强烈建议使用VMware来安装系统,在后续的每一阶段的操作都可以生成快照,
  2. 并即使回退到想要的位置,相当于是操作失误了或者出现问题可以回到没出问题之前的位置,真的很方便,节省时间,
  3. 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 更新安装包

  1. sudo apt-get update
复制代码
1.2 安装依赖

  1. sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
复制代码
1.3 获取证书

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

  1. sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
复制代码
1.5 再次更新安装包

  1. sudo apt update
复制代码
1.6 安装docker

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

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

3.1 查看docker状态

  1. systemctl status docker
复制代码
3.2 重启docker

  1. sudo systemctl restart docker
复制代码
3.3 开机自启

  1. sudo systemctl enable docker
复制代码

  1. sudo systemctl enable docker
  2. .service
复制代码
三、K8S组件安装

1. 组件先容

安装k8s的三个组件kubelet、kubeadm、kubectl
kubelet 运行在Cluster全部节点上,负责启动Pod和容器
kubeadm 用于初始化Cluster
kubectl 是Kubernetes命令行工具。通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。
2. 再次确保关闭ufw和swap

再查抄一下防火墙和交换内存,确保关闭
2.1 关闭防火墙

请参考小短文:正确关闭ubuntu防火墙
  1. systemctl stop ufw
复制代码
  1. sudo ufw disable
复制代码
2.2 查看防火墙状态

  1. sudo ufw status
复制代码

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

  1. sudo free -m
复制代码
2.4 关闭交换内存

(只能暂时关闭,重启后则会失效)
  1. sudo swapoff -a
复制代码
再执行以下命令则会永久关闭
(修改文件内容,注释掉swap)
  1. sudo vim /etc/fstab
复制代码
i进入编辑
在swap那行行首加#注释掉

esc退出编辑
shift+zz生存退出
然后查看修改后的内容
  1. cat /etc/fstab
复制代码
3. 组件安装(kubelet、kubectl、kubeadm)

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

3.1.1 更新apt

更新安装包
  1. sudo apt-get update
复制代码
3.1.2 安装工具

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

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

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

  1. 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为例
查看版本是否存在
  1. sudo apt-cache madison kubelet kubectl kubeadm | grep '1.22.9-00'
复制代码

指定版本进行安装
  1. sudo apt install -y kubelet=1.22.9-00 kubectl=1.22.9-00 kubeadm=1.22.9-00
复制代码
安装乐成打印的后半部分内容如下,此中也可以看到三个组件的版本号

标志指定软件包为保存,阻止更新
  1. sudo apt-mark hold kubelet kubeadm kubectl
复制代码
3.1.6.2 不指定版本安装(不推荐,因为版本默认最新,轻易报错)

不指定版本时,默认安装最新版
因用的是阿里云的地址,所以最新版是阿里云地址的最新版,不是官网的最新版
  1. sudo apt install -y kubelet kubectl kubeadm
复制代码
安装完成后的后半部分内容如下

标志指定软件包为保存,阻止更新
  1. sudo apt-mark hold kubelet kubeadm kubectl
复制代码

3.2 脚本方式安装

3.1的安装步调相当多,如果嫌贫苦可写成一个脚本文件进行执行,简单快捷
创建文件夹k8s,创建后的文件夹在当前路径下
  1. sudo mkdir k8s
复制代码
可用sudo ls
命令查看
  1. sudo ls
复制代码
在k8s文件夹中创建脚本文件installKube.sh
vim命令进入即创建
  1. sudo vim k8s/installKube.sh
复制代码
将以下内容复制(内容为3.1的全部命令集合),然后鼠标右键粘贴进去(这种粘贴方式的前提是使用putty连接服务器后在putty的窗口操作,在假造机窗口是粘贴不了的,除非有其他粘贴设置)
  1. #!/bin/bashsudo apt update
  2. && sudo apt install apt-transport-https ca-certificates curlcurl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
  3. sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
  4. sudo apt update
  5. sudo apt-cache madison kubelet kubectl kubeadm | grep '1.22.9-00'
  6. sudo apt install -y kubelet=1.22.9-00 kubectl=1.22.9-00 kubeadm=1.22.9-00
  7. sudo apt-mark hold kubelet kubeadm kubectl
复制代码
然后shift+zz生存退出
可用cat命令查看
  1. sudo cat k8s/installKube.sh
复制代码
运行脚本执行命令进行安装
  1. sh k8s/installKube.sh
复制代码
安装完成如下,一气呵成

3.3 使用官网仓库安装(此路不通请跳过此步,可能是应为在创建假造机的时候使用的是阿里云的仓库,相干设置有点题目,如果想用该步调进行安装,必要自己重新自界说安装假造机后进行实验)

官网或者阿里云二选一操作即可
更新安装包
  1. sudo apt update
复制代码
安装工具(若前面安装docker时安装过了,可不执行此命令)
  1. sudo apt-get install -y apt-transport-https ca-certificates curl
  2. gpg
复制代码
下载k8s软件包仓库的公共签名秘钥,同一个签名秘钥实用于全部仓库,可忽略URL中的版本信息
  1. 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为所需版本
  1. 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
复制代码
  1. 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 软件包仓库中找到。
再次更新安装包
  1. sudo apt update
复制代码
安装组件
  1. sudo apt install -y kubelet kubeadm kubectl
复制代码
保存版本
  1. sudo apt-mark hold kubelet kubeadm kubectl
复制代码
注:apt-mark的作用是用户将软件包标志为自动安装,或者取消标志为自动安装 hold选项用于将软件包标志为保存,以防止软件包被自动安装、升级或删除 此处主要为了防止kubelet等组件自动升级
  1. sudo apt-get install -y apt-transport-https ca-certificates curl
  2. 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 [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
  3. sudo apt-get update
  4. sudo apt-get install -y kubelet kubeadm kubectlsudo apt-mark hold kubelet kubeadm kubectl
复制代码
4. 修改cgroups

和设置镜像加速器那个步调类似,在/etc/docker/daemon.json文件中添加exec-opts参数
  1. sudo vim /etc/docker/daemon.json
复制代码
或者将原内容删除,复制完整的内容后直接复制
i–>进入编辑模式将以下exec-opts部分参加,参加后如下
  1. {
  2.         "exec-opts":[
  3.                 "native.cgroupdriver=systemd"
  4.         ],
  5.         “registry-mirrors”:["https://vj4iipoo.mirror.aliyuncs.com"]
  6. }
复制代码
esc–>shift+zz
重新加载生效
重启docker
  1. systemctl restart docker
复制代码
重启kubelet
  1. 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

可使用命令
  1. hostnamectl set-hostname K8S-WORKER1
复制代码
查看修改后的效果
  1. cat /etc/hostname
复制代码

对worker2进行类似操作,将worker2的主机名称改为K8S-WORKER2
4. 修改IP

修改worker1和worker2的ip地址(因为克隆后的两台假造机ip与被克隆的master主机ip类似,可根据自己的主机ip进行第四段+1进行修改两个worker节点的ip)
打开假造机K8S-WORKER1
输入命令查看ip信息
  1. cat /etc/netplan/00-installer-config.yaml
复制代码
可以看到master节点的主机ip信息
我的主节点master的ip为192.168.193.128/24
现在将worker1的ip地址改为192.168.193.129/24
命令如下
  1. sudo vim /etc/netplan/00-installer-config.yaml
复制代码
输入i进入编辑模式

修改后按esc退出编辑模式,按shift+zz快捷生存退出
再用cat命令查看修改后内容:::
  1. 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后必要激活才可用
使用命令
  1. sudo netplan apply
复制代码
该命令必要等几分钟左右生效,可以多等一会,然后使用putty远程连接ip地址,连上则说明激活乐成
五、创建集群

1. putty连接假造机

putty连接服务器指南
开启之前设置好的三台假造机
使用putty连接三台假造机,在putty窗口进行操作

2. 初始化

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

这里用命令查看
  1. kubectl version
复制代码
输出的信息中包罗版本信息

版本号为1.22.9
2.2 执行初始化命令

  1. sudo kubeadm init \
  2.   --kubernetes-version=v1.22.9 \
  3.   --image-repository registry.aliyuncs.com/google_containers \
  4.   --pod-network-cidr=10.24.0.0/16 \
  5.   --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,所以可能有点小题目,但是他是告诫不是报错,所以暂时不管他

初始化完成后,出现类似如下内容,表示初始化乐成
  1. ......
  2. ......
  3. ......
  4. 此处省略若干行
  5. Your Kubernetes control-plane has initialized successfully!
  6. To start using your cluster, you need to run the following as a regular user:
  7.   mkdir -p $HOME/.kube
  8.   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  9.   sudo chown $(id -u):$(id -g) $HOME/.kube/config
  10. Alternatively, if you are the root user, you can run:
  11.   export KUBECONFIG=/etc/kubernetes/admin.conf
  12. You should now deploy a pod network to the cluster.
  13. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  14.   https://kubernetes.io/docs/concepts/cluster-administration/addons/
  15. Then you can join any number of worker nodes by running the following on each as root:
  16. kubeadm join 192.168.193.128:6443 --token 1cd07a.h2z8wrgngllonwjt \
  17.         --discovery-token-ca-cert-hash sha256:0cc0df38925079b35a0e45e0c43f50f62dc7b3aad2e8414177a18f613c44c9fb
  18. libai@k8s-master:~$
复制代码
截图如下

细致阅读初始化乐成后的输出信息,也就是上面这部分内容(可以将两个红框中的命令鼠标左键选中后右键粘贴出来,备用)
1的位置大抵就是说你想要用你的集群的话,就必须以非root用户来执行红框里的mkdir等三个命令
2的位置就是说你想要别的节点参加集群就执行红框里的kubeadm join命令就行(该命令肯定要复制下来记住,待会参加节点要用,当然,忘了也没关系,可以重新生成新的)
具体操作请跳到第2.5小节开始
后续发现初始化完成后在docker中也有表现,使用docker命令查看容器,可发现有以下这些容器正在运行
  1. sudo docker ps
复制代码
输出如下,都是跟k8s相干的容器
  1. CONTAINER ID   IMAGE                                               COMMAND                  CREATED      STATUS      PORTS     NAMES
  2. 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
  3. 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
  4. ce279ba96039   08a5810c8d30                                        "kube-apiserver --ad…"   2 days ago   Up 2 days             k8s_kube-apiserver_kube-apiserver-k8s-master_kube-system_cfc7886a5b41691c59cfc56d5b4a2a56_0
  5. 544d55e5b55c   03e6595ccb65                                        "kube-controller-man…"   2 days ago   Up 2 days             k8s_kube-controller-manager_kube-controller-manager-k8s-master_kube-system_d702eaa5f3d835c50f8950a583c0f987_0
  6. 7ab0d649ad91   a709e983ff7e                                        "kube-scheduler --au…"   2 days ago   Up 2 days             k8s_kube-scheduler_kube-scheduler-k8s-master_kube-system_943ba9c025cdbb070d1589a0a2b66128_0
  7. 0d58002ebf3d   004811815584                                        "etcd --advertise-cl…"   2 days ago   Up 2 days             k8s_etcd_etcd-k8s-master_kube-system_0257569b7767afe4e6a429c33d65f7e5_0
  8. 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
  9. 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
  10. 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
  11. 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命令添加
  1. {
  2.         "exec-opts":[
  3.                 "native.cgroupdriver=systemd"
  4.         ],
  5.         “registry-mirrors”:["https://vj4iipoo.mirror.aliyuncs.com"]
  6. }
复制代码
exec-opts为cgroup管理器的指定参数设置
registry-mirrors为镜像加速地址(请设置自己的)
2.4.2 重置adm

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

根据初始化完成后输出信息的命令进行操作如下
创建.kube文件夹
  1. sudo mkdir -p $HOME/.kube
复制代码
将admin.conf文件内容复制到.kube的config文件中
  1. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
复制代码
将文件的全部权限从文件全部者修改到到全部者地点的组的其他用户(user->group)
  1. 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文件资源
  1. curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O
复制代码

应用到kubectl中
  1. 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 的操作资源(执行命令报错请参考:资源获取报错解决)
  1. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/tigera-operator.yaml
复制代码

安装calico 的自界说资源文件
  1. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/custom-resources.yaml
复制代码

  1. watch kubectl get pods -n calico-system
复制代码
  1. kubectl taint nodes --all node-role.kubernetes.io/control-plane-
  2. kubectl taint nodes --all node-role.kubernetes.io/master-
复制代码
  1. kubectl get nodes
  2. -o wide
复制代码
5. 集群节点查看

查看集群节点
  1. kubectl get nodes
复制代码


  1. kubectl get nodes
  2. -o wide
复制代码

6. 集群添加节点

master初始化完成时输出的命令如下
鼠标左键将命令选中即可复制,直接到其他节点鼠标右键即可粘贴
  1. sudo kubeadm join 192.168.193.128:6443 --token 1cd07a.h2z8wrgngllonwjt \
  2.         --discovery-token-ca-cert-hash sha256:0cc0df38925079b35a0e45e0c43f50f62dc7b3aad2e8414177a18f613c44c9fb
  3. 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用以下命令重新生成新的
  1. kubeadm token create --print-join-command
复制代码

然后将得到的命令加上sudo前缀即可到工作节点执行
6.2 将worker1节点参加集群

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

没报错继承下一步,如果报错了,参考文章解决:添加节点到集群时报错处置惩罚
6.3 将worker2节点参加集群

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

补:hosts设置

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

在主节点master中执行命令查看集群中节点信息
  1. kubectl get nodes
复制代码

然后到工作节点中使用该命令查看集群
报错如下
  1. 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
  1. 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类型,袒露到外部
  1. kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
复制代码
或者
  1. kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
复制代码

将type对应的参数修改为NodePort
i–>修改–>esc–>shift+zz
2.2 获取端标语

获取访问端口(后续用于访问dashboard的端标语)
  1. kubectl get svc -A |grep kubernetes-dashboard
复制代码
就是下图NodePort对应的端标语,即红框中的部分

3. 创建dashboard访问账号

创建dash.yaml文件
  1. sudo vim dash.yaml
复制代码
将以下内容复制(注,文本中的namespace参数与后续操作命令有关,必要注意)
  1. apiVersion: v1
  2. kind: ServiceAccount
  3. metadata:
  4.   name: admin-user
  5.   namespace: kubernetes-dashboard
  6. ---
  7. apiVersion: rbac.authorization.k8s.io/v1
  8. kind: ClusterRoleBinding
  9. metadata:
  10.   name: admin-user
  11. roleRef:
  12.   apiGroup: rbac.authorization.k8s.io
  13.   kind: ClusterRole
  14.   name: cluster-admin
  15. subjects:
  16. - kind: ServiceAccount
  17.   name: admin-user
  18.   namespace: kubernetes-dashboard
复制代码
右键将复制的内容粘贴进dash.yaml文件

按shift++zz生存退出
应用dash.yaml文件
  1. 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
  1. 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内容
  1. eyJhbGciOiJSUzI1NiIsImtpZCI6ImRFNzN5YTZIV050Tzl5WGJPcldXdDJVWUh0dEpIM0xXS1ZVVVBOdHVSQVkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTd0ejZiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJlYWQzZjdhOC0yNDZhLTRlMGUtODczZS01NjY4MzI4ZTA4MDAiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.NYt1tvFiHylHBpJ37MUbz88UwzWh87azJPpS_yjSrNPVpeLILIkexLk3Vl_d-Cqqz58KtzWamDHU2DcXhcoVFnlxLSoY0py2Qr1Uq-_F1sKxW_hZtrIV9FMGCeun-Y-a7DtP4R6Vq8E6NErRblw9vEA3sCa0vDcGqLPCVIyEY9NJTi2rrKBovH0OEWEwM0PboLgQB1AG2x12JbFCa8AQz_12mI61F0Ysxhoznb3FimSAYGqJ3TNzQzIh3cEgpxNaOeKWIsWLOEQzSeTSE_1W4blfNxw20XM6Gg1oA_1elLtvj4eNrP8Hj-99QPhJquFDSmBDeuOz7WXJSZqSXM2Xew
复制代码
也可通过命令查看证书token
  1. kubectl describe secret -n kubernetes-dashboard
复制代码
5.访问dashboard

5.1 端口查看

  1. kubectl get svc -n kubernetes-dashboard
复制代码
或者
  1. kubectl get service kubernetes-dashboard -n kubernetes-dashboard
复制代码


5.2 ip查看

查看dashboard服务运行在哪个节点上
  1. kubectl get pods -n kubernetes-dashboard -o wide
复制代码
精准查询kubernetes-dashboard
  1. kubectl get pods -n kubernetes-dashboard -o wide
  2. | grep kubernetes-dashboard
复制代码
或者含糊查询含有dashboard字段的服务
  1. kubectl get pods -n kubernetes-dashboard -o wide
  2. | grep dashboard
复制代码

可以看到kubernetes-dashboard服务在k8s-worker2节点中
我们到worker2节点使用ifconfig查看ip地址为192.168.193.130
5.3 访问地址

故访问地址为
https://192.168.193.130:30919
访问告诫,点开高级

选择继承前往连接


将之前复制的token粘贴进去,登录
登录后即可正常使用k8s的dashboard界面

在集群中可以查看我们的节点及定名空间

注意的点:


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

  • 每次重启后,必要等几分钟后k8s的相干服务才会启动完成,才可以查看
    可能时间比力久,如果查看到pods状态如下,可再等等

    然后会渐渐变好

    末了恢复正常

  • 访问dashboard的ip是kubernetes-dashboard地点的节点ip并不肯定是master节点,所以必要先查看在那个节点上,再用对应的节点ip与端口进行访问

感谢阅读,祝君暴富!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表