k8s搭建(详细演示完整一篇)

天行健,君子以自强不息;地势坤,君子以厚德载物。


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


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

文章目录

  • 一、环境准备
    • 1. 系统类型
    • 2. 系统要求
    • 3. 系统配置
  • 二、Docker安装
    • 1. 安装Docker
      • 1.1 更新安装包
      • 1.2 安装依赖
      • 1.3 获取证书
      • 1.4 添加仓库
      • 1.5 再次更新安装包
      • 1.6 安装docker
    • 2. 配置镜像加速器(不配也行,建议配一下)
    • 3. 开启Docker
      • 3.1 查看docker状态
      • 3.2 重启docker
      • 3.3 开机自启
  • 三、K8S组件安装
    • 1. 组件介绍
    • 2. 再次确保关闭ufw和swap
      • 2.1 关闭防火墙
      • 2.2 查看防火墙状态
      • 2.3 查看交换内存
      • 2.4 关闭交换内存
    • 3. 组件安装(kubelet、kubectl、kubeadm)
      • 3.1 使用阿里云镜像仓库安装(推荐)
        • 3.1.1 更新apt
        • 3.1.2 安装工具
        • 3.1.3 签名秘钥
        • 3.1.4 添加k8s的apt仓库
        • 3.1.5 再次更新apt包
        • 3.1.6 安装组件(两种方式)
          • 3.1.6.1 指定版本安装(推荐)
          • 3.1.6.2 不指定版本安装(不推荐,因为版本默认最新,容易报错)
      • 3.2 脚本方式安装
      • 3.3 使用官网仓库安装(此路不通请跳过此步,可能是应为在创建虚拟机的时候使用的是阿里云的仓库,相关配置有点问题,如果想用该步骤进行安装,需要自己重新自定义安装虚拟机后进行尝试)
    • 4. 修改cgroups
  • 四、根据主节点克隆两个WORKER节点
    • 1. 克隆K8S-WORKER1
    • 2. 克隆K8S-WORKER2
    • 3. 修改主机名称
    • 4. 修改IP
    • 5. 激活IP
  • 五、创建集群
    • 1. putty连接虚拟机
    • 2. 初始化
      • 2.1 查看kubernetes版本信息
      • 2.2 执行初始化命令
      • 2.4 报错处理(无报错可以跳过此步)
        • 2.4.1 报错排查
        • 2.4.2 重置adm
    • 3. 配置.kube
    • 4. calico网络配置
      • 4.1 calico网络配置简单命令(推荐)
      • 4.2 根据calico官网命令配置(不一定好用,但可一试)
    • 5. 集群节点查看
    • 6. 集群添加节点
      • 6.1 重新生成加入节点的命令
      • 6.2 将worker1节点加入集群
      • 6.3 将worker2节点加入集群
      • 补:hosts配置
      • 6.4 查看已加入集群的节点
  • 六、dashboard配置
    • 1. 安装dashboard
    • 2. dashboard端口设置及获取
      • 2.1 type类型
      • 2.2 获取端口号
    • 3. 创建dashboard访问账号
    • 4. 获取dashboard的访问token
    • 5.访问dashboard
      • 5.1 端口查看
      • 5.2 ip查看
      • 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 更新安装包

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 [arch=amd64] 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那行行首加#注释掉
在这里插入图片描述

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 [arch=amd64] 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' 

在这里插入图片描述
指定版本进行安装

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
3.1.6.2 不指定版本安装(不推荐,因为版本默认最新,容易报错)

不指定版本时,默认安装最新版
因用的是阿里云的地址,所以最新版是阿里云地址的最新版,不是官网的最新版

sudo apt install -y kubelet kubectl kubeadm

安装完成后的后半部分内容如下
在这里插入图片描述
标记指定软件包为保留,阻止更新

sudo apt-mark hold kubelet kubeadm kubectl

在这里插入图片描述

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/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命令查看

