k8s搭建(四、k8s集群创建)

news2024/11/25 6:58:53

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


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


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

文章目录

  • k8s集群创建
    • 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 查看已加入集群的节点


k8s搭建文章:
k8s搭建(一、k8s环境配置与docker安装)
k8s搭建(二、k8s组件安装)
k8s搭建(三、k8s从节点创建)
k8s搭建(四、k8s集群创建)
k8s搭建(五、k8s可视化管理工具Dashboard配置)

k8s集群创建

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


感谢阅读,祝君暴富!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS仿真R2机器人之安装运行及MoveIt的介绍

R2(Robonaut 2)是NASA美国宇航局与GM通用联合推出的宇航人形机器人,能在国际空间站使用,可想而知其价格是非常昂贵,几百万美刀吧,还好NASA发布了一个R2机器人的Gazebo模型,使用模型就不需要花钱了,由于我们…

Kubernetes网络-VXLAN

一. 网络基础 1. 计算机网络的分层 如今连接方式也越来也丰富,网线、WiFi、蓝牙、光纤,甚至我们普通的电线、照明所用的灯光,都可以作为接入网络的介质。如此庞大的网络,丰富多样的设备,计算机网络技术能把它们统一起…

js对象方法大全(开发必会)

目录 前言 assgin(对象合并) 参数 功能 返回值 测试 结果 结论 create(以源对象为原型创建新对象) 参数 功能 返回值 测试 结果 结论 defineProperties(对属性进行具体定义) 参数 功能 返回值 测试 结果 结论 defineProperty(重写或定义新属性) 参数 功…

Google Play上架:2023年度总结报告

今天是2023年的最后一个工作日,今天用来总结一下2023年关于谷歌商店上架的相关政策改动和对应的拒审解决方法。 目录 政策更新与改动2023 年 2 月 22 日2023 年 4 月5 日2023 年 7 月 12 日2023 年 10 月 25 日 开发者计划政策拒审邮件内容和解决办法 政策更新与改…

【Linux】深挖进程地址空间

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟悉【Linux】进程地址空间 > 毒鸡汤&#xff…

模糊-神经网络控制 原理与工程应用(绪论)

模糊—神经网络控制原理与工程应用 绪论 模糊和确定系统 在客观世界中,系统可分为确定性系统和模糊性系统,前者可用精确数学模型加以描述,而后者则不能。 输入输出类型 (b)的模糊性输出可通过反模糊化转换…

一招搞定msvcr100.dll缺失问题,msvcr100.dll丢失的多种解决方法

msvcr100.dll是Microsoft Visual C 2010 Redistributable Package的一部分,它是运行许多基于Windows操作系统上的应用程序所必需的动态链接库文件。如果该文件安装不正确、丢失或损坏,则使用该文件的应用程序将无法正常启动,会出现“无法启动…

做抖店的话营业执照要办什么类型?法人必须是本人信息?问题解答

我是王路飞。 想在抖音开店的新手,好像对抖音个人店有一种迷之追求。 先劝告你们一句,贪小便宜容易吃大亏。 抖音个人店并不适合新手开通,它重在“试运营”这三个字,新手不仅无法正常把店铺做起来,而且后续还要把对…

React实现拖拽效果

基于 React 的拖拽效果 Demo 一个基于 React 的拖拽功能实现的 Demo. 两个关键点 1, draggable 属性 2, drag 事件 draggable 属性 img 标签默认是支持拖拽的, 当时其他 HTML 标签, 想要其拖动的话, 需要为其添加 draggable“true” 属性 drag 事件 drag 相关的事件有:…

Android Camera

1. 相关的API Android有三套关于摄像头的API(库),分别是Camera、Camera2和CameraX,其中Camera已废弃,在Android5.0以后推荐使用Camera2和CameraX,Camera2推出是用来替换Camera的,它拥有丰富的API可以为复杂的用例提供…

【Redis交响乐】Redis中的通用命令

文章目录 1. 基本命令 get set2. 全局命令(1)keys(2)exists(3)del(4)expire && ttl面试题: redis中key的过期策略是怎么实现的?定时器的实现原理(1)基于优先级队列/堆(2)基于时间轮实现的定时器 (5) type 我们知道,redis是按照键值对的方式存储数据的. Redis中基本的命…

这本书没有一个公式,却讲透了数学的本质!

这本书没有一个公式,却讲透了数学的本质! 《数学的雨伞下:理解世界的乐趣》。一本足以刷新观念的好书,从超市到对数再到相对论,娓娓道来。对于思维空间也给出了一个更容易理解的角度。 作者:米卡埃尔•洛奈…

【电商项目实战】MD5登录加密及JSR303自定义注解

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《电商项目实战》。🎯🎯 &am…

用友时空KSOA UploadImage存在任意文件上传漏洞

产品简介 用友时空KSOA是建立在SOA理念指导下研发的新一代产品,是根据流通企业最前沿的I需求推出的统一的IT基础架构,它可以让流通企业各个时期建立的IT系统之间彼此轻松对话,帮助流通企业保护原有的IT投资,简化IT管理&#xff0…

10、RabbitMQ高频面试题

1、你们项目中哪里用到了RabbitMQ RabbitMQ是我们项目中服务通信的主要方式之一 , 我们项目中服务通信主要有二种方式实现 : 通过Feign实现服务的同步调用通过MQ实现服务的异步通信 下面要结合自己的项目中功能来说两个地方 xxx xxx 2、为什么会选择使用RabbitMQ 我们项…

XS2200电机驱动芯片解决方案

XS2200 是一款内置驱动 FET 的高集成度微步驱动器,内置 5 个 H 桥,可以构成 2 路 STEP 驱动和一路 DC 驱动(或 VCM 驱动)。XS2200 集成 FLL,支持 1M~28M 外部时钟输入,降低外部时钟源的要求。内部驱动 FET …

前端 -- 基础 常用标签 ( 图像标签及其属性详解)

目录 图像标签 : 插入图像 图像标签的其它属性 : alt 属性 title 属性 width 属性 height 属性 border 属性 注意 图像标签 : 在我们的网页中,可以看到 好多 好多 图片,那这些图片又是怎样 在…

javascript之location常用属性和方法

文章目录 前言为什么使用location的属性和方法呢?属性展示hrefhosthostnameportprotocolpathname 方法展示replace(url)assign(url)reload()toString() 总结属性总结:方法总结: 前言 本章学习的是location常用属性和方法 为什么使用location的…

独立站如何优化网页加载速度

对于跨境电商独立站而言,流量是跨境电商业务的重中之重,由于独立站并不自带流量,非常依赖于谷歌搜索引擎自然流量,以及付费广告流量。 但随着付费流量价格日益水涨船高,为了摆脱对付费流量的依赖,相信广大…

【数据结构】快速排序(4种方式实现)

前言:前面我们学习了几种相对比较简单的排序,今天我们要一起学习的是快速排序,我们将通过四种方式来模拟实现快排。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:数据结构 👈 &#x1f4a…