Kubeadm部署K8S(kubernetes)集群(测试、学习环境)-单主双从

1. kubernetes介绍

1.1 kubernetes简介

Kubeadm部署K8S(kubernetes)集群(测试、学习环境)-单主双从

kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器

弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整

服务发现:服务可以通过自动发现的形式找到它所依赖的服务

负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡

版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本

存储编排:可以根据容器自身的需求自动创建存储卷

1.2 kubernetes组件

一个kubernetes集群主要是由控制节点(master)、工作节点(node)构成,每个节点上都会安装不同的组件。

Kubeadm部署K8S(kubernetes)集群(测试、学习环境)-单主双从

master:集群的控制平面,负责集群的决策(管理)

ApiServer:资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制

Scheduler:负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上

ControllerManager:负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等

Etcd:负责存储集群中各种资源对象的信息

node:集群的数据平面,负责为容器提供运行环境(干活)

Kubelet:负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器

KubeProxy:负责提供集群内部的服务发现和负载均衡

Docker:负责节点上容器的各种操作

举例:以部署一个nginx服务来说明kubernetes系统各个组件调用关系

  1. 首先要明确,一旦kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中,
  2. 一个nginx服务的安装请求会首先被发送到master节点的apiServer组件,
  3. apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上,在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer,
  4. apiServer调用controller-manager去调度Node节点安装nginx服务,
  5. kubelet接收到指令后,会通知docker,然后由docker来启动一个nginx的pod,pod是kubernetes的最小操作单元,容器必须跑在pod中至此,
  6. 一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理,

最后,外界用户就可以访问集群中的nginx服务了。

1.3 kubernetes概念

Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控

Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行

Pod:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器

Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等

Service:pod对外服务的统一入口,下面可以维护者同一类的多个pod

Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签

NameSpace:命名空间,用来隔离pod的运行环境

2. kubernetes集群

目前生产部署Kubernetes 集群主要有两种方式:

Kubeadm

Kubeadm 是一个K8s 部署工具,提供kubeadm init 和kubeadm join,用于快速部署Kubernetes 集群。

官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

二进制包:

从github 下载发行版的二进制包,手动部署每个组件,组成Kubernetes 集群。

Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

Kubeadm部署K8S(kubernetes)集群(测试、学习环境)-单主双从

3. Kubeadm方式部署(一主多从)

3.1 kubeadm介绍

kubeadm是官方社区推出的一个用于快速部署 kubernetes集群的工具,这个工具能通过两条指令完成一个 kubernetes 集群的部署:

第一、创建一个 Master 节点 kubeadm init

第二、将 Node 节点加入到当前集群中 # kubeadm join

3.2 安装要求

在开始之前,部署 Kubernetes集群机器需要满足以下几个条件:

  • 一台或多台机器,操作系统 CentOS7.x-86_x64

  • 硬件配置:2GB或更多 RAM,2 个 CPU或更多 CPU,硬盘 30GB或更多

  • 集群中所有机器之间网络互通

  • 可以访问外网,需要拉取镜像

  • 禁止 swap分区

3.3 实现目标

(1)在所有节点上安装 Docker 和 kubeadm

(2)部署 Kubernetes Master

(3)部署容器网络插件

(4)部署 Kubernetes Node,将节点加入 Kubernetes 集群中

(5)部署 Dashboard Web页面,可视化查看 Kubernetes资源

3.4 环境准备

Kubeadm部署K8S(kubernetes)集群(测试、学习环境)-单主双从

角色

IP

组件

master

10.27.134.250

docker、kubectl、kubeadm、kubelet

node1

10.27.134.251

docker、kubectl、kubeadm、kubelet

node2

10.27.134.252

docker、kubectl、kubeadm、kubelet

3.5 系统初始化(所有节点均需操作)

3.5.1 主机名解析

修改主机名

[root@jss-k8s-1 ~]# hostnamectl set-hostname master #master节点

[root@jss-k8s-2 ~]# hostnamectl set-hostname node1 #node1节点

[root@jss-k8s-3 ~]# hostnamectl set-hostname node2 #node2节点

三台服务器的地址和主机名添加到三个节点的/etc/hosts文件中

[root@master ~]# cat >> /etc/hosts << EOF

10.27.134.250 master

10.27.134.251 node1

10.27.134.252 node2

EOF

3.5.2 时间同步

kubernetes要求集群中的节点时间必须精确一直,这里使用chronyd服务从网络同步时间

启动chronyd服务并设置开机启动

systemctl start chronyd && systemctl enable chronyd

核验时间

date

3.5.3 禁用iptable和firewalld服务

kubernetes和docker 在运行的中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

关闭firewalld服务

systemctl stop firewalld && systemctl disable firewalld

关闭iptables服务

systemctl stop iptables && systemctl disable iptables

3.5.4 禁用selinux

selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题

永久关闭

sed -i ‘s/enforcing/disabled/’ /etc/selinux/config

临时关闭

setenforce 0

3.5.5 禁用swap分区

swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

永久关闭

vim /etc/fstab

