80、k8s概念及组件介绍

news2024/11/13 15:11:56

一、k8s

kubernetes:k8s----希腊语,舵手,飞行员

1.1、k8s作用:

​ 用于自动部署,扩展,管理容器化部署的应用程序。开源(半开源。)

​ k8s的底层语言是由go语言。

​ k8s理解成负责自动化运维管理多个容器化的应用的集群。

​ 谷歌基于go语言开发的。

1.2、k8s的版本

​ 1.18-1.2之间

​ 常用的1.20-----docker

​ 1.24-------container

1.3、k8s的使用场景:

1、docker部署了一个nginx,–cpu,-m一旦访问量增大,nginx有可能沾满了系统资源。

内存告警 ,cpu告警。

运维人员入场,要么对服务器扩容,要么就重新部署服务。对cpu和内存做限制,防止再一次占满整个服务器。

自动化运维管理:k8s

1、多节点部署,不再是单机部署

2、自动完成更新和部署

3、跨节点之间的通信问题

4、k8s有自我修复机制,使得整个容器集群开源再用户的期望状态下运行。

1.4、k8s的特点:

1、自我修复,在节点故障时,或者容器启动失败,节点故障时,会自动把该节点上的容器重新部署到其他节点。

容器启动失败时,启动失败,他会自动的重新启动容器,3次失败后,就认为服务不可用。

在容器启动时,也会检测机制(探针),检测容器是否正常。

确保集群内部的服务能够正常工作。

2、弹性伸缩,在一个容器(pod)占用机器的资源比较高时,k8s会自动增加pod的数量,在资源占用下降时,会自动释放pod的数量。以最小的成本运行服务。(重点)

3、自动发布(滚动发布模式,默认模式)和回滚

k8s在更新的时候,不是一次性的更新所有,而是更新一部分,然后在更新剩余的部分。如果有问题,可以随时回滚。

4、服务发现和负载均衡。

多个容器有一个统一的访问入口,内部地址和统一的对外地址。自动负载均衡所有管理的容器。无需考虑容器的ip地址

5、存储编排,支持外挂存储,内部挂载,内部存储卷,外部挂载,本地存储,也可以公有云,NFS,ceph都可以支持。

6、集中化配置和密钥管理:

k8s大的所有的配置可以加密的形式保存在集群信息中,提供集群的安全性。

7、任务的批量处理

二、核心组件(重点)

架构:主从架构,master----slave模式,所有操作、管理,运维都是在主节点完成。

从节点:node节点,工作节点,负载工作的节点。pod一般在从节点。

2.1、组件:

1、kuber-apiserver

1、kuber-apiserver:这个是整个集群的大脑。每个组件之间的资源请求和调度操作都是通过apiserver完成的,通过api接口发送到各个组件。

api接口:内部的组件和组件之间通信的接口,内部调用方法(代码)(程序与程序之间)

端口:应用和应用之间,客户端和服务端之间的通信。

所有的资源对象的增删改查和监听都是由api server来完成的,处理之后交给etcd进行存储。

2、ETCD

2、ETCD k8s内部的存储服务,分布式的键值存储系统。存储了

k8s集群的配置和用户设置,以及集群内部服务的信息。只有apiserver和etcd通信,读写权限。其他组件要想往ecd存储信息或者读取信息必须通过APlsever。

etcd分布式必须是奇数,1台 3台

3、kube-contronller-manager

3、kube-contronller-manager运行管理控制器

k8s集群当中吃力常规任务的后台的线程,是k8s集群当中所有资源对象自动化控制的中心。
在k8s集群当中,几个资源对应一个控制器。controller-manager就是来管理这些控制器的。

node controller节点控制器,节点出现故障时,发现和响应

replication controller:副本控制器,我们创建资源对象时,可以选择创建的个数(pod数量)。保证资源对象声明的副本数和创建的数量保持一致。

endpoints controller 端点控制器 service对应的pod。service来匹配对应的pod,监听pod的变化,端点就是暴露出来用于对外访问。

