kubernetes环境搭建及部署

2023-11-02

一、kubernetes 概述

1、kubernetes 基本介绍

        kubernetes,简称 K8s,是用 8 代替 8 个字符“ubernete”而成的缩写。是一个开源 的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的 应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种 机制。

        传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配 置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等 操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于 可移植性。

        新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件 系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署, 由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进 行迁移。

         容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间 成一对一关系也使容器有更大优势,使用容器可以在 build 或 release 的阶段,为应用创 建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构, 这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”, 这更便于监控和管理。

        Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、 应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便 对应用请求进行负载均衡。

        在 Kubernetes 中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通 过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需 要运维人员去进行复杂的手工配置和处理。

2、kubernetes 功能和架构

2.1、概述

     Kubernetes 是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过 Kubernetes 能够进行应用的自动化部署和扩缩容。在 Kubernetes 中,会将组成应用的容 器组合成一个逻辑单元以更易管理和发现。Kubernetes 积累了作为 Google 生产环境运行 工作负载 15 年的经验,并吸收了来自于社区的最佳想法和实践。

2.2 、K8s 功能

(1)自动装箱

基于容器对应用运行环境的资源配置要求自动部署应用容器

(2)自我修复(自愈能力)

当容器失败时,会对容器进行重启

当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度

当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务

(3)水平扩展

通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大 或规模剪裁

(4)服务发现

用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和 负载均衡

(5) 滚动更新

可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新

(6) 版本回退

可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退

(7)密钥和配置管理 在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。

(8)存储编排 自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要 存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务

(9)批处理 提供一次性任务,定时任务;满足批量数据处理和分析的场景

2.3 、k8s 集群架构

2.4 、k8s 集群架构节点角色功能

Master Node

k8s 集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;

Master Node 由 API Server、Scheduler、ClusterState Store(ETCD 数据库)和 Controller MangerServer 所组成。

Worker Node

集群工作节点,运行用户业务应用容器;

Worker Node 包含 kubelet、kube proxy 和 ContainerRuntime;

二、kubernetes 集群搭建(kubeadm方式)

2.1 、kubeadm 部署方式介绍

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

- 创建一个Master 节点kubeadm init

- 将Node 节点加入到当前集群中$ kubeadm join <Master 节点的IP 和端口>

2.2、安装要求

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

  • 1台以上机器,操作系统 CentOS7.x-64位系统
  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
  • 集群中所有机器之间网络互通
  • 可以访问外网,需要拉取镜像 禁止swap分区

2.3、最终目标

  • 在所有节点上安装Docker 和kubeadm
  • 部署Kubernetes Master
  • 所有节点上安装Docker和kubeadm,kubelet
  • 部署 Kubernetes Node,将节点加入 Kubernetes 集群中
  • 部署 Dashboard Web 页面,可视化查看 Kubernetes资源

2.4、准备环境

 

角色         IP地址        组件                             

master01    192.30.93.1  docker,kubectl,kubeadm,kubelet

node01      192.30.93.2  docker,kubectl,kubeadm,kubelet

2.5、环境部署

2.6.1 检查操作系统的版本

此方式下安装kubernetes集群要求Centos版本要在7.5或之上

cat /etc/redhat-release

CentOS Linux release 7.9.2009 (Core)


2.6.2 关闭防火墙

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

(1)关闭firewalld服务

       systemctl stop firewalld

        systemctl disable firewalld

(2)关闭iptables服务

        systemctl stop iptables

        systemctl disable iptables

2.6.3 关闭 selinux

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

setenforce 0   #临时

sed -i 's/enforcing/disabled/' /etc/selinux/config   #永久

2.6.4 关闭 swap

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

swapoff -a # 临时

sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久

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

cat >> /etc/sysctl.d/k8s.conf << EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

## 重新加载配置,生效

sysctl  --system

2.6.6 时间同步

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

企业中建议配置内部的会见同步服务器

systemctl start chronyd

systemctl enable chronyd

date

2.6.7安装docker

Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。

安装 Docker,系统已安装docker查看版本

2.6.8  安装Kubernetes组件

1、由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源

2、编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置

[kubernetes]

name=Kubernetes

baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgchech=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

3、安装kubeadm、kubelet和kubectl

yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0  -y --nogpgcheck

4、设置kubelet开机自启

[root@master ~]# systemctl enable kubelet

