安装部署k8s集群

系统: CentOS Linux release 7.9.2009 (Core)

  • 准备3台主机
192.168.44.148k8s-master
92.168.44.154k8s-worker01
192.168.44.155k8s-worker02
  • 3台主机准备工作
    关闭防火墙和selinux

      systemctl disable firewalld --now
      setenforce 0
      sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    

    关闭swap分区(swap分区会降低性能,所以选择关闭)
    参考如下链接:

      https://blog.csdn.net/dejunyang/article/details/97972399
    

    设置node的主机名,并配置/etc/hosts(这样可以方面看到pod调度到哪个node上面)
    对应的node配置对应的主机名

      hostnamectl set-hostname k8s-master
      hostnamectl set-hostname k8s-worker01
      hostnamectl set-hostname k8s-worker02
    

    每台node主机都需要执行

      cat >> /etc/hosts << EOF 
      192.168.44.148  k8s-master
      192.168.44.154  k8s-worker01
      192.168.44.155  k8s-worker02
      EOF
    
  • 开始安装k8s

  1. 配置yum源(3台主机都需要操作,使用阿里云yum仓库)

    cat >  /etc/yum.repos.d/kubernetes.repo << EOF
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
            http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
  2. 安装 kuberneters组件(所有节点安装)

    yum -y install kubeadm-1.19.0 kubectl-1.19.0 kubelet-1.19.0 --disableexcludes=kubernetes
    
  • --disableexcludes=Kubernetes 禁掉除了这个kubernetes之外的别的仓库
  • 这里安装的是指定版本,不指定版本默认安装最新版本
  1. kubelet服务,启动并设置开启自启(所有node执行)

    systemctl enable kubelet --now
    
  2. 所有节点安装docker

    yum install -y yum-utils
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    yum -y install docker-ce-19.03.10-3.el7 docker-ce-cli-19.03.10-3.el7 containerd.io docker-compose-plugin
    

    note: K8s使用的是1.19.0版本,官网推荐docker 版本 19.03

    启动,并自启docker

    systemctl enable docker --now
    

    Docker配置镜像仓库,并修改cgroup驱动为systemd(所有node节点执行)

    Cgroups概念  cgroups 的全称是 Linux Control Groups,主要作用是限制、记录和隔离进程组(process
    groups)使用的物理资源(cpu、memory、IO 等)。

    systemd是系统自带的cgroup管理器, 系统初始化就存在的, 和cgroups联系紧密,为每一个进程分配cgroups,
    用它管理就行了. 如果设置成cgroupfs就存在2个cgroup控制管理器, 实验证明在资源有压力的情况下,会存在不稳定的情况。

    由于 kubeadm 把 kubelet 视为一个系统服务来管理,所以对基于 kubeadm 的安装kubernetes, 我们推荐使用
    systemd 驱动,不推荐 cgroupfs 驱动。

    cat > /etc/docker/daemon.json << EOF
    {
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors": ["https://l72pvsl6.mirror.aliyuncs.com"],
    "log-opts": {"max-size":"50M","max-file":"3"}
    }
    EOF
    
  • "exec-opts": ["native.cgroupdriver=systemd"] 设置cgroup驱动为systemd
  • "registry-mirrors": ["https://l72pvsl6.mirror.aliyuncs.com"] 设置docker镜像仓库为阿里云镜像
  • "log-opts": {"max-size":"50M","max-file":"3"} 设置docker容器日志最大为50M,最大文件个数为 3
  1. 允许 iptables 检查桥接流量
    若要显式加载此模块,请运行 sudo modprobe br_netfilter 通过运行 lsmod | grep br_netfilter 来验证 br_netfilter 模块是否已加载

     sudo modprobe br_netfilter
     lsmod | grep br_netfilter
    

    为了让 Linux 节点的 iptables 能够正确查看桥接流量,请确认 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 设置为 1。例如:

     cat > /etc/modules-load.d/k8s.conf << EOF
      overlay
      br_netfilter
     EOF
    

     modprobe overlay
     modprobe br_netfilter
    

    设置所需的 sysctl 参数,参数在重新启动后保持不变

     cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
     net.bridge.bridge-nf-call-iptables  = 1
     net.bridge.bridge-nf-call-ip6tables = 1
     net.ipv4.ip_forward                 = 1
     EOF
    

    加载sysctl参数(重启也能生效)

     sysctl --system
    
  2. 修改kubeadm的默认配置

    kubeadm config print init-defaults > init-config.yaml     将kubeadm默认的配置保存在文件中,到时候导入配置文件初始化集群
    

    修改init-config.yaml(只修改几个关键的部分)

    advertiseAddress: 192.168.44.148
    imageRepository: registry.aliyuncs.com/google_containers
    networking:
     dnsDomain: cluster.local
     serviceSubnet: 10.96.0.0/12
     podSubnet: 192.168.0.0/16 
    

    note:

  • advertiseAddress master 与集群通信的ip

  • imageRepository: registry.aliyuncs.com/google_containers 镜像仓库地址

  • networking 下面只添加了 podSubnet: 192.168.0.0/16 这个参数,其他都是默认;待会要修改CNI文件子网范围和这个一致

    查看需要拉取的镜像

    kubeadm config images list --config=init-config.yaml
    

    拉取镜像

    kubeadm config images pull --config=init-config.yaml
    
  1. 运行kubeadm init 命令安装master 节点

    kubeadm init --config=init-config.yaml
    