宿主机-----集群----pod----跳板service

resoercequota controller资源配额控制器

确保创建的资源对象不会超过设定系统资源量。

namespace controller:项目上进行区分,每个命名空间都是独立的。管理命名空间的生命周期(增删改查)

4、kuber-scheduler

4、kuber-scheduler:根据调度算法,为pod选择一个node节点。node节点的资源越富裕,负载越小的node节点部署pod的排名就越高。

node节点组件:

①、kubelet:主节点在node节点的监控器,与master节点通信。定时向apiserver报告服务在node节点上的运行情况,同时接收来自master的调整措施。

kubelet负责节点上pod的生命周期

master—通过kubelet对节点pod进行管理(增删改查)—通过apiserver保存到etcd中

master的指令传给kubelet,kubelet完成之后,传给apiserver,apiserver把node节点的更新信息保存到etcd

②、kube-proxy:在每个node节点上实现pod的网络代理。是service的具体载体。负责网络规划和四层负载均衡工作。

iptables和ipvs实现服务的映射和访问。

apiserver通过监控kube-proxy来完成对pod的更新和端点的维护。把变化的结果保存在etcd。

内部服务的负载均衡是四层代理,实现内部pod的负载均衡。

k8s的每个节点都由kube-proxy。

内部的IP地址:flanner calico这两个插件提供内部pod的ip地址。

③、docker

整个集群的最底层。分布式。

k8s的工作流程:

在这里插入图片描述

2.2、k8s的核心概念

2.2.1、pod

pod:k8s里面的最小单位,一个pod就是一个正在运行的进程。

pod的里面包含着容器,可以是一个容器,也可以是多个容器。一般情况下一个pod就部署一个容器。

部署在同一pod当中的容器,共享网络,存储和计算资源。给pod设置ip地址,cpu,挂载卷,资源共享,容器都使用pod的资源。

不同的pod之间只能通过集群分配的ip地址进行通信。

集群—pod----容器

2.2.2、label

label:标签,是k8s的特色管理方式,对资源对象进行分类。

通过标签把pod------service-----资源对象-----控制器,进行关联。

service:在集群当中,每个pod都会设定一个ip地址。可能会因为pod的消失。导致ip地址也消失。

service就是来解决这个问题的核心概念。service------相当于网关转发流量,到下一跳。

ingress:service用于集群内部访问。ingress是整个k8s的集群的接入层。整个集群的外部通信。

service是层负载均衡,只能是ip+端口

ingress是七层转发:

www.xy102.com:port------------->ingress----------->service------>pod

namespace:资源隔离的方式,逻辑上的隔离,项目越来越多,集群越来越大。通过命名空间把资源分配到各个命名空间,每个命名空间之间资源不共享,使用的是分配的资源。命令空间在集群当中是唯一的。名字不能重复。

default 默认命名空间,不做特殊声明,所有的资源都在默认空间。

kube-system 系统应用的命名空间。

查询特定的资源,一定要加上命名空间。

三、k8s架构安装部署(网络之前)

k8s架构

master 192.168.168.81
node01 192.168.168.82    docker kubeadm kubelet kubectl flannel
node02 192.168.168.83



