安装部署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 --nowsetenforce 0sed -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-masterhostnamectl set-hostname k8s-worker01hostnamectl set-hostname k8s-worker02
    

    每台node主机都需要执行

      cat >> /etc/hosts << EOF 192.168.44.148  k8s-master192.168.44.154  k8s-worker01192.168.44.155  k8s-worker02EOF
    
  • 开始安装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.gpghttp://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_netfilterlsmod | grep br_netfilter
    

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

     cat > /etc/modules-load.d/k8s.conf << EOFoverlaybr_netfilterEOF
    

     modprobe overlaymodprobe br_netfilter
    

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

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

    加载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.localserviceSubnet: 10.96.0.0/12podSubnet: 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.0NAMESPACE     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
    

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

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

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

相关文章

dm_control 翻译: Software and Tasks for Continuous Control

dm_control: Software and Tasks for Continuous Control dm_control&#xff1a;连续控制软件及任务集 文章目录 dm_control: Software and Tasks for Continuous Controldm_control&#xff1a;连续控制软件及任务集Abstract1 Introduction1 引言1.1 Software for research1…

Java - SPI机制

本文参考&#xff1a;SPI机制 SPI&#xff08;Service Provider Interface&#xff09;&#xff0c;是JDK内置的一种服务提供发现机制&#xff0c;可以用来启动框架扩展和替换组件&#xff0c;主要是被框架的开发人员使用&#xff0c;比如 java.sql.Driver接口&#xff0c;其他…

TensorRT转换onnx的Transpose算子遇到的奇怪问题

近来把一个模型导出为onnx并用onnx simplifier化简后转换为TensorRT engine遇到非常奇怪的问题&#xff0c;在我们的网络中有多个检测头时&#xff0c;转换出来的engine的推理效果是正常的&#xff0c;当网络中只有一个检测头时&#xff0c;转换出来的engine的推理效果奇差&…

动态代理IP如何选择?

IP地址是由IP协议所提供的一种统一的地址格式&#xff0c;通过为每一个网络和每一台主机分配逻辑地址的方式来屏蔽物理地址的差异。根据IP地址的分配方式&#xff0c;IP可以分为动态IP与静态IP两种。对于大部分用户而言&#xff0c;日常使用的IP地址均为动态IP地址。从代理IP的…

LeetCode 0429.N 叉树的层序遍历:广度优先搜索(BFS)

【LetMeFly】429.N 叉树的层序遍历&#xff1a;广度优先搜索(BFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/n-ary-tree-level-order-traversal/ 给定一个 N 叉树&#xff0c;返回其节点值的层序遍历。&#xff08;即从左到右&#xff0c;逐层遍历&#xff09;…

aiofiles:解锁异步文件操作的神器

aiofiles&#xff1a;解锁异步文件操作的神器 在Python的异步编程领域&#xff0c;文件操作一直是一个具有挑战性的任务。传统的文件操作函数在异步环境下无法发挥其最大的潜力&#xff0c;而aiofiles库应运而生。aiofiles是一个针对异步I/O操作的Python库&#xff0c;它简化了…

C#使用迭代器实现文字的动态效果

目录 一、涉及到的知识点 1.GDI 2.Thread类 3.使用IEnumerable()迭代器 二、实例 1.源码 2.生成效果&#xff1a; 一、涉及到的知识点 1.GDI GDI主要用于在窗体上绘制各种图形图像。 GDI的核心是Graphics类&#xff0c;该类表示GDI绘图表面&#xff0c;它提供将对象绘制…

不等式的证明之二

不等式的证明之二 证明下述不等式证法一证法二证法二的补充 证明下述不等式 设 a , b , c a,b,c a,b,c 是正实数&#xff0c;请证明下述不等式&#xff1a; 11 a 5 a 6 b 11 b 5 b 6 c 11 c 5 c 6 a ≤ 3 \begin{align} \sqrt{\frac{11a}{5a6b}}\sqrt{\frac{11b}{5b6c}…

leetcode hot100不同路径

本题可以采用动态规划来解决。还是按照五部曲来做 确定dp数组&#xff1a;dp[i][j]表示走到&#xff08;i&#xff0c;j&#xff09;有多少种路径 确定递推公式&#xff1a;我们这里&#xff0c;只有两个移动方向&#xff0c;比如说我移动到&#xff08;i&#xff0c;j&#x…