note: 可以忽略如下信息

W0131 16:57:45.102290 3727 configset.go:348] WARNING: kubeadmcannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]

Your Kubernetes control-plane has initialized successfully! 代表控制平面初始化成功

  1. 为kubectl 配置证书才能访问master
    非root用户配置:

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

    root用户配置:

    echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
    source /etc/profile
    
  2. 将节点加入到k8s集群

    当然,当集群已经成功初始化完成都,最下方会打印出加入集群的代码:
    kubeadm join 192.168.44.148:6443 --token abcdef.0123456789abcdef
    –discovery-token-ca-cert-hash sha256:88eb2767faaad801ce07501946b510d20bc180fd20cf35c9aa1822b3b345c2ef

    获取加入node节点的token(master节点执行)

    kubeadm token list
    

    获取 --discovery-token-ca-cert-hash 值

    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
    

    固定格式是(注意换成自己的token和hash值):

    kubeadm join 192.168.44.148:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:88eb2767faaad801ce07501946b510d20bc180fd20cf35c9aa1822b3b345c2ef
    

    如果token过期了,可以在master节点上运行

    kubeadm token create
    

    打印加入节点的完整命令可以运行

    kubeadm token create --print-join-command
    

    在所有node节点执行 加入集群的token
    根据自己对应的加入集群的token

    kubeadm join 192.168.44.148:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:88eb2767faaad801ce07501946b510d20bc180fd20cf35c9aa1822b3b345c2ef
    

    在master节点使用 kubectl get pod -A 查看所有组件是否安装成功,状态是否Runting(需要等待一会)

    kubectl  get pod -A
    
    	NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
    kube-system   coredns-6d56c8448f-hsm4m             0/1     Pending   0          16m
    kube-system   coredns-6d56c8448f-z66pp             0/1     Pending   0          16m
    kube-system   etcd-k8s-master                      1/1     Running   0          16m
    kube-system   kube-apiserver-k8s-master            1/1     Running   0          16m
    kube-system   kube-controller-manager-k8s-master   1/1     Running   0          16m
    kube-system   kube-proxy-447d7                     1/1     Running   0          119s
    kube-system   kube-proxy-9gt2z                     1/1     Running   0          16m
    kube-system   kube-proxy-s9hbb                     1/1     Running   0          114s
    kube-system   kube-scheduler-k8s-master            1/1     Running   0          16m
    

    在master节点使用查看所有节点信息

    kubectl get nodes
    
    	NAME           STATUS     ROLES    AGE     VERSION
    k8s-master     NotReady   master   17m     v1.19.0
    k8s-worker01   NotReady   <none>   2m48s   v1.19.0
    k8s-worker02   NotReady   <none>   2m43s   v1.19.0
    

    note:Node节点状态显示 NotReady 因为 还没有安装 CNI(容器网络接口)

  3. 安装Calico CNI网络插件(在master节点执行)
    下载资源文件

    curl -O https://docs.tigera.io/archive/v3.18/manifests/calico.yaml
    

    修改一下pod网段
    在这里插入图片描述

    安装

    kubectl apply -f calico.yaml
    

    等待一会再次查看pod,node详情

    kubectl get nodes,pod -A
    
    	NAME                STATUS   ROLES    AGE   VERSION
    node/k8s-master     Ready    master   36m   v1.19.0
    node/k8s-worker01   Ready    <none>   21m   v1.19.0
    node/k8s-worker02   Ready    <none>   21m   v1.19.0
    
    NAMESPACE     NAME                                           READY   STATUS             RESTARTS   AGE
    kube-system   pod/calico-kube-controllers-56c7cdffc6-frc82   0/1     CrashLoopBackOff   6          13m
    kube-system   pod/calico-node-7rxzn                          1/1     Running            0          13m
    kube-system   pod/calico-node-dbjhv                          1/1     Running            0          13m
    kube-system   pod/calico-node-fsw2d                          1/1     Running            0          13m
    kube-system   pod/coredns-6d56c8448f-hsm4m                   0/1     Running            0          36m
    kube-system   pod/coredns-6d56c8448f-z66pp                   0/1     Running            0          36m
    kube-system   pod/etcd-k8s-master                            1/1     Running            0          36m
    kube-system   pod/kube-apiserver-k8s-master                  1/1     Running            0          36m
    kube-system   pod/kube-controller-manager-k8s-master         1/1     Running            0          36m
    kube-system   pod/kube-proxy-447d7                           1/1     Running            0          21m
    kube-system   pod/kube-proxy-9gt2z                           1/1     Running            0          36m
    kube-system   pod/kube-proxy-s9hbb                           1/1     Running            0          21m
    kube-system   pod/kube-scheduler-k8s-master                  1/1     Running            0          36m
    

    目前来看node节点已经就绪了,但是有一个pod报错,2个pod没有准备好,使用kubectl --namespace=kube-system describe pod pod名称 查看pod的事件

    kubectl --namespace=kube-system describe pod calico-kube-controllers-56c7cdffc6-frc82
    

    报错问题能力有限无法处理,部署基本都是这样。组要是版本差异然后不知道怎么处理!!!
    如果知道是什么原因导致的报错,还请不吝赐教。

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

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

