Kubernetes介绍和环境部署

news2024/11/23 23:48:03

文章目录

  • Kubernetes
    • 一、Kubernetes介绍
        • 1.Kubernetes简介
        • 2.Kubernetes概念
        • 3.Kubernetes功能
        • 4.Kubernetes工作原理
        • 5.kubernetes组件
        • 6.Kubernetes优缺点
    • 二、Kubernetes环境部署
        • 环境
        • 基本配置
        • 1.所有节点安装docker
        • 2.所有节点安装kubeadm、kubelet、kubectl
          • 添加yum源
          • containerd配置
        • 3.部署Kubernetes Master(管理节点)
        • 4.安装Pod网络插件(CNI)
        • 5.加入Kubernetes Node
        • 6.测试Kubernetes 集群

Kubernetes

一、Kubernetes介绍

1.Kubernetes简介

Kubernetes是一种开源的容器编排工具,用于管理和编排云原生应用程序。它可以协调和管理运行在多个计算机集群上的Docker容器,自动进行容器部署、更新、扩容和负载均衡等操作,以确保应用程序的可用性和高可靠性。


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

3.Kubernetes功能

kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

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

Kubernetes的工作原理可以简单地概括为:通过API服务器、etcd和调度器等组件,将容器化的应用程序部署到集群中的工作节点上,并保证他们按照用户定义的方式运行和提供服务。简单来说,Kubernetes利用了多个工作节点(node)进行应用的部署和运行,使用Pod来封装容器。Pod中包含一个或多个紧密耦合的容器,可以共享网络和存储资源,Pod可以水平扩展,当一个或多个Pod失败时,可以进行自动替换。Kubernetes还提供了负载均衡、服务发现和伸缩等功能,以帮助应用程序更好地运行和扩展。

5.kubernetes组件

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

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

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

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

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

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

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

Kubelet : 负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器

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


6.Kubernetes优缺点

Kubernetes的优点主要有以下几点:

  1. 弹性和高可靠性:Kubernetes通过节点的自动切换和Pod的自动重启等机制实现高可靠性,确保应用程序不会因为单个节点或者Pod的故障导致的中断。

  2. 高扩展性:Kubernetes支持水平扩展,可以扩展节点的数量以容纳更多的容器,在应用程序负载增大的情况下,可以通过添加节点进行扩展。

  3. 简化部署:Kubernetes抽象了容器和Pod等概念,简化了部署和管理容器化应用程序的过程,使得开发人员更加专注于应用程序本身。

然而,Kubernetes也存在一些缺点:

  1. 学习成本高:由于Kubernetes涉及到多个概念和组件,以及高度抽象的部署和管理方式,因此学习成本相对较高。

  2. 复杂性高:Kubernetes的部署和配置比较复杂,需要更多的人力和时间进行维护,管理容器数量较少的场景可能会过度负担。

  3. 运行成本高:由于Kubernetes需要在多个节点上运行,需要额外的网络和存储资源,因此相对于单节点方案,运行成本会增加。


二、Kubernetes环境部署

环境
主机名角色安装的软件IP地址系统版本
master管理节点Docker
kubeadm
kubelet
kubectl
192.168.179.13centos8
node1工作节点Docker
kubeadm
kubelet
kubectl
192.168.179.14centos8
node2工作节点Docker
kubeadm
kubelet
kubectl
192.168.179.15centos8
基本配置
//永久关闭防火墙和selinux(所有主机都做)
systemctl disable --now firewalld.service
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

