当前位置: 首页 > news >正文

1-k8s1.23.6-底座搭建-基于docker

这里写自定义目录标题

    • 一、服务器准备
    • 二、安装docker
    • 三、安装k8s
    • 四、安装部署dashboard

一、服务器准备

  1. 服务器准备

    服务器名称服务器IP角色CPU(最低要求)内存(最低要求)
    master192.168.248.10master2核2G
    worker1192.168.248.11node2核2G
    worker2192.168.248.12node2核2G
  2. 修改ip:vi /etc/sysconfig/network-scripts/ifcfg-ens33

  3. 修改主机名:hostnamectl set-hostname master

  4. 修改主机名与ip映射:vi /etc/hosts

    192.168.248.10 master
    192.168.248.11 worker1
    192.168.248.12 worker2
    
  5. 重置网络:service network restart

  6. 关闭防火墙:systemctl stop firewalld

  7. 禁用selinux

    [root@localhost ~]# setenforce 0 
    [root@localhost ~]# getenforce
    Permissive
    

    ps:永久禁用方法(需重启服务器)

    sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    
  8. 关闭swap:swapoff -a

    ps1:swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用。但是会对系统性能产生影响。所以这里需要关闭。如果不能关闭,则在需要修改集群的配置参数

    ps2:永久关闭方法,需重启服务器

    sed -ri 's/.*swap.*/#&/' /etc/fstab
    
  9. 查看:free -m

    在这里插入图片描述

  10. bridged网桥设置

    1)概念:为了让服务器的iptables能发现bridged traffic,需要添加网桥过滤和地址转发功能

    2)新建modules-load.d/k8s.conf文件:vi /etc/modules-load.d/k8s.conf

    overlay
    br_netfilter
    

    3)新建sysctl.d/k8s.conf文件:vi /etc/sysctl.d/k8s.conf

    net.bridge.bridge-nf-call-ip6tables = 1
    net.ipv4.ip_forward                 = 1
    net.bridge.bridge-nf-call-iptables = 1
    

    4)加载配置文件:sysctl --system

    5)加载br_netfilter网桥过滤模块 :modprobe br_netfilter

    6)加载网络虚拟化技术模块:modprobe overlay

    7)检验网桥过滤模块是否加载成功:lsmod | grep -e br_netfilter -e overlay
    在这里插入图片描述

  11. 配置IPVS

    1)概念:service有基于iptables和基于ipvs两种代理模型。基于ipvs的性能要高一些。需要手动载入才能使用ipvs模块

    2)安装ipset和ipvsadm:yum install ipset ipvsadm

    3)新建脚本文件:vi /etc/sysconfig/modules/ipvs.modules

    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    

    4)添加执行权限给脚本文件,然后执行脚本文件

    chmod +x /etc/sysconfig/modules/ipvs.modules
    /bin/bash /etc/sysconfig/modules/ipvs.modules
    

    5)检验模块是否加载成功:lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    在这里插入图片描述

二、安装docker

ps:三台服务器都装

  1. 下载:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

  2. 启动:systemctl start docker

  3. 设置开机自启动:systemctl enable docker

  4. 验证:docker images

  5. docker设置阿里云加速器和cgroup驱动程序:vi /etc/docker/daemon.json (没有的话,需要自己创建该文件)

    {"registry-mirrors": ["https://ustc-edu-cn.mirror.aliyuncs.com/","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://bh9y01q2.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"]
    }
    

    ps:endpoint = [“https://bh9y01q2.mirror.aliyuncs.com”],这个地址可以自己取阿里云注册使用

    1)登录阿里云:https://www.aliyun.com/

    2)获取平台分配的镜像加速地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
    在这里插入图片描述
    在这里插入图片描述

  6. 重新导入配置:systemctl daemon-reload

  7. 重启:systemctl restart docker

  8. 查看是否配置成功:docker info

在这里插入图片描述

三、安装k8s