STM32 寄存器操作 systick 滴答定时器 与中断

一、什么是 SysTick SysTick—系统定时器是属于CM3内核中的一个外设&#xff0c;内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数器&#xff0c; 计数器每计数一次的时间为1/SYSCLK&#xff0c;一般我们设置系统时钟SYSCLK等于72M。当重装载数值寄存器的值递减到0的时候…

python学习(三):pip安装及如何加速安装第三方组件

pip全称Package Installer for Python&#xff0c;即用来安装第三方组件的工具 一.安装pip Python3中setuptools、Pip安装详解 1、安装setuptools 命令如下&#xff1a; wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.…

C语言—指针

碎碎念:做指针题的时候我仿佛回到了原点&#xff0c;总觉得目的是为了把框架搭建起来&#xff0c;我胡说的哈31 1.利用指针变量将一个数组中的数据反向输出。 /*1.利用指针变量将一个数组中的数据反向输出。*/#include <stdio.h> #include <time.h> #include <…

phpstrom创建thinkphp项目

安装php和composer 参考 安装phpstrom 创建项目 查看thinkphp版本 https://packagist.org/packages/topthink/think 打开所在项目编辑配置 即可调试运行

二维码的颜色怎么改变?轻松3步修改二维码样式

怎么修改二维码的颜色呢&#xff1f;一般我们制作的二维码或者经过系统生成的二维码大多都是黑白颜色的&#xff0c;有些小伙伴会觉得不太美观无法满足自己的使用需求。那么对于想要修改二维码样式的小伙伴&#xff0c;可以使用二维码生成器的二维码美化功能来处理&#xff0c;…

07 按键控制 LED

按键简介 按键开关是一种电子开关&#xff0c;属于电子元器件类。常见的按键开关有两种&#xff0c;第一种是轻触式按键开关&#xff08;简称轻触开关&#xff09;&#xff0c;使用时以向开关的操作方向施加压力使内部电路闭合接通&#xff0c;当撤销压力时开关断开&#xff0…

git分布式版本控制工具基本操作

Windows操作 1.1 git基本操作 1.设置用户签名 git config user.name xx git config user.email xxb163.com2.初始化本地库 git init3.查看本地库状态 git status4.添加暂存区 git add 文件名称 git add *5.提交本地库 git commit -m "描述信息" 文件6.查看版本…

《富爸爸:巴比伦最富有的人》读书笔记

目录 作者简介 感悟 经典摘录 观点&#xff1a; 支付给自己(理解是投资自己) 观点&#xff1a;源源不断地放入金币 观点&#xff1a; 把收入的一部分留给我自己 观点&#xff1a; 从专业的人士得到建议 观点&#xff1a;一旦为自己规定了任务&#xff0c;就一定要完成 …

微波炉维修笔记

微波主要是靠2.45GHz 左右的微波(12.2cm 波长)加热水分子实现食物加热 所有不要使用金属器皿进行加热&#xff0c;要么因为电磁屏蔽&#xff0c;起不到加热效果&#xff0c;要么火光四射 微波炉基本组成 借鉴姜师傅的视频 碰到不加热其它都正常的问题 1.检查高压电容 使用万…

自动驾驶中的 DCU、MCU、MPU、SOC 和汽车电子架构

自动驾驶中的 DCU、MCU、MPU 1. 分布式电子电气架构2. 域集中电子电气架构架构2.1 通用硬件定义 3. 车辆集中电子电气架构4. ADAS/AD系统方案演变进程梳理4.1 L0-L2级别的ADAS方案4.2 L2以上级别的ADAS方案 5. MCU和MPU区别5.1 MCU和MPU的区别5.2 CPU与SoC的区别5.3 举个例子 R…

【STM32】软件SPI读写W25Q64芯片

目录 W25Q64模块 W25Q64芯片简介 硬件电路 W25Q64框图 Flash操作注意事项 状态寄存器 ​编辑 指令集 INSTRUCTIONS​编辑 ​编辑 SPI读写W25Q64代码 硬件接线图 MySPI.c MySPI.h W25Q64 W25Q64.c W25Q64.h main.c 测试 SPI通信&#xff08;W25Q64芯片简介&am…