kubernetes的概念以及部署

news2024/7/31 9:12:25

简介:

        kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第一个正式版本。
        kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

  • 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器
  • 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
  • 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
  • 负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡
  • 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本
  • 存储编排:可以根据容器自身的需求自动创建存储卷
     

kubernetes的组件

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

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

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

                   等机制。

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

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

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

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

Kubelet:负责维护容器的生命周期,监听节点上pod的状态,负责与master节点通信,并管

               理节点上的pod

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服务了。

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的运行环境

         对于相同标签的pod,在运行的时候可以进行负载均衡。

安装

        操作环境:CPU(2G)        内存(4G)        硬盘(50G)

环境初始化:

检查操作系统的版本

# 要求centos版本要在7.9
cat /etc/redhat-release

时间同步

# 安装chrony
$ yum install chrony -y
# 修改配置文件
$ vim /etc/chrony.conf
server ntp1.aliyun.com iburst

# 启动chrony服务器
$ systemctl start chronyd
# 设置chronyd服务开机自启
$ systemctl enable chronyd
# 查看是否同步
$ chronyc source

禁用iptables和firewalld服务

# 关闭firewalld服务,并关闭开启自启
$ systemctl disable firewalld --now
# 查看状态
$ firewall-cmd state

# 关闭iptables服务
$ systemctl disable iptables --now

# 禁用selinux
# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disabled
   SELINUX=disabled
# 或者
$ sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
# 注意上面是修改配置文件,只有重启linux服务才可以生效,要是不想重启设置setenfoce
$ setenfoce 0

禁用swap分区

# 编辑分区配置文件/etc/fstab,注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务
  UUID=455cc753-7a60-4c17-a424-7741728c44a1 /boot xfs defaults 0 0
  /dev/mapper/centos-home /home xfs defaults 0 0
  # /dev/mapper/centos-swap swap swap defaults 0 0

升级操作系统内核

# 先导入新内核软件包的签名公钥,验证其有效性
$ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 安装elrepo YUM源仓库
$  yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
# 安装kernel-ml版本,ml为长期稳定版本,lt为长期维护版本
$ yum --enablerepo="elrepo-kernel" -y install kernel-ml.x86_64

# 修改默认内核启动项
$ grub2-set-default 0
# 重新生成grub2引导文件
$ grub2-mkconfig -o /boot/grub2/grub.cfg
# 更新后,需要重启,使用升级的内核生效
$ reboot

修改linux内核参数

# 修改linux的内核参数,添加网桥过滤和地址转发功能
# 编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
# 重新加载配置
[root@master ~]# sysctl -p /etc/sysctl.d/kubernetes.conf
# 加载网桥过滤模块
[root@master ~]# modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
[root@master ~]# lsmod | grep br_netfilter

配置ipvs功能

在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的
两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块

# 1 安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadm -y
# 2 添加需要加载的模块写入脚本文件
[root@master ~]# cat <<EOF > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
# 3 为脚本文件添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
# 4 执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
# 5 查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4

基础环境

k8s环境准备

由于kubernetes的镜像源在国外,速度比较慢,这里切换成国内的镜像源,本文使用阿里云YUM源。

$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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
$ yum clean all && yum makecache
# 集群软件安装
安装kubeadm、kubelet和kubectl
# yum install kubeadm kubelet kubectl -y
# 查看所有的可用版本
$ yum list kubeadm kubelet kubectl --showduplicates | sort -r
# 默认安装的版本就是最新版1.24.X,当然也可以指定版本安装 ,如 yum install kubelet-1.16.2
kubeadm-1.16.2 kubectl-1.16.2
$ yum install kubeadm-1.25.4 kubelet-1.25.4 kubectl-1.25.4
#安装后查看版本
$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.2",
GitCommit:"f66044f4361b9f1f96f0053dd46cb7dce5e990a8", GitTreeState:"clean",
BuildDate:"2022-06-15T14:20:54Z", GoVersion:"go1.18.3", Compiler:"gc",
Platform:"linux/amd64"}
# 配置kubelet的cgroup
# 为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。
$ cat <<EOF > /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"    # 如果不是docker安装,不需要添加
KUBE_PROXY_MODE="ipvs"
EOF
# 设置kubelet开机自启
# systemctl enable kubelet
  • kubeadm:用来初始化集群的指令。

  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。

  • kubectl:用来与集群通信的命令行工具。

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

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