ps:三台服务器都装

  1. 安装kubelet、kubeadm、kubectl

    1)添加yum源:vi /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.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    

    2)下载:yum install -y --setopt=obsoletes=0 kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6

    3)配置: systemctl enable kubelet --now

    4)相关概念

    1. obsoletes等于1表示更新旧的rpm包的同时会删除旧包,0表示更新旧的rpm包不会删除旧包
    2. kubelet启动后,可以用命令journalctl -f -u kubelet查看kubelet更详细的日志
    3. kubelet默认使用systemd作为cgroup driver
    4. 启动后,kubelet现在每隔几秒就会重启,因为它陷入了一个等待kubeadm指令的死循环
    
  2. 下载各个机器需要的镜像

    1)查看集群所需镜像的版本:kubeadm config images list

    2)创建文件夹:mkdir /opt/k8s

    3)创建文件:vi /opt/k8s/images.sh

    #!/bin/bashimages=(
    kube-apiserver:v1.23.17
    kube-controller-manager:v1.23.17
    kube-scheduler:v1.23.17
    kube-proxy:v1.23.17
    pause:3.6
    etcd:3.5.1-0
    coredns:v1.8.6
    )
    for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    done
    
    kube-apiserver:v1.24.0  #接口服务,给予rest风格开放k8s的接口服务
    kube-controller-manager:v1.24.0 #控制管理器,管理各个类型的控制器,针对k8s中的各个资源进行管理
    kube-scheduler:v1.24.0 #调度器,将pod根据一定的算法调用到合适的节点上
    kube-proxy:v1.24.0 #网络代理,负责service的服务发现负载均衡
    pause:3.7
    etcd:3.5.3-0 #理解为ks的数据库,键值类型存储的分布式数据库,提供了基于Raft算法实现自主的集群高可用。老版本:基于内存。新版本:持久化存储
    coredns:v1.8.6 #网络配置
    

    4)赋权: chmod +x /opt/k8s/images.sh

    5)执行下载: /opt/k8s/images.sh

  3. 初始化主节点(只在master节点执行)

    kubeadm init --apiserver-advertise-address=192.168.248.10 --control-plane-endpoint=master --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version v1.23.6 --service-cidr=10.96.0.0/16 --pod-network-cidr=192.169.0.0/16 
    

    ps:–pod-network-cidr跟主机网络必须不同

    ps:将最后一段标黑的保存,后续使用

    在这里插入图片描述

    参数说明

    	  --apiserver-advertise-address string   设置 apiserver 绑定的 IP.--apiserver-bind-port int32            设置apiserver 监听的端口. (默认 6443)--apiserver-cert-extra-sans strings    api证书中指定额外的Subject Alternative Names (SANs) 可以是IP 也可以是DNS名称。 证书是和SAN绑定的。--cert-dir string                      证书存放的目录 (默认 "/etc/kubernetes/pki")--certificate-key string                kubeadm-cert secret 中 用于加密 control-plane 证书的key--config string                         kubeadm 配置文件的路径.--cri-socket string                    CRI socket 文件路径,如果为空 kubeadm 将自动发现相关的socket文件; 只有当机器中存在多个 CRI  socket 或者 存在非标准 CRI socket 时才指定.--dry-run                              测试,并不真正执行;输出运行后的结果.--feature-gates string                 指定启用哪些额外的feature 使用 key=value 对的形式。--help  -h                             帮助文档--ignore-preflight-errors strings       忽略前置检查错误,被忽略的错误将被显示为警告. 例子: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks.--image-repository string              选择拉取 control plane images 的镜像repo (default "k8s.gcr.io")--kubernetes-version string            选择K8S版本. (default "stable-1")--node-name string                     指定node的名称,默认使用 node 的 hostname.--pod-network-cidr string              指定 pod 的网络, control plane 会自动将 网络发布到其他节点的node,让其上启动的容器使用此网络--service-cidr string                  指定service 的IP 范围. (default "10.96.0.0/12")--service-dns-domain string            指定 service 的 dns 后缀, e.g. "myorg.internal". (default "cluster.local")--skip-certificate-key-print            不打印 control-plane 用于加密证书的key.--skip-phases strings                  跳过指定的阶段(phase)--skip-token-print                     不打印 kubeadm init 生成的 default bootstrap token --token string                         指定 node 和control plane 之间,简历双向认证的token ,格式为 [a-z0-9]{6}\.[a-z0-9]{16} - e.g. abcdef.0123456789abcdef--token-ttl duration                   token 自动删除的时间间隔。 (e.g. 1s, 2m, 3h). 如果设置为 '0', token 永不过期 (default 24h0m0s)--upload-certs                         上传 control-plane 证书到 kubeadm-certs Secret.
    

    ps:如果想要回退,可执行以下指令

    kubeadm reset -f
    rm -rf /etc/kubernetes
    rm -rf /var/lib/etcd/
    rm -rf $HOME/.kube
    
  4. 查看状态:systemctl status kubelet

    在这里插入图片描述

    ps:如果报错,可以使用journalctl -xefu kubelet看下哪里的问题

  5. 设置.kube/config(只在master执行)

    1)mkdir -p $HOME/.kube

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

    3)chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config

  6. 安装网络插件calico(只在master执行)

    1)切换目录:cd /opt/k8s

    2)下载:curl https://docs.projectcalico.org/archive/v3.19/manifests/calico.yaml -O

    3)修改内容,其中value为上一步的–pod-network-cidr的ip:vi /opt/k8s/calico.yaml

    - name: CALICO_IPV4POOL_CIDR
    value: "192.169.0.0/16"
    

    4)查看需要的镜像:cat calico.yaml | grep image