sudo cat k8s/installKube.sh

运行脚本执行命令进行安装

sh k8s/installKube.sh

安装完成如下,一气呵成
在这里插入图片描述

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 [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
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 软件包仓库中找到。
再次更新安装包

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.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参数

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虚拟机—管理—克隆
在这里插入图片描述
下一步—虚拟机中的当前状态—下一步—创建链接克隆—下一步
在这里插入图片描述
为虚拟机起名K8S-WORKER1
选择存储位置
完成—关闭
在这里插入图片描述

2. 克隆K8S-WORKER2

按照以上步骤克隆K8S-WORKER2节点
在这里插入图片描述

3. 修改主机名称

此时只能在虚拟机窗口进行操作
修改worker1和worker2的主机名称hostname
登录worker1
账号libai
密码123456
此时可以看到主机名还是K8S-MASTER
在这里插入图片描述
可使用命令

hostnamectl set-hostname K8S-WORKER1

查看修改后的结果

cat /etc/hostname

在这里插入图片描述
对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进入编辑模式
在这里插入图片描述
修改后按esc退出编辑模式,按shift+zz快捷保存退出
再用cat命令查看修改后内容:::

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后需要激活才可用
使用命令

sudo netplan apply

该命令需要等几分钟左右生效,可以多等一会,然后使用putty远程连接ip地址,连上则说明激活成功

五、创建集群

1. putty连接虚拟机

putty连接服务器指南
开启之前配置好的三台虚拟机
使用putty连接三台虚拟机,在putty窗口进行操作
在这里插入图片描述

2. 初始化

在主节点K8S-MASTER上操作

2.1 查看kubernetes版本信息

这里用命令查看

kubectl version

输出的信息中包含版本信息
在这里插入图片描述

版本号为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,所以可能有点小问题,但是他是警告不是报错,所以暂时不管他
在这里插入图片描述

初始化完成后,出现类似如下内容,表示初始化成功

......
......
......
此处省略若干行

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命令查看容器,可发现有以下这些容器正在运行

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
应用到kubectl中

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 的操作资源(执行命令报错请参考:资源获取报错解决)

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/tigera-operator.yaml

在这里插入图片描述

安装calico 的自定义资源文件

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/custom-resources.yaml

在这里插入图片描述

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

在这里插入图片描述

kubectl get nodes -o wide

在这里插入图片描述

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

在这里插入图片描述

然后将得到的命令加上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

在这里插入图片描述

没报错继续下一步,如果报错了,参考文章解决:添加节点到集群时报错处理

6.3 将worker2节点加入集群

在K8S-WORKER2节点中执行相同的命令将worker2节点加入结群

sudo kubeadm join 192.168.193.128:6443 --token vn3qhk.zazsy00qnx5zpejb --discovery-token-ca-cert-hash sha256:0cc0df38925079b35a0e45e0c43f50f62dc7b3aad2e8414177a18f613c44c9fb

在这里插入图片描述

补: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

在这里插入图片描述
然后到工作节点中使用该命令查看集群
报错如下

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

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类型,暴露到外部

kubectl -n kubernetes-dashboard edit service kubernetes-dashboard

或者

kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

在这里插入图片描述
将type对应的参数修改为NodePort
i–>修改–>esc–>shift+zz

2.2 获取端口号

获取访问端口(后续用于访问dashboard的端口号)

kubectl get svc -A |grep kubernetes-dashboard

就是下图NodePort对应的端口号,即红框中的部分
在这里插入图片描述

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文件
在这里插入图片描述
shift++zz保存退出
应用dash.yaml文件

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

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

kubectl describe secret -n kubernetes-dashboard

5.访问dashboard

5.1 端口查看

kubectl get svc -n kubernetes-dashboard

或者

kubectl get service kubernetes-dashboard -n kubernetes-dashboard

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
可以看到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与端口进行访问

感谢阅读,祝君暴富!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/281611.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年度总结—你是你的年度MVP吗?

这段年度总结其实我之前就想写了,大概就是市赛比完之后18号的样子把,但是因为太懒了就一直拖到了现在哈哈,我思来想去,翻来覆去,彻夜难眠,想了想,还是决定把它写了吧!毕竟&#xff0…

【ROS2】MOMO的鱼香ROS2(一)ROS2入门篇——从Ubuntu操作系统开启

从Ubuntu操作系统开启 引言1 术语汇总2 Ubuntu (操作系统)2.1 Ubuntu权限管理2.2 Ubuntu安装软件2.2.1 使用apt命令安装2.2.2 dpkg安装deb包2.2.3 make install源代码安装 2.3 Ubuntu之常用指令2.3.1 ls命令(查看文件)2.3.2 cd 命…

生财有术项目精选

生财有术项目精选 25700读者,71内容 这绝对是小报童这个平台的第一名了,背靠着生财有术这个国内最大的副业平台,再加上现如今的副业热潮,成功造就了2W订阅的奇迹 专栏包含66个精选实操赚钱项目,可以说每一个项目都蕴含…

Vue(二):计算属性与 watch 监听器

03. Vue 指令拓展 3.1 指令修饰符 可以通过 . 来指明一些指令的后缀,不同的后缀中封装了不同的操作,可以帮助我们简化代码,比如之前使用过的监听 enter 键的弹起,我们需要操作事件对象,来检测用户使用了哪个键&#…

Python 中的运算符介绍(1)

算数运算符 常见的% 、//、/ 用法 赋值运算符 赋值运算:将等号右边赋值给等号左边 常见场景: 比较运算符 代码解析: 逻辑运算符 位运算符(了解) 三目运算符 身份证运算符 成员运算符

Vue独立组件开发-动态组件

文章目录 一、前言二、实现三、优化四、总结五、最后 一、前言 在开发中&#xff0c;你经常会遇到这么一种情况&#xff1a;根据条件动态地切换某个组件&#xff0c;或动态地选择渲染某个组件。 Vue 提供了另外一个内置的组件 <component> 和 is 特性&#xff0c;可以更…

【零基础入门VUE】在 Vue 中构建复杂表单

✍面向读者&#xff1a;所有人 ✍所属专栏&#xff1a;零基础入门VUE专栏https://blog.csdn.net/arthas777/category_12537076.html 目录 v-modelVue 中的 指令 Vue 中的组件 没有构建步骤 随着构建步骤 注册 VUE 组件 Vue 道具 VUE 中的道具声明 在 VUE 中传递 PROP…

【web安全】短信等各类验证码的绕过思路整理

前言 本文是对一些验证码可能出现的问题的总结。 验证码的种类分析 首先验证码有两种&#xff1a; 1.短信验证码&#xff0c;这种通常出现在一些登录&#xff0c;修改绑定信息等位置处。 2.人机验证码&#xff0c;这种一般是用来防止机器操作和密码爆破的&#xff0c;通常…

计算机组成原理-总线概述

文章目录 总线简图总线的物理实现总览总线定义总线的特性总线的分类按数据格式分类串行总线并行总线 按总线功能分类注意系统总线的进一步分类 总线的结构单总线的机构双总线的结构三总线的结构四总线的结构 小结 总线简图 总线的物理实现 如果该为数据总线&#xff0c;那么当…

【openlayers-3】加载图标

目录 1、通过overlay方式添加 2、通过overlay css方式 3、通过Feature style方式实现 在OpenLayer3中添加图标有两种方式&#xff0c;一种是通过overlay方式&#xff0c;另一种是通过Feature Style的方式。 1、通过overlay方式添加 <div id"mapCon" styl…

如何部署Tale博客网站并发布个人站点到公网随时随地远程访问?

文章目录 前言1. Tale网站搭建1.1 检查本地环境1.2 部署Tale个人博客系统1.3 启动Tale服务1.4 访问博客地址 2. Linux安装Cpolar内网穿透3. 创建Tale博客公网地址4. 使用公网地址访问Tale 前言 今天给大家带来一款基于 Java 语言的轻量级博客开源项目——Tale&#xff0c;Tale…

[HNCTF 2022 Week1]2048

[HNCTF 2022 Week1]2048 wp 通过调试 js 代码赋值来输出 flag 。 搜索 alert &#xff1a; 找到了&#xff0c;这里就是弹出 flag 的地方。 简单分析一下&#xff0c;其触发条件是 this.score > 20000 &#xff0c;那么只需调试代码到此处&#xff0c;将 this.score 赋值…

穷举vs暴搜vs深搜vs回溯vs剪枝

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 目录 &#x1f449;&#x1f3fb;全排列&#x1f449;&#…

dll文件和exe文件的区别和关系

dll文件 DLL(Dynamic Link Library)文件为动态链接库文件&#xff0c;又称"应用程序拓展"&#xff0c;是软件文件类型。在Windows中&#xff0c;许多应用程序并不是一个完整的可执行文件&#xff0c;它们被分割成一些相对独立的动态链接库&#xff0c;即DLL文件&…

快速找回误删的文件:2024 年顶级数据恢复软件大盘点

你曾经遇到过数据丢失的问题吗&#xff1f;别担心&#xff0c;12个最佳数据恢复软件帮你恢复。 计算机中的数据恢复是从辅助存储、丢失的文件或介质中恢复已删除、不可恢复、损坏、损坏和格式化的数据的过程。存储的数据可以通过正常方式带回到同一个地方&#xff0c;甚至&…

GAMES101:作业4记录

文章目录 总览算法编写代码&#xff1a;recursive_bezier()的实现Bezier()函数的实现提高部分&#xff1a;反走样 总览 Bzier 曲线是一种用于计算机图形学的参数曲线。在本次作业中,你需要实现 de Casteljau 算法来绘制由 4 个控制点表示的 Bzier 曲线 (当你正确实现该算法时,…

【Java开发岗面试】八股文—操作系统

声明&#xff1a; 背景&#xff1a;本人为24届双非硕校招生&#xff0c;已经完整经历了一次秋招&#xff0c;拿到了三个offer。本专题旨在分享自己的一些Java开发岗面试经验&#xff08;主要是校招&#xff09;&#xff0c;包括我自己总结的八股文、算法、项目、HR面和面试技巧…

【ARMv8M Cortex-M33 系列 2.1 -- Cortex-M33 使用 .hex /.srec 文件介绍】

请阅读【嵌入式开发学习必备专栏 之Cortex-M33 专栏】 文章目录 HEX 文件介绍英特尔十六进制文件格式记录类型hex 示例Cortex-M 系列hex 文件的使用 hex 文件和srec 文件生成Motorola S-Record (srec) 格式 HEX 文件介绍 .hex 文件通常用于微控制器编程&#xff0c;包括 ARM C…

『番外篇八』SwiftUI 脑洞大开实现“另类”视图跟随方法

概览 在 SwiftUI 的开发中,我们时常需要用指尖丝滑般地操作指定视图:比如,我们需要在拖动视图后让它自动归位,或者拖动一个视图时让另一个视图跟随它移动。 我们随后将会详细讨论上述两个 SwiftUI 中与视图移动相关场景的实现。 在本篇博文中,您将学到如下内容: 概览1.…

【C++】STL 容器 - multiset 容器 ( std::multiset 容器简介 | std::multiset 容器 常用操作 api 简介 )

文章目录 一、mulset 容器1、std::multiset 容器简介2、代码示例 - multiset 容器 二、std::multiset 容器 常用操作 api 简介1、常用 api 简介2、代码示例 - multiset 容器常用操作 一、mulset 容器 1、std::multiset 容器简介 在 C 语言 的 标准模板库 ( STL , Standard Temp…