[云原生]三、Kubernetes(1.18)

主要内容:

1、kubernetes 简介
2、kubernetes 集群搭建
         方式搭建
         二进制方式搭建
3、 kubeadm kubernetes 核心技术
         YAML 文件详解
         kubectl 命令工具
         Pod
         Label
         Controller 控制器
         Volume
         PVC 和 PV
         Secret 和 configMap
         Namespace
         Service
         探针
         调度器
         集群安装机制 RBAC
         Helm
4、部署性能监控平台
5、搭建 kubernetes 高可用集群
6、kubernetes 部署项目
         Kubernete平台部署Java项目

1. kubernetes 简介

1.1 kubernetes 基本介绍

        kubernetes,简称 K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。
        传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。
        新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署, 由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。
        容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在 build 或 release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”, 这更便于监控和管理。
        Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在 Kubernetes 中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的 管理、发现、访问 ,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

1.2 kubernetes 功能和架构

1.2.1 概述

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

1.2.2 K8s 功能:

(1)自动装箱
        基于容器对应用运行环境的资源配置要求自动部署应用容器
(2)自我修复(自愈能力)
        当容器失败时,会对容器进行重启
        当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
(3)水平扩展
        通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁
(3)服务发现
        用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和负载均衡
(4)滚动更新
        可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
(5)版本回退
        可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
(6)密钥和配置管理
        在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。
(7)存储编排
        自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务
(8)批处理
        提供一次性任务,定时任务;满足批量数据处理和分析的场景

1.2.3 应用部署架构分类

(1) 无中心节点架构
        GlusterFS
(2) 有中心节点架构
        HDFS
        K8S

1.2.4 k8s 集群架构

1.2.5 k8s 集群架构节点角色功能

Master Node
        k8s 集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;
        Master Node 由 API Server、Scheduler、ClusterState Store(ETCD 数据库)和
Controller MangerServer 所组成
Worker Node
        集群工作节点,运行用户业务应用容器;
        Worker Node 包含 kubelet、kube proxy 和 ContainerRuntime;
       

2. kubernetes 集群搭建

2.1 K8S集群搭建 -- kubeadm方式

2.1.1 前置知识点

目前生产部署 Kubernetes 集群主要有两种方式:
(1)kubeadm
        Kubeadm 是一个 K8s 部署工具,提供 kubeadm init 和 kubeadm join,用于快速部署 Kubernetes 集群。
        官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
(2)二进制包
        从 github 下载发行版的二进制包,手动部署每个组件,组成 Kubernetes 集群。Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署 Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

2.1.2 kubeadm 部署方式介绍

        kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具,这个工具能通过两条指令完成一个 kubernetes 集群的部署:
        第一、创建一个 Master 节点 kubeadm init
        第二, 将 Node 节点加入到当前集群中 $ kubeadm join <Master 节点的 IP 和端口 >

2.1.3 安装要求

在开始之前,部署 Kubernetes 集群机器需要满足以下几个条件:
        - 一台或多台机器,操作系统 CentOS7.x-86_x64
        - 硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多
        - 集群中所有机器之间网络互通
        - 可以访问外网,需要拉取镜像
        - 禁止 swap 分区

2.1.4 最终目标

(1)在所有节点上安装 Docker 和 kubeadm
(2)部署 Kubernetes Master
(3)部署容器网络插件
(4)部署 Kubernetes Node,将节点加入 Kubernetes 集群中
(5)部署 Dashboard Web 页面,可视化查看 Kubernetes 资源
        

2.1.5 准备环境

2.1.6 系统初始化

 1. 关闭防火墙
$ systemctl stop firewalld
$ systemctl disable firewalld
2. 关闭 selinux:
$ sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
$ setenforce 0 # 临时
可以使用以下命令来检查当前系统中 SELinux 的状态是否开启:
```bash
sestatus
```
通过运行上述命令,您将能够查看 SELinux 的当前状态,
包括是否为 enforcing(强制执行)、permissive(宽容)或 disabled(禁用)。
3. 关闭 swap:
$ swapoff -a # 临时
$ vim /etc/fstab # 永久
$ swapon # 开启
$ swapon --show  查看