在这里插入图片描述

5)编辑镜像下载文件:vi /opt/calicoImages.sh

#!/bin/bashimages=(
docker.io/calico/cni:v3.19.4
docker.io/calico/pod2daemon-flexvol:v3.19.4
docker.io/calico/node:v3.19.4
docker.io/calico/kube-controllers:v3.19.4
)
for imageName in ${images[@]} ; do
docker pull $imageName
done

6)赋权:chmod +x /opt/calicoImages.sh

7)执行:/opt/calicoImages.sh

8)部署calico(只在master执行):kubectl apply -f calico.yaml

9)此时查看master的状态:kubectl get pods -A

在这里插入图片描述

10)kubectl get nodes

在这里插入图片描述

  1. 加入node节点

    1)执行:kubeadm join master:6443 --token x3mk8z.fzaqp9swqxl2o6r3 --discovery-token-ca-cert-hash sha256:f4ced0c25b14a796e02b3300b011f7ec8e120c01e95595d78b6d1b38b8805dfc

    2)令牌有效期24小时,可以在master节点生成新令牌命令: kubeadm token create --print-join-command

    3)查看master的状态:kubectl get pods -A

    在这里插入图片描述

    4)kubectl get nodes

    在这里插入图片描述

    5)拷贝主节点文件使node节点可以执行kubectl命令:scp -r H O M E / . k u b e w o r k e r 1 : HOME/.kube worker1: HOME/.kubeworker1:HOME

    ​ ps:拷贝完,自行在node节点测试kubectl命令

    6)将主节点中的/etc/kubernetes/admin.conf文件拷贝到从node节点相同目录下:scp /etc/kubernetes/admin.conf worker1:/etc/kubernetes

    7)导入环境

    echo export KUBECONFIG=/etc/kubernetes/admin.conf >> ~/.bash_profile
    source ~/.bash_profile
    

四、安装部署dashboard

ps:只在master执行

  1. dashboard和kubernetes的版本对应关系,参考:https://github.com/kubernetes/dashboard/blob/v2.5.1/go.mod

  2. 下载镜像

    1)切换目录:cd /opt/k8s

    2)下载:curl https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml -O

    3)创建资源:kubectl apply -f recommended.yaml

    ps:会下载kubernetesui/dashboard:v2.5.1、kubernetesui/metrics-scraper:v1.0.7两个镜像。也可以直接先下载镜像,避免等待

  3. 定时刷新查看进度:watch -n 3 kubectl get pods -A

    在这里插入图片描述

  4. 设置访问端口:kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

    将type: ClusterIP改为:type: NodePort
    添加 nodePort: 32414
    