相关文章

PDF怎么免费分割成多个文件?这几个方法非常好用!

记灵在线工具是一种常用的电子工具&#xff0c;尤其在工作和学习中&#xff0c;我们经常需要使用记灵工具进行文档处理和整理。其中&#xff0c;记灵工具的分割功能是非常有用的&#xff0c;因为它可以将一个大的文件分割成多个较小的文件&#xff0c;从而便于我们对文件进行分…

Ubuntu22.04如何安装steam游戏平台

linux终端安装 安装命令1 打开终端&#xff0c;输入以下命令安装&#xff1a; sudo snap install steam 安装命令2 1.在这种安装模式下&#xff0c;我们使用的是指令安装&#xff0c;这时我们需要打开终端&#xff08;cmd/控制台&#xff09;随后输入此指令&#xff1a;“su…

口语理解任务源码详解系列(三)利用BiRNN-attention模型实现

利用RNN-attention模型实现 写在前面 在前文介绍了项目的数据集构建&#xff1a;传送门&#xff0c;以及利用seq2seq-attention模型实现意图分类与槽位填充任务&#xff1a;传送门 本文利用BiRNN-attention实现&#xff1a;实现细节请参考论文&#xff1a;《Attention-Based Re…

一键搞定发布自己Jar到Maven中央仓库

做java 开发那当然离不开jar包管理, 不知何时一直想想封装一个自己的jar包 然后发布到maven中央仓库给别人使用。 hhh 我感觉自己写一个jar包工具然后&#xff0c;被很多人使用是一件很牛&#xff0c;很快乐事情。 终于有了这个机会&#xff0c;和时间。SpringBoot stater出来了…

Steam搬砖项目介绍

Steam搬砖项目&#xff1a;轻松赚取稳定收入的副业选择 对于许多数字游戏玩家来说&#xff0c;Steam平台并不陌生。今天&#xff0c;我将向您介绍一个稳定的副业选择——Steam搬砖项目。通通过简单的操作&#xff0c;您可以轻松获得几十上百元的利润。 介绍 Steam搬运砖项目…

css 伪元素和浮动

展示为行内元素 inline-block <style>div {/* 浏览器解析行内块或行内标签的时候, 如果标签换行书写会产生一个空格的距离, 展示为行内元素 */display: inline-block;width: 100px;height: 100px;}.one {background-color: pink;}.two {background-color: skyblue;}</…

基于OpenCV 实现车牌号码识别--附免费源码

在本教程中,您将学习如何使用 OpenCV 和 EasyOCR 包自动执行车牌/车牌识别 (LPR/NPR)。 EasyOCR是一个开源 Python 包,用于执行光学字符识别 - OCR(从图像中提取文本)。 该软件包非常易于使用,在撰写本文时,它支持 80 多种语言,包括中文、阿拉伯语、法语、英语、西里尔…

多元回归预测 | Matlab主成分分析PCA降维,BP神经网络回归预测。PCA-BP回归预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab主成分分析PCA降维,BP神经网络回归预测。PCA-BP回归预测模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环境变量 warnin…

【脚本语言】Shell Script - 日期的获取、设置和延时操作

目录 基础概念 基础语法 打印当前日期 打印纪元时 将日期转换为纪元时 打印要求格式的日期 设置日期和时间 基础概念 Bash可以帮助我们以不同的格式打印日期、设置日期&#xff0c;又或根据日期或时间进行操作等。 在类Unix系统中&#xff0c;日期被存储为一个整数&#xff0…

阿里云服务器架构x86、GPU、ARM、裸金属和超级计算集群说明