4. 修改主机名:
$ hostnamectl set-hostname <hostname>
或者
$ vim /etc/hostname
5. 在 master 添加 hosts:
$ cat >> /etc/hosts << EOF
192.168.31.61 k8s-master
192.168.31.62 k8s-node1
192.168.31.63 k8s-node2
EOF
6. 将桥接的 IPv4 流量传递到 iptables 的链:
$ cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
$ sysctl --system  生效这段配置主要用于配置网络桥的网络过滤功能,对于 Kubernetes 等容器化平台来说是必要的设置。具体来说,这段配置指定了两个参数:1. `net.bridge.bridge-nf-call-ip6tables = 1`:这个参数指示内核在桥接网络数据包到 IPv6 地址时,调用 IP6tables 进行数据包过滤。
2. `net.bridge.bridge-nf-call-iptables = 1`:这个参数指示内核在桥接网络数据包到 IPv4 地址时,调用 iptables 进行数据包过滤。
这些参数的设置对于 Kubernetes 等容器平台非常重要,以确保网络的正确和安全运行。通过将这些参数设置为1,可以确保桥接网络数据包按照规则进行过滤,以帮助保护容器网络的安全性和稳定性。在设置完成后,通过运行 `sysctl --system` 命令可以使这些配置立即生效。这样一来,你的系统就会按照配置中指定的参数来处理桥接网络数据包的过滤。

这些配置参数的含义是:

  1. net.bridge.bridge-nf-call-ip6tables = 1:当通过桥接网络接收到IPv6数据包时,将调用ip6tables的规则进行处理。
  2. net.bridge.bridge-nf-call-iptables = 1:当通过桥接网络接收到IPv4数据包时,将调用iptables的规则进行处理。
  3. net.ipv4.ip_forward = 1:允许IPv4的数据包转发,即使数据包的目标不是本机。
  4. vm.swappiness = 0: vm.swappiness是操作系统控制物理内存交换出去的策略。它允许的值是一个百分比的值,最小为0,最大运行100,该值默认为60。vm.swappiness设置为0表示尽量少swap,100表示尽量将inactive的内存页交换出去。

        Kubernetes通过iptables实现服务发现和网络流量路由,pod通信。这一步很重要。没有设置的话会导致集群网络通信故障,如pod无法通信。

7. 时间同步:
$ yum install ntpdate -y
$ ntpdate time.windows.com使用以前请先ping相应的域名查看网络是否可达,和相应的访问速度
ntp.ntsc.ac.cn   中国国家授时中心
cn.ntp.org.cn    中国授时阿里云NTP时间源服务器
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com国内一些大学NTP时间源服务器
s1a.time.edu.cn   北京邮电大学
s1b.time.edu.cn   清华大学
s1c.time.edu.cn   北京大学
s1d.time.edu.cn   东南大学
s1e.time.edu.cn   清华大学
s2a.time.edu.cn   清华大学
s2b.time.edu.cn   清华大学
s2c.time.edu.cn   北京邮电大学
s2d.time.edu.cn   西南地区网络中心
s2e.time.edu.cn   西北地区网络中心
s2f.time.edu.cn   东北地区网络中心
s2g.time.edu.cn   华东南地区网络中心
s2h.time.edu.cn   四川大学网络管理中心
s2j.time.edu.cn   大连理工大学网络中心
s2k.time.edu.cn   CERNET桂林主节点
s2m.time.edu.cn   北京大学另外,如果服务器在国外,苹果提供的公共NTP服务,以下7个域名
http://time1.apple.com
http://time2.apple.com
http://time3.apple.com
http://time4.apple.com
http://time5.apple.com
http://time6.apple.com
http://time7.apple.comGoogle(谷歌)提供的NTP服务,以下4个域名
http://time1.google.com
http://time2.google.com
http://time3.google.com
http://time4.google.com