在这里插入图片描述

  1. 查看端口命令:kubectl get svc -A | grep kubernetes-dashboard

    在这里插入图片描述

  2. 访问dashborad页面:https://192.168.248.11:32414,如下所示

    在这里插入图片描述

  3. 获取普通用户token

    1)获取列表: kubectl get secrets -n kubernetes-dashboard

    2)获取密钥:kubectl describe secrets default-token-fjzh6 -n kubernetes-dashboard
    在这里插入图片描述

  4. 获取admin用户token

    1)创建访问账号:vi /opt/dash.yaml

    创建用户–》申明角色–》用户和角色绑定

    apiVersion: v1
    kind: ServiceAccount
    metadata:name: admin-usernamespace: kubernetes-dashboard
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:name: admin-user
    roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
    subjects:
    - kind: ServiceAccountname: admin-usernamespace: kubernetes-dashboard
    

    2)应用: kubectl apply -f /opt/dash.yaml

    3)获取访问令牌: kubectl describe secrets admin-user-token-d8f7x -n kubernetes-dashboard
    在这里插入图片描述

  5. 将获取的token填入页面登录即可

    在这里插入图片描述

相关文章:

1-k8s1.23.6-底座搭建-基于docker

这里写自定义目录标题 一、服务器准备二、安装docker三、安装k8s四、安装部署dashboard 一、服务器准备 服务器准备 服务器名称服务器IP角色CPU(最低要求)内存(最低要求)master192.168.248.10master2核2Gworker1192.168.248.11node2核2Gworker2192.168.248.12node2核2G 修改ip&…...

【SA8295P 源码分析 (一)】76 - Thermal 功耗 之 /dev/thermalmgr 相关调试命令汇总

【SA8295P 源码分析】76 - Thermal 功耗 之 /dev/thermalmgr 相关调试命令汇总 1、配置文件:/mnt/etc/system/config/thermal-engine.conf2、获取当前SOC所有温度传感器的温度:cat /dev/thermalmgr3、查看所有 Thermal 默认配置和自定义配置:echo query config > /dev/th…...

每日汇评:随着上升趋势的恢复,黄金在1950美元上方等待破位

周三早间,黄金价格逼近1950美元,买家纷纷出手; 尽管市场情绪谨慎,但美元与美债交投疲弱,中国的乐观情绪逐渐消退; 金价重拾200日移动均线,但料持续升穿1950美元; 金价正从每盎司1943…...

postgresql字符串处理的函数

1. SPLIT_PART SPLIT_PART() 函数通过指定分隔符分割字符串,并返回第N个子串。语法: SPLIT_PART(string, delimiter, position) string : 待分割的字符串 delimiter:指定分割字符串 position:返回第几个字串,从1开始&…...

(1)攻防世界web-Training-WWW-Robots

1.开启环境,查看网页 翻译一下 2.前往robots.txt 命令:http://61.147.171.105:57663/robots.txt 3.前往fl0g.php 命令:http://61.147.171.105:57663/fl0g.php 4.得到flag cyberpeace{92ec1ef9b6d900100399093b9ae9e386}...

list.set交换数据需要(or不需要)添加其他中间变量,两个例子告诉你