阿里云服务器架构有什么区别&#xff1f;X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、超级计算集群有什么区别&#xff1f;阿里云服务器网分享云服务器ECS架构详细说明&#xff1a; 目录 阿里云服务器ECS架构说明 X86计算 ARM计算 GPU/FPGA/ASIC 弹性裸金属服务…

在 CI/CD流水线中运行自动化单元测试的4个原因

目录 什么是单元测试&#xff1f; C#中的单元测试示例 我需要在CI/CD 流水线中运行自动化测试吗&#xff1f; 开发人员代码验证反馈循环 预验证 步步为营 减少“另一个开发人员写了这段代码”的问题 什么是单元测试&#xff1f; 单元测试 什么是单元测试&#xff1f; 单…

【MySQL】内置函数详解

【MySQL】内置函数详解 日期函数字符串函数数学函数加密函数与其它 日期函数 --获取当前日期 mysql> select current_date(); ---------------- | current_date() | ---------------- | 2023-07-09 | ---------------- --获取当前时间 mysql> select current_time();…

ChatGLM2-6b本地部署

chatglm2-6m模型 git 地址 https://github.com/THUDM/ChatGLM2-6B 模型百度网盘地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1-LFcPB0H23RSpTKOECsjxw?pwd5e3d 提取码&#xff1a;5e3d 1 模型简介 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#…

【高级程序设计语言C++】类与对象

2.1类的定义2.1.1 类的两种定义方式2.1.2 类的访问限定符2.1.3 C中的struct和class的区别是什么&#xff1f;2.1.4 类的实例化2.1.5 计算类对象的大小2.1.6 this指针 2.2 类的6个默认成员函数2.2.1 构造函数2.2.2 析构函数2.2.3 拷贝构造函数2.2.4 赋值运算符重载2.2.5 取地址及…

Java新特性:Lambda表达式

Java新特性&#xff1a;Lambda表达式 Lambda 表达式&#xff08;Lambda expression&#xff09;&#xff0c;也可称为闭包&#xff08;Closure&#xff09;&#xff0c;是 Java&#xff08;SE&#xff09;8 中一个重要的新特性。Lambda 表达式允许我们通过表达式来代替功能接口…

第五章——循环和关系表达式

for循环 很多情况下都需要程序执行重复的任务 #include<iostream> using namespace std; int main() {int i;for (i 0; i < 5; i){cout << "C knows loop.\n";}cout << "C knows when to stop.\n";return 0; } for循环的组成部分 …

107、基于51单片机多路无线调频对讲机系统设计(程序+原理图+PCB源文件+参考论文+外文翻译+任务书+开题报告+硬件设计资料+元器件清单等)

摘 要 对讲机作为短距离通信和移动调度指挥的重要工具,在社会各个行业都有广泛的应用。尤其是随着数字电路技术的发展&#xff0c;新型的对讲机无论在外型还是性能上相对传统的模拟对讲机都有了长足的进步。对讲机主要包含需要基站支持的集群对讲机和常规无中心对讲机两种&…

深度理解 JAVA序列化

前言 相信大家日常开发中&#xff0c;经常看到Java对象“implements Serializable”。那么&#xff0c;它到底有什么用呢&#xff1f;本文从以下几个角度来解析序列这一块知识点~ 什么是Java序列化&#xff1f;为什么需要序列化&#xff1f;序列化用途Java序列化常用API序列化…

Android 热修复一

一、什么是热修复&#xff1f; 在我们应用上线后出现bug需要及时修复时&#xff0c;不用再发新的安装包&#xff0c;只需要发布补丁包&#xff0c;在客户无感知下修复掉bug。 实现效果&#xff1a; Demo源码&#xff1a; https://gitee.com/sziitjim/hotfix 二、怎么进行热修…

极速上手k8s,Kubernetes 从入门到摸鱼系列-理论篇

1. 引言&#x1f44b; 大家好&#xff0c;我是比特桃&#xff01;随着微服务架构越来越流行&#xff0c;大规模的微服务容器编排成了一件具有挑战的事情。在这次容器化云原生的发展中&#xff0c;Docker 成了容器化的赢家&#xff0c;而 Kubernetes 则成为了容器编排的赢家。k…