【经验分享】容器云搭建的知识点

最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了
虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的
由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公开出来

欢迎各位大佬指正文章内容

在这里插入图片描述

涉及技术比较多,只对技术进行简单介绍,不深入解释

概念

容器云(Container Cloud)是指基于容器技术提供的云计算服务,可以用于快速部署、管理和扩展应用程序。容器技术可以将应用程序和其依赖项打包到一个独立的可移植容器中,使得应用程序可以在任何环境中运行。容器云是一个概念,并不具体指什么。

kubernetes(K8s)是一个开源的容器编排引擎,用于自动部署、扩展和管理容器化应用程序。它可以帮助用户简化容器集群的管理,提高应用程序的可靠性和可扩展性。

kubeeasy是一个辅助工具,旨在简化 Kubernetes 的使用和管理。帮助用户更轻松地使用 Kubernetes,并且可以减少一些配置的复杂性,提高用户的工作效率。


详解:

kubernetes因为名字太长,又被称作k8s(因为中间有8个字母),它是作为容器编排工具存在的

我们常用的容器有docker、containerd,他们都有属于自己的客户端服务器端

容器编排工具是为了提供统一的编排环境(编排工具不止有k8s,只是它最为出名)

在之前,我们需要在他们的客户端(如:crictl、nerdctl)进行我们的操作

同时有docker、containerd每一个容器都有自己的客户端很麻烦

k8s应用场景:
在传统部署项目中,所有功能都集成到一个服务器上,访问量一大就会大大增加服务器的负担

将功能分开来部署到多个服务器上,又造成了维护和更新的负担,需要到各个服务器上手动执行命令

k8s的出现,解决解决了这个麻烦的问题

k8s介于应用服务和服务器之间,能够运用策略,协调和管理多个应用服务

只需要一个yaml文件定义应用的部署顺序等信息,就能自动部署应用到各个服务器上,实现自动扩缩容、挂了后重新部署

k8s会将我们的服务器划分成两部分:控制平面(control plane)、工作节点(node)

控制平面负责控制工作节点,工作节点负责运行各个应用服务

k8s的服务原理

控制平面:

里面有一个api server 会提供一个api给我们

同时 api server 掌管着scheduler(调度器)、controller mgr(控制器管理器)

以前我们需要到处看哪台服务器资源充足,现在这个工作交给scheduler(调度器)完成

以前我们对服务器的创建、关闭服务,现在交给controller mgr(控制器管理器)完成

这些功能都会产生数据,这些数据都会保存至存储层(ETCD)

总的来说,控制平面内部有api server、scheduler、controller mgr、ETCD
工作节点:(可以是裸机服务器、虚拟机)

多个应用服务共享一台主机上的计算资源

只需将代码打包成容器镜像(将代码及其所需环境打包),就能一行命令将其部署

containerd runtime (容器运行时组件)负责下载和部署镜像

每一个应用服务都可以看成一个container

一般还搭配【日志收集器container】【监控采集器container】,这些container共同构成一个个pod

pod们运行在node上,pod可以从一个node调度到另一个node,还能进行重启、扩缩容的操作

所以pod是k8s中最小的调度单位

控制平面的controller mgr会控制node创建和关闭服务,kubelet就是node接收命令的组件

kube proxy是负责node之间的网络通信,负责将请求从节点级别路由到特定 Pod 中的容器

总的来说,工作节点内部有containerd runtime、kubelet、kubeproxy、pod

k8s的实际应用

控制平面和工作节点共同构成一个cluster(集群)

为了集群内部的服务能让外部用户使用,还需要提供一个ingress(入口控制器)

之前说到api server 提供了一个api给我们使用

我们可以通过kubectl来执行命令,kubectl会调用k8s的api部署服务

# 查看支持快速创建的资源
kubectl create --help

# 重定向至yaml文件,并模拟执行
kubectl create deployment gitlab \
--image=gitlab/gitlab-ce:latest \
--port=80 \
--dry-run \
-oyaml > gitlab.yaml
kubectl apply -f xxx.yaml

kubectl会读取并解析yaml文件,发送给api serverapi server会驱使scheduler去通过ETCD提供的数据去寻找node,然后让control mgr 去控制node创建服务,kubelet收到control mgr的命令后,会驱使containerd runtime去拉取镜像、创建容器,最终完成pod的创建。完成部署

与传统服务部署的区别

传统部署方式,用户直接发送HTTP请求,就直接用到我们的服务,