#关闭防火墙
[root@k8s1 ~]# systemctl stop firewalld
[root@k8s1 ~]# setenforce 0
[root@k8s1 ~]# iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X  ##清空防护墙策略
##永久关闭交换分区
[root@k8s1 ~]# swapoff -a
[root@k8s1 ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab 
[root@k8s1 ~]# for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
[root@k8s1 ~]# date

#根据规划设置主机名
--------------单独操作------------
[root@k8s1 ~]# hostnamectl set-hostname master01
[root@k8s2 ~]# hostnamectl set-hostname node01
[root@k8s3 ~]# hostnamectl set-hostname node02
------------------------------------------------
[root@k8s1 ~]# su

[root@master01 ~]# vim /etc/hosts   ##开启主机名和ip地址映射

192.168.168.81 master01
192.168.168.82 node01
192.168.168.83 node02

#使用多行重定向调整内核参数,前2行为开启网桥模式后2行为关闭ipv6协议和开启路由转发
[root@master01 ~]# cat > /etc/sysctl.d/kubernetes.conf << EOF
> #开启网桥模式,可将网桥的流量传递给iptables链
> net.bridge.bridge-nf-call-ip6tables=1
> net.bridge.bridge-nf-call-iptables=1
> #关闭ipv6协议
> net.ipv6.conf.all.disable_ipv6=1
> net.ipv4.ip_forward=1
> EOF

#加载内核使得配置内核参数生效
[root@master01 ~]# sysctl --system


#所有节点部署docker引擎
[root@master01 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 


#添加Docker官方源,并将它设置为docker-ce.repo文件
[root@master01 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 



#yum安装docker-ce和docker客户端以及容器io
[root@master01 ~]# yum install -y docker-ce-24.0.1 docker-ce-cli-24.0.1 containerd.io


[root@master01 ~]# mkdir /etc/docker/
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://hub.littlediary.cn/"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF
-------------------------第二个源-----------------
[root@master01 ~]# vim /etc/docker/daemon.json 
{
  "registry-mirrors": [
                "https://hub-mirror.c.163.com",
                "https://docker.m.daocloud.io",
                "https://ghcr.io",
                "https://mirror.baidubce.com",
                "https://docker.nju.edu.cn"
   ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}


[root@master01 ~]# systemctl daemon-reload
[root@master01 ~]# systemctl restart docker
[root@master01 ~]# systemctl enable docker
------------------可试试---------------


[root@master01 ~]# systemctl daemon-reload
[root@master01 ~]# systemctl restart docker
[root@master01 ~]# systemctl enable docker


[root@master01 ~]# docker pull nginx


[root@master01 ~]# docker info | grep "Cgroup Driver"
 Cgroup Driver: systemd


------------------定义源-------------
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
---------------------------------------
yum install -y kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15


[root@master01 ~]# systemctl enable kubelet
##所有的组件都是以pod的预先的,必须要设置开机自启

[root@master01 ~]# kubeadm config images list --kubernetes-version 1.20.15

pause:镜像,特殊容器,这个容器的作用就是保持pod当中其他容器的运行。
创建pod,首先拉取镜像,pod当中的会有一个pause,pause会在每个pod当中创建一个网络命名空。
pod的生命周期结束,pause也随之一块退出,释放该pod的网络命名空间。

pod--------镜像----------容器nginx
pause nginx---->10.244.0.10给pod分配IP地址
coredns:域名解析



取消同步操作


------master01操作-------
[root@master01 ~]# kubeadm init \
--apiserver-advertise-address=192.168.168.81 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.20.15 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--token-ttl=0
------------------------以下解释---------------------
--apiserver-advertise-address=192.168.168.81 \内部通信的ip地址,指向的主,也可以用0.0.0.0表示任意主机
--image-repository registry.aliyuncs.com/google_containers \##指定镜像的仓库---》k8s组件的仓库地址

--kubernetes-version=v1.20.15 \ ##k8s的版本
--service-cidr=10.96.0.0/16 \  ##service的网段
--pod-network-cidr=10.244.0.0/16 \  ##pod分配的网段,10.244.0.0/16 flannel的默认网段。calico:192.168.0.0/16
--token-ttl=0  ##token永不过期,内部使用,不加的话,默认是一天
------------------复制到node节点上-------------
kubeadm join 192.168.168.81:6443 --token abkwa8.j2i4940m256tldrf \
    --discovery-token-ca-cert-hash sha256:16a1e3ee10f8514a27089f4a3f810e26f0abe3ced94029c43d7662ded46fe3bc
-------------------------token验证-----------------


kubeadm token create --print-join-command  ##重新生成token验证


[root@node01 ~]# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
##网络没有安装

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

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

相关文章

Jetson Orin Nano GPIO 舵机

jetson orin nano 40针引脚扩展接头&#xff1a; 图源 Jetson Orin Nano Developer Kit User Guide - | NVIDIA Developer 引脚配置 使用jetson-io tool配置引脚&#xff1a; sudo /opt/nvidia/jetson-io/jetson-io.py 选择“Configure Jetson 40pin Header”: "Confi…

啥是纳米微纤维?咋制作?有啥用?

大家好&#xff0c;今天我们来聊聊纳米/微纤维——《Tailoring micro/nano-fibers for biomedical applications》发表于《Bioactive Materials》。这些纤维近年来备受关注&#xff0c;因为它们具有独特的功能和性质&#xff0c;在生物医学等领域有广泛应用。它们可以通过多种技…

滴滴出行:分布式数据库的架构演进之路|OceanBase案例

本文作者&#xff1a;吴其朋&#xff0c;滴滴分布式存储运维负责人 滴滴出行&#xff0c;作为一个集网约车、出租车、顺风车、代驾等多种出行方式于一体的综合性出行服务平台&#xff0c;其用户遍布全球&#xff0c;总数已突破6.5亿。面对如此多样化的出行需求及庞大的用户群体…

Python优化算法18——教与学优化算法(TLBO)

科研里面优化算法都用的多&#xff0c;尤其是各种动物园里面的智能仿生优化算法&#xff0c;但是目前都是MATLAB的代码多&#xff0c;python几乎没有什么包&#xff0c;这次把优化算法系列的代码都从底层手写开始。 需要看以前的优化算法文章可以参考&#xff1a;Python优化算…

800G和1.6T以太网:创新与挑战

随着大数据、5G网络、云计算和物联网&#xff08;IoT&#xff09;技术的广泛应用&#xff0c;市场对带宽和数据传输速率的更高需求日益增长&#xff0c;800G和1.6T网络速率的升级备受期待。本文将从800G以太网和1.6T网络在升级方面的所做出的创新举措及其所面临的主要挑战两个方…

小柴冲刺软考中级嵌入式系统设计师系列一、计算机系统基础知识(4)计算机硬件组成及主要部件

目录 计算机系统的基本硬件组成包括 一、中央处理单元 1、CPU的功能 2、CPU的组成 运算器&#xff1a;是数据加工和处理的部件&#xff0c;是执行部件 控制器&#xff1a;运算器只能完成运算&#xff0c;而控制器用于控制整个CPU的工作&#xff0c;它决定了计算机的运行过…

ChatGPT、Claude 和 Gemini 在数据分析方面的合作(第 3 部分):机器学习的最佳 AI 助手

人工智能如何加速你的机器学习项目从特征工程到模型训练 人工智能如何加速你的机器学习项目从特征工程到模型训练 欢迎来到雲闪世界。 在本文中&#xff0c;我们将重点介绍这些 AI 工具如何协助机器学习项目。机器学习是数据科学的基石。虽然使用 LLM 模型完全自动化建模过程具…

代码随想录算法训练营_day32

题目信息 509. 斐波那契数 题目链接: https://leetcode.cn/problems/fibonacci-number/description/题目描述: 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也…

【0-1背包hard】力扣3181. 执行操作可获得的最大总奖励 II

给你一个整数数组 rewardValues&#xff0c;长度为 n&#xff0c;代表奖励的值。 最初&#xff0c;你的总奖励 x 为 0&#xff0c;所有下标都是 未标记 的。你可以执行以下操作 任意次 &#xff1a; 从区间 [0, n - 1] 中选择一个 未标记 的下标 i。 如果 rewardValues[i] 大…

【C++11及其特性】左值和右值

左值和右值目录 一.左值和右值的报错1.简单定义2.函数返回值作左值3.表达式作左值 二.存储的层次结构1.CPU2.内存3.磁盘4.三者联系5.寄存器 三.左值和右值的概念1.左值2.右值3.转换 一.左值和右值的报错 1.简单定义 赋值号’左边的为左值,右边的为右值. 2.函数返回值作左值 …

html2Canvas和jspdf导出长pdf

续使用html2canvas和jspdf导出pdf包含跨页以及页脚_jspdf.umd.min.js-CSDN博客我的这篇文章再写一种情况因为最近我也使用到了 具体的html2Canvas和jspdf的我就不说了&#xff0c;直接开始了&#xff0c; 在公共方法的文件夹中建立一个新的文件htmlToPdf.js用来写咱们得方法然…

亦菲喊你来学机器学习(17) --DBSCAN聚类算法

文章目录 DBSCAN聚类算法基本概念算法步骤特点构建模型模型参数训练模型完整代码展示 总结 DBSCAN聚类算法 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff09;是一种基于密度的空间聚类算法&#xff0c;它能够将具有足够高密度的区…

宿舍|基于SprinBoot+vue的宿舍管理系统(源码+数据库+文档)

宿舍管理系统 基于SprinBootvue的私人诊所管理系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 后台模块实现 管理员功能实现 学生功能实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&…

10 个最佳网络爬虫工具和软件,零基础入门到精通,收藏这一篇就够了

据 Strait Research 称&#xff0c;数据提取的需求正在不断增加&#xff0c;预计到 2031 年将达到 18 亿美元。 使用最好的网络爬行工具启动您的数据提取项目&#xff0c;并告别烦人的爬行头痛。我们研究和测试了数百种免费和付费软件&#xff0c;然后为您提出了十种最佳网络爬…

重大内幕!揭秘数据“零丢失”,全靠它

2017年&#xff0c;某运营商设备扩容&#xff0c;误删80万用户数据… 2020年初疫情期间&#xff0c;某电商公司恶意删库事件&#xff0c;导致业务停机3天&#xff0c;公司赔付1.5亿元人民币 “链家程序员删库”事件&#xff0c;恶意删除公司 9TB 数据&#xff0c;造成公司财务…

LeetCode题练习与总结:单词搜索Ⅱ--212

一、题目描述 给定一个 m x n 二维字符网格 board 和一个单词&#xff08;字符串&#xff09;列表 words&#xff0c; 返回所有二维网格上的单词 。 单词必须按照字母顺序&#xff0c;通过 相邻的单元格 内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相邻…

使用 scikit-learn 实战感知机算法

一 引言 感知机&#xff08;Perceptron&#xff09;是最早的人工神经网络模型之一&#xff0c;由 Frank Rosenblatt 在 1957 年提出。虽然它相对简单&#xff0c;但在处理线性可分问题时却非常有效。本文将介绍如何使用 Python 的 scikit-learn 库来实现感知机&#xff0c;并通…

SpringBoot SSM vue在线作业考试系统

SpringBoot SSM vue在线作业考试系统 首页 图片轮播 作业信息 通知公告 登录注册 留言板 个人中心 我的收藏 后台管理 登录注册 个人中心 教师信息管理 学生信息管理 学院信息管理 专业信息管理 班级信息管理 作业信息管理 作业提交管理 通知公告管理 试卷管理 试题管理 系统…

2024最新最全:网络安全人士【必备的30个安全工具】

1.Wireshark Wireshark&#xff08;前称Ethereal&#xff09;是一个网络封包分析软件。网络封包分析软件的功能是截取网络封包&#xff0c;并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口&#xff0c;直接与网卡进行数据报文交换。 2.Metasploit Meta…

Qt窗口 菜单栏 QMenuBar和的使用及说明

目录 1. 创建QT工程2. Qt5中添加资源文件3. 在Qt图形化界面创建菜单栏各组件4. 为菜单栏添加的选项增加图标5. 将菜单栏增加的功能拖动到工具栏6. 点击运行按钮查看运行结果7. 为菜单栏和工具栏增加的按钮添加相应的槽函数 1. 创建QT工程 打开Qt Creator软件&#xff0c;选择菜…