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)

大家都在看

  • ERROR 1396 (HY000): Operation ALTER USER failed for ‘root’@’localhost’

    发现网上很多帖子都是互相抄袭的,关键是不能解决执行后的问题,在这里分享我的解决方案。 [En] Found a lot of posts on the Internet are c…

    数据库 2023年5月24日
    091
  • grafana+prometheus如何查看tcp连接数量

    最后解决方案 经过和负责监控的大佬了解,获得了一个可行的方案:在每个pod中新增一个sidecar容器,在容器中部署node_exporter,或者在容器中放个自动查看端口连接数并…

    数据库 2023年6月9日
    0120
  • 开源之夏 2022 与您相约

    活动简介 “开源之夏(英文简称 OSPP)”是中科院软件所”开源软件供应链点亮计划”指导下的一项面向高校学生的暑期活动,由中国科学院…

    数据库 2023年5月24日
    0117
  • MySQL语句与正则表达式

    正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤SELECT检索出的数据…

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

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

    数据库 2023年6月14日
    099
  • 格林童话之祖父和孙子

    从前有个很老很老的老人,眼睛花,耳朵也背,双膝还不住地发抖。每当他坐在餐桌前 吃饭时,汤匙也握不稳,常常把菜汤撒在桌布上,汤还会从嘴边流出来。儿子和媳妇都嫌弃 他,老人只好躲到灶后…

    数据库 2023年6月9日
    092
  • 关于EF分页查询报错(Count must have a non-negative value.)的解决方案

    具体的异常信息如下,一开始没有写日志只看到错误信息:Count must have a non-negative value.,从表面意思可以看出来是Count值出现了负数,所以报…

    数据库 2023年6月9日
    091
  • 史上最全面的mysql数据库下载安装教程(适合初学者)

    Original: https://www.cnblogs.com/chaichaichai/p/15330533.htmlAuthor: 牛仔码农Title: 史上最全面的mys…

    数据库 2023年5月24日
    099
  • mysql权限问题

    注意问题 grant all privileges on shop.* to ‘hosp’@’%’ flush privileges; 查询账号权限类型%和localhost是不同…

    数据库 2023年6月9日
    0144
  • asyncio 异步编程

    首先了解一下协程,协程的本质就是一条线程,多个任务在一条线程上来回切换,协程的所有切换都是基于用户,只有在用户级别才能感知到的 IO 才会用协程模块来规避,在 python 中主要…

    数据库 2023年6月9日
    062
  • Nginx实现服务器端集群搭建

    Nginx实现服务器端集群搭建 Nginx与Tomcat部署 前面课程已经将Nginx的大部分内容进行了讲解,我们都知道了Nginx在高并发场景和处理静态资源是非常高性能的,但是在…

    数据库 2023年6月6日
    080
  • Hadoop_mapreduce统计文本单词

    Hadoop MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理…

    数据库 2023年6月11日
    084
  • MRCTF2020 pyFlag

    可以看到在zip文件头和jpg文件尾中有提示这是秘密文件的part1,那么思路就打开了,将其他图片的秘密文件部分拼成一个文件即可。 全部合起来组成一个zip文件,不是伪加密,先爆破…

    数据库 2023年6月11日
    087
  • 阿里慢SQL治理5大经典案例

    菜鸟供应链金融慢sql治理已经有一段时间,自己负责的应用持续很长时间没有慢sql告警,现阶段在推进组内其他成员治理应用慢sql。这里把治理过程中的一些实践拿出来分享下。 一、全表扫…

    数据库 2023年5月24日
    0127
  • JavaScript Date 时间类型 .toISOString() 时差问题

    JS中使用 toISOString 方法导致差了8个小时的问题 使用 getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。对差的时间进行补…

    数据库 2023年6月11日
    091
  • 探究MySQL中SQL查询的成本

    成本 什么是成本,即SQL进行查询的花费的时间成本,包含IO成本和CPU成本。 IO成本:即将数据页从硬盘中读取到内存中的读取时间成本。通常1页就是1.0的成本。 CPU成本:即是…

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