2.6.9  集群初始化

下面的操作只需要在master节点上执行即可

1、在 172.30.93.225(Master)执行

kubeadm init \

--apiserver-advertise-address=192.30.93.1 \

--image-repository registry.aliyuncs.com/google_containers \

--kubernetes-version v1.17.4 \

--service-cidr=10.96.0.0/12 \

--pod-network-cidr=10.244.0.0/16

由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。

执行完按照要求执行以下步骤

2、创建必要文件

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf  $HOME/.kube/config

sudo chown $(id -u):$(id -g)  $HOME/.kube/config

下面的操作只需要在node节点上执行即可

kubeadm join 192.30.93.1:6443 --token lcpklc.qstkss5lqi1ybell \

--discovery-token-ca-cert-hash sha256:82d9bff70d810f82f192683b7feba12660c1a30e5b919f1cf07a86fe3ccca25f

在master上查看节点信息

kubectl get node

2.6.10 安装 Pod 网络插件(CNI)

只在master节点操作即可

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

确保能够访问到 quay.io 这个 registery。如果 Pod 镜像下载失败,可以改这个镜像地址

2.6、集群测试

2.6.1 创建一个nginx服务

kubectl create deployment nginx  --image=nginx:1.14-alpine

2.6.2 暴露端口

kubectl expose deploy nginx  --port=80 --target-port=80  --type=NodePort

2.6.3查看服务

kubectl get pod,svc

访问地址:http://NodeIP:Port

注意:如果只有一台机器 需要去除master上的污点,k8s默认master不工作

允许master节点部署pod

kubectl taint nodes --all node-role.kubernetes.io/master-

污点可选参数

      NoSchedule: 一定不能被调度

      PreferNoSchedule: 尽量不要调度

      NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod

kubectl taint nodes master1 node-role.kubernetes.io/master=:PreferNoSchedule

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubernetes环境搭建及部署 的相关文章