//所有主机配置国内yum源(推荐使用阿里云源)
rm -rf /etc/yum.repos.d/*

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

yum clean all && yum makecache 


//配置主机名解析(所有主机都做)
[root@master ~]# vi /etc/hosts 
[root@master ~]# cat /etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
#要添加的内容
192.168.179.13	master
192.168.179.14	node1
192.168.179.15	node2
[root@master ~]# 

//关闭swap分区(注释掉swap分区的那一行,所有主机都做)
[root@master ~]# vi /etc/fstab 
[root@master ~]# cat /etc/fstab 
(省略)
# units generated from this file.
#
/dev/mapper/cs-root     /                       xfs     defaults        0 0
UUID=22d538b9-6f73-43c5-8d80-228f9bc1b20a /boot                   xfs     defaults        0 0
#/dev/mapper/cs-swap     none                    swap    defaults        0 0
[root@master ~]# 


//将桥接的IPv4流量传递到iptables的链(所有主机都做)
[root@master ~]# vi /etc/sysctl.d/k8s.conf
[root@master ~]# cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
[root@master ~]# sysctl --system

//配置时间同步
--设置时区(所有主机都设置)
[root@master ~]# timedatectl set-timezone Asia/Shanghai 
--管理节点的配置
[root@master ~]# yum -y install chrony
[root@master ~]# vi /etc/chrony.conf 
[root@master ~]# cat /etc/chrony.conf 
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool time1.aliyun.com iburst   //将默认的时间同步服务器换成阿里云的(用此行内容替换原来的)
(省略)
[root@master ~]# systemctl enable chronyd.service 
[root@master ~]# systemctl restart chronyd.service 
--两个工作节点的配置
[root@node1 ~]# vi /etc/chrony.conf 
[root@node1 ~]# cat /etc/chrony.conf 
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool master iburst  //将默认的时间同步服务器改为管理节点
(省略)
[root@node1 ~]# systemctl enable chronyd.service 
[root@node1 ~]# systemctl restart chronyd.service 

//配置免密登录(只在master管理节点上做)
--生成密钥
[root@master ~]# ssh-keygen -t rsa  (一直回车)
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yqtCSSfFJId+z0yRPJX4rR6i4N1GFPilY+4aG3pxkFI root@master
The key's randomart image is:
+---[RSA 3072]----+
|  .+oo +..       |
|  .oE B o        |
| . o o B .       |
|  = = B . .      |
| . * X .S.       |
|  + ..O.o        |
| o ooBoo .       |
|  o.+++..        |
|  .o++.          |
+----[SHA256]-----+

--发送证书给所有节点(包括自己)
[root@master ~]# ssh-copy-id master
[root@master ~]# ssh-copy-id node1
[root@master ~]# ssh-copy-id node2

//安装基础工具包(所有主机都安装)
yum -y install vim wget

//重启所有主机
reboot
1.所有节点安装docker

安装docker

//安装docker依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

//配置docker的yum源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

//安装docker
yum -y install docker-ce

//启动并设置docker开机自启
systemctl enable --now docker.service

//配置docker镜像的加速器(所有节点都配置)
[root@master ~]# vim /etc/docker/daemon.json
[root@master ~]# cat /etc/docker/daemon.json
{
   "registry-mirrors": ["https://5qsf7g11.mirror.aliyuncs.com"]
}
[root@master ~]# systemctl daemon-reload 
[root@master ~]# systemctl restart docker.service 
2.所有节点安装kubeadm、kubelet、kubectl
添加yum源

先添加一个kubernetes的yum源,再安装各软件包(所有主机)

//添加kubernetes的yum源
[root@master ~]# 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
[root@master ~]# yum makecache 

//安装kubeadm、kubelet和kubectl
[root@master ~]# yum -y install kubelet kubeadm kubectl

//设置开机自启(仅设置开机自启,千万不要启动!!!)
[root@master ~]# systemctl stop kubelet
[root@master ~]# systemctl enable kubelet
containerd配置

在 /etc/containerd/ 下面有一个 config.toml 的文件

//这个文件默认是没有很多功能的,所以我们不用这,而是重新生成一个
[root@master ~]# cat /etc/containerd/config.toml 
#   Copyright 2018-2022 Docker Inc.

#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at

#       http://www.apache.org/licenses/LICENSE-2.0

(省略)
//生成一个新的config.toml文件
[root@master ~]# containerd config default > /etc/containerd/config.toml

//修改拉取镜像的位置,默认位置是外网,正常情况访问不到。所以换成国内的
--在这个配置文件中找到sandbox_image = "registry.k8s.io/pause:3.6"这一行,把这行改为
  sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"
[root@master ~]# vim /etc/containerd/config.toml 
[root@master ~]# cat /etc/containerd/config.toml 
(省略)
    sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"
(省略)

//重启containerd服务并设置开机自启
[root@master ~]# systemctl restart containerd.service 
[root@master ~]# systemctl enable containerd.service 

//把这个改好的文件scp到另外两个工作节点
[root@master ~]# scp /etc/containerd/config.toml node1:/etc/containerd/
[root@master ~]# scp /etc/containerd/config.toml node2:/etc/containerd/

//在另外两个工作节点上重启containerd服务并设置开机自启
[root@node1 ~]# systemctl restart containerd.service && systemctl enable containerd.service 
[root@node2 ~]# systemctl restart containerd.service && systemctl enable containerd.service 
3.部署Kubernetes Master(管理节点)

只在master主机(管理节点)上操作

//初始化集群
[root@master ~]# kubeadm init \
  --apiserver-advertise-address=192.168.179.13 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.28.2 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16
  
//出现这行就代表初始化成功:Your Kubernetes control-plane has initialized successfully!

//初始化后生成的一些教程复制下来,写在一个文件里面保存起来,说不定以后会用到
[root@master ~]# vim k8s-init
[root@master ~]# cat k8s-init 
To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.179.13:6443 --token 3codju.65fqz143cjxzfjcw \
	--discovery-token-ca-cert-hash sha256:9ffae8478fff2fd94274144066edc9d91f229b51b8e11663da8ce055da04028c 
[root@master ~]# 

//设置环境变量
[root@master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" > /etc/profile.d/k8s.sh
[root@master ~]# source /etc/profile.d/k8s.sh
4.安装Pod网络插件(CNI)
//下载一个flannel资源模板文件
[root@master ~]# wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

//添加flannel资源
[root@master ~]# kubectl apply -f kube-flannel.yml 

//查看flannel资源
[root@master ~]# kubectl get -f kube-flannel.yml 
NAME                     STATUS   AGE
namespace/kube-flannel   Active   89s

NAME                     SECRETS   AGE
serviceaccount/flannel   0         89s

NAME                                            CREATED AT
clusterrole.rbac.authorization.k8s.io/flannel   2023-11-13T09:06:00Z

NAME                                                   ROLE                  AGE
clusterrolebinding.rbac.authorization.k8s.io/flannel   ClusterRole/flannel   89s

NAME                         DATA   AGE
configmap/kube-flannel-cfg   2      89s

NAME                             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/kube-flannel-ds   1         1         1       1            1           <none>          89s
[root@master ~]#   //资源没有问题

//查看k8s组件的pod
[root@master ~]# kubectl get pods -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-66f779496c-5thsr         1/1     Running   0          27m
coredns-66f779496c-nqjkx         1/1     Running   0          27m
etcd-master                      1/1     Running   0          27m
kube-apiserver-master            1/1     Running   0          27m
kube-controller-manager-master   1/1     Running   0          27m
kube-proxy-7dc82                 1/1     Running   0          27m
kube-scheduler-master            1/1     Running   0          27m
[root@master ~]#  //运行没有问题

//查看所有名称空间
[root@master ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   29m
kube-flannel      Active   4m8s
kube-node-lease   Active   29m
kube-public       Active   29m
kube-system       Active   29m
[root@master ~]#  //没有问题
5.加入Kubernetes Node

在两台工作节点上执行;node1和node2

//在node1和node2上执行
[root@node1 ~]# kubeadm join 192.168.179.13:6443 --token 3codju.65fqz143cjxzfjcw \
	--discovery-token-ca-cert-hash sha256:9ffae8478fff2fd94274144066edc9d91f229b51b8e11663da8ce055da04028c 

[root@node2 ~]# kubeadm join 192.168.179.13:6443 --token 3codju.65fqz143cjxzfjcw \
	--discovery-token-ca-cert-hash sha256:9ffae8478fff2fd94274144066edc9d91f229b51b8e11663da8ce055da04028c 


//在master上查看加入的node节点
[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES           AGE   VERSION
master   Ready      control-plane   33m   v1.28.2
node1    Ready      <none>          87s   v1.28.2
node2    NotReady   <none>          36s   v1.28.2
[root@master ~]# 

//查看网络组件,在两台node上也跑起来了
[root@master ~]# kubectl get pods -n kube-flannel -o wide
NAME                    READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
kube-flannel-ds-7h6vp   1/1     Running   0          3m32s   192.168.179.14   node1    <none>           <none>
kube-flannel-ds-gmhpm   1/1     Running   0          10m     192.168.179.13   master   <none>           <none>
kube-flannel-ds-mhn7s   1/1     Running   0          2m41s   192.168.179.15   node2    <none>           <none>
[root@master ~]# 


6.测试Kubernetes 集群
//创建一个名字叫nginx,镜像为nginx,在default名称空间里面的pod
[root@master ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created

//查看pod状态,已经跑起来了,在内部使用容器ip访问
[root@master ~]# kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE    IP           NODE    NOMINATED NODE   READINESS GATES
nginx-7854ff8877-r277b   1/1     Running   0          3m6s   10.244.1.2   node2   <none>           <none>

//内部访问
[root@master ~]# curl 10.244.1.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>



//暴露端口号
[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed

//查看
[root@master ~]# kubectl get pod,svc
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-7854ff8877-r277b   1/1     Running   0          9m8s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        61m
service/nginx        NodePort    10.110.91.174   <none>        80:32597/TCP   94s
[root@master ~]# 

然后使用管理节点的ip加映射的端口号在浏览器访问

在这里插入图片描述


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

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

相关文章

查询数据表格中的数据

1.创建这个表至少20个 1&#xff09;创建数据库&#xff1a;create database 四川信息职业技术; 2&#xff09;创建数据表 3&#xff09;插入数据&#xff08;第一条代码修改了一下手机号码的字段类型&#xff09; 2.统计表中的人数 如果你想根据某个特定的列来统计人数&…

Jenkins在Linux环境下的安装与配置

Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成&#xff08;CI&#xff09;工具&#xff0c;用于解决持续重复的部署、监控工作&#xff1b;它一个开放易用的软件平台&#xff0c;大大简化软件的持续集成。 安装Jenkins 1.使用docker安装 2.本地下载je…

Python数据结构:元组(Tuple)详解

1.介绍和基础操作 Python中的元组&#xff08;Tuple&#xff09;是不可变有序序列&#xff0c;可以容纳任意数据类型&#xff08;包括数字、字符串、布尔型、列表、字典等&#xff09;的元素&#xff0c;通常用圆括号() 包裹。与列表&#xff08;List&#xff09;类似&#xff…

[IJKPLAYER]基于DEMO分析IJKPLAYER(整理版本)

背景 博主主要是从事C语言开发&#xff0c;因此本文着重强调FFMPEG部分&#xff0c;关于JAVA应用和框架层只是一笔带过。IJKPLAYER的实质是对FFMPEG项目中的ffplayer程序进行的二次封装&#xff0c;通过JNI方式完成对外提供JAVA接口。 1.目录结构 activities:包含了demo的所有…

react函数式组件props形式父向子传参

父组件中定义 子组件中触发回调传值 import { useState } from "react"; function Son(params) {const [count, setCount] useState(0);function handleClick() {console.log(params, paramsparamsparamsparamsparamsparams);params.onClick(111)setCount(count 1…

多个微信快速同步发圈

做营销最重要的任务是什么&#xff1f; 毋庸置疑&#xff0c;就是发布朋友圈。 为什么要发圈呢&#xff1f; 现在社交媒体中&#xff0c;微信不管在生活上、工作上都是不可或缺的工具&#xff0c;而朋友圈是微信中社交场景之一&#xff0c;也是很多企业作为推广产品和服务的重…

腾讯云服务器多少钱一年?2023年腾讯云优惠云服务器推荐

作为一名程序员&#xff0c;技术的突飞猛进是从拥有第一台云服务器开始的。那时&#xff0c;我开始尝试使用Linux系统&#xff0c;并成功上线了自己的第一个小程序。自此之后&#xff0c;我和我的同事们都开始拥有自己的云服务器&#xff0c;用来搭建各种小项目或者好玩的东西。…

OpenAtom OpenHarmony三方库创建发布及安全隐私检测

OpenAtom OpenHarmony三方库&#xff08;以下简称“三方库”或“包”&#xff09;&#xff0c;是经过验证可在OpenHarmony系统上可重复使用的软件组件&#xff0c;可帮助开发者快速开发OpenHarmony应用。三方库根据其开发语言分为2种&#xff0c;一种是使用JavaScript和TypeScr…

wpf devexpress设置行和编辑器

如下教程示范如何计算行布局&#xff0c;特定的表格单元编辑器&#xff0c;和格式化显示值。这个教程基于前一个文章 选择行显示 GridControl为所有字段生成行和绑定数据源&#xff0c;如果AutoGenerateColumns 属性选择AddNew。添加行到GridControl精确显示为特别的几行设置。…

Containerd接入Harbor仓库

在使用容器时&#xff0c;避免不了会使用到私有仓库&#xff0c;一般都是采用 harbor 作为私有仓库&#xff0c;docker 对接 harbor 仓库非常简单&#xff0c;哪 containerd 如何对接 harbor 呢&#xff1f; 在内网使用 harbor 根据个人习惯&#xff0c;一般都是非 http 并且是…

【SpringBoot3+Vue3】一【基础篇】

目录 一、Spring Boot概述 1、Spring Boot 特性 1.1 起步依赖 1.2 自动配置 1.3 其他特性 1.3.1 内嵌的Tomcat、Jetty (无需部署WAR文件) 1.3.2 外部化配置 1.3.3 不需要XML配置(properties/yml) 二、Spring Boot入门 1、一个入门程序需求 2、步骤 2.1 创建Maven工…

智能配方颗粒管理系统解决方案,专业实现中医药产业数字化-亿发

“中药配方颗粒”&#xff0c;又被称为免煎中药&#xff0c;源自传统中药饮片&#xff0c;经过提取、分离、浓缩、干燥、制粒、包装等工艺加工而成。这种新型配方药物完整保留了原中药饮片的所有特性。既能满足医师的辨证论治和随症加减需求&#xff0c;同时具备强劲好人高效的…

Python实现猎人猎物优化算法(HPO)优化XGBoost回归模型(XGBRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

(论文阅读29/100 人体姿态估计)

29.文献阅读笔记 简介 题目 DeepCut: Joint Subset Partition and Labeling for Multi Person Pose Estimation 作者 Leonid Pishchulin, Eldar Insafutdinov, Siyu Tang, Bjoern Andres, Mykhaylo Andriluka, Peter Gehler, and Bernt Schiele, CVPR, 2016. 原文链接 h…

分享一套适合二开的JAVA开源版本MES系统

一、系统概述&#xff1a; 万界星空科技免费MES、开源MES、商业开源MES、市面上最好的开源MES、MES源代码 万界星空开源MES制造执行系统的Java开源版本。 开源mes系统包括系统管理&#xff0c;车间基础数据管理&#xff0c;计划管理&#xff0c;物料控制&#xff0c;生产执行…

ubuntu开机系统出错且无法恢复。请联系系统管理员。

背景&#xff1a; ubuntu22.04.2命令行&#xff0c;执行自动安装系统推荐显卡驱动命令&#xff0c;字体变大&#xff0c;重启后出现如下图错误&#xff0c;无法进入系统&#xff0c;无法通过CTRLALTF1-F3进入TTY模式。 解决办法&#xff1a; 1.首先要想办法进入系统&#xff…

江门車馬炮汽车金融中心 11月11日开张

江门车马炮汽车金融中心于11月11日正式开张&#xff0c;这是江门市汽车金融服务平台&#xff0c;旨在为广大车主提供更加便捷、高效的汽车金融服务。 江门市作为广东省的一个经济发达城市&#xff0c;汽车保有量持续增长&#xff0c;但车主在购车、用车、养车等方面仍存在诸多不…

华东“启明”青少年音乐艺术实践中心揭幕暨中国“启明”巴洛克合奏团首演音乐会

2023年11月11日&#xff0c;华东“启明”青少年音乐艺术实践中心在上海揭幕&#xff0c;中国“启明”巴洛克合奏团开启了首场音乐会。 华东“启明”青少年音乐艺术实践中心由中共宁波市江北区委宣传部与上音管风琴艺术中心联合指导&#xff0c;宁波音乐港、宁波市江北区洛奇音乐…

Apipost IDEA插件如何使用

Apipost-Helper是由Apipost推出的IDEA插件&#xff0c;写完接口可以进行快速调试&#xff0c;且支持搜索接口、根据method跳转接口&#xff0c;还支持生成标准的API文档&#xff0c;注意&#xff1a;这些操作都可以在代码编辑器内独立完成&#xff0c;非常好用&#xff01;这里…

Python数据大杀器:掌握collections与heapq,编写更高效的算法与数据处理

前言 在计算机科学的世界中&#xff0c;数据结构是构建强大和高效算法的基石。Python作为一门广泛应用的编程语言&#xff0c;以其丰富的数据结构模块为程序员提供了强大的工具。本文旨在深入研究Python的collections和heapq模块&#xff0c;通过更丰富的示例和详细的解释&…