相关文章

MySQL进阶45讲【22】MySQL是怎么保证数据不丢的?

1 前言 今天这篇文章&#xff0c;继续介绍在业务高峰期临时提升性能的方法。从文章标题“MySQL是怎么保证数据不丢的&#xff1f;”&#xff0c;就可以看出来&#xff0c;今天介绍的方法&#xff0c;跟数据的可靠性有关。 在专栏前面文章中&#xff0c;着重介绍了WAL机制&…

软考学习--计算机组成原理与体系结构

计算机组成原理与体系结构 数据的表示 进制转换 R 进制转换为 10 进制–按权展开法 10进制转换为2进制 原码 反码 补码 移码 原码 &#xff1a;数字的二进制表示反码 &#xff1a; 正数的反码等于原码&#xff0c;负数的反码等于原码取反补码&#xff1a; 正数的补码等…

python使用工厂模式和策略模式实现读文件、分析内容功能

当涉及到在 Python 中创建类以及使用设计模式来实现读取文件和分析内容的功能时&#xff0c;我们可以考虑使用工厂模式和策略模式的结合。下面是一个简单的示例&#xff0c;演示如何通过创建类和使用设计模式来实现这一功能&#xff1a; # 工厂模式&#xff1a;根据不同的分析…

qwen1.5 chat vllm推理使用案例

参考:https://github.com/QwenLM/Qwen1.5 下载:https://huggingface.co/collections/Qwen/qwen15-65c0a2f577b1ecb76d786524 下载可以参考huggingface-cli 命令下载使用:https://blog.csdn.net/weixin_42357472/article/details/1326636931、vllm运行 显卡驱动:NVIDIA-S…

java数据结构与算法刷题-----LeetCode239. 滑动窗口最大值

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 1. 法一&#xff1a;指针法 解题思路 我们以每一个窗口来看&#xff0c;找…

Linux+Win双系统远程重启到Win

背景 电脑安装了双系统&#xff08;ubuntu 22.04 win11&#xff09;&#xff0c;默认进入ubuntu系统。给电脑设置了WoL(Wake-on-LAN)&#xff0c;方便远程开机远程控制。 但是ubuntu的引导程序grub无法远程控制&#xff0c;远程开机会默认进入ubuntu。 虽然说可以进入ubuntu后…

【STM32】硬件SPI读写W25Q64芯片

目录 基础知识回顾&#xff1a; SPI外设简介 SPI框图 主模式全双工连续传输 非连续传输 初始化SPI外设 核心代码 - 交换一个字节 硬件接线图 Code 程序配置过程 MySPI.c MySPI.h W25Q64.c W25Q64.h W25Q64_Ins.h main.c 基础知识回顾&#xff1a; 【STM32】SP…

《UE5_C++多人TPS完整教程》学习笔记19 ——《P20 我们子系统的回调函数(Callbacks to Our Subsystem)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P20 我们子系统的回调函数&#xff08;Callbacks to Our Subsystem&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&…

【XR806开发板试用】+移植rosserial到XR806