随机推荐

  • RTThread中falut定位方法

    RTThread中fault定位方法 在 RTThread中HardFault Handler分析 一文中已经分析了RTThread中对于fault中断的处理方法 接下来讲解如何根据错误输出信息对程序出现fault的位置进行定位 rtthr
  • Python基础(list列表的扩展方式和dict的用法)

    一 list列表扩展的方式有几种 或者说添加元素的方法 1 append 将对象追加到列表中最后一个元素的末尾 2 extend 通过从可选对象追加元素来扩展列表 3 insert 在索引前插入对象 以此来扩展列表 二 对 cherry l
  • 车与羊的选择

    电影 决胜21点 开始部分 课堂上教授问了这样一个问题 假设你正在参加一个电视游戏节目 被要求在三扇门中选择一扇 其中一扇后面有一辆车 其余两扇后面则是羊 你选择了一扇门 假设是1号门 这时候不知什么原因 主持人 他知道各个门后面都有什么
  • Typec协议之PD通信消息详解一

    Messages 消息由消息头和可变长度 包括零 数据部分组成 消息 头 数据 格式如下图 1 只包含头消息 其它为PHY Layer 2 包含消息头和数据消息 3 包含消息头和数据消息 和扩展的消息 Message Header 从表中可
  • 学习笔记--Verilog HDL高级数字设计--第六章组合逻辑与时序逻辑的综合

    组合逻辑与时序逻辑的综合 综合引擎能够自动完成一组布尔函数的最简化 并将结果映射成能满足设计目标的硬件实现 转换 优化 映射 本章将介绍如何编写易于综合的Verilog模型 综合工具完成的工作 1 检测并消除冗余项 2 查找组合反馈环路 3
  • 模糊c均值聚类_模式识别:K均值算法&模糊c均值算法的应用

    1 背景介绍 在实际应用场景中我们会遇见很多无监督分类的任务 样本不具有类别标注 我们无法通过有监督学习设计分类器 基于样本间相似性度量的聚类方法是无监督学习的重要组成部分 一般来说 聚类准则是根据样本之间的距离或相似程度来定义的 通常将相
  • mysql死锁问题分析

    线上某服务时不时报出如下异常 大约一天二十多次 Deadlock found when trying to get lock Oh My God 是死锁问题 尽管报错不多 对性能目前看来也无太大影响 但还是需要解决 保不齐哪天成为性能瓶颈
  • EDK2编译记录

    EDK2 EDK2 PLATFORM EDK2 NON OSI 以上三个仓库 EDK2是主仓库 EDK2 PLATFORM是和EDK2版本对应的板子和CPU相关的仓库 比如树莓派的就在这个里面 EDK2 NON OSI是有一些license
  • 表的读写分离的优缺点?

    读写分离是一种常见的数据库优化策略 将数据库的读操作和写操作分别分配给不同的数据库实例处理 以下是读写分离的优缺点 优点 提升读取性能 通过将读操作分发到专用的读库 可以减轻主库的读取压力 提升整体的读取性能 横向扩展能力 读写分离方案为系
  • Mesa学习笔记#1:Running MESA

    Mesa学习笔记 1 Running MESA Running MESA 关于如何使用MESA来演化一颗恒星 MESA DIR 目录有许多子目录 这些子目录中的大多数都是模块 MESA中的 M 它们提供一些特定的功能 例如 kap 提供计算
  • 最近很火的微信啪一啪猜猜是怎样通过Flutter实现的?

    作者 CrazyQ1 链接 https juejin im post 5eeb49a1e51d4573c91b91ab 最近这个啪一啪效果挺火的啊 群里经常有人啪 介绍 其实之前我就双击过头像 但并没任何效果 估计是当时把这个啪一啪消息隐藏
  • QThread的信号与槽用法详解

    QThread的信号与槽用法主要涉及以下几个方面 QThread的finished 信号 当QThread执行完毕时 会发出finished 信号 我们可以通过连接该信号到槽函数的方式 实现在QThread执行完毕后进行一些操作 例如 cl
  • 公司组网网络解决方案和企业常用的组网技术有哪些?

    随着企业信息化的发展 依赖互联网 云服务等协作办公的需求越来越多 组建一个高效适用的企业网络 对于提高企业办公效率 促进企业发展显得至关重要 企业组网的方式主要有 MPLS专线 VPN以及SD WAN等 至于哪一种才是好的解决方案 网宿君认
  • vue el-dialog嵌入video实现视频播放功能

    video嵌入dialog实现视频播放 业务需求 1 实现的效果图 3 全部代码 复制粘贴即可实现 业务需求 弹窗实现视频播放 并且切换不同选项卡播放不同视频 1 实现的效果图 3 全部代码 复制粘贴即可实现
  • springboot内置序列化工具Jackson

    JackSon介绍 本文使用的JackSon版本为2 9 6 JackSon是解析JSON和XML的一个框架 优点是简单易用 性能较高 JackSon处理JSON的方式 JackSon提供了三种JSON的处理方式 分别是数据绑定 树模型 流
  • J-Link识别到驱动但是识别不到芯片CODE和上电亮红灯的原因和解决方法

    今天在来分享一下自己在使用J Link时候遇到的一个问题以及我自己的解决方法 今天在用J Link烧录时候突然发现J link连接到开发板时候会先闪几下红灯 然后J link驱动是可以找到的 但是通过Keil查看J link是否识别到要烧录
  • Linux 中的 chage 命令及示例

    chage命令用于查看和更改用户密码过期信息 当要为用户提供有限时间的登录或需要不时更改登录密码时 使用此命令 借助该命令 我们可以查看账户的时效信息 上次更改密码的日期 设置密码更改时间 一定时间后锁定账户等 chage 命令的语法如下
  • 网络层拥塞控制与传输层TCP拥塞控制的区别

    近期学习计算机网络的过程中 发现网络层与传输层都有对拥塞控制的实现 为什么网络层和传输层都有拥塞控制呢 其实 网络层拥塞控制和传输层拥塞控制的目的是相同的 都是为了防止过多的数据进入网络 保证整个网络中不出现过量分组而引起网络的性能下降 那
  • 目标检测从入门到精通—概述(一)

    你有梦想 就去实现它 目录 你有梦想 就去实现它 1 计算机视觉 CV Computer Vision 领域任务是什么 图像分类 目标检测 分割是计算机视觉领域的三大任务 一是分类 Classification 二是检测 Detection
  • kubernetes环境搭建及部署

    一 kubernetes 概述 1 kubernetes 基本介绍 kubernetes 简称 K8s 是用 8 代替 8 个字符 ubernete 而成的缩写 是一个开源 的 用于管理云平台中多个主机上的容器化的应用 Kubernetes