当前位置: 首页 > article >正文

虚拟机搭建---K8S环境

K8S:docker容器其实本质上是一个linux里面的一个进程,容器本身自己是没有可再生能力的,没有高可用,而且生产环境运行容器,不可能只运行一两个,因此为了更加方便的管理众多容器,以及让容器具备高可用性,有一个东西出来了,容器编排工具。

k8s是个工具,它是管理容器的,k8s管理/调度的最小单元/单位是一个pod。

实际生产环境搭建K8S是以二进制的方式搭建的。

虚拟机搭建K8S环境至少2个vcpu

克隆三台虚拟机

修改主机名

配置静态IP

可以选择配置静态IP或者DHCP分配IP

运行脚本

3个节点分别运行同一个脚本

[root@kmaster ~]# sh Stream8-k8s-v1.27.0.sh

[root@knode1 ~]# sh Stream8-k8s-v1.27.0.sh

[root@knode2 ~]# sh Stream8-k8s-v1.27.0.sh

等待3个节点全部运行完毕后,把脚本里面第11步操作的命令,单独拷贝出来,在master节点上执行(注意,不需要在node上执行,仅在master上)

[root@kmaster ~]# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.27.0 --pod-network-cidr=10.244.0.0/16

如果集群初始化失败,大概率都是因为网络原因,更换网络再试

[root@kmaster ~]#   mkdir -p $HOME/.kube

[root@kmaster ~]#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@kmaster ~]#   sudo chown $(id -u):$(id -g) $HOME/.kube/config

[root@kmaster ~]# echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> /etc/profile

[root@kmaster ~]# source /etc/profile

[root@kmaster ~]#

[root@kmaster ~]# kubectl get node

NAME      STATUS     ROLES           AGE     VERSION

kmaster   NotReady   control-plane   6m32s   v1.27.0

加入其他两个节点

把生成的token命令分别在其他两个节点上执行,就会加入当前的集群

kubeadm join 192.168.100.221:6443 --token faze5f.2xcem41hpwiqiprv \

    --discovery-token-ca-cert-hash sha256:79f0aaa17a84d8de2ef22237c7afb4b19cc091303d58445734d4cef4d48b8864

安装calico网络插件

[root@kmaster ~]# kubectl create -f tigera-operator-3-26-1.yaml

[root@kmaster ~]# kubectl create -f custom-resources-3-26-1.yaml

[root@kmaster ~]# watch kubectl get pods -n calico-system

所有pod全部变为running,整个集群创建成功。

现在集群状态就变为了ready

如果执行两个yaml文件之后,看不到明明空间,或者出现了其他错误。解决方案,倒着删除,重新执行。

kubectl delete -f cutomxxxx.....yaml

kubectl delete -f tigera.....yaml

先删干净,再次尝试执行

kubectl create -f tigera....yaml

kubectl create -f custom...yaml


http://www.kler.cn/a/535079.html

相关文章:

  • 【实战篇】巧用 DeepSeek,让 Excel 数据处理更高效
  • Linux学习笔记16---高精度延时实验
  • 大模型实战篇之Deepseek二、一键部署DeepSeek-V3和DeepSeek-R1模型
  • mysql8安装时提示-缺少Microsoft Visual C++ 2019 x64 redistributable
  • 为什么会有函数调用参数带标签的写法?Swift函数调用的参数传递需要加前缀是否是冗余?函数调用?函数参数?
  • Java 大视界 -- Java 大数据在智能教育中的应用与个性化学习(75)
  • GoFrame 微服务脚手架模块 (v2.8.x)
  • LeetCode 72.编辑距离
  • UE5 蓝图学习计划 - Day 14:搭建基础游戏场景
  • MySQL InnoDB引擎 高度为3的B+树,可以存储的数据量
  • 高级java每日一道面试题-2025年01月30日-框架篇[SpringBoot篇]-如何理解 Spring Boot 配置加载顺序 ?
  • 树欲静而凤不止
  • redis之RDB持久化过程
  • Spring Boot整合MQTT
  • 2025游戏行业的趋势预测
  • GB/T 43698-2024 《网络安全技术 软件供应链安全要求》标准解读
  • Docker镜像管理:掌握save/load与export/import的精髓
  • 90.子集||
  • python学opencv|读取图像(五十五)使用cv2.medianBlur()函数实现图像像素中值滤波处理
  • node.js使用mysql2对接数据库
  • 【分布式理论五】分布式调用(3):服务注册与发现
  • Python批量重命名文件的实用案例
  • 【Linux高级IO】五种IO模型
  • 手写MVVM框架-渲染v-for列表(修改List)
  • VUE 集成企微机器人通知
  • hot100(8)