1 XR806简介 板子来源于极术社区的试用&#xff0c;XR806的在线网址 其主要参数&#xff1a; 主控XR806AF2LDDRSIP 288KB SRAM存储SIP 160KB Code ROM. SIP 16Mbit Flash.天线板载WiFi/BT双天线&#xff0c;可共存按键reboot按键 1&#xff0c;功能按键 1灯红色电源指示灯 1…

如何在wxPython应用程序中使用Panda3D

我们知道wxPython提供了丰富的工具和部件来构建用户界面&#xff0c;如果当我们整合wxPython和Panda3D可以创建出功能丰富且交互性强的应用程序&#xff0c;可以创建出强大而丰富的用户界面和3D场景。这样做的主要挑战在于将两个库整合到一个应用程序中&#xff0c;同时确保它们…

【.NET Core】深入理解async 和 await 理解

【.NET Core】深入理解async 和 await 理解 文章目录 【.NET Core】深入理解async 和 await 理解一、概述二、async异步执行机制理解三、async与await应用3.1 async与await简单应用3.2 带有返回值async与await应用 四、async和await中常见问题总结4.1 当方法用async标识时&…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第10章 项目进度管理(六)

博主2023年11月通过了信息系统项目管理的考试&#xff0c;考试过程中发现考试的内容全部是教材中的内容&#xff0c;非常符合我学习的思路&#xff0c;因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家&#xff0c;希望更多的人能够通过考试&a…

跨境云手机如何简化tiktok运营流程

如今&#xff0c;tiktok已经成为世界范围内都非常流行的社交媒体平台。然而在大多数情况下&#xff0c;由于网络原因&#xff0c;tiktok无法在国内使用&#xff0c;但依然有越来越多的人注册tiktok号码、建立tiktok矩阵。原因是tiktok仍然有大量的流量可供商业使用&#xff0c;…

day04-股票K线功能实现

股票K线功能实现 今日目标 1.理解股票T和T-1概念&#xff0c;实现成交量对比功能; 2.理解个股涨跌幅度统计功能; 2.1 分析业务&#xff0c;SQL落地; 2.2 完善不存在数据的区间默认回显功能; 3.理解个股分时线业务&#xff0c;并实现功能; 4.理解个股日K线业务&#xff0c;并实…

使用傅里叶实现100倍的压缩效果(附Python源码)

傅里叶变换&#xff08;Fourier Transform&#xff09;是一种将一个函数&#xff08;在时间或空间域&#xff09;转换为另一个函数&#xff08;在频率域&#xff09;的数学变换方法。它在信号处理、图像处理、通信等领域有广泛应用。 实现过程 将傅里叶系数核心的1%保留&…

从零开始手写mmo游戏从框架到爆炸(十五)— 命令行客户端改造

导航&#xff1a;从零开始手写mmo游戏从框架到爆炸&#xff08;零&#xff09;—— 导航-CSDN博客 到现在&#xff0c;我们切实需要一个客户端来完整的进行英雄选择&#xff0c;选择地图&#xff0c;打怪等等功能。所以我们需要把之前极为简陋的客户端改造一下。 首先…

0成本部署github前端项目流程

0成本部署github纯前端项目流程 对业内来说应该是一个比较常规的操作&#xff0c;对于新手来说进行过一次应该就很难忘记了&#xff0c;但很多人仍然是不会的&#xff0c;认为部署项目很难&#xff0c;很专业&#xff0c;其实现在由于这些厂商的努力&#xff0c;大众&#xff…

js设计模式:装饰者模式

作用: 可以给原有对象的身上添加新的属性方法 可以让对象或者组件进行扩展 示例: class Person{constructor(name,selfSkill){this.name namethis.selfSkill selfSkill}run 会走路}//所有人类都有的共同特性和技能let wjt new Person(王惊涛,写代码)let mashi new Pers…

Python实现KDJ指标计算:股票技术分析的利器系列(3)

Python实现KDJ指标计算&#xff1a;股票技术分析的利器系列&#xff08;3&#xff09; 介绍算法解释 代码rolling函数介绍计算LLV&#xff08;最低价最小值&#xff09;和HHV&#xff08;最高价最大值&#xff09;计算RSV计算SMA&#xff08;简单移动平均&#xff09; 完整代码…

micro-app以UMD js链接方式引入使用

npm 下载好micro-zoe/micro-app后&#xff0c;找到index.umd.js&#xff1a; 新建一个测试html&#xff0c;引入并使用&#xff1a; 参考&#xff1a; 微组件实践 - 掘金