2.1.7 所有节点安装 Docker/kubeadm/kubelet

阿里云教程:

kubernetes镜像_kubernetes下载地址_kubernetes安装教程-阿里巴巴开源镜像站 (aliyun.com)

Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。
(1)安装 Docker
# 移除旧版本docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-eng

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

职业教育大数据实验实训室建设应用案例

大数据作为一种重要的信息技术&#xff0c;对各行各业产生了深远的影响。职业教育作为培养应用型人才的摇篮&#xff0c;建设大数据实验实训室&#xff0c;对于提高学生的数据分析能力和解决实际问题的能力具有重要意义。唯众作为一家专注于教育技术领域的企业&#xff0c;凭借…

从零开始:MySQL安装与配置完全指南

前言 哇&#xff0c;终于进入到令人激动的MySQL环节了 它可以说是你编程生涯中的最佳朋友&#xff0c;因为它总是能存储你的数据&#xff0c;从不说&#xff1a;“我忘记了你的信 息”。而且&#xff0c;它是免费的&#xff0c;不像一些昂贵的数据库&#xff0c;它从不让你的…

量产部落SM2258XT开卡软件,SM2258XT主控128G SSD固态卡死修复

故障现象&#xff1a;连接此固态硬盘后电脑就会卡死&#xff0c;拔掉重新连接概率性显示盘符&#xff0c;显示了之后也不能正常操作&#xff0c;一点击打开&#xff0c;电脑就立马卡死。 解决过程&#xff1a;下载了很多款量产工具&#xff0c;都不能开卡成功&#xff0c;点击…

Elasticsearch 未授权访问漏洞

Elasticsearch 未授权访问漏洞 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&#xff0c;是当前流行的企业级搜索…

iAppv3无白银会员使用SDK

前言 一个实用小技巧分享给大家。 工具 iapp&#xff1a;百度或点我获取 Mt管理器&#xff1a;百度或点我获取 教程 1.移出“项目路径/apk/lib/”内的全部文件 2.在iapp内测试打包&#xff0c;打包完成后直接返回&#xff0c;不要安装 3.在mt管理器里面点击“项目路径/b…

【课程总结】Day18:Seq2Seq的深入了解

前言 在上一章【课程总结】Day17&#xff08;下&#xff09;&#xff1a;初始Seq2Seq模型中&#xff0c;我们初步了解了Seq2Seq模型的基本情况及代码运行效果&#xff0c;本章内容将深入了解Seq2Seq模型的代码&#xff0c;梳理代码的框架图、各部分组成部分以及运行流程。 框…

【大模型系列】LanguageBind(ICLR2024.01)

Paper&#xff1a;https://arxiv.org/abs/2310.01852Github&#xff1a;https://github.com/PKU-YuanGroup/LanguageBindHuggingface&#xff1a;https://huggingface.co/spaces/LanguageBind/LanguageBindAuthor&#xff1a;Bin Zhu et al. 北大袁粒团队 文章目录 1 LanguageB…

入门mem0.NET

入门mem0.NET 安装包 如果你的项目使用了EntityFrameworkCore,那么你可以跟随这个教程走 <ItemGroup><PackageReference Include"mem0.NET" Version"0.1.7" /><PackageReference Include"mem0.NET.Qdrant" Version"0.1.7…

软件测试需要具备的基础知识【功能测试】---前端知识(一)

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 为了更好的学习软件测试的相关技能&#xff0c;需要具备一定的基础知识。需要学习的基础知识包括&#xff1a; 1、计算机基础 2、前端知识 3、后端知识 4、软件测试理论 后期分四篇文章进行编写&#xff0c;这是第二篇 …

【精选】通信与感知(ISAC)必读好文