Kubeadm部署K8S(kubernetes)集群(测试、学习环境)-单主双从

临时关闭

swapoff -a

3.5.6 将桥接的 IPv4流量传递到 iptables的链上

加载网桥过滤模块

cat <

Original: https://www.cnblogs.com/jiangshusheng/p/15853077.html
Author: 苏冷
Title: Kubeadm部署K8S(kubernetes)集群(测试、学习环境)-单主双从

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/591858/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • jupyter使用虚拟环境

    为了在jupyter中使用pyTorch的虚拟环境,来记录一下怎么操作一、conda命令的使用因为使用的是jupyter,所有就使用Anaconda Prompt来创建虚拟环境(也…

    数据库 2023年6月14日
    0116
  • DevOps

    Docker: ## 安装Docker yum remove docker docker-client docker-client-latest docker-common doc…

    数据库 2023年6月9日
    0111
  • xtrabackup2版本和xtrabackup8版本对比

    导语在使用xtrabackup8版本对mysql8版本进行备份恢复搭建从库的时候,继续使用xtrabackup2版本的方式,从xtrabackup_binlog_info 文件中找…

    数据库 2023年6月16日
    0159
  • MySQL索引详解,面试必问

    1、什么是索引? 索引是帮助MySQL高效获取数据的数据结构(有序)。 除了数据之外,数据库系统还维护满足特定查找算法的数据结构,这些查找算法以某种方式引用(指向)数据,从而可以在…

    数据库 2023年5月24日
    0141
  • 一文读懂Redis

    Redis与NoSQL概述 Nosql的优势 使用nosql解决cpu与内存压力 使用nosql解决I/O压力 Nosql数据库的概述 NoSql= Not Only SQL 采用…

    数据库 2023年6月6日
    0149
  • 2022蓝帽杯初赛wp(取证)

    战果 取证全解 misc出了1个 解其他题就像在坐牢 有那么一点思路,但不是完全有 手机取证_1 解压并打开阅读器,搜索627604C2-C586-48C1-AA16-FF33C3…

    数据库 2023年6月11日
    0132
  • @JsonFormat和@DateTimeFormat的作用

    @DatetimeFormat是将String转换成Date,一般前台给后台传值时用 import org.springframework.format.annotation.Da…

    数据库 2023年6月14日
    0112
  • 第十八章 AOP底层实现原理

    1.核心问题 1. AOP如何创建动态代理类 2. Spring工厂如何加工创建代理对象 通过原始对象的id值,获得的是代理对象 2.动态代理类的创建 2.1 JDK动态代理 通过…

    数据库 2023年6月14日
    0141
  • 详解在Linux中同时安装配置并使用 MySQL5.7 和 MySQL8.0

    最近需要使用mysql8.0版本,但是原本的mysql5.7版本已经被多个服务依赖,于是想想能不能同一台服务器装多个版本的mysql,一查确实可行,这里做一个记录方便自己后期回忆 …

    数据库 2023年5月24日
    0112
  • Java面试题(二)–MySQL

    1 存储引擎 1、简单描述一个Mysql的内部结构? MySQL的基本架构示意图:大体来说,MySQL可以分为 server层和 存储引擎层两部分。 ① server层包括连接器、…

    数据库 2023年5月24日
    0138
  • 第04章 MySQL运算符详解

    第04章 MySQL运算符详解 1. 算术运算符 算术运算符主要用于数学运算,可以在运算符前后连接两个数值或表达式,并对数值或表达式执行加(+)、减(-)、乘()、除(/)和模(%…

    数据库 2023年5月24日
    0115
  • Elasticsearch搜索引擎的使用

    当用户在搜索框输入关键字后,我们要为用户提供相关的搜索结果。 这种需求依赖数据库的模糊查询like关键字可以实现,但是like关键字的效率极低,而且查询需要在多个字段中进行,使用l…

    数据库 2023年6月14日
    0175
  • django-Celery分布式队列简单使用

    介绍: Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具。 它是一个专注于实时处理的任务队列,同时也支持任务调度。 worker…

    数据库 2023年6月6日
    0132
  • 最小堆、胜者树和败者树

    前言 本文介绍三种外部排序算法:最小堆、胜者树和败者树,以及为什么外部排序往往用败者树。 最小堆 最小堆有以下特点:1、最小堆是一颗完全二叉树2、每个父节点的值总是小于等于左右孩子…

    数据库 2023年6月9日
    0116
  • SQL优化这5个极简法则,直接让查询原地起飞!

    SQL 作为关系型数据库的标准语言,是 IT 从业人员必不可少的技能之一。SQL 本身并不难学,编写查询语句也很容易,但是想要编写出能够高效运行的查询语句却有一定的难度。 查询优化…

    数据库 2023年5月24日
    0102
  • JavaScript 获取 Url 上的参数(QueryString)值

    获取URL里面传的参数,在Js中不能像后台一样使用Request.QueryString来获取URL里面参数,下面介绍两种方式用来获取参数 方式一:使用split分隔来获取,这种方…

    数据库 2023年6月9日
    0105
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球