k8s部署的服务,用户发送的请求会先到ingress(入口控制器)d到达k8s内部某个node的kube proxy上,再找到对应的pod,然后再转发到容器内的服务中,处理结果原路返回

个体由大到小为集群->node->pod->容器


本地实验注意:

在本地实验环境中,要添加网关,目前测试4G运存能够运行(开启SWAP,但是很慢)

如果要克隆,必须克隆《搭建本地训练环境知识点》中的【快照一:准备启动】快照

一、部署k8s集群

系统环境准备[两个节点都要做]

①setenforce 0

②sed -i “s/SELINUX=enforcing/SELINUX=disabled/g” /etc/selinux/config

③把网卡的UUID删除掉

本步骤是由官方提供的打包好的软件包,因此只需要做三步,关于k8s详细知识不在这里详述

上传软件包后,挂载到/mnt/,然后复制至/opt下(当然复制到哪里都行,只要能记住)

mount chinaskills_cloud_paas_v2.0.2.iso /mnt/
cp -rfv /mnt/* /opt/
# 取消挂载,养成习惯
umount /mnt/
mv /opt/kubeeasy /usr/bin/kubeeasy

kubeeasy是一个辅助快速部署k8s的工具,接下来使用工具快速部署

1,安装依赖

因为是两个节点都是一样安装依赖

所以参数host直接指明两个主机ip即可

[root@master ~]# kubeeasy install depend \
> --host 192.168.100.20,192.168.100.21 \
> --user root \
> --password 000000 \
> --offline-file /opt/dependencies/base-rpms.tar.gz 

2,配置ssh免密钥

这里就要分清主次了,master就是master,worker就是worker

[root@master ~]# kubeeasy create ssh-keygen \
> --master 192.168.100.20 \
> --worker 192.168.100.21 \
> --user root --password 000000

3,安装kubernetes集群

这里也要分清主次

[root@master ~]# kubeeasy install kubernetes \
> --master 192.168.100.20 \
> --worker 192.168.100.21 \
> --user root \
> --password 000000 \
> --version 1.22.1 \
> --offline-file /opt/kubernetes.tar.gz 

等待完成即可

二、部署Istio服务网格

文档官方中文文档

在刚刚的k8s中说到,k8s用于管理各个微服务,各个微服务都有一个代理接收apiserver的指令

istio其实也是一个代理,istio同样将服务网点分为控制平面工作节点(Envoy Sidecar)

控制平面包括以下组件:

  1. Pilot:负责服务发现、流量路由和负载均衡。
  2. Mixer:处理访问控制、日志记录和指标收集等策略和遥测功能。
  3. Citadel:提供身份验证和授权功能。
  4. Galley:负责配置管理和分发。

工作节点(称为Envoy Sidecar)则是每个微服务容器旁边的代理,它负责处理入站和出站的网络流量,并与控制平面进行通信。

工作节点的代理一般位于pod中,所有容器的流量进出都要经过他

--istio表示部署istio服务,而后面那个istio表示名字,可自定义

kubeeasy add --istio istio

命名空间是 K8s 中用于隔离和组织集群资源的一种方式,可以更好地管理和组织您的应用程序和服务,就像文件夹一样,基于我们istio的功能

kubectl create namespace images
kubectl label namespace images istio-injection=enabled

未来部署到这个namespace中的所有pod都将被注入Envoy代理

Istio的控制平面通过识别特定的标签来决定哪些Pod需要被注入Envoy代理

没有为命名空间添加相关标签,部署在其中的Pod将不会被自动注入Envoy代理,也无法享受到Istio提供的流量控制、安全性等功能。

三、kubevirt虚拟化

KubeVirt 是 Kubernetes 的虚拟化插件

应用场景:
虚拟机技术允许在物理硬件上创建一个或多个虚拟的计算环境,每个虚拟环境都可以运行自己的操作系统和应用程序,相互之间相互隔离,K8s最初是设计用于容器化应用程序的调度和管理,没有直接支持虚拟机的概念,所以在k8s集群中运行的传统虚拟机项目,仍然需要采取传统的运维手法,为了实现k8s统一调度管理,就需要安装KubeVirt插件

--virt表明部署kubevirt,后面那个是名称,可自定义

kubeeasy add --virt kubevirt 

运行它将执行:
1,检查必要的命令和连接是否存在。
2,应用kubevirt-operator.yaml文件来安装KubeVirt操作符。
3,等待KubeVirt组件的就绪状态。
4,应用kubevirt-cr.yaml文件来创建KubeVirt自定义资源。
5,等待KubeVirt组件的就绪状态。
6,应用multus-daemonset.yaml文件来安装Multus CNI插件。
7,等待Multus CNI插件的就绪状态。
8,应用multus-cni-macvlan.yaml文件来配置Macvlan网络。
9,检查KubeVirt组件的运行状态。

四、Harbor镜像仓库部署

Harbor 是一个开源的企业级容器镜像仓库,用于存储、分发和管理 Docker 镜像及其他容器相关的资源

Harbor 存储的是 Docker 镜像及其相关的资源,这些镜像可以由开发人员构建、推送到 Harbor,或者从外部镜像仓库拉取到 Harbor 中进行存储和管理。当容器运行时需要使用镜像时,它们可以从 Harbor 中拉取所需的镜像到节点的本地镜像存储中,并在容器内运行。

--registry表示部署仓库服务,而后面那个harbor表示部署什么仓库,不可随便自定义,必须在已配置的镜像仓库中,在文件config.yaml

[root@k8s-master-node1 ~]# kubeeasy config show
Current config:
default_registry: harbor.mydomain.com
registries:
- name: harbor
  url: https://harbor.mydomain.com
- name: dockerhub
  url: https://registry.docker.com

# 指定查看某个镜像仓库
[root@k8s-master-node1 ~]# kubeeasy registry show harbor
Registry Information:
Name: harbor
URL: https://harbor.mydomain.com
Credentials: username=xxxx password=xxxx
kubeeasy add --registry harbor

运行它将执行:
1,检查 Docker 是否已安装,并显示 Docker 版本为 20.10.14。
2,检查 Docker Compose 是否已安装,并显示 Docker Compose 版本为 2.2.1。
3,加载 Harbor 镜像。
4,准备 Harbor 的配置文件。
5,启动 Harbor。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Liunx篇】基础开发工具 - vim

文章目录 一.vim的基本概念1.正常/命令模式2.插入模式3.底行模式/末行模式4.视图模式5.替换模式 二.vim的基本操作1.进入vim:2.退出vim: 三.vim正常模式命令集1.光标定位:2.复制/粘贴3.撤销4.剪切/删除5. 更改 四.vim底行模式命令集1.保存/退出2.调出行号…

数据结构---树(Tree)

1. 简介 在数据结构中,树是一种层次结构的数据结构,由节点(node)组成,其中每个节点通过边(edge)与其他节点连接。树是一种非线性的数据结构,广泛用于表示具有层级关系的数据。常见的…

【unity】从零开始制作平台跳跃游戏--界面的认识,添加第一个角色!

在上一篇文章中,我们已经完成了unity的环境配置与安装⬇️ 【Unity】环境配置与安装-CSDN博客 接下来,让我们开始新建一个项目吧! 新建项目 首先进入unityHub的项目页面,点击“新项目”: 我们这个系列将会以2D平台…

Ubuntu K8s

https://serious-lose.notion.site/Ubuntu-K8s-d8d6a978ad784c1baa2fc8c531fbce68?pvs74 2 核 2G Ubuntu 20.4 IP 172.24.53.10 kubeadmkubeletkubectl版本1.23.01.23.01.23.0 kubeadm、kubelet 和 kubectl 是 Kubernetes 生态系统中的三个重要组件 kubeadm: 主…

【ARM】ARM架构麒麟V10安装jdk1.8

ARM架构麒麟V10安装jdk1.8,就一句话安装 yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel 关注我,继续【ARM】安装mysql 简单快捷。

Redis--高并发分布式结构

目录 一、引言 二、redis 1.什么是redis? 三、基础概念 1.什么是分布式? 2.应用服务和数据库服务分离 3.负载均衡 4.分库分表 5.微服务架构 四、总结 一、引言 本篇文章就简单介绍一下什么是redis,以及一些关于高并发和分布式结构的…

Repo管理

文章目录 前言Repo介绍清单仓库清单仓库的组成 初始化Repo同步远程仓库Repo实际应用 前言 我们知道,Git是用来管理某一个仓库,那当一个项目用到了多个仓库时,怎么来同步管理这些仓库呢?这个时候就可以引入Repo管理。 Repo介绍 …

python 数据分析之地图数据绘制

python 数据分析之地图数据绘制 1、根据历史的2023年GDP数据做地图分析 import numpy as np import matplotlib import matplotlib.pyplot as plt matplotlib.rcParams[font.family] SimHei import pandas as pd import folium from folium import Map import geopandas as…

分治算法(单选题)

2-1 分数 2 下列多少种排序算法用了分治法? 堆排序插入排序归并排序快速排序选择排序希尔排序 A.2 B.3 C.4 D.5 正确答案 A 2-2 分数 2 分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决问题,最后将子…

探索 HTTP 请求头中的 “Host” 字段及其安全风险

探索 HTTP 请求头中的 “Host” 字段及其安全风险 大家好,今天我们来聊聊 HTTP 请求头中的“Host”字段,以及它的使用方法和安全风险。 什么是Host字段 在 HTTP 请求头中,“Host”字段是一个至关重要的部分。它告诉服务器,我们…

将 Ubuntu 22.04 LTS 升级到 24.04 LTS

Ubuntu 24.04 LTS 将支持 Ubuntu 桌面、Ubuntu 服务器和 Ubuntu Core 5 年,直到 2029 年 4 月。 本文将介绍如何将当前 Ubuntu 22.04 系统升级到最新 Ubuntu 24.04 LTS版本。 备份个人数据 以防万一,把系统中的重要数据自己备份一下~ 安装配置SSH访问…

渗透测试-前端验签绕过之SHA256

本文是高级前端加解密与验签实战的第1篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过SHA256签名来爆破登录。 绕过 通过查看源代码可以看到key为 1234123412341234通过查看源代码可以看到是通过SHA256来进行签名的&#xff0…

解锁医学数据分析新姿势:堆叠图的奇妙世界

在医学数据分析中,数据的可视化是一个非常重要的环节。通过图形展示,我们可以更直观地理解数据之间的关系和趋势。今天,我们将介绍一种非常有用的图形——堆叠图(Stacked Bar Chart),并展示如何在Python中使…

接口测试Day01-HTTP请求

概念 接口:系统之间(外部系统与内部系统,内部系统与内部系统)数据交通的通道。 接口测试:校验 接口回发的 响应数据 与 预期结果 是否一致。 接口测试,可以绕过前端界面。直接对 服务器进行测试&#xff01…

04、GC基础知识

JVM程序在跑起来之后,在数据的交互过程中,就会有一些数据是过期不用的,这些数据可以看做是垃圾,JVM中,这些垃圾是不用开发者管的,它自己会有一套垃圾回收系统自动回收这些内存垃圾,以备后面继续…

一、STM32MP257开发板初体验

文章目录 STM32MP257开发板初体验1. 硬件介绍2. 下载编译源码3. 烧录4. 启动 STM32MP257开发板初体验 从本篇文章开始本专栏将详细记录学习STM32MP257过程中的学习心得,旨在详细掌握嵌入式LINUX中的全流程内容,主要包括启动流程分析、驱动分析、Yocto系…

分析M0G突破后急剧下跌内因,x.game阐述不利面延续多久

MOG最新消息显示,美国唐纳德-的一则声明公开表示支持一种基于以太坊网络ERC-20代币标准的病毒式meme代币——Mog Coin(MOG),这一消息迅速发酵。然而,令人意想不到的是,在这位全球知名政治人物的背书之后&am…

P8772 求和 P8716 回文日期

文章目录 [蓝桥杯 2022 省 A] 求和[蓝桥杯 2020 省 AB2] 回文日期 [蓝桥杯 2022 省 A] 求和 题目描述 给定 n n n 个整数 a 1 , a 2 , ⋯ , a n a_{1}, a_{2}, \cdots, a_{n} a1​,a2​,⋯,an​, 求它们两两相乘再相加的和,即 S a 1 ⋅ a 2 a 1 ⋅ a 3 ⋯ a…

【优选算法】二分算法(在排序数组中查找元素的第一个和最后一个位置,寻找峰值,寻找排序数组中的最小值)

二分算法简介: 提到二分我们可能都会想起二分查找,二分查找要求待查找的数组是有序的,与我们今天讲的二分算法不同,并不是数组元素严格按照有序排列才可以使用二分算法,只要数组中有一个点可以将数组分为两个部分&…

升级Ubuntu 24.04 LTS报错“Oh no! Something has gone wrong.”

强烈建议:升级Ubuntu系统之前先配置好SSH远程访问 最近升级Ubuntu系统(18->24),经历了一些惊魂时刻,复盘下来没有重装系统的最得益于SSH访问。 在升级到24.04版本时,一切似乎表现得很正常,…