微信公众号&#xff1a;EW Frontier 个人博客&#xff1a;106.54.201.174 QQ交流群&#xff1a;949444104 简介 通信与感知&#xff08;ISAC&#xff09;也被称为联合雷达通信 (JRC) / 联合通信和雷达传感 (JCAS) / 双功能雷达通信 (DFRC) 定义&#xff1a;将传感和通信系统集…

记录一次学习过程(msf、cs的使用、横向渗透等等)

目录 用python搭建一个简单的web服务器 代码解释 MSF msfvenom 功能 用途 查看payloads列表 msfconsole 功能 用途 msfvenom和msfconsole配合使用 来个例子 msf会话中用到的一些命令 在windows中net user用法 列出所有用户账户 显示单个用户账户信息 创建用户账…

学python的第一天:PyCharm创建项目

创建项目 打开工具 PyCharm 点击“新建项目” 点击“创建” 环境 系统会创建虚拟环境&#xff0c;稍等 初始设置 创建完成后会进入main.py文件 性能 可以看到 右下角提示我们增强性能&#xff0c;点“自动” 会获取到管理员权限 完成后会提示完成

【数据结构】栈和队列(c语言实现)(附源码)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;数据结构 目录 一、栈 1.栈的概念与结构 2.栈的实现 2.1 栈的结构定义 2.2 方法的声明 2.3 方法的实现 2.3.1 初始化 2.3.2 销毁 2.3.3 判空 2.3.4 压…

常见CMS漏洞(WordPress、DeDeCMS、ASPCMS、PHPMyadmin、Pageadmin)

目录 一&#xff1a;WordPress 步骤一:进入Vulhub靶场并执行以下命令开启靶场;在浏览器中访问并安装好子... 步骤二:思路是修改其WP的模板写入一句话木马后门并访问其文件即可GetShel;登陆WP后点击【外观】--》【编辑】 --》 404.php 步骤三:访问以下连接即可获取WebShel...…

用VBA在Word中随机打乱单词表,进行分列

一、效果展示&#xff08;以下是三次随机打乱的结果&#xff09; 二、代码 Sub 随机分单词到后面的单元格()Dim C1 As CellDim str, str1, aDim shuffledArray() As VariantSet C1 Selection.Range.Tables(1).Cell(1, 1)str C1.Range.textstr mid(str, 3, Len(str) - 4)str…

ADC的介绍和工作原理

一&#xff0c;什么是ADC&#xff1f; Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 什么是ADC&#xff1a; ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 SUCH AS: 12 位 ADC 是一种逐次逼近…

C# Solidworks二次开发------设置按键打开模型查询

一、代码 public void Open_File(string FileNmae) {Process.Start("explorer.exe", FileNmae); }Open_File("路径"); 二、内容 这个代码很简单&#xff0c;我使用其主要的作用是设置一个按键&#xff0c;可以快速的查看我们已生成的三维模型&#xff0…

JS使用 navigator.clipboard 操作剪切板

注意&#xff1a;需要在安全域下才能够使用&#xff0c;比如&#xff1a;https 协议的地址、127.0.0.1、localhost safari浏览器需要打开配置&#xff0c;在地址栏输入 about:config&#xff0c;搜索 clipboard&#xff0c;将 asyncClipboard 由 false 改为 true&#xff0c;然…

C语言初阶(11)

1.结构体定义 结构体就是一群数据类型的集合体。这些数据类型被称为成员变量。结构的成员可以是标量、数组、指针&#xff0c;甚至是其他结构体。 2.结构体的声明和结构体变量命名与初始化 结构体声明由以下结构组成 struct stu {char name[12];int age; }; 结构体命名有两…

算法通关:017_2:二叉树及三种顺序的非递归遍历

文章目录 题目思路运行结果 题目 二叉树及三种顺序的非递归遍历 思路 import java.util.Stack;/*** Author: ggdpzhk* CreateTime: 2024-08-04* 二叉树非递归版本*/ public class _017_Tree2 {public static void main(String[] args) {TreeNode head new TreeNode(1);head.…