猪八戒做网站/外包seo公司
今天,我将为大家实战演示,如何基于操作系统 openEuler 22.03 LTS SP3,利用 KubeKey 制作 Kubernetes 离线安装包,并实战离线部署 Kubernetes v1.28.8 集群。
实战服务器配置 (架构 1:1 复刻小规模生产环境,配置略有不同)
主机名 | IP | CPU | 内存 | 系统盘 | 数据盘 | 用途 |
---|---|---|---|---|---|---|
ksp-control-1 | 192.168.9.91 | 8 | 16 | 40 | 100 | 离线环境 k8s-control-plane |
ksp-control-2 | 192.168.9.92 | 8 | 16 | 40 | 100 | 离线环境 k8s-control-plane |
ksp-control-3 | 192.168.9.93 | 8 | 16 | 40 | 100 | 离线环境 k8s-control-plane |
ksp-registry | 192.168.9.90 | 4 | 8 | 40 | 100 | 离线环境部署节点和镜像仓库节点 |
ksp-deploy | 192.168.9.89 | 4 | 8 | 40 | 100 | 联网主机用于制作离线包 |
合计 | 5 | 32 | 64 | 200 | 500 |
实战环境涉及软件版本信息
- 操作系统:openEuler 22.03 LTS SP3
- Kubernetes:v1.28.8
- KubeKey: v3.1.1
1. 制作离线部署资源
本文增加了一台能联网的 ksp-deploy 节点,在该节点下载 KubeKey 最新版(v3.1.1),用来制作离线部署资源包。
1.1 下载 KubeKey
- 下载最新版的 KubeKey
mkdir -p /data/kubekey
cd /data/kubekey# 选择中文区下载(访问 GitHub 受限时使用)
export KKZONE=cn# 执行下载命令,获取最新版的 kk(受限于网络,有时需要执行多次)
curl -sfL https://get-kk.kubesphere.io | sh -
1.2 创建 manifests 模板文件
KubeKey v3.1.0 之前, manifests 文件需要根据模板手动编写, 现在可以通过 Kubekey 的 create manifest
命令自动生成 manifests 模板。
create manifest
支持的参数如下
$ ./kk create manifest --help
Create an offline installation package configuration fileUsage:kk create manifest [flags]Flags:--arch stringArray Specify a supported arch (default [amd64])--debug Print detailed information-f, --filename string Specify a manifest file path-h, --help help for manifest--ignore-err Ignore the error message, remove the host which reported error and force to continue--kubeconfig string Specify a kubeconfig file--name string Specify a name of manifest object (default "sample")--namespace string KubeKey namespace to use (default "kubekey-system")--with-kubernetes string Specify a supported version of kubernetes--with-registry Specify a supported registry components-y, --yes Skip confirm check
- 官方示例(支持多集群、多架构)
# 示例:创建包含 kubernetes v1.24.17,v1.25.16,且 cpu 架构为 amd64、arm64 的 manifests 文件。
./kk create manifest --with-kubernetes v1.24.17,v1.25.16 --arch amd64 --arch arm64
- 创建一个 amd64 架构 kubernetes v1.28.8 的 manifests 文件
./kk create manifest --name opsxlab --with-kubernetes v1.28.8 --arch amd64 --with-registry "docker registry"
生成的配置文件如下
apiVersion: kubekey.kubesphere.io/v1alpha2 kind: Manifest metadata: name: opsxlab spec: arches: - amd64 operatingSystems: - arch: amd64type: linuxid: ubuntuversion: "20.04"osImage: Ubuntu 20.04.6 LTSrepository:iso:localPath:url: kubernetesDistributions: - type: kubernetesversion: v1.28.8 components:helm:version: v3.14.3cni:version: v1.2.0etcd:version: v3.5.13containerRuntimes:- type: dockerversion: 24.0.9- type: containerdversion: 1.7.13calicoctl:version: v3.27.3crictl:version: v1.29.0docker-registry:version: "2"harbor:version: v2.10.1docker-compose:version: v2.26.1 images: - docker.io/kubesphere/pause:3.9 - docker.io/kubesphere/kube-apiserver:v1.28.8 - docker.io/kubesphere/kube-controller-manager:v1.28.8 - docker.io/kubesphere/kube-scheduler:v1.28.8 - docker.io/kubesphere/kube-proxy:v1.28.8 - docker.io/coredns/coredns:1.9.3 - docker.io/kubesphere/k8s-dns-node-cache:1.22.20 - docker.io/calico/kube-controllers:v3.27.3 - docker.io/calico/cni:v3.27.3 - docker.io/calico/node:v3.27.3 - docker.io/calico/pod2daemon-flexvol:v3.27.3 - docker.io/calico/typha:v3.27.3 - docker.io/flannel/flannel:v0.21.3 - docker.io/flannel/flannel-cni-plugin:v1.1.2 - docker.io/cilium/cilium:v1.15.3 - docker.io/cilium/operator-generic:v1.15.3 - docker.io/hybridnetdev/hybridnet:v0.8.6 - docker.io/kubeovn/kube-ovn:v1.10.10 - docker.io/kubesphere/multus-cni:v3.8 - docker.io/openebs/provisioner-localpv:3.3.0 - docker.io/openebs/linux-utils:3.3.0 - docker.io/library/haproxy:2.9.6-alpine - docker.io/plndr/kube-vip:v0.7.2 - docker.io/kubesphere/kata-deploy:stable - docker.io/kubesphere/node-feature-discovery:v0.10.0 registry:auths: {}
默认的配置文件说明:
- KubeKey v3.1.1 生成的 manifests 配置文件适用于 ubuntu 部署纯 Kubernetes 集群。因此,我们需要稍作修改,生成一份适配 openEuler 22.03 LTS SP3 的 manifests 文件。
- images 列表中有一些镜像实际上用不到,可以删除。本文保留了所有镜像。
1.3 修改 manifest 模板文件
根据上面的文件及相关信息,生成最终的 manifest 文件 ksp-v1.28.8-manifest-opsxlab.yaml。
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Manifest
metadata:name: opsxlab
spec:arches:- amd64operatingSystems:- arch: amd64type: linuxid: openEulerversion: "22.03"osImage: openEuler 22.03 (LTS-SP3)repository:iso:localPath: "/data/kubekey/openEuler-22.03-rpms-amd64.iso"url:kubernetesDistributions:- type: kubernetesversion: v1.28.8components:helm:version: v3.14.3cni:version: v1.2.0etcd:version: v3.5.13containerRuntimes:- type: dockerversion: 24.0.9- type: containerdversion: 1.7.13calicoctl:version: v3.27.3crictl:version: v1.29.0docker-registry:version: "2"harbor:version: v2.10.1docker-compose:version: v2.26.1images:- docker.io/kubesphere/pause:3.9- docker.io/kubesphere/kube-apiserver:v1.28.8- docker.io/kubesphere/kube-controller-manager:v1.28.8- docker.io/kubesphere/kube-scheduler:v1.28.8- docker.io/kubesphere/kube-proxy:v1.28.8- docker.io/coredns/coredns:1.9.3- docker.io/kubesphere/k8s-dns-node-cache:1.22.20- docker.io/calico/kube-controllers:v3.27.3- docker.io/calico/cni:v3.27.3- docker.io/calico/node:v3.27.3- docker.io/calico/pod2daemon-flexvol:v3.27.3- docker.io/calico/typha:v3.27.3- docker.io/flannel/flannel:v0.21.3- docker.io/flannel/flannel-cni-plugin:v1.1.2- docker.io/cilium/cilium:v1.15.3- docker.io/cilium/operator-generic:v1.15.3- docker.io/hybridnetdev/hybridnet:v0.8.6- docker.io/kubeovn/kube-ovn:v1.10.10- docker.io/kubesphere/multus-cni:v3.8- docker.io/openebs/provisioner-localpv:3.3.0- docker.io/openebs/linux-utils:3.3.0- docker.io/library/haproxy:2.9.6-alpine- docker.io/plndr/kube-vip:v0.7.2- docker.io/kubesphere/kata-deploy:stable- docker.io/kubesphere/node-feature-discovery:v0.10.0- docker.io/kubesphere/busybox:1.31.1registry:auths: {}
manifest 修改说明:
- operatingSystems 配置删除默认的 ubuntu,新增 openEuler 配置
- 建议把常用的 nginx、busybox 等基础镜像也加到 images 列表中
1.4 获取操作系统依赖包
本实验环境使用的操作系统是 x64 的 openEuler 22.03 LTS SP3,需要自己制作安装 Kubernetes 需要的操作系统依赖包镜像 openEuler-22.03-rpms-amd64.iso,其他操作系统请读者在 KubeKey releases 页面下载。
KubeKey 官方支持的操作系统依赖包,包含以下系统:
- almalinux-9.0
- centos7
- debian10
- debian11
- ubuntu-18.04
- ubuntu-20.04
- ubuntu-22.04
个人建议在离线环境用 openEuler 的安装 ISO,制做一个完整的离线软件源。在利用 KubeKey 安装离线集群时,就不需要考虑操作系统依赖包的问题。
1.5 导出制品 artifact
根据生成的 manifest,执行下面的命令制作制品(artifact)。
export KKZONE=cn
./kk artifact export -m ksp-v1.28.8-manifest-opsxlab.yaml -o ksp-offline-v1.28-artifact.tar.gz
正确执行后,输出结果如下(受限于篇幅,仅展示最终结果):
....
kube/v1.28.8/amd64/kubeadm
kube/v1.28.8/amd64/kubectl
kube/v1.28.8/amd64/kubelet
registry/compose/v2.26.1/amd64/docker-compose-linux-x86_64
registry/harbor/v2.10.1/amd64/harbor-offline-installer-v2.10.1.tgz
registry/registry/2/amd64/registry-2-linux-amd64.tar.gz
repository/amd64/openEuler/22.03/openEuler-22.03-amd64.iso
runc/v1.1.12/amd64/runc.amd64
06:44:12 CST success: [LocalHost]
06:44:12 CST [ChownOutputModule] Chown output file
06:44:12 CST success: [LocalHost]
06:44:12 CST [ChownWorkerModule] Chown ./kubekey dir
06:44:12 CST success: [LocalHost]
06:44:12 CST Pipeline[ArtifactExportPipeline] execute successfull
制品制作完成后,查看制品大小(全镜像,制品包居然达到了 2.7G,实际使用时尽量有选择的裁剪吧)。
$ ls -lh ksp-offline-v1.28-artifact.tar.gz
-rw-r--r-- 1 root root 2.7G May 31 06:44 ksp-offline-v1.28-artifact.tar.gz
1.6 导出 KubeKey 离线安装包
把 KubeKey 工具也制作成压缩包,便于拷贝到离线节点。
$ tar zcvf kubekey-offline-v1.28.tar.gz kk kubekey-v3.1.1-linux-amd64.tar.gz
2. 准备离线部署 Kubernetes 的前置数据
请注意,以下操作无特殊说明,均在离线环境部署(Registry)节点上执行。
2.1 上传离线部署资源包到部署节点
将以下离线部署资源包,上传至离线环境部署(Registry) 节点的 /data/
目录(可根据实际情况修改)。
- Kubekey:kubekey-offline-v1.28.tar.gz
- 制品 artifact:ksp-offline-v1.28-artifact.tar.gz
执行以下命令,解压 KubeKey:
# 创离线资源存放的数据目录
mkdir /data/kubekey
tar xvf /data/kubekey-offline-v1.28.tar.gz -C /data/kubekey
mv ksp-offline-v1.28-artifact.tar.gz /data/kubekey
注意: openEuler 默认不安装 tar,请自己想办法在离线部署节点上安装 tar。
2.2 创建离线集群配置文件
- 执行以下命令创建离线集群配置文件
cd /data/kubekey
./kk create config --with-kubernetes v1.28.8 -f ksp-v1228-offline.yaml
命令执行成功后,在当前目录会生成文件名为 ksp-v1228-offline.yaml 的配置文件。
2.3 修改 Cluster 配置
离线集群配置文件中 kind: Cluster 小节的作用是部署 Kubernetes 集群。本示例采用 3 个节点同时作为 control-plane、etcd 节点和 worker 节点。
执行命令,修改离线集群配置文件 ksp-v1228-offline.yaml
:
vi ksp-v1228-offline.yaml
修改 kind: Cluster 小节中 hosts 和 roleGroups 等信息,修改说明如下。
- hosts:指定节点的 IP、ssh 用户、ssh 密码、ssh 端口。示例演示了 ssh 端口号的配置方法。同时,新增一个 Registry 节点的配置
- roleGroups:指定 3 个 etcd、control-plane 节点,复用相同的机器作为 3 个 worker 节点
- 必须指定主机组
registry
作为仓库部署节点 - internalLoadbalancer: 启用内置的 HAProxy 负载均衡器
- system.rpms:新增配置,部署时安装 rpm 包(openEuler 系统默认没有安装 tar 包,必须提前安装)
- domain:自定义了一个 opsxlab.cn,没特殊需求的场景保留默认值即可
- containerManager:使用 containerd
- storage.openebs.basePath:新增配置,指定 openebs 默认存储路径为 /data/openebs/local
- registry:不指定
type
类型,默认安装 docker registry
修改后的完整示例如下:
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:name: sample
spec:hosts:- {name: ksp-control-1, address: 192.168.9.91, internalAddress: 192.168.9.91, port:22, user: root, password: "OpsXlab@2024"}- {name: ksp-control-2, address: 192.168.9.92, internalAddress: 192.168.9.92, user: root, password: "OpsXlab@2024"}- {name: ksp-control-3, address: 192.168.9.93, internalAddress: 192.168.9.93, user: root, password: "OpsXlab@2024"}- {name: ksp-registry, address: 192.168.9.90, internalAddress: 192.168.9.90, user: root, password: "OpsXlab@2024"}roleGroups:etcd:- ksp-control-1- ksp-control-2- ksp-control-3control-plane: - ksp-control-1- ksp-control-2- ksp-control-3worker:- ksp-control-1- ksp-control-2- ksp-control-3registry:- ksp-registrycontrolPlaneEndpoint:## Internal loadbalancer for apiservers internalLoadbalancer: haproxydomain: lb.opsxlab.cnaddress: ""port: 6443system:rpms:- tarkubernetes:version: v1.28.8clusterName: opsxlab.cnautoRenewCerts: truecontainerManager: containerdetcd:type: kubekeynetwork:plugin: calicokubePodsCIDR: 10.233.64.0/18kubeServiceCIDR: 10.233.0.0/18## multus support. https://github.com/k8snetworkplumbingwg/multus-cnimultusCNI:enabled: falsestorage:openebs:basePath: /data/openebs/local # 默认没有的新增配置,base path of the local PV provisionerregistry:auths:"registry.opsxlab.cn":certsPath: "/etc/docker/certs.d/registry.opsxlab.cn"privateRegistry: "registry.opsxlab.cn"namespaceOverride: "kubesphereio"registryMirrors: []insecureRegistries: []addons: []
3. 离线部署镜像仓库
为了验证 Kubekey 离线部署镜像仓库服务的能力,本文采用 Kubekey 部署镜像仓库 Docker Registry。小规模生产环境没必要使用 Harbor。
请注意,以下操作无特殊说明,均在离线环境部署(Registry)节点上执行。
3.1 安装 Docker Registry
执行以下命令安装镜像仓库 Docker Registry:
./kk init registry -f ksp-v1228-offline.yaml -a ksp-offline-v1.28-artifact.tar.gz
正确执行后,输出结果如下(受限于篇幅,仅展示最终结果):
07:02:15 CST [InitRegistryModule] Fetch registry certs
07:02:15 CST success: [ksp-registry]
07:02:15 CST [InitRegistryModule] Generate registry Certs
[certs] Generating "ca" certificate and key
[certs] registry.opsxlab.cn serving cert is signed for DNS names [ksp-registry localhost registry.opsxlab.cn] and IPs [127.0.0.1 ::1 192.168.9.90]
07:02:16 CST success: [LocalHost]
07:02:16 CST [InitRegistryModule] Synchronize certs file
07:02:19 CST success: [ksp-registry]
07:02:19 CST [InitRegistryModule] Synchronize certs file to all nodes
07:02:25 CST success: [ksp-registry]
07:02:25 CST success: [ksp-control-2]
07:02:25 CST success: [ksp-control-1]
07:02:25 CST success: [ksp-control-3]
07:02:25 CST [InstallRegistryModule] Install registry binary
07:02:25 CST success: [ksp-registry]
07:02:25 CST [InstallRegistryModule] Generate registry service
07:02:26 CST success: [ksp-registry]
07:02:26 CST [InstallRegistryModule] Generate registry config
07:02:27 CST success: [ksp-registry]
07:02:27 CST [InstallRegistryModule] Start registry serviceLocal image registry created successfully. Address: registry.opsxlab.cn07:02:27 CST success: [ksp-registry]
07:02:27 CST [ChownWorkerModule] Chown ./kubekey dir
07:02:27 CST success: [LocalHost]
07:02:27 CST Pipeline[InitRegistryPipeline] execute successfully
- 查看 Docker 是否配置了私有证书(确保使用了自定义域名及证书)
$ ls /etc/ssl/registry/ssl/
ca.crt ca-key.pem ca.pem registry.opsxlab.cn.cert registry.opsxlab.cn.key registry.opsxlab.cn-key.pem registry.opsxlab.cn.pem$ ls /etc/docker/certs.d/registry.opsxlab.cn/
ca.crt registry.opsxlab.cn.cert registry.opsxlab.cn.key
3.2 推送离线镜像到镜像仓库
将提前准备好的离线镜像推送到镜像仓库,这一步为可选项,因为创建集群的时候默认会推送镜像(本文使用参数忽略了)。为了部署成功率,建议先推送。
- 推送离线镜像
./kk artifact image push -f ksp-v1228-offline.yaml -a ksp-offline-v1.28-artifact.tar.gz
- 正确的安装结果如下(受限于篇幅,内容有删减):
......
07:04:34 CST Push multi-arch manifest list: registry.opsxlab.cn/kubesphereio/kube-controllers:v3.27.3
INFO[0035] Retrieving digests of member images
07:04:34 CST Digest: sha256:70bfc9dcf0296a14ae87035b8f80911970cb0990c4bb832fc4cf99937284c477 Length: 393
07:04:34 CST success: [LocalHost]
07:04:34 CST [ChownWorkerModule] Chown ./kubekey dir
07:04:34 CST success: [LocalHost]
07:04:34 CST Pipeline[ArtifactImagesPushPipeline] execute successfully
4. 离线部署 Kubernetes 集群
请注意,以下操作无特殊说明,均在离线环境部署(Registry)节点上执行。
4.1 离线部署 Kubernetes 集群
执行以下命令,部署 Kubernetes 集群。
./kk create cluster -f ksp-v1228-offline.yaml -a ksp-offline-v1.28-artifact.tar.gz --with-packages --skip-push-images
参数说明:
- --with-packages:安装操作系统依赖
- --skip-push-images: 忽略推送镜像,前面已经完成了推送镜像到私有仓库的任务
部署完成后,您应该会在终端上看到类似于下面的输出。
daemonset.apps/calico-node created
deployment.apps/calico-kube-controllers created
10:19:05 CST skipped: [ksp-control-3]
10:19:05 CST skipped: [ksp-control-2]
10:19:05 CST success: [ksp-control-1]
10:19:05 CST [ConfigureKubernetesModule] Configure kubernetes
10:19:05 CST success: [ksp-control-1]
10:19:05 CST skipped: [ksp-control-2]
10:19:05 CST skipped: [ksp-control-3]
10:19:05 CST [ChownModule] Chown user $HOME/.kube dir
10:19:05 CST success: [ksp-control-2]
10:19:05 CST success: [ksp-control-1]
10:19:05 CST success: [ksp-control-3]
10:19:05 CST [AutoRenewCertsModule] Generate k8s certs renew script
10:19:07 CST success: [ksp-control-3]
10:19:07 CST success: [ksp-control-2]
10:19:07 CST success: [ksp-control-1]
10:19:07 CST [AutoRenewCertsModule] Generate k8s certs renew service
10:19:08 CST success: [ksp-control-1]
10:19:08 CST success: [ksp-control-2]
10:19:08 CST success: [ksp-control-3]
10:19:08 CST [AutoRenewCertsModule] Generate k8s certs renew timer
10:19:09 CST success: [ksp-control-2]
10:19:09 CST success: [ksp-control-3]
10:19:09 CST success: [ksp-control-1]
10:19:09 CST [AutoRenewCertsModule] Enable k8s certs renew service
10:19:10 CST success: [ksp-control-2]
10:19:10 CST success: [ksp-control-1]
10:19:10 CST success: [ksp-control-3]
10:19:10 CST [SaveKubeConfigModule] Save kube config as a configmap
10:19:10 CST success: [LocalHost]
10:19:10 CST [AddonsModule] Install addons
10:19:10 CST success: [LocalHost]
10:19:10 CST Pipeline[CreateClusterPipeline] execute successfully
Installation is complete.Please check the result using the command:kubectl get pod -A
在 control-1 节点,执行命令 kubectl get pod -A
,查看集群部署的最终结果,确保所有 Pod 的状态均为 Running。
$ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-76bdc94776-dztgc 1/1 Running 0 2m51s
kube-system calico-node-mxmm6 1/1 Running 0 2m51s
kube-system calico-node-p57qs 1/1 Running 0 2m51s
kube-system calico-node-pf5pb 1/1 Running 0 2m51s
kube-system coredns-6587775575-tp6sg 1/1 Running 0 3m16s
kube-system coredns-6587775575-v9jc6 1/1 Running 0 3m16s
kube-system kube-apiserver-ksp-control-1 1/1 Running 0 3m28s
kube-system kube-apiserver-ksp-control-2 1/1 Running 0 2m45s
kube-system kube-apiserver-ksp-control-3 1/1 Running 0 2m49s
kube-system kube-controller-manager-ksp-control-1 1/1 Running 0 3m28s
kube-system kube-controller-manager-ksp-control-2 1/1 Running 0 2m57s
kube-system kube-controller-manager-ksp-control-3 1/1 Running 0 2m57s
kube-system kube-proxy-8mqvs 1/1 Running 0 2m56s
kube-system kube-proxy-p9j9b 1/1 Running 0 2m56s
kube-system kube-proxy-sdtgl 1/1 Running 0 2m56s
kube-system kube-scheduler-ksp-control-1 1/1 Running 0 3m28s
kube-system kube-scheduler-ksp-control-2 1/1 Running 0 3m1s
kube-system kube-scheduler-ksp-control-3 1/1 Running 0 3m1s
kube-system nodelocaldns-9gj5t 1/1 Running 0 3m1s
kube-system nodelocaldns-n7wwm 1/1 Running 0 3m2s
kube-system nodelocaldns-sbmxl 1/1 Running 0 3m16s
4.2 kubectl 命令行验证集群状态
在 control-1 节点运行 kubectl 命令获取 Kubernetes 集群资源信息。
- 查看集群节点信息
kubectl get nodes -o wide
在输出结果中可以看到,当前的 Kubernetes 集群有 3个节点,并详细展示每个节点的名字、状态、角色、存活时间、Kubernetes 版本号、内部 IP、操作系统类型、内核版本和容器运行时等信息。
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
ksp-control-1 Ready control-plane,worker 7m45s v1.28.8 192.168.9.91 <none> openEuler 22.03 (LTS-SP3) 5.10.0-182.0.0.95.oe2203sp3.x86_64 containerd://1.7.13
ksp-control-2 Ready control-plane,worker 7m14s v1.28.8 192.168.9.92 <none> openEuler 22.03 (LTS-SP3) 5.10.0-182.0.0.95.oe2203sp3.x86_64 containerd://1.7.13
ksp-control-3 Ready control-plane,worker 7m15s v1.28.8 192.168.9.93 <none> openEuler 22.03 (LTS-SP3) 5.10.0-182.0.0.95.oe2203sp3.x86_64 containerd://1.7.13
- 查看 Pod 列表
输入以下命令获取在 Kubernetes 集群上运行的 Pod 列表,确保所有的容器状态都是 Running(受限于篇幅,内容不展示)。
kubectl get pods -o wide -A
至此,我们部署完成了一套 Control-plane 和 Worker 复用,3 节点的 Kubernetes 集群。
免责声明:
- 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
- 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境。由此引发的任何问题,作者概不负责!
本文由博客一文多发平台 OpenWrite 发布!
相关文章:

使用 KubeKey v3.1.1 离线部署原生 Kubernetes v1.28.8 实战
今天,我将为大家实战演示,如何基于操作系统 openEuler 22.03 LTS SP3,利用 KubeKey 制作 Kubernetes 离线安装包,并实战离线部署 Kubernetes v1.28.8 集群。 实战服务器配置 (架构 1:1 复刻小规模生产环境,配置略有不…...

DOS 命令
Dos: Disk Operating System 磁盘操作系统, 简单说一下 windows 的目录结构。 ..\ 到上一级目录 常用的dos 命令: 查看当前目录是有什么内容 dir dir d:\abc2\test200切换到其他盘下:盘符号 cd : change directory 案例演示:切换…...

如何用Java程序实现一个简单的消息队列?
在Java程序中,可以使用内置的java.util.concurrent.BlockingQueue作为消息队列存放的容器,来实现一个简单的消息队列。 具体实现如下,在这个例子中,我们创建了一个生产者线程和一个消费者线程,他们共享同一个阻塞队列…...

OpenAI 宕机事件:GPT 停摆的影响与应对
引言 2024年6月4日,OpenAI 的 GPT 模型发生了一次全球性的宕机,持续时间长达8小时。此次宕机不仅影响了OpenAI自家的服务,还导致大量用户涌向竞争对手平台,如Claude和Gemini,结果也导致这些平台出现故障。这次事件的广…...

linux常用的基础命令
ls - 列出目录内容。 cd - 更改目录。 pwd - 打印当前工作目录。 mkdir - 创建新目录。 rmdir - 删除空目录。 touch - 创建新文件或更新现有文件的时间戳。 cp - 复制文件或目录。 mv - 移动或重命名文件或目录。 rm - 删除文件或目录。 cat - 显示文件内容。 more - 分页显示…...

618家用智能投影仪推荐:这个高性价比品牌不容错过
随着科技的不断进步,家庭影院的概念已经从传统的大屏幕电视逐渐转向了更为灵活和便携的家用智能投影仪。随着618电商大促的到来,想要购买投影仪的用户们也开始摩拳擦掌了。本文将从投影仪的基础知识入手,为您推荐几款性价比很高的投影仪&…...

自愿离婚协议书
自愿离婚协议书 男方(夫): 女方(妻): 双方现因 原因,导致夫妻情感已破裂,自愿离婚…...

WPS JSA 宏脚本入门和样例
1入门 WPS window版本才支持JSA宏的功能。 可以自动化的操作文档中的一些内容。 参考文档: WPS API 参考文档:https://open.wps.cn/previous/docs/client/wpsLoad 微软的Word API文档:Microsoft.Office.Interop.Word 命名空间 | Microsoft …...

Printing and Exporting
打印 大多数DevExpress。NET控件(XtraGrid、XtraPivotGrid、XttraTreeList、XtraScheduler、XtraCharts)提供打印和导出功能。 所有可打印的DevExpress.NET控件是使用XtraPrinting库提供的方法打印的。 若要确定预览和打印选项是否可用,请检…...

c++【入门】正多边形每个内角的度数
限制 时间限制 : 1 秒 内存限制 : 128 MB 题目 根据多边形内角和定理,正多边形内角和等于:(n - 2)180(n大于等于3且n为整数)(如下图所示是三角形、四边形、五边形、六边形的形状)…...

spring boot3登录开发-邮箱登录/注册接口实现
⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途 目录 写在前面 上文衔接 内容简介 功能分析 所需依赖 邮箱验证登录/注册实现 1.创建交互对象 2.登录注册业务逻辑实…...

数据结构-二叉搜索树
二叉搜索树:BST(Binary Search Tree) 二叉搜索树是二叉树,可以为空,如果不为空,满足以下性质: 非空左子树的所有键值小于其根节点的键值非空右子树的所有键值大于其根节点的键值左、右字数本身也都是二叉搜索树 二叉…...

JUnit:Java开发者不可或缺的单元测试框架
在软件开发过程中,测试是确保代码质量的关键环节。单元测试作为测试体系的基础,对提升代码质量、降低bug率、增强软件稳定性具有重要作用。JUnit 作为 Java 语言事实上的标准单元测试框架,已经成为 Java 开发者进行单元测试的首选工具。本文将…...

NG32单片机GPIO口配置方式
目录 一、引言 二、GPIO口基本结构 三、GPIO口配置方式 四、工作原理 五、总结 一、引言 NG32单片机是一款集成度高、功能强大的微控制器。其中,GPIO(General Purpose Input/Output)口作为单片机与外部设备通信的重要接口,具…...

SpringCloud-OpenFeign拓展-连接池、最佳使用方法、日志输出
目录 1 OpenFeign连接池 1.1 常见连接类型 1.2 连接池使用方法 1.2.1 引入依赖 1.2.2 开启连接池功能 1.2.3 配置完成,重启实例即可,底层将更改设置。 2 OpenFeign最佳使用方法 2.1 每个微服务都是单独的project,内部有三个独立模块 …...

跨链协议中Cosmos IBC、Polkadot/XCM、Celer Network的区别以及用途
跨链协议是实现不同区块链之间通信和价值转移的关键技术。Cosmos IBC、Polkadot/XCM 和 Celer Network 是三个在跨链领域内具有代表性的协议,它们各自有着独特的设计理念和应用场景。下面是这三个协议的详细对比: Cosmos IBC (Inter-Blockchain Communi…...

电子画册制作与传统画册相比,有哪些优势?
在当今数字化时代,电子画册作为一种新兴的媒体形式,其制作与传统画册相比具有显著的优势。以下是对这些优势的详细探讨。 首先,电子画册的制作过程通常更加便捷和经济。相较于传统画册需要经历的繁琐的印刷过程,电子画册的制作大多…...

postman如何导入证书
1、打开postman,点击Settings。 2、添加证书。 3、填写要访问平台的URL路径及端口、证书文件、证书密码。 4、添加完之后即可立即调用postman。...

RocketMQ教程(八):RocketMQ的集群搭建
传送门:RocketMQ教程汇总,让你从入门到精通 集群架构 RocketMQ 的各个组件都可以搭建成集群部署,Broker 还可以搭建成主从架构,下面介绍的主要是 Broker 集群。 数据复制策略 复制策略是Broker的Master与Slave间的数据同步方式。分为同步复制与异步复制: 同步复制 消…...

线上观看人次2万+!「飞天技术沙龙-CentOS 迁移替换专场」北京站圆满结束
5 月 29 日,阿里云联合龙蜥社区共同举办的「飞天技术沙龙-CentOS 迁移替换专场」于北京圆满结束,在线观看人次 2 万。本次活动现场汇聚了来自浪潮信息、Intel、龙芯、统信软件、红旗软件、电子五所等多家操作系统产业头部企业和机构,大家围绕…...

Docker基本架构概览-1
Docker基本架构概览 Docker架构 Docker采用客户端-服务器(C/S)架构,主要组件包括: Docker Client 用户与Docker交互的接口,发送命令到Docker守护进程。 Docker Daemon 运行在后台,接收并处理Docker客户端…...

OZON云仓靠谱吗,OZON云仓垫资提货模式
在电商飞速发展的今天,物流仓储成为了支撑整个电商生态的重要基石。OZON云仓作为市场上新兴的仓储物流服务提供商,凭借其先进的技术和灵活的服务模式,受到了不少电商卖家和消费者的关注。但随之而来的是一系列疑问:OZON云仓靠谱吗…...

数据集笔记:DGraph 大规模动态图数据集
dgraph-web (xinye.com) 1 数据集介绍 DGraph 是一个有向无权的动态图,包含超过 370 万个节点以及 430 万条动态边DGraph 中的节点表示金融借贷用户,有向边表示紧急联系人关系,每个节点包含脱敏后的属性特征,以及表示是否为金融…...

一些常用的git指令总结
1、git add 文件名 :该 命令可将该文件的修改添加到暂存区 比如:我刚刚修改了my_test.cpp文件,这时就可以使用git add my_test.cpp. 就将该修改添加到了暂存区。 2、git commit -m "......说明" 就是将当前的修改记录提交到本地…...

【HarmonyOS】遇见的问题汇总
一、当前编辑的页面,预览打不开 1、问题说明 当前编辑的页面,预览打不开,日志提示如下: Route information is not configured for the current page. To avoid possible redirection issues, configure route information for…...

C# NX二次开发-获取圆弧中心点和半径
使用UF函数可以获取圆弧边或圆弧线中心点和半径: 1.使用 UF_CURVE_ask_arc_data: theUf.Curve.AskArcData(edge.Tag, out UFCurve.Arc arc);theUf.Curve.CreateArc(ref arc, out Tag arc_tag);double[] matrix_values new double[9];double[] vec_product new double[3];theU…...

鸿蒙原生应用元服务开发-位置服务地理编码转化开发
(逆)地理编码转化开发 场景概述 使用坐标描述一个位置,非常准确,但是并不直观,面向用户表达并不友好。系统向开发者提供了以下两种转化能力。 地理编码转化:将地理描述转化为具体坐标。 逆地理编码转化能力…...

【ArcGISPro SDK】构建多面体要素
结果展示 每个面构建顺序 代码 using ArcGIS.Core.CIM; using ArcGIS.Core.Data; using ArcGIS.Core.Geometry; using ArcGIS.Desktop.Catalog; using ArcGIS.Desktop.Core; using ArcGIS.Desktop.Editing; using ArcGIS.Desktop.Extensions; using ArcGIS.Desktop.Framework;…...

leetcode够用之java语法
常用方法 Arrays.sort()排序 import java.util.Arrays;public class Main {public static void main(String[] args) {int[] numbers {9, 2, 5, 1, 7, 3};Arrays.sort(numbers);System.out.println(Arrays.toString(numbers)); // 输出: [1, 2, 3, 5, 7, 9]} }获取str中的第…...

pdf文件怎么改变大小?在线快速压缩pdf的方法
pdf作为一种常用的文件格式,使用这种文件类型的好处在于不仅拥有更好的兼容性,还可以设置密码来保证安全性,防止未授权用户查看内容,所以现在导出文件展示都会采用这种格式的来做内容展示。当遇到pdf文件过大问题时,想…...