说明:set()方法是来修改指定位置的元素。 两个参数,第一个参数是要修改的元素的索引,第二个参数是要设置的新值。 案例一:当链表中传入的是字符串时: public static void main(String[] args) {List list new Linke…...

Linux中的主要系统调用

Linux 操作系统中就是创建进程。创建进程的系统调用叫fork。在 Linux 里,要创建一个新的进程,需要一个老的进程调用 fork 来实现,其中老的进程叫作父进程(Parent Process),新的进程叫作子进程(C…...

在vscode中配置git bash终端、git 源码管理

打开vscode文件->首选项->设置,打开设置搜索shell windows将以下配置添加到vscode中的settings.json中 注意: terminal.integrated.profiles.windows这个配置项是就是添加终端的terminal.integrated.defaultProfile.windows这个是配置默认选项的…...

(三十四)大数据实战——scala运行环境安装配置及IDEA开发工具集成

前言 本节内容我们主要介绍一下scala运行环境的安装配置以及在idea开发工具中集成scala插件,便于scala项目的开发。 在开始scala安装配置之前,我们要先安装好jvm运行环境,scala运行于Java虚拟机(JVM)上,并…...

Double 4 VR智能互动教学系统的教学应用

1. 激发学习兴趣 Double 4 VR智能互动教学系统通过虚拟现实技术为学生创造了一个身临其境的学习环境。学生可以通过戴上VR头盔,进入虚拟世界中与教学内容互动。这种沉浸式的学习方式能够激发学生的学习兴趣,使他们更加主动地参与到课堂中来。 2. 提供直…...

GPU 驱动下载记录

1. 我的GPU 是这个:GeForce RTX 2060 下载链接是:Official Drivers | NVIDIA...

KILM: Knowledge Injection into Encoder-Decoder Language Models

本文是LLM系列文章,针对《KILM: Knowledge Injection into Encoder-Decoder Language Models》的翻译。 KILM:知识注入到编码器-解码器语言模型 摘要1 引言2 相关工作3 方法4 实验5 讨论6 结论局限性 摘要 大型预训练语言模型(PLMs)已被证明在其参数内保…...

205、使用消息队列实现 RPC(远程过程调用)模型的 服务器端 和 客户端

目录 ★ RPC模型(远程过程调用通信模型)▲ 完整过程:代码演示总体流程解释:ConstantUtil 常量工具类ConnectionUtil RabbitMQ连接工具类Server 服务端Client 客户端测试结果服务端客户端 完整代码ConstantUtil 常量工具类Connecti…...

C++中的函数

在C中,函数是程序的一部分,它执行特定的任务。函数的基本语法如下: type function-name( parameter list ) { body of the function } type 是函数的返回类型,function-name 是函数的名称, parameter list 是传递…...

java操作时间的方式

java操作时间的方式 获取年月日时分秒 public class Test { public static void main(String[] args) { System.out.println("----------使用Calendar--------------------"); Calendar cal Calendar.getInstance(); System.out.println(&q…...

上网冲浪发现多处XSS

突然的发现 今天上网冲浪,突然想起来有一种神器,叫废话生成器,之前是在哪里下了个软件玩了一下,然后就给删除了,因为我觉得这个软件不过就是调用了一个web接口实现的,一个网页能解决的事还要我下一个软件。…...

机器学习的打分方程汇总

机器学习的打分方程集合 受到机器学习(Machine Learning)和深度学习(Deep Learning)等算法模型的创新性冲击,其应用范围涵盖了自然语言处理(Natural Language Processing)、自动驾驶&#xff08…...

一文了解数据管理框架以及数据战略制定方法

这一节主要介绍数据管理这一章的另一重要部分,也就是我们在数据管理经常使用到的数据管理框架以及数据战略制定方法。 要制定数据管理框架,或者是组织需要制定数据治理规划或数据管理规划,需要首先制定与业务战略对齐的数据战略。 01、数据…...

智能管家“贾维斯”走进现实?AI Agent或成2023科技领域新风向标

漫威粉们想必都知道《钢铁侠》系列电影中,有一个不可或缺的角色——贾维斯。但就算是没有看过任何一部大电影的路人,只要通过一个词就可以了解“贾维斯”是一个什么样的角色——智能管家。 作为托尼斯塔克的助手,贾维斯的存在让主人的生活更…...

【广州华锐互动】VR高层小区安全疏散演练系统

在今天的高科技时代,虚拟现实(VR)技术已经被广泛应用到各个领域,包括教育和培训。由广州华锐互动定制开发的VR高层小区安全疏散演练系统,开始在房地产行业中崭露头角。这种系统通过模拟真实的紧急情况,帮助…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

三体问题详解

从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

es6+和css3新增的特性有哪些

一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...