• [技术干货] 一键部署k8s最终版
    1. 控制节点主机名为 controller,设置计算节点主机名为 compute;[root@controller ~]# hostnamectl set-hostname controller && su[root@compute ~]# hostnamectl set-hostname compute && su2.hosts 文件将 IP 地址映射为主机名。[root@controller&&compute ~]#vi /etc/hosts192.168.100.10 controller192.168.100.20 compute[root@controller&&compute ~]#vi /etc/selinux/config更改SELINUX=disabled[root@controller&&compute ~]#setenforce 0[root@controller&&compute ~]#systemctl stop firewalld && systemctl disable firewalld3.配置 yum 源[root@controller ~]rm -rf /etc/yum.repos.d/*[root@controller&&compute ~]# vi /etc/yum.repos.d/http.repo[centos]name=centosbaseurl=http://192.168.133.130/centosgpgcheck=0enabled=1 [openstack]name=openstackbaseurl=http://192.168.133.130/openstack/iaas-repogpgcheck=0enabled=1[root@controller&&compute ~]#yum clean all && yum repolist && yum makecache 2.1.1 部署容器云平台使用 OpenStack 私有云平台创建两台云主机,分别作为 Kubernetes 集群的 master 节点和 node 节点,然后完成 Kubernetes 集群的部署,并完成 Istio 服务网 格、KubeVirt 虚拟化和 Harbor 镜像仓库的部署。创建俩台云主机并配网# Kubernetes 集群的部署[root@localhost ~]# mount -o loop chinaskills_cloud_paas_v2.0.2.iso /mnt/[root@localhost ~]# cp -rfv /mnt/* /opt/[root@localhost ~]# umount /mnt/[root@master ~]# hostnamectl set-hostname master && su[root@worker ~]# hostnamectl set-hostname worker && su# 安装kubeeasy[root@master ~]# mv /opt/kubeeasy /usr/bin/kubeeasy# 安装依赖环境[root@master ~]# kubeeasy install depend \--host 192.168.59.200,192.168.59.201 \--user root \--password 000000 \--offline-file /opt/dependencies/base-rpms.tar.gz# 安装k8s[root@master ~]# kubeeasy install k8s \--master 192.168.59.200 \--worker 192.168.59.201 \--user root \--password 000000 \--offline-file /opt/kubernetes.tar.gz# 安装istio网格[root@master ~]# kubeeasy add --istio istio# 安装kubevirt虚拟化[root@master ~]# kubeeasy add --virt kubevirt# 安装harbor仓库[root@master ~]# kubeeasy add --registry harbor[root@k8s-master-node1 ~]# vim pod.yamlapiVersion: v1kind: Podmetadata:  name: examspec:  containers:  - name: exam    image: nginx:latest    imagePullPolicy: IfNotPresent    env:    - name: exam      value: "2022"[root@k8s-master-node1 ~]# kubectl apply -f pod.yaml[root@k8s-master-node1 ~]# kubectl get pod#部署 Istio 服务网格[root@k8s-master-node1 ~]# kubectl create ns examnamespace/exam created[root@k8s-master-node1 ~]# kubectl edit ns exam更改为:  labels:    istio-injection: enabled[root@k8s-master-node1 ~]# kubectl describe ns exam  #查看任务 2 容器云服务运维(15 分)2.2.1 容器化部署 Node-Exporter编写 Dockerfile 文件构建 exporter 镜像,要求基于 centos 完成 Node-Exporter 服务的安装与配置,并设置服务开机自启。上传Hyperf.tar包[root@k8s-master-node1 ~]#tar -zxvf Hyperf.tar.gz[root@k8s-master-node1 ~]#cd hyperf/[root@k8s-master-node1 hyperf]#docker load -i centos_7.9.2009.tar上传node_exporter-1.7.0.linux-amd64.tar包[root@k8s-master-node1 hyperf]#vim Dockerfile-exporterFROM centos:centos7.9.2009MAINTAINER ChinaskillsRUN rm -rf /etc/yum.repos.d/*ADD node_exporter-1.7.0.linux-amd64.tar.gz /root/EXPOSE 9100ENTRYPOINT ["./root/node_exporter-1.7.0.linux-amd64/node_exporter"][root@k8s-master-node1 hyperf]#docker build -t monitor-exporter:v1.0 -f Dockerfile-exporter .2.2.2 容器化部署Alertmanager编写 Dockerfile 文件构建 alert 镜像,要求基于 centos:latest 完成 Alertmanager 服务的安装与配置,并设置服务开机自启。上传alertmanager-0.26.0.linux-amd64.tar包[root@k8s-master-node1 hyperf]#vim Dockerfile-alertFROM centos:centos7.9.2009MAINTAINER ChinaskillsRUN rm -rf /etc/yum.repos.d/*ADD alertmanager-0.26.0.linux-amd64.tar.gz /root/EXPOSE 9093 9094ENTRYPOINT ["./root/alertmanager-0.26.0.linux-amd64/alertmanager","--config.file","/root/alertmanager-0.26.0.linux-amd64/alertmanager.yml"][root@k8s-master-node1 hyperf]#docker build -t monitor-alert:v1.0 -f Dockerfile-alert .2.2.3 容器化部署 Grafana编写 Dockerfile 文件构建 grafana 镜像,要求基于 centos 完成 Grafana 服务 的安装与配置,并设置服务开机自启。上传grafana-6.4.1.linux-amd64.tar.gz包[root@k8s-master-node1 hyperf]#vim Dockerfile-grafanaFROM centos:centos7.9.2009MAINTAINER ChinaskillsRUN rm -rf /etc/yum.repos.d/*ADD grafana-6.4.1.linux-amd64.tar.gz /root/EXPOSE 3000ENTRYPOINT ["./root/grafana-6.4.1/bin/grafana-server","-homepath","/root/grafana-6.4.1/"][root@k8s-master-node1 hyperf]#docker build -t monitor-grafana:v1.0 -f Dockerfile-grafana .[root@k8s-master-node1 hyperf]#docker run -d --name grafana-exam-jiance monitor-grafana:v1.0 && sleep 5 && docker exec grafana-exam-jiance ps -aux && docker rm -f grafana-exam-jiance2.2.4 容器化部署 Prometheus 编写 Dockerfile 文件构建 prometheus 镜像,要求基于 centos 完成 Promethues 服务的安装与配置,并设置服务开机自启。上传prometheus-2.13.0.linux-amd64.tar.gz并解压[root@k8s-master-node1 hyperf]#tar -zxvf prometheus-2.13.0.linux-amd64.tar.gz[root@k8s-master-node1 hyperf]#mv prometheus-2.13.0.linux-amd64/prometheus.yml /root/hyperf && rm -rf prometheus-2.13.0.linux-amd64[root@k8s-master-node1 hyperf]#vim Dockerfile-prometheusFROM centos:centos7.9.2009MAINTAINER ChinaskillsRUN rm -rf /etc/yum.repos.d/*ADD prometheus-2.13.0.linux-amd64.tar.gz /root/RUN mkdir -p /data/prometheus/COPY prometheus.yml /data/prometheus/EXPOSE 9090ENTRYPOINT ["./root/prometheus-2.13.0.linux-amd64/prometheus","--config.file","/data/prometheus/prometheus.yml"][root@k8s-master-node1 hyperf]#docker build -t monitor-prometheus:v1.0 -f Dockerfile-prometheus .[root@k8s-master-node1 hyperf]#vim prometheus.yml #改动- job_name: 'prometheus'    static_configs:    - targets: ['localhost:9090']  - job_name: 'node'    static_configs:    - targets: ['node:9100']  - job_name: 'alertmanager'    static_configs:    - targets: ['alertmanager:9093']  - job_name: 'node-exporter'    static_configs:    - targets: ['node:9100']2.2.5 编排部署 Prometheus编写 docker-compose.yaml 文件,使用镜像 exporter、alert、grafana 和 prometheus 完成监控系统的编排部署。[root@k8s-master-node1 hyperf]#vim docker-compose.yaml编排部署prometheusversion: '3'services:  node:    container_name: monitor-node    image: monitor-exporter:v1.0    restart: always    hostname: node    ports:      - 9100:9100  alertmanager:    container_name: monitor-alertmanager    image: monitor-alert:v1.0    depends_on:      - node    restart: always    hostname: alertmanager    links:      - node    ports:      - 9093:9093      - 9094:9094  grafana:    container_name: monitor-grafana    image: monitor-grafana:v1.0    restart: always    depends_on:      - node      - alertmanager    hostname: grafana    links:      - node      - alertmanager    ports:      - 3000:3000  prometheus:    container_name: monitor-prometheus    image: monitor-prometheus:v1.0    restart: always    depends_on:      - node      - alertmanager      - grafana    hostname: prometheus    links:      - node      - alertmanager      - grafana    ports:      - 9090:9090[root@k8s-master-node1 ~]#docker-compose up -d 2.2.6 安装 Jenkins将 Jenkins 部署到 default 命名空间下。要求完成离线插件的安装,设置 Jenkins 的登录信息和授权策略。上传BlueOcean.tar.gz包[root@k8s-master-node1 ~]#tar -zxvf BlueOcean.tar.gz[root@k8s-master-node1 ~]#cd BlueOcean/images/[root@k8s-master-node1 images]# docker load -i java_8-jre.tar[root@k8s-master-node1 images]# docker load -i jenkins_jenkins_latest.tar[root@k8s-master-node1 images]# docker load -i gitlab_gitlab-ce_latest.tar[root@k8s-master-node1 images]# docker load -i maven_latest.tar[root@k8s-master-node1 images]# docker tag maven:latest  192.168.59.200/library/maven[root@k8s-master-node1 images]# docker login 192.168.59.200Username: adminPassword: (Harbor12345)WARNING! Your password will be stored unencrypted in /root/.docker/config.json.Configure a credential helper to remove this warning. Seehttps://docs.docker.com/engine/reference/commandline/login/#credentials-store[root@k8s-master-node1 images]# docker push  192.168.59.200/library/maven#安装Jenkins[root@k8s-master-node1 BlueOcean]# kubectl create ns devops[root@k8s-master-node1 BlueOcean]# kubectl create deployment jenkins -n devops --image=jenkins/jenkins:latest --port 8080 --dry-run -o yaml > jenkins.yaml[root@k8s-master-node1 BlueOcean]# vim jenkins.yaml # 进入添加apiVersion: apps/v1kind: Deploymentmetadata:  creationTimestamp: null  labels:    app: jenkins  name: jenkins  namespace: devopsspec:  replicas: 1  selector:    matchLabels:      app: jenkins  strategy: {}  template:    metadata:      creationTimestamp: null      labels:        app: jenkins    spec:      nodeName: k8s-master-node1      containers:      - image: jenkins/jenkins:latest        imagePullPolicy: IfNotPresent        name: jenkins        ports:        - containerPort: 8080          name: jenkins8080        securityContext:          runAsUser: 0          privileged: true        volumeMounts:        - name: jenkins-home          mountPath: /home/jenkins_home/        - name: docker-home          mountPath: /run/docker.sock        - name: docker          mountPath: /usr/bin/docker        - name: kubectl          mountPath: /usr/bin/kubectl        - name: kube          mountPath: /root/.kube      volumes:      - name: jenkins-home        hostPath:          path: /home/jenkins_home/      - name: docker-home        hostPath:          path: /run/docker.sock      - name: docker        hostPath:          path: /usr/bin/docker      - name: kubectl        hostPath:          path: /usr/bin/kubectl      - name: kube        hostPath:          path: /root/.kube[root@k8s-master-node1 BlueOcean]# kubectl apply -f jenkins.yamldeployment.apps/jenkins created[root@k8s-master-node1 ~]# kubectl get pod -n devops NAME                      READY   STATUS    RESTARTS   AGEjenkins-7d4f5696b7-hqw9d   1/1     Running   0          88s# 进入jenkins,确定docker和kubectl成功安装[root@k8s-master-node1 ~]# kubectl exec -it -n devops jenkins-7d4f5696b7-hqw9d bash[root@k8s-master-node1 BlueOcean]# kubectl expose deployment jenkins -n devops --port=8080 --target-port=30880 --dry-run -o yaml >> jenkins.yaml[root@k8s-master-node1 BlueOcean]# vim jenkins.yaml # 进入修改第二次粘贴在第一此的后面apiVersion: v1kind: Servicemetadata:  creationTimestamp: null  labels:    app: jenkins  name: jenkins  namespace: devopsspec:  ports:  - port: 8080    protocol: TCP    name: jenkins8080    nodePort: 30880  - name: jenkins    port: 50000    nodePort: 30850  selector:    app: jenkins  type: NodePort[root@k8s-master-node1 BlueOcean]# kubectl apply -f jenkins.yamlservice/jenkins created[root@k8s-master-node1 ~]# kubectl get -n devops svcNAME      TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGEjenkins   NodePort   10.96.53.170   <none>        8080:30880/TCP   10s# 使用提供的软件包完成Blue Ocean等离线插件的安装[root@k8s-master-node1 BlueOcean]# kubectl -n devops cp plugins/ jenkins-7d4f5696b7-hqw9d:/var/jenkins_home/* *访问 ip:30880 进入jenkins*# 查看密码[root@k8s-master-node1 BlueOcean]# kubectl -n devops exec jenkins-7d4f5696b7-hqw9d --cat /var/jenkins_home/secrets/initialAdminPassword    2.2.7 安装 GitLab 将 GitLab 部署到 default 命名空间下,要求设置 root 用户密码,新建公开项 目,并将提供的代码上传到该项目。[root@k8s-master-node1 BlueOcean]# kubectl create deployment gitlab -n devops --image=gitlab/gitlab-ce:latest --port 80 --dry-run -o yaml > gitlab.yamlW0222 12:00:34.346609   25564 helpers.go:555] --dry-run is deprecated and can be replaced with --dry-run=client.[root@k8s-master-node1 BlueOcean]# vim gitlab.yamljitlab的配置文件apiVersion: apps/v1kind: Deploymentmetadata:  creationTimestamp: null  labels:    app: gitlab  name: gitlab  namespace: devopsspec:  replicas: 1  selector:    matchLabels:      app: gitlab  strategy: {}  template:    metadata:      creationTimestamp: null      labels:        app: gitlab    spec:      containers:      - image: gitlab/gitlab-ce:latest        imagePullPolicy: IfNotPresent        name: gitlab-ce        ports:        - containerPort: 80        env:        - name: GITLAB_ROOT_PASSWORD          value: admin@123[root@k8s-master-node1 BlueOcean]# kubectl apply -f gitlab.yamldeployment.apps/gitlab created[root@k8s-master-node1 BlueOcean]# kubectl  get pod -n devopsNAME                      READY   STATUS    RESTARTS      AGEgitlab-5b47c8d994-8s9qb   1/1     Running   0             17sjenkins-bbf477c4f-55vgj   1/1     Running   2 (15m ago)   34m[root@k8s-master-node1 BlueOcean]# kubectl expose deployment gitlab -n devops --port=80 --target-port=30888 --dry-run=client -o yaml >> gitlab.yaml[root@k8s-master-node1 BlueOcean]# vim gitlab.yaml # 进入添加---apiVersion: v1kind: Servicemetadata:  creationTimestamp: null  labels:    app: gitlab  name: gitlab  namespace: devopsspec:  ports:  - port: 80    nodePort: 30888  selector:    app: gitlab  type: NodePort[root@k8s-master-node1 BlueOcean]# kubectl apply -f gitlab.yamldeployment.apps/gitlab configuredservice/gitlab created[root@k8s-master-node1 BlueOcean]# kubectl get svc -n devopsNAME      TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGEgitlab    NodePort   10.96.149.160   <none>        80:30888/TCP     6sjenkins   NodePort   10.96.174.123   <none>        8080:30880/TCP   8m7s# 等待gitlab启动,访问IP:30888  root , admin@123 登录 Gitlab* # 将springcloud文件夹中的代码上传到该项目,Gitlab提供了代码示例[root@k8s-master-node1 BlueOcean]# cd springcloud/[root@k8s-master-node1 springcloud]# git config --global user.name "Administrator"[root@k8s-master-node1 springcloud]# git config --global user.email "admin@example.com"[root@k8s-master-node1 springcloud]# git remote remove origin[root@k8s-master-node1 springcloud]# git remote add origin  http://192.168.100.23:30888/root/springcloud.git[root@k8s-master-node1 springcloud]# git add .[root@k8s-master-node1 springcloud]# git commit -m "Initial commit"# On branch masternothing to commit, working directory clean[root@k8s-master-node1 springcloud]# git push -u origin masterUsername for 'http://192.168.100.23:30888': root Password for 'http://root@192.168.100.23:30888':(admin@123)Counting objects: 3192, done.Delta compression using up to 4 threads.Compressing objects: 100% (1428/1428), done.Writing objects: 100% (3192/3192), 1.40 MiB | 0 bytes/s, done.Total 3192 (delta 1233), reused 3010 (delta 1207)remote: Resolving deltas: 100% (1233/1233), done.To http://192.168.100.23:30888/root/springcloud.git * [new branch]      master -> masterBranch master set up to track remote branch master from origin. 2.2.8 配置 Jenkins 与 GitLab 集成在 Jenkins 中新建流水线任务,配置 GitLab 连接 Jenkins,并完成 WebHook 的配置。 * 在 GitLab 中生成名为 jenkins 的“Access Tokens” * 返回 jenkins   * 回到 Gitlab ,复制 token * 复制后填写到此    2.2.9 构建 CI/CD 环境在流水线任务中编写流水线脚本,完成后触发构建,要求基于 GitLab 中的 项目自动完成代码编译、镜像构建与推送、并自动发布服务到 Kubernetes 集群 中。# 创建命名空间[root@k8s-master-node1 ~]# kubectl create ns springcloud* *新建流水线*    * *添加 Gitlab 用户密码*  * Harbor 仓库创建公开项目 springcloud * *返回 Gitlab 准备编写流水线* # 添加映射[root@k8s-master-node1 ~]# cat /etc/hosts192.168.59.200 apiserver.cluster.local # 选择这一行# 进入jenkins 添加映射[root@k8s-master-node1 ~]# kubectl exec -it -n devops jenkins-bbf477c4f-55vgj bashkubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.root@jenkins-bbf477c4f-55vgj:/# echo "192.168.200.59 apiserver.cluster.local" >> /etc/hostsroot@jenkins-bbf477c4f-55vgj:/# cat /etc/hosts # 查看是否成功 # 编写流水线pipeline{    agent none    stages{        stage('mvn-build'){            agent{                docker{                    image '192.168.3.10/library/maven'                    args '-v /root/.m2:/root/.m2'                }            }            steps{                sh 'cp -rvf /opt/repository /root/.m2'                sh 'mvn package -DskipTests'            }        }        stage('image-build'){            agent any            steps{                sh 'cd gateway && docker build -t 192.168.3.10/springcloud/gateway -f Dockerfile .'                sh 'cd config && docker build -t 192.168.3.10/springcloud/config -f Dockerfile .'                sh 'docker login 192.168.3.10 -u=admin -p=Harbor12345'                sh 'docker push 192.168.3.10/springcloud/gateway'                sh 'docker push 192.168.3.10/springcloud/config'            }        }        stage('cloud-deployment'){            agent any            steps{                sh 'sed -i "s/sqshq\\/piggymetrics-gateway/192.168.3.10\\/springcloud\\/gateway/g" yaml/deployment/gateway-deployment.yaml'                sh 'sed -i "s/sqshq\\/piggymetrics-config/192.168.3.10\\/springcloud\\/config/g" yaml/deployment/config-deployment.yaml'                sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/deployment/gateway-deployment.yaml'                sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/deployment/config-deployment.yaml'                sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/svc/gateway-svc.yaml'                sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/svc/config-svc.yaml'            }        }    }}stages:代表整个流水线的所有执行阶段,通常stages只有1个,里面包含多个stage。stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码,编译构建,部署等阶段。steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码,ssh远程发布等任意内容。* *保存流水线文件,配置Webhook触发构建*  * *取消勾选 SSL 选择, Add webhook 创建*![](vx_images/545790416256726.png =900x) * 创建成功进行测试,成功后返回 jenkins 会发现流水线已经开始自动构建 * 流水线执行成功  # 流水线构建的项目全部运行[root@k8s-master-node1 ~]# kubectl get pod -n springcloudNAME                       READY   STATUS    RESTARTS      AGEconfig-77c74dd878-8kl4x    1/1     Running   0             28sgateway-5b46966894-twv5k   1/1     Running   1 (19s ago)   28s[root@k8s-master-node1 ~]# kubectl -n springcloud get serviceNAME      TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGEconfig    NodePort   10.96.137.40   <none>        8888:30015/TCP   4m3sgateway   NodePort   10.96.121.82   <none>        4000:30010/TCP   4m4s* *等待 PIg 微服务启动,访问 ip:30010 查看构建成功*2.2.10 服务网格:创建 Ingress Gateway将 Bookinfo 应用部署到 default 命名空间下,请为 Bookinfo 应用创建一个网 关,使外部可以访问 Bookinfo 应用。上传ServiceMesh.tar.gz包[root@k8s-master-node1 ~]# tar -zxvf ServiceMesh.tar.gz[root@k8s-master-node1 ~]# cd ServiceMesh/images/[root@k8s-master-node1 images]# docker load -i image.tar部署Bookinfo应用到kubernetes集群:[root@k8s-master-node1 images]# cd /root/ServiceMesh/[root@k8s-master-node1 ServiceMesh]# kubectl apply -f bookinfo/bookinfo.yamlservice/details createdserviceaccount/bookinfo-details createddeployment.apps/details-v1 createdservice/ratings createdserviceaccount/bookinfo-ratings createddeployment.apps/ratings-v1 createdservice/reviews createdserviceaccount/bookinfo-reviews createddeployment.apps/reviews-v1 createdservice/productpage createdserviceaccount/bookinfo-productpage createddeployment.apps/productpage-v1 created[root@k8s-master-node1 ServiceMesh]# kubectl get podNAME                              READY   STATUS    RESTARTS   AGEdetails-v1-79f774bdb9-kndm9       1/1     Running   0          7sproductpage-v1-6b746f74dc-bswbx   1/1     Running   0          7sratings-v1-b6994bb9-6hqfn         1/1     Running   0          7sreviews-v1-545db77b95-j72x5       1/1     Running   0          7s[root@k8s-master-node1 ServiceMesh]# vim bookinfo-gateway.yamlapiVersion: networking.istio.io/v1alpha3kind: Gatewaymetadata:  name: bookinfo-gatewayspec:  selector:    istio: ingressgateway  servers:  - port:      number: 80      name: http      protocol: HTTP    hosts:    - "*"---apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:  name: bookinfospec:  hosts:  - "*"    gateways:  - bookinfo-gateway  http:  - match:    - uri:        exact: /productpage    - uri:        prefix: /static    - uri:        exact: /login    - uri:        exact: /logout    - uri:        prefix: /api/v1/products    route: # 定义路由转发目的地列表    - destination:        host: productpage        port:          number: 9080[root@k8s-master-node1 ServiceMesh]# kubectl apply -f bookinfo-gateway.yamlgateway.networking.istio.io/bookinfo-gateway createdvirtualservice.networking.istio.io/bookinfo created[root@k8s-master-node1 ServiceMesh]#kubectl get VirtualService bookinfo -o yamlbookinfo-gateway || exact: /productpage || destination || host: productpage || number: 9080[root@k8s-master-node1 ServiceMesh]#kubectl get gateway bookinfo-gateway -o yamlistio: ingressgateway2.2.11 KubeVirt 运维:创建 VM使用提供的镜像在 kubevirt 命名空间下创建一台 VM,名称为 exam,指定 VM 的内存、CPU、网卡和磁盘等配置。[root@k8s-master-node1 ~]# kubectl explain kubevirt.spec. --recursive |grep use         useEmulation   <boolean>[root@k8s-master-node1 ~]# kubectl -n kubevirt edit kubevirtspec:  certificateRotateStrategy: {}  configuration:    developerConfiguration: #{}      useEmulation: true[root@k8s-master-node1 ~]# vim vm.yamlapiVersion: kubevirt.io/v1kind: VirtualMachinemetadata:  name: examspec:  running: true  template:    spec:      domain:        devices:          disks:            - name: vm              disk: {}        resources:          requests:            memory: 1Gi      volumes:        - name: vm          containerDisk:            image: fedora-virt:v1.0            imagePullPolicy: IfNotPresent[root@k8s-master-node1 ~]# kubectl apply -f vm.yamlvirtualmachine.kubevirt.io/exam created[root@k8s-master-node1 ~]# kubectl get virtualmachineNAME        AGE   STATUS    READY exam   31s   Running   True[root@k8s-master-node1 ~]# kubectl delete -f vm.yamlvirtualmachine.kubevirt.io "exam" deleted 
  • [技术干货] 一键部署k8s3
    容器云搭建2.1.1 部署Kubernetes容器云平台使用OpenStack私有云平台创建两台云主机,云主机类型使用4vCPU/12G/100G类型,分别作为Kubernetes集群的Master节点和node节点,然后完成Kubernetes集群部署。2.1.2 部署Harbor镜像仓库在Kubernetes集群中完成Harbor镜像仓库部署。2.1.3 部署Istio服务网格在Kubernetes集群中完成Istio服务网格组件部署。2.1.4 部署kubeVirt 虚拟化组件在Kubernetes集群中完成kubeVirt虚拟化组件部署。mount -o loop chinaskills_cloud_paas_v2.1.iso /mnt/cp -rfv /mnt/* /opt/umount /mnt/ ## 在master节点安装kubeeasy工具:mv /opt/kubeeasy-v2.0 /usr/bin/kubeeasy ## 在master节点安装依赖包:kubeeasy install dependencies \ --host 10.28.0.205,10.28.0.221 \ --user root \ --password Abc@1234 \ --offline-file /opt/dependencies/packages.tar.gz  ## 配置SSH免密:kubeeasy check ssh \ --host 10.28.0.205,10.28.0.221 \ --user root \ --password Abc@1234 kubeeasy create ssh-keygen \  --master 10.28.2.191 \  --worker 10.28.0.198 \  --user root \  --password Abc@1234 ## master节点部署kuberneteskubeeasy install kubernetes \  --master 10.24.2.10 \  --worker 10.24.2.20,10.24.2.30,10.24.2.40 \  --user root \  --password 000000 \  --version 1.25.2 \  --offline-file /opt/kubeeasy.tar.gz容器云服务运维:2.2.1 容器化部署Node-Exporter编写Dockerfile文件构建exporter镜像,要求基于centos完成Node-Exporter服务的安装与配置,并设置服务开机自启。编写Dockerfile构建monitor-exporter:v1.0镜像,具体要求如下:(需要用到的软件包:Monitor.tar.gz)(1)基础镜像:centos:centos7.9.2009;(2)使用二进制包node_exporter-0.18.1.linux-amd64.tar.gz安装node-exporter服务;(3)声明端口:9100;(4)设置服务开机自启。tar -zxvf Monitor.tar.gz docker load -i Monitor/CentOS_7.9.2009.tar cd Monitor/##编写Dockerfile文件vim Dockerfile-exporterFROM centos:centos7.9.2009RUN rm -rf /etc/yum.repos.d/*ADD node_exporter-0.18.1.linux-amd64.tar.gz /root/EXPOSE 9100ENTRYPOINT ["./root/node_exporter-0.18.1.linux-amd64/node_exporter"] ##运行脚本docker build -t monitor-exporter:v1.0 -f Dockerfile-exporter .2.2.2容器化部署Alertmanager编写Dockerfile文件构建alert镜像,要求基于centos:latest完成Alertmanager服务的安装与配置,并设置服务开机自启。编写Dockerfile构建monitor-alert:v1.0镜像,具体要求如下:(需要用到的软件包:Monitor.tar.gz)(1)基础镜像:centos:centos7.9.2009;(2)使用二进制包alertmanager-0.19.0.linux-amd64.tar.gz安装Alertmanager服务;(3)声明端口:9093、9094;(4)设置服务开机自启。tar -zxvf Monitor.tar.gz docker load -i Monitor/CentOS_7.9.2009.tar cd Monitor/ ##编写Dockerfile文件vim Dockerfile-alertFROM centos:centos7.9.2009RUN rm -rf /etc/yum.repos.d/*ADD alertmanager-0.19.0.linux-amd64.tar.gz /root/EXPOSE 9093 9094ENTRYPOINT ["./root/alertmanager-0.19.0.linux-amd64/alertmanager","--config.file","/root/alertmanager-0.19.0.linux-amd64/alertmanager.yml"] ##运行脚本docker build -t monitor-alert:v1.0 -f Dockerfile-alert .2.2.3 容器化部署Grafana编写Dockerfile文件构建grafana镜像,要求基于centos完成Grafana服务的安装与配置,并设置服务开机自启。编写Dockerfile构建monitor-grafana:v1.0镜像,具体要求如下:(需要用到的软件包:Monitor.tar.gz)(1)基础镜像:centos:centos7.9.2009;(2)使用二进制包grafana-6.4.1.linux-amd64.tar.gz安装grafana服务;(3)声明端口:3000;(4)设置nacos服务开机自启。tar -zxvf Monitor.tar.gz docker load -i Monitor/CentOS_7.9.2009.tar cd Monitor/ ##编写Dockerfile文件vim Dockerfile-grafanaFROM centos:centos7.9.2009RUN rm -rf /etc/yum.repos.d/*ADD grafana-6.4.1.linux-amd64.tar.gz /root/EXPOSE 3000ENTRYPOINT ["./root/grafana-6.4.1/bin/grafana-server","-homepath","/root/grafana-6.4.1/"] ##运行脚本docker build -t monitor-grafana:v1.0 -f Dockerfile-grafana .2.2.4 容器化部署Prometheus编写Dockerfile文件构建prometheus镜像,要求基于centos完成Promethues服务的安装与配置,并设置服务开机自启。编写Dockerfile构建monitor-prometheus:v1.0镜像,具体要求如下:(需要用到的软件包:Monitor.tar.gz)(1)基础镜像:centos:centos7.9.2009;(2)使用二进制包prometheus-2.13.0.linux-amd64.tar.gz安装promethues服务;(3)编辑/data/prometheus/prometheus.yml文件,创建3个任务模板:prometheus、node和alertmanager,并将该文件拷贝到/data/prometheus/目录下;(4)声明端口:9090;(5)设置服务开机自启。编写Dockerfile文件FROM centos:centos7.9.2009RUN rm -rf /etc/yum.repos.d/*ADD prometheus-2.13.0.linux-amd64.tar.gz /root/RUN mkdir -p /data/prometheusEXPOSE 9090RUN cat <<EOF > /data/prometheus/prometheus.ymlglobal:  scrape_interval: 15s scrape_configs:- job_name: prometheus  static_configs:  - targets: ['localhost:9090']- job_name: node  static_configs:  - targets: ['localhost:9090']- job_name: alertmanager  static_configs:  - targets: ['localhost:9090']- job_name: grafana:  static_configs:  - targets: ['localhost:9090']    EOF ENTRYPOINT ["./root/prometheus-2.13.0.linux-amd64/prometheus","--config.file","/data/prometheus/prometheus.yml"]上面cat写入了 下面的prometheus.yml就不用再写了编写prometheus.yml (如果写了下面的文件 需要在Dockerfile中COPY文件到/data/prometheus/)[root@master Monitor]# vim prometheus.ymlglobal:  scrape_interval:     15s   evaluation_interval: 15s  alerting:  alertmanagers:  - static_configs:    - targets:      - alertmanager: 9093 rule_files: scrape_configs:  - job_name: 'prometheus'    static_configs:    - targets: ['localhost:9090']   - job_name: 'node'    static_configs:    - targets: ['node:9100']   - job_name: 'alertmanager'    static_configs:    - targets: ['alertmanager:9093']  - job_name: 'node-exporter'    static_configs:    - targets: ['node:9100']跑脚本docker build -t monitor-prometheus:v1.0 -f Dockerfile-prometheus .2.2.5 编排部署监控系统编写docker-compose.yaml文件,使用镜像exporter、alert、grafana和prometheus完成监控系统的编排部署。编写docker-compose.yaml文件,具体要求如下:(1)容器1名称:monitor-node;镜像:monitor-exporter:v1.0;端口映射:9100:9100;(2)容器2名称:monitor- alertmanager;镜像:monitor-alert:v1.0;端口映射:9093:9093、9094:9094;(3)容器3名称:monitor-grafana;镜像:monitor-grafana:v1.0;端口映射:3000:3000;(4)容器4名称:monitor-prometheus;镜像:monitor-prometheus:v1.0;端口映射:9090:9090。完成后编排部署监控系统,将Prometheus设置为Grafana的数据源,并命名为Prometheus。(5)添加元数据 进入grafana的网页 添加prometheus为数据源编写docker-compose.yaml文件version: '3'services:# 容器1:用于监控节点的exporter服务  monitor-node:    image: monitor-exporter:v1.0    ports:      - "9100:9100"         # 容器2:alertmanager服务  monitor-alertmanager:    image: monitor-alert:v1.0    ports:      - "9093:9093"      - "9094:9094"   # 容器3:grafana服务  monitor-grafana:    image: monitor-grafana:v1.0    ports:      - "3000:3000"  # 容器4:prometheus服务  monitor-prometheus:    image: monitor-prometheus:v1.0    ports:      - "9090:9090"有依赖关系的写法;version: '3'services:  node:    container_name: monitor-node    image: monitor-exporter:v1.0    restart: always    hostname: node    ports:      - 9100:9100  alertmanager:    container_name: monitor-alertmanager    image: monitor-alert:v1.0    depends_on:      - node    restart: always    hostname: alertmanager    links:      - node    ports:      - 9093:9093      - 9094:9094  grafana:    container_name: monitor-grafana    image: monitor-grafana:v1.0    depends_on:      - node      - alertmanager    hostname: grafana    restart: always    links:      - node      - alertmanager    ports:      - 3000:3000  prometheus:    container_name: monitor-prometheus    image: monitor-prometheus:v1.0    depends_on:      - node      - alertmanager      - grafana    hostname: prometheus    restart: always    links:      - node      - alertmanager      - grafana    ports:      - 9090:9090查看pod状态[root@master Monitor]# docker ps -aCONTAINER ID   IMAGE                     COMMAND                  CREATED         STATUS         PORTS                                                           NAMESe4a643469259   monitor-prometheus:v1.0   "./root/prometheus-2…"   2 minutes ago   Up 2 minutes   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp                       monitor-prometheuscd1eddaba0d3   monitor-grafana:v1.0      "./root/grafana-6.4.…"   2 minutes ago   Up 2 minutes   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp                       monitor-grafana9032755f8e18   monitor-alert:v1.0        "./root/alertmanager…"   2 minutes ago   Up 2 minutes   0.0.0.0:9093-9094->9093-9094/tcp, :::9093-9094->9093-9094/tcp   monitor-alertmanagere3ae4d3bf8f9   monitor-exporter:v1.0     "./root/node_exporte…"   2 minutes ago   Up 2 minutes   0.0.0.0:9100->9100/tcp, :::9100->9100/tcp                       monitor-node登录grafana网页http://10.28.0.244:3000 账号admin 密码随便(admin)登录后会提示修改密码 可以跳过 添加prometheus为数据源  输入主节点的ip加端口号http://10.28.0.244:9090(普罗米修斯的端口)然后点击下面绿色的保存 再点back退出 2.2.6 部署GitLab将GitLab部署到Kubernetes集群中,设置GitLab服务root用户的密码,使用Service暴露服务,并将提供的项目包导入到GitLab中。在Kubernetes集群中新建命名空间gitlab-ci,将GitLab部署到该命名空间下,Deployment和Service名称均为gitlab,以NodePort方式将80端口对外暴露为30880,设置GitLab服务root用户的密码为admin@123,将项目包demo-2048.tar.gz导入到GitLab中并命名为demo-2048。需要用到的软件包:CICD-Runners-demo2048.tar.gz解压软件包,导入镜像[root@master ~]# tar -zxvf CICD-Runners-demo2048.tar.gz[root@master ~]# ctr -n k8s.io image import gitlab-ci/images/images.tar[root@master ~]# docker load < gitlab-ci/images/images.tar部署GitLab服务[root@master ~]# kubectl create ns gitlab-ci        ## 新建命名空间 [root@master ~]# cd gitlab-ci[root@master gitlab-ci]# vi gitlab-deploy.yamlapiVersion: apps/v1kind: Deploymentmetadata:  name: gitlab  namespace: gitlab-ci  labels:    name: gitlabspec:  selector:    matchLabels:      name: gitlab  template:    metadata:      name: gitlab      labels:        name: gitlab    spec:      containers:      - name: gitlab        image: gitlab/gitlab-ce:latest        imagePullPolicy: IfNotPresent        env:        - name: GITLAB_ROOT_PASSWORD          value: admin@123        - name: GITLAB_ROOT_EMAIL          value: 123456@qq.com        ports:        - name: http          containerPort: 80        volumeMounts:        - name: gitlab-config          mountPath: /etc/gitlab        - name: gitlab-logs          mountPath: /var/log/gitlab        - name: gitlab-data          mountPath: /var/opt/gitlab      volumes:      - name: gitlab-config        hostPath:          path: /home/gitlab/conf      - name: gitlab-logs        hostPath:          path: /home/gitlab/logs      - name: gitlab-data        hostPath:          path: /home/gitlab/data删除deployment资源的命令kubectl -n gitlab-ci delete -f gitlab-deploy.yaml[root@master gitlab-ci]# vi gitlab-svc.yaml        ## 创建service服务释放端口apiVersion: v1kind: Servicemetadata:  name: gitlab  namespace: gitlab-ci  labels:    name: gitlabspec:  type: NodePort  ports:    - name: http      port: 80      targetPort: http      nodePort: 30880  selector:    name: gitlab [root@master gitlab-ci]# kubectl apply -f gitlab-deploy.yaml [root@master gitlab-ci]# kubectl apply -f gitlab-svc.yaml  ## 查看pod[root@master gitlab-ci]# kubectl -n gitlab-ci get pod NAME                      READY   STATUS    RESTARTS   AGEgitlab-65c6b98f6b-q4dwq   1/1     Running   0          2m3s [root@master gitlab-ci]# kubectl -n gitlab-ci get pods -owide        ## 查看pod详细信息NAME                      READY   STATUS    RESTARTS   AGE     IP             NODE     NOMINATED NODE   READINESS GATESgitlab-65c6b98f6b-q4dwq   1/1     Running   0          2m57s   192.244.0.21   master   <none>           <none>在集群中定义hosts添加gitlabPod的解析[root@master gitlab-ci]# kubectl edit configmap coredns -n kube-system... ...     16            fallthrough in-addr.arpa ip6.arpa     17            ttl 30     18  }     19         hosts {     20             192.244.0.21 gitlab-65c6b98f6b-q4dwq            ## 这里是Pod容器的ip     21             fallthrough     22  }     23         prometheus :9153     24                                                             ## 这里有三行删除     25         cache 30... ... 保存退出  需要保存两遍[root@master gitlab-ci]# kubectl -n kube-system rollout restart deploy coredns    ## 保存刚才的设置进入gitlab Pod中[root@master gitlab-ci]#  kubectl -n gitlab-ci get pods[root@master gitlab-ci]#  kubectl exec -it -n gitlab-ci gitlab-65c6b98f6b-q4dwq bashroot@gitlab-7b54df755-6ljtp:/# vi /etc/gitlab/gitlab.rb external_url 'http://192.244.0.21:80'            ## 再首行添加  这里也是Pod的iproot@gitlab-7b54df755-6ljtp:/# rebootroot@gitlab-7b54df755-6ljtp:/# exit查看service[root@master gitlab-ci]# kubectl -n gitlab-ci get svcNAME     TYPE       CLUSTER-IP        EXTERNAL-IP   PORT(S)        AGEgitlab   NodePort   192.102.225.126   <none>        80:30880/TCP   18m访问主机IPhttp://10.28.3.102:30880用户:123456@qq.com 密码:admin@123 点击 “Create a project” 点击“Create biank project” 创建项目demo-2048 可见等级选Public 填好后 点“Create project” 进入项目 将代码推送到项目中[root@master gitlab-ci]# cd /root/gitlab-ci/demo-2048[root@master demo-2048]# git config --global user.name "Administrator"     ## 这里的用户密码[root@master demo-2048]# git config --global user.email "123456@qq.com"     ## 是用于下载时候登录的[root@master demo-2048]# git remote remove origin        ## 删除原有库[root@master demo-2048]# git remote add origin http://10.28.0.95:30880/root/demo-2048.git ## 添加库主节点IP[root@master demo-2048]# git add .[root@master demo-2048]# git commit -m "initial commit"[root@master demo-2048]# git push -u origin droneUsername for 'http://10.28.0.198:30880': root        Password for 'http://root@10.28.0.198:30880': admin@123         ## 这是deployment资源文件中设置的推送完刷新 项目库 2.2.7 部署GitLab Runner将GitLab Runner部署到Kubernetes集群中,为GitLab Runner创建持久化构建缓存目录以加速构建速度,并将其注册到GitLab中。将GitLab Runner部署到gitlab-ci命名空间下,Release名称为gitlab-runner,为GitLab Runner创建持久化构建缓存目录/home/gitlab-runner/ci-build-cache以加速构建速度,并将其注册到GitLab中。登录GitLab管理界面(http://10.24.2.14:30880/admin),然后点击左侧菜单栏中的CI/CD下的Runners 记住复制的token:DN3ZZDAGSGB-kWSb-qBT创建Service服务[root@master ~]# cd /root/gitlab-ci/[root@master gitlab-ci]# cat runner-sa.yaml apiVersion: v1kind: ServiceAccountmetadata:  name: gitlab-ci  namespace: gitlab-ci创建角色[root@master gitlab-ci]# cat runner-role.yaml kind: RoleapiVersion: rbac.authorization.k8s.io/v1metadata:  name: gitlab-ci  namespace: gitlab-cirules:  - apiGroups: [""]    resources: ["*"]    verbs: ["*"]创建角色对接[root@master gitlab-ci]# cat runner-rb.yaml kind: RoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:  name: gitlab-ci  namespace: gitlab-cisubjects:  - kind: ServiceAccount    name: gitlab-ci    namespace: gitlab-ciroleRef:  kind: Role  name: gitlab-ci  apiGroup: rbac.authorization.k8s.io创建资源对象[root@master gitlab-ci]# kubectl apply -f runner-sa.yaml [root@master gitlab-ci]# kubectl apply -f runner-role.yaml [root@master gitlab-ci]# kubectl apply -f runner-rb.yaml apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:  name: default  labels:    k8s-app: gitlab-defaultroleRef:  apiGroup: rbac.authorization.k8s.io  kind: ClusterRole  name: cluster-adminsubjects:  - kind: ServiceAccount    name: default    namespace: gitlab-ci————————————————                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                        原文链接:https://blog.csdn.net/qq_36416567/article/details/144212465
  • [技术干货] 一键部署k8s2
    # 查看密码[root@k8s-master-node1 BlueOcean]# kubectl -n devops exec jenkins-7d4f5696b7-hqw9d --cat /var/jenkins_home/secrets/initialAdminPassword32c47352c469a4ef58e8a797226949e88 * *前面安装了离线插件,所以这里需要重启 jenkins ,地址栏加入 restart 完成重启*   2.2.7 安装 GitLab将 GitLab 部署到 default 命名空间下,要求设置 root 用户密码,新建公开项 目,并将提供的代码上传到该项目。[root@k8s-master-node1 BlueOcean]# kubectl create deployment gitlab -n devops --image=gitlab/gitlab-ce:latest --port 80 --dry-run -o yaml > gitlab.yamlW0222 12:00:34.346609   25564 helpers.go:555] --dry-run is deprecated and can be replaced with --dry-run=client.[root@k8s-master-node1 BlueOcean]# vim gitlab.yamlapiVersion: apps/v1kind: Deploymentmetadata:  creationTimestamp: null  labels:    app: gitlab  name: gitlab  namespace: devopsspec:  replicas: 1  selector:    matchLabels:      app: gitlab  #strategy: {}  template:    metadata:      #creationTimestamp: null      labels:        app: gitlab    spec:      containers:      - image: gitlab/gitlab-ce:latest         imagePullPolicy: IfNotPresent        name: gitlab-ce        ports:        - containerPort: 80        env:        - name: GITLAB_ROOT_PASSWORD          value: admin@123[root@k8s-master-node1 BlueOcean]# kubectl apply -f gitlab.yamldeployment.apps/gitlab created[root@k8s-master-node1 BlueOcean]# kubectl  get pod -n devopsNAME                      READY   STATUS    RESTARTS      AGEgitlab-5b47c8d994-8s9qb   1/1     Running   0             17sjenkins-bbf477c4f-55vgj   1/1     Running   2 (15m ago)   34m[root@k8s-master-node1 BlueOcean]# kubectl expose deployment gitlab -n devops --port=80 --target-port=30888 --dry-run=client -o yaml >> gitlab.yaml[root@k8s-master-node1 BlueOcean]# vim gitlab.yaml # 进入添加---apiVersion: v1kind: Servicemetadata:  creationTimestamp: null  labels:    app: gitlab  name: gitlab  namespace: devopsspec:  ports:  - port: 80    nodePort: 30888  selector:    app: gitlab  type: NodePort[root@k8s-master-node1 BlueOcean]# kubectl apply -f gitlab.yaml deployment.apps/gitlab configuredservice/gitlab created[root@k8s-master-node1 BlueOcean]# kubectl get svc -n devops NAME      TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGEgitlab    NodePort   10.96.149.160   <none>        80:30888/TCP     6sjenkins   NodePort   10.96.174.123   <none>        8080:30880/TCP   8m7s# 等待gitlab启动,访问IP:30888  root , admin@123 登录 Gitlab* # 将springcloud文件夹中的代码上传到该项目,Gitlab提供了代码示例[root@k8s-master-node1 BlueOcean]# cd springcloud/[root@k8s-master-node1 springcloud]# git config --global user.name "Administrator"[root@k8s-master-node1 springcloud]# git config --global user.email "admin@example.com"[root@k8s-master-node1 springcloud]# git remote remove origin[root@k8s-master-node1 springcloud]# git remote add origin  cid:link_0[root@k8s-master-node1 springcloud]# git add .[root@k8s-master-node1 springcloud]# git commit -m "Initial commit"# On branch masternothing to commit, working directory clean[root@k8s-master-node1 springcloud]# git push -u origin masterUsername for 'http://192.168.100.23:30888': root Password for 'http://root@192.168.100.23:30888':(admin@123)Counting objects: 3192, done.Delta compression using up to 4 threads.Compressing objects: 100% (1428/1428), done.Writing objects: 100% (3192/3192), 1.40 MiB | 0 bytes/s, done.Total 3192 (delta 1233), reused 3010 (delta 1207)remote: Resolving deltas: 100% (1233/1233), done.To cid:link_0 * [new branch]      master -> masterBranch master set up to track remote branch master from origin.2.2.8 配置 Jenkins 与 GitLab 集成在 Jenkins 中新建流水线任务,配置 GitLab 连接 Jenkins,并完成 WebHook 的配置。 * *在 GitLab 中生成名为 jenkins 的“Access Tokens”* * *返回 jenkins*   * *回到 Gitlab ,复制 token* * *复制后填写到此* 2.2.9 构建 CI/CD 环境在流水线任务中编写流水线脚本,完成后触发构建,要求基于 GitLab 中的 项目自动完成代码编译、镜像构建与推送、并自动发布服务到 Kubernetes 集群 中。# 创建命名空间[root@k8s-master-node1 ~]# kubectl create ns springcloud* *新建流水线*    * *添加 Gitlab 用户密码*  * *记住脚本路径的名称 Jenkinsfile ,后面创建的流水线文件名与此匹配* * *Harbor 仓库创建公开项目 springcloud* * *返回 Gitlab 准备编写流水线* # 添加映射[root@k8s-master-node1 ~]# cat /etc/hosts192.168.59.200 apiserver.cluster.local # 选择这一行# 进入jenkins 添加映射[root@k8s-master-node1 ~]# kubectl exec -it -n devops jenkins-bbf477c4f-55vgj bashkubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.root@jenkins-bbf477c4f-55vgj:/# echo "192.168.200.59 apiserver.cluster.local" >> /etc/hostsroot@jenkins-bbf477c4f-55vgj:/# cat /etc/hosts # 查看是否成功 # 编写流水线pipeline{    agent none    stages{        stage('mvn-build'){            agent{                docker{                    image '192.168.3.10/library/maven'                    args '-v /root/.m2:/root/.m2'                }            }            steps{                sh 'cp -rvf /opt/repository /root/.m2'                sh 'mvn package -DskipTests'            }        }        stage('image-build'){            agent any            steps{                sh 'cd gateway && docker build -t 192.168.3.10/springcloud/gateway -f Dockerfile .'                sh 'cd config && docker build -t 192.168.3.10/springcloud/config -f Dockerfile .'                sh 'docker login 192.168.3.10 -u=admin -p=Harbor12345'                sh 'docker push 192.168.3.10/springcloud/gateway'                sh 'docker push 192.168.3.10/springcloud/config'            }        }        stage('cloud-deployment'){            agent any            steps{                sh 'sed -i "s/sqshq\\/piggymetrics-gateway/192.168.3.10\\/springcloud\\/gateway/g" yaml/deployment/gateway-deployment.yaml'                sh 'sed -i "s/sqshq\\/piggymetrics-config/192.168.3.10\\/springcloud\\/config/g" yaml/deployment/config-deployment.yaml'                sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/deployment/gateway-deployment.yaml'                sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/deployment/config-deployment.yaml'                sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/svc/gateway-svc.yaml'                sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/svc/config-svc.yaml'            }        }    }}stages:代表整个流水线的所有执行阶段,通常stages只有1个,里面包含多个stage。stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码,编译构建,部署等阶段。steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码,ssh远程发布等任意内容。* *保存流水线文件,配置Webhook触发构建*  * *取消勾选 SSL 选择, Add webhook 创建*![](vx_images/545790416256726.png =900x) * *创建成功进行测试,成功后返回 jenkins 会发现流水线已经开始自动构建* * *流水线执行成功* * *springcloud 项目镜像上传成功*# 流水线构建的项目全部运行[root@k8s-master-node1 ~]# kubectl get pod -n springcloud NAME                       READY   STATUS    RESTARTS      AGEconfig-77c74dd878-8kl4x    1/1     Running   0             28sgateway-5b46966894-twv5k   1/1     Running   1 (19s ago)   28s[root@k8s-master-node1 ~]# kubectl -n springcloud get serviceNAME      TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGEconfig    NodePort   10.96.137.40   <none>        8888:30015/TCP   4m3sgateway   NodePort   10.96.121.82   <none>        4000:30010/TCP   4m4s* *等待 PIg 微服务启动,访问 ip:30010 查看构建成功*2.2.10 服务网格:创建 Ingress Gateway将 Bookinfo 应用部署到 default 命名空间下,请为 Bookinfo 应用创建一个网 关,使外部可以访问 Bookinfo 应用。上传ServiceMesh.tar.gz包[root@k8s-master-node1 ~]# tar -zxvf ServiceMesh.tar.gz [root@k8s-master-node1 ~]# cd ServiceMesh/images/[root@k8s-master-node1 images]# docker load -i image.tar 部署Bookinfo应用到kubernetes集群:[root@k8s-master-node1 images]# cd /root/ServiceMesh/[root@k8s-master-node1 ServiceMesh]# kubectl apply -f bookinfo/bookinfo.yamlservice/details createdserviceaccount/bookinfo-details createddeployment.apps/details-v1 createdservice/ratings createdserviceaccount/bookinfo-ratings createddeployment.apps/ratings-v1 createdservice/reviews createdserviceaccount/bookinfo-reviews createddeployment.apps/reviews-v1 createdservice/productpage createdserviceaccount/bookinfo-productpage createddeployment.apps/productpage-v1 created[root@k8s-master-node1 ServiceMesh]# kubectl get podNAME                              READY   STATUS    RESTARTS   AGEdetails-v1-79f774bdb9-kndm9       1/1     Running   0          7sproductpage-v1-6b746f74dc-bswbx   1/1     Running   0          7sratings-v1-b6994bb9-6hqfn         1/1     Running   0          7sreviews-v1-545db77b95-j72x5       1/1     Running   0          7s[root@k8s-master-node1 ServiceMesh]# vim bookinfo-gateway.yamlapiVersion: networking.istio.io/v1alpha3kind: Gatewaymetadata:  name: bookinfo-gatewayspec:  selector:    istio: ingressgateway  servers:  - port:      number: 80      name: http      protocol: HTTP    hosts:     - "*" ---apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:  name: bookinfospec:  hosts:   - "*"    gateways:  - bookinfo-gateway  http:  - match:     - uri:        exact: /productpage     - uri:        prefix: /static    - uri:        exact: /login    - uri:        exact: /logout    - uri:        prefix: /api/v1/products    route: # 定义路由转发目的地列表    - destination:        host: productpage        port:          number: 9080[root@k8s-master-node1 ServiceMesh]# kubectl apply -f bookinfo-gateway.yamlgateway.networking.istio.io/bookinfo-gateway createdvirtualservice.networking.istio.io/bookinfo created [root@k8s-master-node1 ServiceMesh]#kubectl get VirtualService bookinfo -o yamlbookinfo-gateway || exact: /productpage || destination || host: productpage || number: 9080[root@k8s-master-node1 ServiceMesh]#kubectl get gateway bookinfo-gateway -o yamlistio: ingressgateway2.2.11 KubeVirt 运维:创建 VM使用提供的镜像在 kubevirt 命名空间下创建一台 VM,名称为 exam,指定 VM 的内存、CPU、网卡和磁盘等配置。[root@k8s-master-node1 ~]# kubectl explain kubevirt.spec. --recursive |grep use         useEmulation   <boolean>[root@k8s-master-node1 ~]# kubectl -n kubevirt edit kubevirtspec:  certificateRotateStrategy: {}  configuration:    developerConfiguration: #{}      useEmulation: true[root@k8s-master-node1 ~]# vim vm.yamlapiVersion: kubevirt.io/v1kind: VirtualMachinemetadata:  name: examspec:  running: true  template:    spec:      domain:        devices:          disks:            - name: vm              disk: {}        resources:          requests:            memory: 1Gi      volumes:        - name: vm          containerDisk:            image: fedora-virt:v1.0            imagePullPolicy: IfNotPresent[root@k8s-master-node1 ~]# kubectl apply -f vm.yamlvirtualmachine.kubevirt.io/exam created[root@k8s-master-node1 ~]# kubectl get virtualmachineNAME        AGE   STATUS    READYexam   31s   Running   True[root@k8s-master-node1 ~]# kubectl delete -f vm.yamlvirtualmachine.kubevirt.io "exam" deleted2.2.12 完成容器云平台的调优或排错工作。(本任务只公布考试范围,不公 布赛题) 任务 3 容器云运维开发(10 分)2.3.1 管理 Job 服务Kubernetes Python 运维脚本开发-实现 Job 服务管理。 2.3.2 自定义调度器Kubernetes Python 运维脚本开发-实现调度器管理。 2.3.3 编写 Kubernetes 容器云平台自动化运维工具。(本任务只公布考试范 围,不公布赛题)  
  • [技术干货] 一键部署k8s
    命令两台安装好docker的Linux主机registry  192.168.XX.YYnode1     192.168.XX.YY#仓库机,在将要安装镜像仓库的机子上进行的操作:#拉取registry镜像docker pull registry#在本地创建文件夹,将来将容器内的文件夹映射到此文件夹mkdir /myregistry#基于registry镜像启动容器#  -d 容器后台运行#  -p 5000:5000  将镜像仓库容器提供服务的5000端口映射到宿主机5000端口#  --name  pri_registry 将容器命名为pri_registry#  -v /myregistry:/var/lib/registry 将容器内的/var/lib/registry文件夹映射到宿主机的/myregistry文件夹#  --restart=always  设置容器故障自动重启docker run -d -p 5000:5000 --name pri_registry -v /myregistry:/var/lib/registry --restart=always registry#查看容器docker ps -a#测试一下是否能访问到容器内的catalog文件,如果可以,标识成功,否则失败curl -X GET http://192.168.XX.XX:5000/v2/_catalog###此IP为运行容器的宿主机的IP地址###正确访问执行结果如下:{"repositories":[]}#标识当前仓库中没有任何镜像,为空#以下步骤是从官网拉取一个测试镜像,进行标注,推送到自建的私有仓库docker pull busyboxdocker tag busybox:latest 192.168.XX.XX:5000/busybox:latestdocker push 192.168.XX.XX:5000/busybox:latest#如遇到问题vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd --insecure-registry 192.168.XX.XX:5000systemctl daemon-reloadsystemctl restart dockerdocker restart pri_registry####若要允许远程访问vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 192.168.XX.XX:5000###此时可以把上面push操作再测试一下docker push 192.168.XX.XX:5000/busybox:latestcurl -X GET http://192.168.XX.XX:5000/v2/_catalog##查看到的结果如下{"repositories":["busybox"]}#表示我们的镜像busybox已经push到私有仓库###查看仓库镜像:ls /myregistry/docker/registry/v2/repositories##客户机,在镜像仓库所在机器之外的另外一台装好了docker的机器上操作docker pull 192.168.XX.XX:5000/busybox#如遇到问题vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd --insecure-registry 192.168.XX.XX:5000systemctl daemon-reloadsystemctl restart docker1  ip a 2  vi /etc/sysconfig/network-scripts/ifcfg-ens333  vi /etc/sysconfig/network-scripts/ifcfg-ens344  systemctl restart network    9  dhclient   10  ping www.baidu.com   11  systemctl stop firewalld   12  setenforce 0   13  ping www.baidu.com   14  vi /etc/sysconfig/network-scripts/ifcfg-ens33   15  systemctl restart network   18  vi /etc/sysconfig/n   30  systemctl stop firewalld   31  systemctl disable firewalld   32  setenforce 0   34  vi /etc/selinux/configdisabled   35  cd /etc/yum.repos.d/   36  ls   37  vi /etc/fstab /dev/cdrom /mnt 9660 defaults 0 0         init 6    38  ll /mnt   39  mount /dev/cdrom /mnt/   40  ll /mnt/   41  ls   42  mkdir backup   43  mv C* backup/   44  ls   45  vi local.repo   46  yum clean all   47  yum makecache   48  yum repolist      55  ll /mnt/   56  umount /mnt/   57  ll /mnt/   58  mount chinaskills_cloud_paas_v2.1.iso /mnt/   59  cp -rvf /mnt/* /opt/   60  umount /mnt/   61  mv /opt/kubeeasy-v2.0 /usr/bin/kubeeasy    65  yum -y install wget   66  sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo   69  wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo          yum makecache   73  yum repolist   75  yum -y install wget   76  mv backup/CentOS-Base.repo ./          mkdir backup   95  cd ../   96  mv C* backup/   97  ls   98  vi local.repo[centos]name=centosbaseurl=file:///mntgpgcheck=0enabled=1    99  yum makecahe  102   yum -y install wget  103  sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  106  yum install -y yum-utils device-mapper-persistent-data lvm2  107  yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  108  yum makecache  111  sudo yum remove docker-ce docker-ce-cli containerd.io -y  114  yum install docker-ce-20.10.21 docker-ce-cli-20.10.21 containerd.io   115  systemctl start docker  116  systemctl restart docker  117  docker -v  118  systemctl enable docker  119  cd /etc/docker/  120  ls  121  vi daemon.jsonsudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<EOF{    "registry-mirrors": [        "https://docker.1ms.run",        "https://docker.xuanyuan.me"    ]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker  122  systemctl daemon.json   123  systemctl daemon-reload  124  sudo systemctl restart docker  125  docker run -dit -p 80:80 nginx:latest  126  docker image ls   137  cd  138  ls  139  yum install gcc.x86_64  -y  140  yum install gcc-c++.x86_64 -y  141  ls wget https://nchc.dl.sourceforge.net/project/sshpass/sshpass/1.06/sshpass-1.06.tar.gztar  zxf sshpass-1.06.tar.gzcd sshpass-1.06./configure  --prefix=/usr/local/make && make installyum -y install sshpass    142  tar zxf sshpass-1.10.tar.gz  143   cd sshpass-1.10  144  ./configure  146  make&& make install    147  kubeeasy install depend --host 192.168.122.11,192.168.122.12 --user root --password 123456 --offline-file /opt/dependencies/packages.tar.gz    149  yum -y install rsync  151  sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo   152  yum makecache   154  cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF   155  cd  156  yum makecache  157  yum install kubelet-1.25.2 kubeadm-1.25.2 kubectl-1.25.2 --nogpgcheck -y   153 ( yum -y install kubelet-1.25.2 kubeadm-1.25.2 kubectl–1.25.2 --disableexcludes=kubernetes)  158  yum search kubeadm  159  history  160  yum -y install rsync           yum -y install rsync sudo yum install nfs-utils rpcbindsudo yum install nfs-utils rpcbind sudo systemctl restart nfs-server rpcbind nfs-client.targetsudo systemctl status nfs-server rpcbind   162  kubeeasy install k8s --master 192.168.122.11 --worker 192.168.122.12 --user root --password 123456 --offline-file /opt/kubeeasy.tar.gz    163  kubectl cluster-info  164  kubectl get pods  165  kubectl get nodes [root@k8s-master-node1 ~]#tar -zxvf Hyperf.tar.gz[root@k8s-master-node1 ~]#cd hyperf/[root@k8s-master-node1 hyperf]#docker load -i centos_7.9.2009.tar上传node_exporter-1.7.0.linux-amd64.tar包[root@k8s-master-node1 hyperf]#vim Dockerfile-exporterFROM centos:centos7.9.2009MAINTAINER ChinaskillsRUN rm -rf /etc/yum.repos.d/*ADD node_exporter-1.7.0.linux-amd64.tar.gz /root/EXPOSE 9100ENTRYPOINT ["./root/node_exporter-1.7.0.linux-amd64/node_exporter"][root@k8s-master-node1 hyperf]#docker build -t monitor-exporter:v1.0 -f Dockerfile-exporter .2.2.2 容器化部署Alertmanager编写 Dockerfile 文件构建 alert 镜像,要求基于 centos:latest 完成 Alertmanager 服务的安装与配置,并设置服务开机自启。上传alertmanager-0.26.0.linux-amd64.tar包[root@k8s-master-node1 hyperf]#vim Dockerfile-alertFROM centos:centos7.9.2009MAINTAINER ChinaskillsRUN rm -rf /etc/yum.repos.d/*ADD alertmanager-0.26.0.linux-amd64.tar.gz /root/EXPOSE 9093 9094ENTRYPOINT ["./root/alertmanager-0.26.0.linux-amd64/alertmanager","--config.file","/root/alertmanager-0.26.0.linux-amd64/alertmanager.yml"][root@k8s-master-node1 hyperf]#docker build -t monitor-alert:v1.0 -f Dockerfile-alert .2.2.3 容器化部署 Grafana编写 Dockerfile 文件构建 grafana 镜像,要求基于 centos 完成 Grafana 服务 的安装与配置,并设置服务开机自启。上传grafana-6.4.1.linux-amd64.tar.gz包[root@k8s-master-node1 hyperf]#vim Dockerfile-grafanaFROM centos:centos7.9.2009MAINTAINER ChinaskillsRUN rm -rf /etc/yum.repos.d/*ADD grafana-6.4.1.linux-amd64.tar.gz /root/EXPOSE 3000ENTRYPOINT ["./root/grafana-6.4.1/bin/grafana-server","-homepath","/root/grafana-6.4.1/"][root@k8s-master-node1 hyperf]#docker build -t monitor-grafana:v1.0 -f Dockerfile-grafana .[root@k8s-master-node1 hyperf]#docker run -d --name grafana-exam-jiance monitor-grafana:v1.0 && sleep 5 && docker exec grafana-exam-jiance ps -aux && docker rm -f grafana-exam-jiance2.2.4 容器化部署 Prometheus 编写 Dockerfile 文件构建 prometheus 镜像,要求基于 centos 完成 Promethues 服务的安装与配置,并设置服务开机自启。上传prometheus-2.13.0.linux-amd64.tar.gz并解压[root@k8s-master-node1 hyperf]#tar -zxvf prometheus-2.13.0.linux-amd64.tar.gz[root@k8s-master-node1 hyperf]#mv prometheus-2.13.0.linux-amd64/prometheus.yml /root/hyperf && rm -rf prometheus-2.13.0.linux-amd64[root@k8s-master-node1 hyperf]#vim Dockerfile-prometheusFROM centos:centos7.9.2009MAINTAINER ChinaskillsRUN rm -rf /etc/yum.repos.d/*ADD prometheus-2.13.0.linux-amd64.tar.gz /root/RUN mkdir -p /data/prometheus/COPY prometheus.yml /data/prometheus/EXPOSE 9090ENTRYPOINT ["./root/prometheus-2.13.0.linux-amd64/prometheus","--config.file","/data/prometheus/prometheus.yml"][root@k8s-master-node1 hyperf]#docker build -t monitor-prometheus:v1.0 -f Dockerfile-prometheus .[root@k8s-master-node1 hyperf]#vim prometheus.yml #改动  - job_name: 'prometheus'    static_configs:    - targets: ['localhost:9090']   - job_name: 'node'    static_configs:    - targets: ['node:9100']   - job_name: 'alertmanager'    static_configs:    - targets: ['alertmanager:9093']  - job_name: 'node-exporter'    static_configs:    - targets: ['node:9100']2.2.5 编排部署 Prometheus编写 docker-compose.yaml 文件,使用镜像 exporter、alert、grafana 和 prometheus 完成监控系统的编排部署。[root@k8s-master-node1 hyperf]#vim docker-compose.yamlversion: '3'services:  node:    container_name: monitor-node    image: monitor-exporter:v1.0    restart: always    hostname: node    ports:      - 9100:9100  alertmanager:    container_name: monitor-alertmanager    image: monitor-alert:v1.0    depends_on:      - node    restart: always    hostname: alertmanager    links:      - node    ports:      - 9093:9093      - 9094:9094  grafana:    container_name: monitor-grafana    image: monitor-grafana:v1.0    restart: always    depends_on:      - node      - alertmanager    hostname: grafana    links:      - node      - alertmanager    ports:      - 3000:3000  prometheus:    container_name: monitor-prometheus    image: monitor-prometheus:v1.0    restart: always    depends_on:      - node      - alertmanager      - grafana    hostname: prometheus    links:      - node      - alertmanager      - grafana    ports:      - 9090:9090[root@k8s-master-node1 ~]#docker-compose up -d  模块二 容器云(30 分)任务 1 容器云服务搭建(5 分)2.1.1 部署容器云平台使用 OpenStack 私有云平台创建两台云主机,分别作为 Kubernetes 集群的 master 节点和 node 节点,然后完成 Kubernetes 集群的部署,并完成 Istio 服务网 格、KubeVirt 虚拟化和 Harbor 镜像仓库的部署。创建俩台云主机并配网# Kubernetes 集群的部署[root@localhost ~]# mount -o loop chinaskills_cloud_paas_v2.0.2.iso /mnt/[root@localhost ~]# cp -rfv /mnt/* /opt/[root@localhost ~]# umount /mnt/[root@master ~]# hostnamectl set-hostname master && su[root@worker ~]# hostnamectl set-hostname worker && su# 安装kubeeasy[root@master ~]# mv /opt/kubeeasy /usr/bin/kubeeasy# 安装依赖环境[root@master ~]# kubeeasy install depend \--host 192.168.59.200,192.168.59.201 \--user root \--password 000000 \--offline-file /opt/dependencies/base-rpms.tar.gz# 安装k8s[root@master ~]# kubeeasy install k8s \--master 192.168.59.200 \--worker 192.168.59.201 \--user root \--password 000000 \--offline-file /opt/kubernetes.tar.gz# 安装istio网格[root@master ~]# kubeeasy add --istio istio# 安装kubevirt虚拟化[root@master ~]# kubeeasy add --virt kubevirt# 安装harbor仓库[root@master ~]# kubeeasy add --registry harbor[root@k8s-master-node1 ~]# vim pod.yamlapiVersion: v1kind: Podmetadata:  name: examspec:  containers:  - name: exam    image: nginx:latest    imagePullPolicy: IfNotPresent    env:    - name: exam      value: "2022"[root@k8s-master-node1 ~]# kubectl apply -f pod.yaml[root@k8s-master-node1 ~]# kubectl get pod#部署 Istio 服务网格[root@k8s-master-node1 ~]# kubectl create ns examnamespace/exam created[root@k8s-master-node1 ~]# kubectl edit ns exam更改为:  labels:    istio-injection: enabled[root@k8s-master-node1 ~]# kubectl describe ns exam  #查看任务 2 容器云服务运维(15 分)2.2.1 容器化部署 Node-Exporter编写 Dockerfile 文件构建 exporter 镜像,要求基于 centos 完成 Node-Exporter 服务的安装与配置,并设置服务开机自启。yum -y install git上传Hyperf.tar包[root@k8s-master-node1 ~]#tar -zxvf Hyperf.tar.gz[root@k8s-master-node1 ~]#cd hyperf/[root@k8s-master-node1 hyperf]#docker load -i centos_7.9.2009.tar上传node_exporter-1.7.0.linux-amd64.tar包[root@k8s-master-node1 hyperf]#vim Dockerfile-exporterFROM centos:centos7.9.2009MAINTAINER ChinaskillsRUN rm -rf /etc/yum.repos.d/*ADD node_exporter-1.7.0.linux-amd64.tar.gz /root/EXPOSE 9100ENTRYPOINT ["./root/node_exporter-1.7.0.linux-amd64/node_exporter"][root@k8s-master-node1 hyperf]#docker build -t monitor-exporter:v1.0 -f Dockerfile-exporter .2.2.2 容器化部署Alertmanager编写 Dockerfile 文件构建 alert 镜像,要求基于 centos:latest 完成 Alertmanager 服务的安装与配置,并设置服务开机自启。上传alertmanager-0.26.0.linux-amd64.tar包[root@k8s-master-node1 hyperf]#vim Dockerfile-alertFROM centos:centos7.9.2009MAINTAINER ChinaskillsRUN rm -rf /etc/yum.repos.d/*ADD alertmanager-0.26.0.linux-amd64.tar.gz /root/EXPOSE 9093 9094ENTRYPOINT ["./root/alertmanager-0.26.0.linux-amd64/alertmanager","--config.file","/root/alertmanager-0.26.0.linux-amd64/alertmanager.yml"][root@k8s-master-node1 hyperf]#docker build -t monitor-alert:v1.0 -f Dockerfile-alert .2.2.3 容器化部署 Grafana编写 Dockerfile 文件构建 grafana 镜像,要求基于 centos 完成 Grafana 服务 的安装与配置,并设置服务开机自启。上传grafana-6.4.1.linux-amd64.tar.gz包[root@k8s-master-node1 hyperf]#vim Dockerfile-grafanaFROM centos:centos7.9.2009MAINTAINER ChinaskillsRUN rm -rf /etc/yum.repos.d/*ADD grafana-6.4.1.linux-amd64.tar.gz /root/EXPOSE 3000ENTRYPOINT ["./root/grafana-6.4.1/bin/grafana-server","-homepath","/root/grafana-6.4.1/"][root@k8s-master-node1 hyperf]#docker build -t monitor-grafana:v1.0 -f Dockerfile-grafana .[root@k8s-master-node1 hyperf]#docker run -d --name grafana-exam-jiance monitor-grafana:v1.0 && sleep 5 && docker exec grafana-exam-jiance ps -aux && docker rm -f grafana-exam-jiance2.2.4 容器化部署 Prometheus 编写 Dockerfile 文件构建 prometheus 镜像,要求基于 centos 完成 Promethues 服务的安装与配置,并设置服务开机自启。上传prometheus-2.13.0.linux-amd64.tar.gz并解压[root@k8s-master-node1 hyperf]#tar -zxvf prometheus-2.13.0.linux-amd64.tar.gz[root@k8s-master-node1 hyperf]#mv prometheus-2.13.0.linux-amd64/prometheus.yml /root/hyperf && rm -rf prometheus-2.13.0.linux-amd64[root@k8s-master-node1 hyperf]#vim Dockerfile-prometheusFROM centos:centos7.9.2009MAINTAINER ChinaskillsRUN rm -rf /etc/yum.repos.d/*ADD prometheus-2.13.0.linux-amd64.tar.gz /root/RUN mkdir -p /data/prometheus/COPY prometheus.yml /data/prometheus/EXPOSE 9090ENTRYPOINT ["./root/prometheus-2.13.0.linux-amd64/prometheus","--config.file","/data/prometheus/prometheus.yml"][root@k8s-master-node1 hyperf]#docker build -t monitor-prometheus:v1.0 -f Dockerfile-prometheus .[root@k8s-master-node1 hyperf]#vim prometheus.yml #改动  - job_name: 'prometheus'    static_configs:    - targets: ['localhost:9090']   - job_name: 'node'    static_configs:    - targets: ['node:9100']   - job_name: 'alertmanager'    static_configs:    - targets: ['alertmanager:9093']  - job_name: 'node-exporter'    static_configs:    - targets: ['node:9100']2.2.5 编排部署 Prometheus编写 docker-compose.yaml 文件,使用镜像 exporter、alert、grafana 和 prometheus 完成监控系统的编排部署。[root@k8s-master-node1 hyperf]#vim docker-compose.yamlversion: '3'services:  node:    container_name: monitor-node    image: monitor-exporter:v1.0    restart: always    hostname: node    ports:      - 9100:9100  alertmanager:    container_name: monitor-alertmanager    image: monitor-alert:v1.0    depends_on:      - node    restart: always    hostname: alertmanager    links:      - node    ports:      - 9093:9093      - 9094:9094  grafana:    container_name: monitor-grafana    image: monitor-grafana:v1.0    restart: always    depends_on:      - node      - alertmanager    hostname: grafana    links:      - node      - alertmanager    ports:      - 3000:3000  prometheus:    container_name: monitor-prometheus    image: monitor-prometheus:v1.0    restart: always    depends_on:      - node      - alertmanager      - grafana    hostname: prometheus    links:      - node      - alertmanager      - grafana    ports:      - 9090:9090[root@k8s-master-node1 ~]#docker-compose up -d2.2.6 安装 Jenkins将 Jenkins 部署到 default 命名空间下。要求完成离线插件的安装,设置 Jenkins 的登录信息和授权策略。上传BlueOcean.tar.gz包[root@k8s-master-node1 ~]#tar -zxvf BlueOcean.tar.gz[root@k8s-master-node1 ~]#cd BlueOcean/images/[root@k8s-master-node1 images]# docker load -i java_8-jre.tar[root@k8s-master-node1 images]# docker load -i jenkins_jenkins_latest.tar[root@k8s-master-node1 images]# docker load -i gitlab_gitlab-ce_latest.tar[root@k8s-master-node1 images]# docker load -i maven_latest.tar[root@k8s-master-node1 images]# docker tag maven:latest  192.168.59.200/library/maven[root@k8s-master-node1 images]# docker login 192.168.59.200Username: adminPassword: (Harbor12345) WARNING! Your password will be stored unencrypted in /root/.docker/config.json.Configure a credential helper to remove this warning. Seehttps://docs.docker.com/engine/reference/commandline/login/#credentials-store[root@k8s-master-node1 images]# docker push  192.168.59.200/library/maven#安装Jenkins[root@k8s-master-node1 BlueOcean]# kubectl create ns devops[root@k8s-master-node1 BlueOcean]# kubectl create deployment jenkins -n devops --image=jenkins/jenkins:latest --port 8080 --dry-run -o yaml > jenkins.yaml[root@k8s-master-node1 BlueOcean]# vim jenkins.yaml # 进入添加apiVersion: apps/v1kind: Deploymentmetadata:  creationTimestamp: null  labels:    app: jenkins  name: jenkins  namespace: devopsspec:  replicas: 1  selector:    matchLabels:      app: jenkins#strategy: {}  template:metadata:#creationTimestamp: null      labels:        app: jenkins    spec:      nodeName: k8s-master-node1 # 强制调度到master节点      containers:      - image: jenkins/jenkins:latest        imagePullPolicy: IfNotPresent        name: jenkins        ports:        - containerPort: 8080          name: jenkins8080        securityContext:          runAsUser: 0          privileged: true        volumeMounts:        - name: jenkins-home          mountPath: /home/jenkins_home/        - name: docker-home          mountPath: /run/docker.sock        - name: docker          mountPath: /usr/bin/docker        - name: kubectl          mountPath: /usr/bin/kubectl        - name: kube          mountPath: /root/.kube      volumes:      - name: jenkins-home        hostPath:          path: /home/jenkins_home/      - name: docker-home        hostPath:          path: /run/docker.sock      - name: docker        hostPath:          path: /usr/bin/docker      - name: kubectl        hostPath:          path: /usr/bin/kubectl      - name: kube        hostPath:          path: /root/.kube[root@k8s-master-node1 BlueOcean]# kubectl apply -f jenkins.yamldeployment.apps/jenkins created[root@k8s-master-node1 ~]# kubectl get pod -n devops NAME                      READY   STATUS    RESTARTS   AGEjenkins-7d4f5696b7-hqw9d   1/1     Running   0          88s# 进入jenkins,确定docker和kubectl成功安装[root@k8s-master-node1 ~]# kubectl exec -it -n default  jenkins-7d4f5696b7-hqw9d bash[root@k8s-master-node1 BlueOcean]# kubectl expose deployment jenkins -n devops --port=8080 --target-port=30880 --dry-run -o yaml >> jenkins.yaml[root@k8s-master-node1 BlueOcean]# vim jenkins.yaml # 进入修改apiVersion: v1kind: Servicemetadata:  creationTimestamp: null  labels:    app: jenkins  name: jenkins  namespace: devopsspec:  ports:  - port: 8080#protocol: TCP    name: jenkins8080    nodePort: 30880  - name: jenkins    port: 50000    nodePort: 30850  selector:    app: jenkins  type: NodePort[root@k8s-master-node1 BlueOcean]# kubectl apply -f jenkins.yamlservice/jenkins created[root@k8s-master-node1 ~]# kubectl get -n devops svcNAME      TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGEjenkins   NodePort   10.96.53.170   <none>        8080:30880/TCP   10s# 使用提供的软件包完成Blue Ocean等离线插件的安装[root@k8s-master-node1 BlueOcean]# kubectl -n devops cp plugins/ jenkins-7d4f5696b7-hqw9d:/var/jenkins_home/* *访问 ip:30880 进入jenkins*# 查看密码[root@k8s-master-node1 BlueOcean]# kubectl -n devops exec jenkins-7d4f5696b7-hqw9d --cat /var/jenkins_home/secrets/initialAdminPassword32c47352c469a4ef58e8a797226949e88 * *前面安装了离线插件,所以这里需要重启 jenkins ,地址栏加入 restart 完成重启*  2.2.7 安装 GitLab将 GitLab 部署到 default 命名空间下,要求设置 root 用户密码,新建公开项 目,并将提供的代码上传到该项目。[root@k8s-master-node1 BlueOcean]# kubectl create deployment gitlab -n devops --image=gitlab/gitlab-ce:latest --port 80 --dry-run -o yaml > gitlab.yamlW0222 12:00:34.346609   25564 helpers.go:555] --dry-run is deprecated and can be replaced with --dry-run=client.[root@k8s-master-node1 BlueOcean]# vim gitlab.yamlapiVersion: apps/v1kind: Deploymentmetadata:  creationTimestamp: null  labels:    app: gitlab  name: gitlab  namespace: devopsspec:  replicas: 1  selector:    matchLabels:      app: gitlab  #strategy: {}  template:    metadata:      #creationTimestamp: null      labels:        app: gitlab    spec:      containers:      - image: gitlab/gitlab-ce:latest         imagePullPolicy: IfNotPresent        name: gitlab-ce        ports:        - containerPort: 80        env:        - name: GITLAB_ROOT_PASSWORD          value: admin@123[root@k8s-master-node1 BlueOcean]# kubectl apply -f gitlab.yamldeployment.apps/gitlab created[root@k8s-master-node1 BlueOcean]# kubectl  get pod -n devopsNAME                      READY   STATUS    RESTARTS      AGEgitlab-5b47c8d994-8s9qb   1/1     Running   0             17sjenkins-bbf477c4f-55vgj   1/1     Running   2 (15m ago)   34m[root@k8s-master-node1 BlueOcean]# kubectl expose deployment gitlab -n devops --port=80 --target-port=30888 --dry-run=client -o yaml >> gitlab.yaml[root@k8s-master-node1 BlueOcean]# vim gitlab.yaml # 进入添加---apiVersion: v1kind: Servicemetadata:  creationTimestamp: null  labels:    app: gitlab  name: gitlab  namespace: devopsspec:  ports:  - port: 80    nodePort: 30888  selector:    app: gitlab  type: NodePort[root@k8s-master-node1 BlueOcean]# kubectl apply -f gitlab.yaml deployment.apps/gitlab configuredservice/gitlab created[root@k8s-master-node1 BlueOcean]# kubectl get svc -n devops NAME      TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGEgitlab    NodePort   10.96.149.160   <none>        80:30888/TCP     6sjenkins   NodePort   10.96.174.123   <none>        8080:30880/TCP   8m7s# 等待gitlab启动,访问IP:30888  root , admin@123 登录 Gitlab*  # 将springcloud文件夹中的代码上传到该项目,Gitlab提供了代码示例[root@k8s-master-node1 BlueOcean]# cd springcloud/[root@k8s-master-node1 springcloud]# git config --global user.name "Administrator"[root@k8s-master-node1 springcloud]# git config --global user.email "admin@example.com"[root@k8s-master-node1 springcloud]# git remote remove origin[root@k8s-master-node1 springcloud]# git remote add origin  cid:link_0[root@k8s-master-node1 springcloud]# git add .[root@k8s-master-node1 springcloud]# git commit -m "Initial commit"# On branch masternothing to commit, working directory clean[root@k8s-master-node1 springcloud]# git push -u origin masterUsername for 'http://192.168.100.23:30888': root Password for 'http://root@192.168.100.23:30888':(admin@123)Counting objects: 3192, done.Delta compression using up to 4 threads.Compressing objects: 100% (1428/1428), done.Writing objects: 100% (3192/3192), 1.40 MiB | 0 bytes/s, done.Total 3192 (delta 1233), reused 3010 (delta 1207)remote: Resolving deltas: 100% (1233/1233), done.To cid:link_0 * [new branch]      master -> masterBranch master set up to track remote branch master from origin.2.2.8 配置 Jenkins 与 GitLab 集成在 Jenkins 中新建流水线任务,配置 GitLab 连接 Jenkins,并完成 WebHook 的配置。 * *在 GitLab 中生成名为 jenkins 的“Access Tokens”* * *返回 jenkins*   * *回到 Gitlab ,复制 token* * *复制后填写到此* 2.2.9 建 CI/CD境在流水线任务中编写流水线脚本,完成后触发构建,要求基于 GitLab 中的 项目自动完成代码编译、镜像构建与推送、并自动发布服务到 Kubernetes 集群 中。# 创建命名空间[root@k8s-master-node1 ~]# kubectl create ns spri * *记住脚本路径的名称 Jenkinsfile ,后面创建的流水线文件名与此匹配* * *Harbor 仓库创建公开项目 springcloud* * *返回 Gitlab 准备编写流水线* # 添加映射[root@k8s-master-node1 ~]# cat /etc/hosts192.168.59.200 apiserver.cluster.local # 选择这一行# 进入jenkins 添加映射[root@k8s-master-node1 ~]# kubectl exec -it -n devops jenkins-bbf477c4f-55vgj bashkubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.root@jenkins-bbf477c4f-55vgj:/# echo "192.168.200.59 apiserver.cluster.local" >> /etc/hostsroot@jenkins-bbf477c4f-55vgj:/# cat /etc/hosts # 查看是否成功 # 编写流水线pipeline{    agent none    stages{        stage('mvn-build'){            agent{                docker{                    image '192.168.3.10/library/maven'                    args '-v /root/.m2:/root/.m2'                }            }            steps{                sh 'cp -rvf /opt/repository /root/.m2'                sh 'mvn package -DskipTests'            }        }        stage('image-build'){            agent any            steps{                sh 'cd gateway && docker build -t 192.168.3.10/springcloud/gateway -f Dockerfile .'                sh 'cd config && docker build -t 192.168.3.10/springcloud/config -f Dockerfile .'                sh 'docker login 192.168.3.10 -u=admin -p=Harbor12345'                sh 'docker push 192.168.3.10/springcloud/gateway'                sh 'docker push 192.168.3.10/springcloud/config'            }        }        stage('cloud-deployment'){            agent any            steps{                sh 'sed -i "s/sqshq\\/piggymetrics-gateway/192.168.3.10\\/springcloud\\/gateway/g" yaml/deployment/gateway-deployment.yaml'                sh 'sed -i "s/sqshq\\/piggymetrics-config/192.168.3.10\\/springcloud\\/config/g" yaml/deployment/config-deployment.yaml'                sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/deployment/gateway-deployment.yaml'                sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/deployment/config-deployment.yaml'                sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/svc/gateway-svc.yaml'                sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/svc/config-svc.yaml'            }        }    }}stages:代表整个流水线的所有执行阶段,通常stages只有1个,里面包含多个stage。stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码,编译构建,部署等阶段。steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码,ssh远程发布等任意内容。* *保存流水线文件,配置Webhook触发构建*  * *取消勾选 SSL 选择, Add webhook 创建*![](vx_images/545790416256726.png =900x) * *创建成功进行测试,成功后返回 jenkins 会发现流水线已经开始自动构建* * *流水线执行成功* * *springcloud 项目镜像上传成功*#构建的项目全部运行[root@k8s-master-node1 ~]# kubectl get pod -n springcloud NAME                       READY   STATUS    RESTARTS      AGEconfig-77c74dd878-8kl4x    1/1     Running   0             28sgateway-5b46966894-twv5k   1/1     Running   1 (19s ago)   28s[root@k8s-master-node1 ~]# kubectl -n springcloud get serviceNAME      TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGEconfig    NodePort   10.96.137.40   <none>        8888:30015/TCP   4m3sgateway   NodePort   10.96.121.82   <none>        4000:30010/TCP   4m4s* *等待 PIg 微服务启动,访问 ip:30010 查看构建成功*2.2.10 服务网格:创建 Ingress Gateway将 Bookinfo 应用部署到 default 命名空间下,请为 Bookinfo 应用创建一个网 关,使外部可以访问 Bookinfo 应用。上传ServiceMesh.tar.gz包[root@k8s-master-node1 ~]# tar -zxvf ServiceMesh.tar.gz [root@k8s-master-node1 ~]# cd ServiceMesh/images/[root@k8s-master-node1 images]# docker load -i image.tar 部署Bookinfo应用到kubernetes集群:[root@k8s-master-node1 images]# cd /root/ServiceMesh/[root@k8s-master-node1 ServiceMesh]# kubectl apply -f bookinfo/bookinfo.yamlservice/details createdserviceaccount/bookinfo-details createddeployment.apps/details-v1 createdservice/ratings createdserviceaccount/bookinfo-ratings createddeployment.apps/ratings-v1 createdservice/reviews createdserviceaccount/bookinfo-reviews createddeployment.apps/reviews-v1 createdservice/productpage createdserviceaccount/bookinfo-productpage createddeployment.apps/productpage-v1 created[root@k8s-master-node1 ServiceMesh]# kubectl get podNAME                              READY   STATUS    RESTARTS   AGEdetails-v1-79f774bdb9-kndm9       1/1     Running   0          7sproductpage-v1-6b746f74dc-bswbx   1/1     Running   0          7sratings-v1-b6994bb9-6hqfn         1/1     Running   0          7sreviews-v1-545db77b95-j72x5       1/1     Running   0          7s[root@k8s-master-node1 ServiceMesh]# vim bookinfo-gateway.yamlapiVersion: networking.istio.io/v1alpha3kind: Gatewaymetadata:  name: bookinfo-gatewayspec:  selector:    istio: ingressgateway  servers:  - port:      number: 80      name: http      protocol: HTTP    hosts:     - "*" ---apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:  name: bookinfospec:  hosts:   - "*"    gateways:  - bookinfo-gateway  http:  - match:     - uri:        exact: /productpage     - uri:        prefix: /static    - uri:        exact: /login    - uri:        exact: /logout    - uri:        prefix: /api/v1/products    route: # 定义路由转发目的地列表    - destination:        host: productpage        port:          number: 9080[root@k8s-master-node1 ServiceMesh]# kubectl apply -f bookinfo-gateway.yamlgateway.networking.istio.io/bookinfo-gateway createdvirtualservice.networking.istio.io/bookinfo created [root@k8s-master-node1 ServiceMesh]#kubectl get VirtualService bookinfo -o yamlbookinfo-gateway || exact: /productpage || destination || host: productpage || number: 9080[root@k8s-master-node1 ServiceMesh]#kubectl get gateway bookinfo-gateway -o yamlistio: ingressgateway2.2.11 KubeVirt 运维:创建 VM使用提供的镜像在 kubevirt 命名空间下创建一台 VM,名称为 exam,指定 VM 的内存、CPU、网卡和磁盘等配置。[root@k8s-master-node1 ~]# kubectl explain kubevirt.spec. --recursive |grep use         useEmulation   <boolean>[root@k8s-master-node1 ~]# kubectl -n kubevirt edit kubevirtspec:  certificateRotateStrategy: {}  configuration:    developerConfiguration: #{}      useEmulation: true[root@k8s-master-node1 ~]# vim vm.yamlapiVersion: kubevirt.io/v1kind: VirtualMachinemetadata:  name: examspec:  running: true  template:    spec:      domain:        devices:          disks:            - name: vm              disk: {}        resources:          requests:            memory: 1Gi      volumes:        - name: vm          containerDisk:            image: fedora-virt:v1.0            imagePullPolicy: IfNotPresent[root@k8s-master-node1 ~]# kubectl apply -f vm.yamlvirtualmachine.kubevirt.io/exam created[root@k8s-master-node1 ~]# kubectl get virtualmachineNAME        AGE   STATUS    READYexam   31s   Running   True[root@k8s-master-node1 ~]# kubectl delete -f vm.yamlvirtualmachine.kubevirt.io "exam" deleted2.2.12 完成容器云平台的调优或排错工作。(本任务只公布考试范围,不公 布赛题)  
  • [热门活动] 心得
    本人是一名作为大学生,小白,参与次参加了华为活动,并拿下这些认证,于我而言是宝贵的学习历程。在接触人工智能入门认证时,起初看着文档操作,从陌生到逐渐熟悉。跟着文档步骤搭建环境、配置参数,过程中虽因对概念理解不深偶有卡顿,但每解决一个小问题,都让我对ai的底层逻辑有了新认识。我觉得这些认证看似按部就班,但是实则是在不断积累对人工智能算法和开发流程的感知。这段跟着文档学习拿证的经历,让我明白理论与实践结合的重要性。它不仅为我构建了基础技术框架,更培养了我自主学习和解决问题的能力。未来,我会凭借这份经验,更深入探索相关技术领域。  
  • [热门活动] 【案例共创】使用鲲鹏ECS和Huawei Cloud Euler OS快速搭建WordPress
    一、案例介绍本案例介绍关于如何使用鲲鹏ECS和Huawei Cloud Euler OS快速搭建WordPress。鲲鹏ECS是基于华为鲲鹏处理器构建的弹性计算服务,是华为自主研发的基于ARM架构的服务器处理器,旨在提供高性能、低功耗的计算解决方案。鲲鹏ECS实例适用于多种应用场景,如应用部署、网站托管等。Huawei Cloud EulerOS是华为云基于开源的欧拉操作系统(openEuler)定制优化的一款服务器操作系统,专为云计算环境设计。它不仅继承了openEuler稳定、高效的特点,还针对华为云的基础设施进行了特别优化,旨在提供更加安全、可靠的计算服务。主要特点安全性高:Huawei Cloud EulerOS 提供了多层次的安全防护措施,包括但不限于内核级别的安全加固、支持国密算法等,以保护用户数据的安全。性能优越:通过针对华为云平台的优化,Huawei Cloud EulerOS 能够提供卓越的计算性能和稳定性,满足各种业务场景的需求。兼容性强:支持多种架构(如x86_64, ARM64),能够适应不同的硬件环境,为用户提供灵活的选择。易于管理:提供了便捷的系统管理和运维工具,简化了部署、监控及故障排除的过程,降低了维护成本。社区支持:作为openEuler的一个分支,Huawei Cloud EulerOS同样受益于活跃的开源社区支持,可以快速获取最新的技术更新和支持。WordPress是一个以PHP和MySQL为平台的免费开源博客软件和内容管理系统(CMS)。可以轻松创建、编辑、管理和发布内容到网站上。WordPress是最受欢迎的内容管理系统之一,广泛用于个人博客、企业网站、电子商务平台等。二、安装流程2.1 鲲鹏服务器购买在控制台搜索“ECS” 进入去云服务器管理页面,点击右上角:购买弹性去服务器,进入购买页面。选择自定义购买 - 按需计费 。cpu架构选择:鲲鹏计算.实例筛选:2c 4G - 鲲鹏KC2 (可根据业务实际需求进行性能筛选)。操作系统:Huawei Cloud EulerOS - Huawei Cloud EulerOS 2.0 标准版 64位 ARM版(10GiB)云服务器管理:输入规范的密码。其他选项默认即可,勾选《服务声明》,点击立即购买,即可成功购买成功鲲鹏KC1。购买成功后,在弹性云管理平台即可查看所有的云资源,点击右侧 远程登录 开始进行云服务器连接。点击远程登录后,弹出登录云服务器提示,我们直接使用CloudShell登录。点击立即登录,在新的CloudShell连接页面,已经带出了所有服务器的信息,我们只需要输入购买云服务器时输入的密码即可。看到 "Welcome to Huawei Cloud Service" 即登录成功了。2.2 LNMP环境安装在安装WordPress前,我们需要安装其所依赖的环境,也就是LNMP环境,LNMP也就是:Linux 、Nginx 、Mysql 、Php 这四个服务。2.2.1 安装Nginx1、执行以下命令,看到输出 Complete 即安装完成。sudo yum -y install nginx2、验证nginx输入下列命令,如果成功打印出了nginx version: *** ,则成功nginx -v3、启动nginx并设置期开机启动输入下列的命令启动nginx并设置nginx在以后重启也自动启动。systemctl start nginx systemctl enable nginx4、查看nginx是否成功启动在连接处有一个ip,这个是服务器外网ip (在云资源列表处也可查看),在浏览器直接输入这个ip,能看到下方nginx的欢迎页,则成功启动了。2.2.2 安装MySQLmysql是数据库服务,1、按顺序执行下列的命令,进行mysql安装mkdir mysql-server cd mysql-server wget https://repo.huaweicloud.com/hce/2.0/os/x86_64/Packages/mysql-8.0.28-1.hce2.x86_64.rpm yum install mysql-server2、启动mysql并设置开机启动systemctl start mysqld systemctl enable mysqld3、对数据库进行加固输入下面的命令开始加固数据库,这里需要注意的是:1、需要输入y/n 的,直接输入y就ok2、Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG  这里输入 2 就好3、需要输入密码的地方,如果密码很简单的话,会提示错误,需要输入更复杂的密码。mysql_secure_installation2.2.3 安装 php1、安装php这里之所以 cd ~ 是为了防止上一步安装mysql没有推出安装目录按顺序执行以下的命令行。注意,这里的版本是与Huawei Cloud EulerOS 2.0镜像匹配的。cd ~ wget https://repo.huaweicloud.com/hce/2.0/os/aarch64/Packages/php-8.0.0-10.hce2.aarch64.rpm yum install php-8.0.0-10.hce2.aarch64.rpm2、验证php安装版本php -v3、启动php并设置开机启动systemctl start php-fpm systemctl enable php-fpm4、修改nginx以支持php服务 因为php是依赖于nginx来运行的,所以我们在nginx 的配置文件中来支持php打开配置文件 vim /etc/nginx/defauld.d/default.conf修改内容  server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm index.php; } location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }5、重载nginx配置文件 nginx配置文件变更后,需要重载一下,否则变更不会生效。service nginx reload6、测试php运行在nginx的文件目录下创建一个demo.phpvim /usr/share/nginx/html/demo.php输入内容<?php phpinfo(); ?>通过浏览器访问 :http://ip/demo.php 就可以查看到php相关信息 至此我们的lamp环境就安装成功了。2.4 安装wordpress1、创建wordpress数据库输入下方命令行,会提示输入密码,输入创建数据库时的密码。mysql -u root -p成功登录mysql后,创建数据库CREATE DATABASE wordpress;2、开始安装执行下列命令cd /usr/share/nginx/html wget https://cn.wordpress.org/wordpress-6.6.1-zh_CN.tar.gz tar zxvf wordpress-6.6.1-zh_CN.tar.gz cd ./wordpress cp wp-config-sample.php wp-config.php编辑配置文件vim wp-config.php主要修改数据库的名称、账号、密码配置完成后,通过http://ip/wordpress 就可以正常的访问wordpress安装向导了。进入安装向导后,按向导正常输入相关的站点信息,wordpress就完全安装成功啦~~ 我正在参加【案例共创】第2期 构建开发场景最佳实践/体验评测,创作案例文章cid:link_0 
  • [热门活动] 【案例共创】基于华为云 ECS 鲲鹏实例、Huawei Cloud Euler OS 和 Uptime-Kuma 快速构建服务监控系统实践
    一、案例介绍本方案通过华为云 ECS 鲲鹏 KC1 实例和 Huawei Cloud Euler OS 快速搭建了高性价比的监控系统,结合开源工具 Uptime-Kuma 的灵活监控能力,特别适合中小型团队的基础设施监控需求,可在 15 分钟内完成部署。华为云 ECS 鲲鹏实例:基于华为自研鲲鹏处理器(ARM架构)的高性能云服务器,具备卓越计算性能、低功耗及高扩展性,适用于人工智能、大数据分析、科学计算等场景,并提供安全隔离、弹性资源调配及多存储选项,满足企业高效能计算需求;Huawei Cloud Euler OS:华为云基于 openEuler 构建的云原生操作系统,具备高性能、高安全、易迁移等特性,支持x86和Arm架构,可替代CentOS等传统镜像,助力企业业务高效上云;Uptime-Kuma:轻量级开源自托管监控工具,支持 HTTP(S)、TCP、Ping 等多种协议监控,提供实时报警、可视化仪表盘及状态页面,适用于个人开发、企业内网等场景,具备易部署、数据隐私可控等特点。 二、购买华为云 ECS 鲲鹏 KC1 实例在华为云官网点击“产品”“计算”-“弹性云服务器ECS”,在弹性云服务器ECS详情页点击“购买”按钮进入购买页面:在自定义购买中选择/设置配置信息:基础配置-计费模式:按需计费实例-规格类型选型:鲲鹏计算规格名称:kc1.large.2操作系统-公共镜像:Huawei Cloud Euler OS-Huawei Cloud EulerOS 2.0 标准版 64位 ARM版(10GiB)公网访问-公网带宽:按流量计费云服务管理:设置密码其它配置项使用默认即可全部配置信息如下,勾选右侧的“我已阅读并同意”,点击右下角的“立即购买”完成购买等待服务器完成创建,然后点击“返回云服务器列表”进入服务器列表页面 三、放通 3001 端口uptime-kuma 默认需要用到 3001 端口,需在安全组中放通,在服务器列表页面,点击前面创建的服务器名称/ID,进入服务器管理页面,点击“安全组”选项卡,点击“配置规则”点击“入方向规则”-“添加规则”,优先级输入 1、协议端口输入 3001、源地址输入 0.0.0.0/0 点击右下角的“确定”按钮放通 3001 端口。四、安装Docker首先需要登录服务器,可以在服务器列表中点击“远程登录”在弹窗中点击“立即登录”按钮输入购买服务器时设置的密码,点击“连接”按钮登录Huawei Cloud Euler OS 中安装 Docker 非常方便,一行命令即可完成:dnf install docker安装过程种需要输入两次 y 并按回车键确认:安装完成之后使用 systemctl start docker 命令即可启动服务:systemctl start docker至此我们还需要设置加速镜像,个人使用可以参考设置镜像加速器,设置之后需要执行 systemctl restart docker 重启容器引擎systemctl restart docker 五、安装uptime-kumauptime-kuma 的安装也非常简单,一行命令即可搞定:docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1安装完成之后通过浏览器打开服务器公网IP:3001端口即可访问,首次访问需要设置管理员用户名和密码:接下来我们就可以点击“点击添加”来添加监控服务,设置域名之后保存,即可 24 小时不间断对Web服务、API接口、数据库等组件的状态检测,你还可以根据需要设置通知,uptime-kuma 支持数十种通知方式,一旦你的服务发生故障,uptime-kuma 可以实时通知你来处理:除此之外,uptime-kuma 还可以创建状态页面对外公开展示:本方案通过华为云 ECS 鲲鹏 KC1 实例和 Huawei Cloud Euler OS 快速搭建了高性价比的监控系统,结合 Uptime-Kuma 的灵活监控能力,特别适合中小型团队的基础设施监控需求。 我正在参加【案例共创】第2期 构建开发场景最佳实践/体验评测,创作案例文章cid:link_0
  • [热门活动] 【案例共创】基于鲲鹏KC2构建宝塔快速搭建fastadmin后台管理平台
    案例介绍本案例基于鲲鹏KC2云服务器构建宝塔服务,以快速搭建fastadmin后台管理平台。鲲鹏KC2云服务器鲲鹏云服务器是基于鲲鹏920处理器(ARMv8架构)打造的计算优化型实例,主打高性能与多核并发能力。单CPU支持最高64核,主频2.6GHz,搭配DDR4内存及高速存储(本地NVMe SSD/云硬盘),满足高吞吐、低延迟需求,网络带宽可达25Gbps以上,适配分布式计算场景。是基于QingTian架构的自研极简虚拟化云服务 购买鲲鹏KC2云服务器在控制台搜索ECS,点击弹性云服务器ESC开始购买进行到购买页面后,我们首先选择按需计费,也可以选择包年/包月进行购买,选择区域大家可以自行选择。选择系统为ubuntu, 带宽为按带宽计费搜索2C4G的服务器,就可以应对基础的服务了,如果用户量增大则扩容。如果需要更大的服务器可以自行搜索更大的规格,选择KC2的通用服务即可。这样基础云服务器资源就选择好了,点击立即购买,完成购买。 CloudShell连接鲲鹏云服务器成功购买了鲲鹏云服务器后,如果到弹性云服务器中没有找到购买的服务器,那在页面上稍微等一下,准备服务器资源需要一些些时间。在页面上到购买的服务器后,状态为运行中,则说明服务器已经完全准备好了,点击右侧远程登录,开始进行远程连接。在CloudShell中,已经准备好了当前云服务器相关的所有数据,只需要输入密码,就可以连接上。正确输入密码后,进入欢迎页。至此,服务器已经正常连接上了。安装宝塔在ubuntu中安装宝塔非常简单,只需要输入下面的命令即可自动安装成功wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh && sudo bash install_panel.sh ed8484bec输入命令后,直到出现下图的面板账号信息,则说明安装成功了。记录这里的外网地址、账号、密码,后面就可以直接访问登录了。注意提示:请在安全组放行42651端口。在云服务器列表上点击对应有服务,进入详情,切换到安全组,点击配置规则。点击添加规则后,输入对应的优先级、端口和源地址,点击确认。接下来就是输入安装成功时提示的外网地址,就可以看到下面的页面。输入安装成功时提供的账号密码。 安装lnmp环境首次安装时,会需要关联宝塔账号,直接注册一下登录上就行,页面会做初始化推荐,我们直接按推荐安装好LNMP环境即可。点击一键安装后,就会显示相关的安装任务列表,这里会需要一些时间,让子弹飞一会。安装完成后。安装fastadmin第一步:新建站点在宝塔面板中,创建一个新的站点,并填写项目域名。   在域名这里可以填写你的真实域名。根目录修改为fastadmin . 这个名称是自定义的,可以随机。只需要与下方上传的文件目录保持一致。第二步:上传框架通过宝塔的文件管理功能,进入站点的文件目录。上传 最新版 FastAdmin 开源框架完整包 并解压到站点的当前目录,比如:/www/wwwroot/fastadmin。     点击新建创建一个fastadmin的目录,点击上传,将上面下载的完整包传到fastadmin目录下。接下来对上传的文件进行解压缩,通过CloudShell软件进入/www/wwwroot/fastadmin目录下,使用unzip命令对上传的包进行解压缩。解压缩成功后我们在文件这里就可以看到所有的文件了。 第三步:配置并安装进入站点配置,设置站点的运行目录为 /public(注意:这是 FastAdmin 后台框架的运行目录,必须设置为 /public,否则无法正常运行),并设置站点的伪静态为 thinkphp 规则。    点击网站- 列表中的设置 - 网站目录,进行到运行目录的配置。这里选择php版本。访问你的站点域名进行安装,比如:https://www.demo.com/install.php安装完成后即可进入后台,比如:http://域名/LFsSCXfwPn.php (奇怪的文件名.php 是后台安全入口)第一次进入会报错,我们手动删除一下禁用函数:再次访问可以看到下面页面,输入账号密码进入后台至此 FastAdmin 后台框架已经安装完成。注意事项:如果你重复执行install.php,数据库中的 FastAdmin 框架基础表和用户表将被重置,请提前做好全站备份。 我正在参加【案例共创】第2期 构建开发场景最佳实践/体验评测,创作案例文章cid:link_0
  • [热门活动] 【案例共创】ESC基于RAGFlow和DeepSeek构建本地问答知识库
    【案例共创】ESC基于RAGFlow和DeepSeek构建本地问答知识库一、案例介绍在人工智能技术飞速发展的当下,企业知识库智能化正成为提升运营效率的核心路径。DeepSeek 几乎家喻户晓,而 RAGFlow 是一个基于深入文档理解的开源RAG(检索增强生成)引擎。当与LLMs集成时,它能够提供真实的问题回答功能,并由来自各种复杂格式数据的有理有据的引用支持。本次我们基于ESC使用 Docker 部署RAGFlow,并使用 ollama 部署 DeepSeek R1 模型和 bge-m3 嵌入模型,体验 RAGFlow 的知识库、对话、Agent等功能,通过RAGFlow的智能文档解析与DeepSeek大语言模型的精准推理能力,构建具备多源异构数据处理、语义深度理解及动态知识更新特征的问答知识库、Agent。二、案例用时本案例总时长预计120分钟。三、案例流程 说明:通过ECS中安装dokcer部署ragflow通过ECS中docker部署ollama来运行deepseek通过配置ragflow来调用deepseek-r1模型能力用过通过公网ip访问ECS从而体验ragflow+deepseek四、资源总览云资源消耗/时时长ECS(含公网IP、磁盘等)0.9885120min合计:1.977元五、实践步骤0. 购买ECS配置如下:bash计费模式: 按需计费区域: 西南-贵阳一可用区: 随机分配CPU架构:x86计算实例规格:通用计算增强型 | x1e.4u.16g | 4vCPUs | 16GiB镜像: 公共镜像-Ubuntu 24.04 server 64bit(10GiB)磁盘: 通用型SSD 50G弹性公网IP:现在购买-全动态BGP-按带宽计算-5Mbit/s-随实例释放云服务器名称:ecs-ragflow密码:RagFlow@123使用时长:设定删除时间为 8 小时之后购买数量: 1清单链接:https://www.huaweicloud.com/pricing/calculator.html?shareListId=267c3c60fc6411efa933bd915e6892f51、安装 RAGFlow1.1 安装 Docker CE 和 Docker Compose打开终端,新建 install-docker.sh:bash# 查看系统uname -alsb_release -a# 准备安装 dockercd ~pwdmkdir RAGFlowcd RAGFlowvi install-docker.sh写入以下脚本到 install-docker.shbash#!/bin/bash# 定义日志文件路径LOGFILE="/var/docker-install.log"# 将标准输出和错误输出重定向到日志文件,同时显示到终端exec > >(tee -a "$LOGFILE") 2>&1# 设置DEBUG模式下的时间戳输出格式trap '{ set +x; } 2>/dev/null; echo -n "[$(date -Is)] "; set -x' DEBUG# 下载并安装 docker CE 和 docker composeecho "开始安装 Docker CE 和 Docker Compose..."# 添加Docker官方GPG密钥curl -fsSL https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -echo "已添加 Docker GPG 密钥"# 添加Docker软件源echo "" | sudo add-apt-repository "deb [arch=amd64] https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"echo "已添加 Docker 软件源"# 更新软件包列表echo "正在更新软件包列表..."echo "y" | sudo apt-get update# 安装Docker CE和Docker Composeecho "正在安装 Docker CE 和 Docker Compose..."echo "y" | sudo apt-get install docker-ce docker-composeecho "Docker 安装完成"# 配置docker镜像仓库为华为云镜像echo "正在配置华为云镜像源..."sudo echo '{"registry-mirrors": ["https://b4a1f63a156e435f9aeb797bdf515250.mirror.swr.myhuaweicloud.com"]}' >/etc/docker/daemon.json# 重启docker服务使配置生效echo "正在重启 Docker 服务..."sudo systemctl restart dockerecho "Docker 配置完成"接着运行 docker 安装脚本:bashsudo bash ./install-docker.sh我们查看版本发现 docker-compse 版本有点低,可能会影响后续的安装,因此尝试升级 docker-composebashdocker -vdocker-compse -v升级 docker-compose:bash# 先看看 docker-compose 的路径whereis docker-compose# 备份一下sudo mv /usr/bin/docker-compose /usr/bin/docker-compose.bak# 下载对应系统的 docker-composewget https://github.com/docker/compose/releases/download/v2.33.1/docker-compose-linux-x86_64 -O docker-compose# 如果速度慢可以尝试使用加速源,如 https://hub.gitmirror.com/、https://github.moeyy.xyz/、https://ghfast.top/# wget https://hub.gitmirror.com/https://github.com/docker/compose/releases/download/v2.33.1/docker-compose-linux-x86_64 -O docker-compose# 也可以自行去 github 下载: https://github.com/docker/compose/releases# 替换 docker-composesudo cp ./docker-compose /usr/bin/docker-compose# 加权限sudo chmod +x /usr/bin/docker-compose# 验证docker-compose -v1.2 安装 RAGFlow先设置一下最大虚拟内存。vm.max_map_count该值设置进程可能拥有的内存映射区域的最大数量。它的默认值是65530。虽然大多数应用程序需要的映射少于一千个,但减小此值可能会导致异常行为,并且当进程达到限制时,系统将抛出内存不足错误。RAGFlow v0.17.0使用Elasticsearch或Infinity进行多次调用。正确设置vm.max_map_count的值对于Elasticsearch组件的正常运行至关重要。bash# 检查vm.max_map_count的值sysctl vm.max_map_count# 如果小于 262144 则至少设置为 262144sudo sysctl -w vm.max_map_count=262144接着安装 RAGFlowbash# 下载源码git clone https://github.com/infiniflow/ragflow.git# 如果下载比较慢请尝试使用镜像加速,如:# git clone https://ghfast.top/https://github.com/infiniflow/ragflow.gitcd ragflow/docker# 切换最新稳定分支 (截止 20205-03-08 为 0.17.0)git checkout -f v0.17.0git branch我们可以修改 .env 启用全量版本(非必须,可无须修改直接使用 slim 版本),并设置 docker 镜像源:bashsudo echo '{"registry-mirrors": ["https://b4a1f63a156e435f9aeb797bdf515250.mirror.swr.myhuaweicloud.com"]}' >/etc/docker/daemon.jsonRAGFlow镜像标签镜像大小(GB)是否包含嵌入模型和Python包是否稳定v0.17.0≈9✔️稳定版本v0.17.0-slim≈2❌稳定版本nightly≈9✔️nightly 构建不稳定nightly-slim≈2❌nightly 构建不稳定接着通过 docker-compose 启动 RAGFlow,全量的镜像约 9G,安装稍微慢些,需要耐心等待大约10分钟bash# 拉取镜像并启动(默认不包含 embedding 模型, 可以修改 .env 配置,选为华为云镜像v0.17.0 )# vi .env 找到对应位置进行修改docker-compose -f docker-compose.yml up -d# 如果minio拉取不顺,请尝试切换镜像源,需修改 docker-compose-base.yml 的:quay.io 为 quay.m.daocloud.io# 查看日志docker-compose logs -f ragflow-server# 查看端口情况netstat -nptl2. 访问本地 RAGFlow并配置模型RAGFlow是一个RAG引擎,需要与大模型服务一起搭配使用,实现本地、无幻觉的问答功能。RAGFlow支持大多数主流LLMs。2.1 访问本地RAGFlow 并注册账号登录如本次案例中 ecs-ragflow 的 ip 为1.95.184.111 则访问: http://1.95.184.111/login ,注册账号即可使用 RAGFlow。登录之后的主界面如下:⚠️本地模型为选配,同样可以使用其他大模型API服务,比如 Mass、硅基流动等2.2 通过 Docker 安装 ollama首先我们设置docker镜像源,重启docker之后,通过docker拉取ollama镜像并运行bash# 设置 docker 镜像源sudo echo '{"registry-mirrors": ["https://b4a1f63a156e435f9aeb797bdf515250.mirror.swr.myhuaweicloud.com"]}' >/etc/docker/daemon.jsonsudo systemctl restart dockersudo docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama2.3 安装 DeepSeek-R1 模型和 bge-m3 鉴于网络下载速度比较慢,我们拉取相对较小的 deepseek-r1:1.5b 和嵌入模型 bge-m3 (预计25分钟,具体看网络状况)bash# 拉取 deepseek-r1:1.5bsudo docker exec ollama ollama pull deepseek-r1:1.5b# 拉取 bge-m3sudo docker exec ollama ollama pull bge-m32.4 配置模型虽然RAGFlow和Ollama都是跑在同一台机器上,但由于分别使用了docker-compose和docker来部署,可能会导致网络不通的情况,那我们可以通过暴露 11434 ollama的端口来提高大模型服务。于是,我们在模型提供商选择Ollam之后分别配置了嵌入模型 bge-m3 和聊天模型deepseek-r1:1.5b。接着并在设置--系统模型设置中配置好聊天模型和嵌入模型。3. 简单使用接下来,我们简单体验一下RAGFlow 提供的功能,分别是知识库、聊天、搜索、Agent。3.1 知识库功能体验点击知识库,我们创建了一个名为ModelArts助手的知识库,传入了几个pdf文件作为本地知识库。在RAGFlow中知识库被称为数据集,我们可以上次多个文件作为数据集,并通过不通的解析方法将文档进行处理如切片、Q/A等。解析成功的文档可以在后续功能中作为知识库引入。3.2 聊天功能体验我们创建了ModelArts助手的助理,可以对助理进行配置如基本信息、关键词分析、模型参数设置等,并选取知识库作为回答语料。我们一个“如何快速入门”的简单问题开始,AI助理根据挂载的知识给了相关的回答。3.3 搜索功能体验在RAGFlow中,还有搜索功能,类似于传统的搜索引擎给出结果并添加了智能回答和思维导图。3.4 Agent功能体验最后我们来体验Agent功能,这里我们使用的是预置的 text2sql。Agent 会提供一个工作流编排界面,并提供运行测试功能,我们发现Agent也是可以作为单独的页面嵌入到其他网站,简单地要Agent给出“用户转化率”,它基于 deepseek-r1 模型,因此也有思考能力,最终它生成了一段完整的 SQL 语句。至此,案例实践就结束了,记得释放资源哦!记得释放资源哦!记得释放资源哦!我正在参加【案例共创】第2期 构建开发场景最佳实践/体验评测,创作案例文章cid:link_0
  • [案例共创] 【案例共创】华为云ModelArts赋能加密金融:DeepSeek构建具备策略自适应进化能力的AI分析机器人
    华为云ModelArts赋能加密金融:DeepSeek构建具备策略自适应进化能力的AI分析机器人一、项目概述1.1 项目背景加密金融市场以其高波动性和24/7不间断交易特性著称,这给投资者带来了前所未有的挑战。在这个信息爆炸的时代,人工分析已经难以跟上市场节奏,而传统的自动化交易系统又缺乏足够的智能性和适应性。华为云ModelArts是华为云提供的一站式AI开发平台,提供了DeepSeek大模型,结合ECS高性能计算资源,为构建具备策略自适应进化能力的AI分析机器人提供了强大支持,可以实现从信号监控、智能分析到自动交易的全流程智能化。1.2 案例流程 图1:案例实施流程1.3 资源概览本案例(演示)预计花费总计0元/月(按需付费可能有所不同),本地开发、调试都是免费的,还可以免费领取Token。资源名称规格单价(元/月)数量ModelArtsDeepseekR1按需计费1ECS4核、4G、5M按需计费11.4 适用对象AI分析机器人的设计旨在满足不同类型用户的需求,主要适用于以下群体:用户类型特点描述适用场景核心价值个人开发者具备编程基础,希望开发AI交易系统的开发者系统二次开发、功能定制、API集成提供完整的开发文档和API接口,支持自定义策略和功能扩展高校学生对AI和加密金融感兴趣的学生群体学习研究、毕业设计、创新创业提供详细的技术文档和示例代码,便于学习和实践加密金融爱好者对加密市场感兴趣,希望了解AI分析技术的爱好者市场研究、技术探索、投资参考提供直观的分析报告和可视化界面,降低使用门槛市场研究机构需要大量数据支持研究的分析机构市场趋势研究、Token生命周期分析、风险评估提供大量结构化数据和分析结果,支持深度研究和报告生成二、技术挑战与解决方案2.1 加密金融市场挑战据最新统计,加密金融市场每日交易量超过1000亿美元,价格波动率是传统金融市场的5-10倍。在这样的环境下,投资者面临着几个关键痛点:信息过载:每天产生的市场信号、社交媒体讨论和新闻报道数以万计,人工无法全面处理决策延迟:从发现机会到执行交易的时间窗口极短,人工决策往往错失良机情绪干扰:人类交易者容易受到恐惧和贪婪情绪影响,导致非理性决策策略固化:传统交易系统策略一旦设定很少调整,无法适应市场变化图2:加密金融市场的主要痛点与挑战2.2 AI分析机器人实现构建一个真正智能的交易分析系统面临着多重技术挑战:多源异构数据处理:需要同时处理结构化交易数据和非结构化社交媒体信息实时性要求:系统需要在毫秒级别完成信号接收、分析和决策策略进化机制:如何让系统能够从历史交易中学习并自我优化风险控制:在追求收益的同时,如何有效控制风险面对这些挑战,我们需要一个集成了先进AI技术、具备自适应进化能力的智能交易系统。系统的核心功能包括:多模态信息分析:同时处理结构化交易数据和非结构化文本信息风险评估:对每个交易机会进行1-10分的风险评分收益预测:基于历史数据预测可能的收益范围交易决策生成:综合各项指标,生成明确的交易建议以下流程图展示了AI分析机器人的核心工作流程,从信号监听到交易执行的完整闭环: 图3:AI分析机器人系统逻辑流程图系统逻辑流程主要包括以下几个环节:信号监听与解析:持续监听TG频道,捕获并解析交易信号AI智能分析:利用ModelArts对信号进行多维度分析风险评估:对潜在交易机会进行风险评分和收益预测交易决策生成:综合分析结果,生成明确的交易建议交易执行:根据决策自动执行交易操作结果记录:记录交易过程和结果策略进化:基于历史数据,优化决策模型系统设计理念:"让AI的客观分析弥补人类决策的情绪偏差,让人类的经验智慧指导AI的进化方向"三、策略自适应进化机制3.1 交易策略进化系统最大的创新点在于其策略自适应进化机制。传统交易系统往往采用固定的决策规则,而我们的系统能够从历史交易中不断学习,自动调整决策阈值和策略参数。策略进化机制的工作流程如下:历史数据收集:系统记录每次交易的详细信息,包括决策依据和实际结果特征提取:从历史交易中提取关键特征,如社区情绪、风险评级、资金流动等模式识别:识别成功交易和失败交易的共同特征策略优化:基于分析结果,自动调整决策阈值和权重效果验证:在新交易中应用优化后的策略,并持续监控效果 // 策略自适应进化核心代码 async evolveStrategy() { try { logger.info('------开始执行策略自适应进化分析...'); // 加载历史交易数据 const tradeLogFile = path.join(__dirname, '../logs/trades.json'); let tradeHistory = []; if (fs.existsSync(tradeLogFile)) { const fileContent = fs.readFileSync(tradeLogFile, 'utf8'); tradeHistory = JSON.parse(fileContent); } // 提取关键特征 const features = tradeHistory.map(trade => { // 从分析结果中提取关键信息 const analysis = trade.analysisResult.toLowerCase(); return { tokenSymbol: trade.tokenSymbol, timestamp: trade.timestamp, // 社区情绪和市场动态 communityMood: analysis.includes('社区情绪积极') || analysis.includes('社区反应良好') ? '积极' : analysis.includes('社区情绪消极') || analysis.includes('社区反应不佳') ? '消极' : '中性', // 买入决策相关 decision: analysis.includes('建议购买') ? '购买' : '放弃', // 风险评估 riskLevel: (analysis.match(/风险评估:(\d+)/) || [])[1] || '未知', // 资金流动相关 hasNegativeNetInflow: analysis.includes('净流入为负') || analysis.includes('资金流出'), hasHighVolatility: analysis.includes('高波动性') || analysis.includes('波动性高') || analysis.includes('极高的波动性'), hasDeveloperSellAll: analysis.includes('sell all') || analysis.includes('开发者卖出'), hasLowLiquidity: analysis.includes('流动性低') || analysis.includes('流动性较低'), hasKOLBuying: analysis.includes('kol') && analysis.includes('买入'), // 交易计划相关 hasProfitTarget: analysis.includes('止盈点') || analysis.includes('止盈价格'), hasStopLoss: analysis.includes('止损点') || analysis.includes('止损价格'), hasBatchSelling: analysis.includes('分批卖出') || analysis.includes('分批出售'), // 交易结果(如果有) tradingResult: trade.tradingResult || '未知', // 原始数据 buyAmount: trade.buyAmount, tokenAddress: trade.tokenAddress }; }); // 构建分析提示词 const historicalPrompt = ` 请分析以下历史交易数据,找出决策模式和改进方向: ${JSON.stringify(features)} 请提供以下分析: 1. 失败交易的3个主要原因 2. 成功交易的3个关键特征 3. 改进交易策略的3个建议 4. 是否存在可能错过的潜在机会(例如,拒绝了但市场表现良好的代币) 5. 如何调整决策阈值以提高成功率 `; // 调用华为云ModelArts进行分析 const systemContent = '你是一个专业的加密金融数据分析师,擅长从历史数据中总结经验并提供具体的改进建议。'; const analysisResult = await aiService.callDeepseekAPI(historicalPrompt, systemContent); // 保存分析结果并应用到未来决策中 // ... return { success: true, result: analysisResult }; } catch (error) { logger.error('分析历史交易数据时出错:', error); return { success: false, message: `分析出错: ${error.message}` }; } } 通过这种自适应进化机制,系统能够不断从自身的交易历史中学习,逐步提高决策准确性。这种"自我进化"能力是传统交易系统所不具备的,也是本项目的核心创新点。 3.2 交易执行系统在生成交易决策后,会自动执行交易通知并实施多级风险控制。整个过程无需人工干预,大大提高了交易效率。 // 执行购买订单核心代码 async executeBuyOrder(message, tokenInfo, analysisResult) { try { logger.info('准备执行购买订单...'); // 默认购买金额(SOL) let buyAmount = process.env.DEFAULT_BUY_AMOUNT || '0.01'; // 构建购买命令 const buyCommand = `/buy ${tokenInfo.address} ${buyAmount}`; logger.info(`准备执行购买命令: ${buyCommand}`); // 发送购买命令到邮件里...交易通知 logger.info(`已发送购买命令到 ${tradingBot}`); // 记录交易信息 const tradeInfo = { timestamp: new Date().toISOString(), tokenAddress: tokenInfo.address, tokenName: tokenInfo.name, tokenSymbol: tokenInfo.symbol, buyAmount: buyAmount, oldMessage: message, analysisResult: analysisResult }; // 保存交易记录到文件 this.saveTradeRecord(tradeInfo); return true; } catch (error) { logger.error(`执行购买订单时出错: ${error.message}`); return false; } } 系统的风险控制机制包括:交易金额限制:系统默认设置较小的交易金额,降低单笔交易风险止损机制:每笔交易都设置明确的止损点,限制最大损失分批卖出策略:采用分批卖出策略,锁定部分利润交易记录审计:所有交易都有详细记录,便于后续分析和优化 四、华为云平台应用4.1 ModelArts平台介绍华为云ModelArts是本系统的核心AI能力提供者。ModelArts提供了从数据处理、模型训练到推理服务的全流程AI开发平台,极大地简化了AI应用的开发和部署过程。 图5:华为云ModelArts在AI分析机器人中的应用决策引擎的核心功能包括:多模态信息分析:同时处理结构化交易数据和非结构化文本信息风险评估:对每个交易机会进行1-10分的风险评分收益预测:基于历史数据预测可能的收益范围交易决策生成:综合各项指标,生成明确的交易建议 // AI服务类核心代码 async analyzeTrading(message, options = {}) { const modelName = options.model || this.defaultModel; const buyAmount = options.buyAmount || process.env.DEFAULT_BUY_AMOUNT || '0.01'; try { logger.info(`正在使用 ${modelName} 分析交易信息...`); // 构建提示词 const prompt = ` 你是一个顶级加密金融交易专家,帮我深度分析: 1、我可以接受中级风险投资。 2、报告里增加情绪分析、趋势预测和风险评估(1-10分,10分最高风险)。 3、搜索 X 或网络上的最新动态和社区情绪,给我更全面的信息。 4、综合交易信息与最新动态和社区情绪信息,判断是否买入,给出具体买入理由。 5、如果建议买入,假设我投入 ${buyAmount} SOL,必须明确给出完整的交易计划,包括买入价格、止损价格、止盈价格和分批卖出计划,交易机器人会按照你给的交易方案执行。 ... `; // 调用华为云ModelArts API let aiResponse; if (modelName === 'deepseek') { aiResponse = await this.callDeepseekAPI(prompt); } else if (modelName === 'openai') { aiResponse = await this.callOpenAIAPI(prompt); } else { throw new Error(`不支持的模型: ${modelName}`); } // 分析响应内容,判断是否建议购买 const shouldBuy = aiResponse.toLowerCase().includes('报告结果:建议购买'); // 提取理由 let reason = aiResponse; if (reason.length > 200) { reason = reason.substring(0, 200) + '...'; } return { shouldBuy, reason, fullAnalysis: aiResponse }; } catch (error) { logger.error(`${modelName} 分析失败: ${error.message}`); throw error; } } 4.2 ECS服务介绍系统的稳定运行离不开可靠的基础设施支持。华为云ECS(弹性云服务器)为AI分析机器人提供了高性能、高可用的计算环境。图6:基于华为云ECS的系统部署架构华为云ECS在本项目中的关键价值:高性能计算:提供强大的CPU和内存资源,确保AI模型推理和数据处理的高效执行弹性扩展:根据交易量和分析需求自动调整资源配置,优化成本高可用性:多可用区部署,确保系统7*24小时稳定运行安全防护:提供多层次安全防护,保障交易数据安全五、系统实施效果与价值5.1 性能指标与改进效果相比传统交易分析方法,AI分析机器人在多个关键指标上都取得了显著提升。主要性能指标:指标传统方法AI分析机器人提升幅度信号识别准确率65%92%+27%决策响应时间30-60秒3-5秒-90%风险评估准确性70%89%+19%策略优化周期人工周/月级自动日级提速30倍多源数据处理能力单一数据源多源异构数据能力扩展5.2 业务价值与实际案例AI分析机器人在实际应用中创造了显著的业务价值,以下是一个真实案例分析:案例:Solana生态新代币分析与交易2025年3月,系统监测到一个KOL购买信号。传统分析可能仅关注价格和交易量,但AI分析机器人通过多维度分析,发现该Token具有以下特点:开发者持续增加流动性(而非减少)KOL净流入为正且持续增长社区情绪积极且活跃度高安全指标全部通过(NoMint、Blacklist、Burnt)系统自动执行了购买决策,并设置了分批卖出策略。最终系统成功锁定了较大的收益。通过策略自适应进化机制,系统能够从每次交易中学习,不断优化决策模型。以下是系统自动生成的一份策略优化报告摘要: 策略优化报告(自动生成) 时间:2025-03-6 1. 失败交易的3个主要原因: - 开发者状态为"Sell All"的Token,失败率达85% - 流动性低于50K USD的Token,失败率达78% - KOL净流入为负的Token,失败率达72% 2. 成功交易的3个关键特征: - 社区情绪积极且持有者数量>1000 - 开发者持续增加流动性 - 价格6小时变化率>15%且交易量稳定增长 3. 改进建议: - 提高"开发者状态"在决策权重中的比例 - 对流动性低于50K USD的Token设置更严格的购买条件 - 增加社区活跃度分析维度 系统已自动应用以上优化建议到决策模型中。 六、基础环境及资源准备要成功部署和运行AI分析机器人,需要准备以下基础环境和资源:部署文档① 需要准备好华为云账号,并开通ModelArts服务,拿到ModelArts的API KEY、DEEPSEEK_API_URL,这时就有AI分析服务了;② 需要准备好TG的账号,并进群组 [@gmgnsignals],这时就有信号源了;③ 下载示例代码,将ModelArts的API KEY,还有DEEPSEEK_API_URL 粘贴到.env文件中,启动AI分析服务,这时AI分析机器人就可以正常工作了;④ 首次启动TG需要输入账号、密码、验证码登录,登录后 session 保存在本地,以后免登录。⑤ 本工程核心文件是index.js,工程难度并不复杂,工程代码1000行,适合初学者学习。⑥ 如需测试交易功能,需在TG关注机器人[@US_GMGNBOT],点击 /start 激活。只为学习使用,不建议在真实交易中使用,风险自负。6.1 硬件资源需求资源类型最低配置推荐配置用途说明华为云ECSc6.large (2vCPUs, 4GB内存)c6.2xlarge (4vCPUs, 4GB内存)运行核心服务和数据处理存储空间50GB高IO云硬盘存储交易数据和模型文件网络带宽5Mbps确保与API的稳定连接ModelArtsDeepseekR1DeepseekR1模型调用、训练和推理6.2 软件环境配置# 操作系统环境- 操作系统:Ubuntu 20.04 LTS- Node.js:v16.x 或更高版本- npm:v8.x 或更高版本# 核心依赖包- axios: ^1.8.1 (HTTP请求)- dayjs: ^1.11.13 (日期处理)- dotenv: ^16.3.1 (环境变量)- openai: ^4.86.1 (AI接口)- telegraf: ^4.15.3 (Bot框架)- winston: ^3.11.0 (日志记录)- ws: ^8.14.2 (WebSocket)# 华为云服务配置- ModelArts服务:开通并配置访问权限- OBS对象存储:用于存储模型和数据- IAM身份认证:配置适当的访问权限 6.3 核心配置系统运行需要核心配置:华为云账户:用于访问ModelArts和其他云服务TG账户:用于监听消息、发起交易监听信号群组:[@gmgnsignals],由gmgn.ai提供机器人(可选):[@US_GMGNBOT],点击 /start 激活安全提示:所有API密钥应妥善保存在环境变量或安全的密钥管理服务中,避免硬编码在代码中。建议使用华为云KMS(密钥管理服务)进行统一管理。6.4 环境配置详解以下是创建华为云ECS实例的详细操作指南:登录华为云控制台:cid:link_1在导航菜单中选择"计算 > 弹性云服务器 ECS"点击"购买云服务器"按钮按照以下配置进行选择:计费模式:按需计费区域:根据您所在位置选择最近的区域可用区:可用区1规格:通用计算增强型 c6.2xlarge (4vCPUs, 4GB内存)镜像:公共镜像 > Ubuntu 20.04 LTS系统盘:高IO 100GB网络:默认VPC,或创建新的VPC安全组:开放22、80、443端口设置登录凭证(密码或密钥对)确认配置并完成购买图7:华为云ECS实例创建步骤6.5 AI服务配置以下是配置ModelArts访问权限的详细步骤:登录华为云控制台,进入ModelArts服务在左侧导航栏选择"设置 > 全局配置"创建API密钥:点击"创建 API Key"按钮设置API密钥描述点击"确定"创建API密钥复制并安全保存API密钥(只显示一次) 图8:ModelArts API密钥设置七、系统实际运行与测试7.1 启动AI分析服务在本地配置 Node.js 开发环境:Node.js 环境搭建 # 1. 安装 Node.js - 访问 https://nodejs.org/ - 下载并安装 LTS 版本(推荐 v16.x 或更高版本) # 2. 验证安装 node -v npm -v # 3. 克隆项目代码 git clone https://github.com/linapex/AiAnalysisBot.git cd AiAnalysisBot # 4. 安装依赖包 npm install # 5. 配置环境变量 cp .env.example .env # 编辑 .env 文件,填入必要的配置信息: # - DEEPSEEK_API_KEY=你的华为云ModelArts API密钥 # - DEEPSEEK_API_URL=你的Deepseek API地址 # 6. 启动开发服务器 node src/index.js # 7. 后台运行(生产环境) npm install -g pm2 pm2 start src/index.js --name tudog 图9:TG监听服务运行截图 图10:AI分析服务运行截图 7.2 系统效果验证验证系统运行效果:检查logs目录下,AI分析结果和交易决策观察的如开启机器人,决策成功后是否给机器人发送 /buy 指令注意:程序只用于分析决策,不建议用于交易,请自行评估风险 八、未来展望与规划8.1 技术迭代方向深度强化学习应用:引入深度强化学习技术,使系统能够通过与市场环境的交互不断优化交易策略大模型微调优化:基于华为云ModelArts平台,对大模型进行金融领域专业知识微调,提升分析精度多链生态支持:扩展对更多区块链生态的支持,包括Ethereum Layer2、Polkadot等知识图谱整合:构建加密金融领域知识图谱,增强系统的推理能力和决策解释性 结语华为云ModelArts和ECS为构建具备策略自适应进化能力的AI分析机器人提供了强大支持。通过多模态分析、自适应进化和实时决策能力,系统有效解决了加密金融市场中的信息过载、决策延迟和策略固化等痛点问题。随着AI技术的不断发展和华为云服务的持续优化,我们有理由相信,这类智能交易系统将在金融科技领域发挥越来越重要的作用,为投资者创造更大的价值。需要特别提醒的是,加密金融市场具有高风险特性,投资者在使用任何交易系统时都应审慎评估风险,合理配置资金比例,避免过度依赖自动化系统。 正在参加【案例共创】第3期 华为云ModelArts赋能加密金融:构建具备策略自适应进化能力的AI分析机器人 https://bbs.huaweicloud.com/forum/thread-0218176004967264062-1-1.html
  • [问题求助] ECS支持虚拟机整机快照,并从整机快照回滚
    ECS支持虚拟机整机快照,并从整机快照回滚吗?
  • [案例共创] 【获奖名单已公布】【案例共创】第2期 构建开发场景最佳实践/体验评测,创作案例文章
    第二期案例共创活动获奖名单如下:代金券将发放到填写问卷的华为云账号中,实物礼品地址如有修改可再次填写问卷修改,截止至4月6日未变动收货信息将按预留信息发放礼品。主题作者奖项周周的奇妙编程二等奖小草飞上天二等奖小鲜二等奖云聪明三等奖胡琦三等奖鸢尾离夏参与奖 了解案例共创活动为了让更多开发者能够更轻松、更高效地理解和使用我们的文档,进而提升云产品的整体使用体验,我们致力于进一步优化和完善官方产品文档。在此过程中,我们诚挚地邀请广大开发者积极参与,通过亲身体验云产品,编写实践案例或体验评测。一旦您的案例经过专家评审团的认可与采纳,将有以下三点:优质案例将被正式收录至官方案例库,供广大开发者学习。优质案例将选送到在华为云站内外10+个技术社区推荐,给予百万级流量资源。以上案例我们都将注明原作者名字,实现与开发者共创官方文档。参与者不仅有机会获得每月活动礼品,还有可能被评为年度内容贡献官,享受更多荣誉和奖励,获得更多合作机会。我们期待着与您一起,共同打造更加优质、高效的云服务体验。 参与投稿方式——先填问卷等领取到代金券后再操作体验写文章第1步:(已注册并实名可跳过)注册华为云账号 + 实名认证(只有实名认证完成后才能申请代金券),点击这里第2步:(已设置可跳过)登录后设置社区昵称,点我设置第3步:添加“社区小助手”微信号bbs_huaweicloud,备注“案例共创”+社区昵称,进活动交流群,活动相关信息会同步到交流群中第4步:点击填写问卷,提供账号及礼品发放地址等信息,根据问卷填写情况体验代金券每周发放一次,论坛小助手会将100元代金券领取链接发放到社区私信中领取体验代金券后在活动期内没有输出案例文章的开发者,后续案例共创活动将不发放体验代金券。第5步:领取代金券后,开启您的云端体验,分享实践案例,点我写帖子版块选择“社区活动”分类选择“案例共创”帖子标题在前面添加【案例共创】文末添加活动名称+链接地址,如“我正在参加【案例共创】第2期 构建开发场景最佳实践/体验评测,创作案例文章cid:link_3”第6步:将发布的案例帖子链接回复反馈到该活动帖评论区【如您在体验中有任何产品问题,欢迎在论坛发布问题求助帖(帖子分类选择问题求助)咨询产品专家,如发现任何体验不友好、产品Bug、文档页面错漏等情况,欢迎通过云声平台反馈给我们,还有机会领取云声专属礼品!】 本期投稿内容基于华为开发者空间(华为提供的一站式开发环境)、华为云ECS(鲲鹏实例KC1,KC2),Huawei Cloud Euler OS和开源的第三方组件(nginx、LNMP、WordPress等)构建开发场景最佳实践、体验评测具体文章主题可以参考下方给出的方向,也可以自行发散拟定,结合自己的实践分享其他案例应用(专家团酌情判定更易得高分~)主题:1)搭建网站(博客,论坛、电商、公司个人主页等)2)搭建应用(APP后台、微信小程序后台、FTP站点、BI看板等)3)部署其他企业经常用到的开源应用软件场景参考:ECS最佳实践输出文章样式参考: 【案例共创】在开发者空间使用 MateChat 和Mass快速开发智能对话界面 一篇完整的案例文章包含哪些内容点?1)案例场景介绍、用到的华为云产品或者开源框架简述。2)案例实际操作描述(文字描述+截图+代码)。3)案例实操需要完整体现,读者可根据案例上手并体验。 相关华为云产品华为云ECS(鲲鹏实例KC1,KC2),华为推出的基于QingTian架构的自研极简虚拟化云服务。鲲鹏实例规格介绍。Huawei Cloud Euler OS,是华为云提供的基于开源社区openEuler构建的linux操作系统,提供云原生、高性能、安全稳定的执行环境来开发和运行应用程序,助力企业客户快速上云及开发者创新。可以参考使用指导 华为开发者空间,是为全球开发者打造的专属开发者空间,预置昇腾、鸿蒙、鲲鹏、GaussDB、欧拉等各项华为根技术的开发工具资源。致力于为每位开发者提供一台云主机、一套开发工具和云上存储空间,点击链接,领取云主机,体验云上应用开发。领取链接注意事项:鲲鹏实例兼容的开源软件包,请参考cid:link_10鲲鹏原生开发工具DevKit,cid:link_13 活动流程(全年征集,每月一期评选)投稿时间:2025年2月14日-3月14日联合评审:2025年3月15日-3月25日奖项公示:2025年3月26日获奖信息收集:2025年3月26日--4月6日奖品发放:获奖信息收集结束5个工作日内寄出 第1期主题案例长期征集,每月评选【案例共创】第1期 书写云产品应用构建开发最佳实践/评测,共创官方文档cid:link_4 评奖规则届时将有华为技术专家团参与评审,主要按照以下维度评分:文章完整性 30%;案例创新性 20%;案例实用性 20%;可借鉴性 20%;代码规范度 10% 奖项设置礼品和代金券会发放到问卷中填写的账号及收货地址中(活动参与方式第4步),礼包类礼品均为实物礼品。如某项奖品库存不足,将根据实际库存更换为同等价值的其他奖品,获奖者不同意此规则视为放弃奖品。 投稿规则1、选题方向需为基于华为云产品的开发案例分享、使用评测、上云技术实践、云上开发项目分享等2、文章要求发布在华为云开发者社区论坛,允许搬运自己发在其他平台的文章,但仅支持搬运自己的原创文章,搬运他人的文章当抄袭处理。3、投稿内容必须保证内容原创性,实践过程真实、内容代码化,如发现投稿内容为转载、复制、抄袭、恶意拼接、灌水等侵权作弊行为,均视为无效并取消参与资格4、投稿内容字数不少于500字(不含代码),要求思路清晰、文字顺通、图片清晰、代码规范,不得有打广告、加二维码引流和凑字数行为。5、投稿内容一经采用,将会被纳入官方产品文档,文章作者拥有著作权,华为云拥有使用权、修改权等。6、将发表过的文章删除后重新发表的文章,不计入发文数量,以文章评选时在线显示数量为准。7、活动期间,作者如果有用脚本刷阅读量、注册僵尸号刷赞等严重违反社区规范的行为,直接取消所有获奖资格。 重要说明1、审核通过被采纳的文章作者,将在下月初进行获奖名单公布和奖励发放,届时会有站内信通知,请及时关注并填写快递信息,过期未填写视为放弃该期奖品。2、对于持续输出高质量内容的作者,每年度末还有年度贡献大礼包送上。3、代金券及周边礼物发放对象为:已完成实名认证的华为云用户。特别声明:华为云有权根据自身运营安排,自主决定和调整本活动的具体规则,具体活动规则以活动页公布规则为准。相关规则一经公布即产生效力,您应当予以遵守。如您不认同以上规则,请谨慎参与本次活动。
  • [弹性云服务器ECS] ECS辅助弹性网卡的网络通信原理介绍
    想了解ECS辅助弹性网卡的网络通信原理,感谢
  • 老用户 包年的活动有吗?
    老用户 包年的活动有吗?像阿里云是99/Y这种。
  • [常见问题汇总帖] 安装MongoDB问题,配置清华镜像源后安装,提示如下,请问如何破解
    yum install mongodb-org Last metadata expiration check: 0:00:04 ago on Mon 16 Dec 2024 03:20:47 PM CST. Error:   Problem: package mongodb-org-7.0.15-1.el9.x86_64 requires mongodb-org-database, but none of the providers can be installed   - package mongodb-org-database-7.0.0-1.el9.x86_64 requires mongodb-org-server, but none of the providers can be installed   - package mongodb-org-database-7.0.1-1.el9.x86_64 requires mongodb-org-server, but none of the providers can be installed   - package mongodb-org-database-7.0.11-1.el9.x86_64 requires mongodb-org-server, but none of the providers can be installed   - package mongodb-org-database-7.0.12-1.el9.x86_64 requires mongodb-org-server, but none of the providers can be installed   - package mongodb-org-database-7.0.14-1.el9.x86_64 requires mongodb-org-server, but none of the providers can be installed   - package mongodb-org-database-7.0.15-1.el9.x86_64 requires mongodb-org-server, but none of the providers can be installed   - package mongodb-org-database-7.0.2-1.el9.x86_64 requires mongodb-org-server, but none of the providers can be installed   - package mongodb-org-database-7.0.3-1.el9.x86_64 requires mongodb-org-server, but none of the providers can be installed   - package mongodb-org-database-7.0.4-1.el9.x86_64 requires mongodb-org-server, but none of the providers can be installed   - package mongodb-org-database-7.0.5-1.el9.x86_64 requires mongodb-org-server, but none of the providers can be installed   - package mongodb-org-database-7.0.6-1.el9.x86_64 requires mongodb-org-server, but none of the providers can be installed   - package mongodb-org-database-7.0.7-1.el9.x86_64 requires mongodb-org-server, but none of the providers can be installed   - package mongodb-org-database-7.0.8-1.el9.x86_64 requires mongodb-org-server, but none of the providers can be installed   - package mongodb-org-database-7.0.9-1.el9.x86_64 requires mongodb-org-server, but none of the providers can be installed   - cannot install the best candidate for the job   - nothing provides libcrypto.so.3()(64bit) needed by mongodb-org-server-7.0.0-1.el9.x86_64   - nothing provides libcrypto.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.0-1.el9.x86_64   - nothing provides libssl.so.3()(64bit) needed by mongodb-org-server-7.0.0-1.el9.x86_64   - nothing provides libssl.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.0-1.el9.x86_64   - nothing provides libcrypto.so.3()(64bit) needed by mongodb-org-server-7.0.1-1.el9.x86_64   - nothing provides libcrypto.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.1-1.el9.x86_64   - nothing provides libssl.so.3()(64bit) needed by mongodb-org-server-7.0.1-1.el9.x86_64   - nothing provides libssl.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.1-1.el9.x86_64   - nothing provides libcrypto.so.3()(64bit) needed by mongodb-org-server-7.0.11-1.el9.x86_64   - nothing provides libcrypto.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.11-1.el9.x86_64   - nothing provides libssl.so.3()(64bit) needed by mongodb-org-server-7.0.11-1.el9.x86_64   - nothing provides libssl.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.11-1.el9.x86_64   - nothing provides libcrypto.so.3()(64bit) needed by mongodb-org-server-7.0.12-1.el9.x86_64   - nothing provides libcrypto.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.12-1.el9.x86_64   - nothing provides libssl.so.3()(64bit) needed by mongodb-org-server-7.0.12-1.el9.x86_64   - nothing provides libssl.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.12-1.el9.x86_64   - nothing provides libcrypto.so.3()(64bit) needed by mongodb-org-server-7.0.14-1.el9.x86_64   - nothing provides libcrypto.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.14-1.el9.x86_64   - nothing provides libssl.so.3()(64bit) needed by mongodb-org-server-7.0.14-1.el9.x86_64   - nothing provides libssl.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.14-1.el9.x86_64   - nothing provides libcrypto.so.3()(64bit) needed by mongodb-org-server-7.0.15-1.el9.x86_64   - nothing provides libcrypto.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.15-1.el9.x86_64   - nothing provides libssl.so.3()(64bit) needed by mongodb-org-server-7.0.15-1.el9.x86_64   - nothing provides libssl.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.15-1.el9.x86_64   - nothing provides libcrypto.so.3()(64bit) needed by mongodb-org-server-7.0.2-1.el9.x86_64   - nothing provides libcrypto.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.2-1.el9.x86_64   - nothing provides libssl.so.3()(64bit) needed by mongodb-org-server-7.0.2-1.el9.x86_64   - nothing provides libssl.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.2-1.el9.x86_64   - nothing provides libcrypto.so.3()(64bit) needed by mongodb-org-server-7.0.3-1.el9.x86_64   - nothing provides libcrypto.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.3-1.el9.x86_64   - nothing provides libssl.so.3()(64bit) needed by mongodb-org-server-7.0.3-1.el9.x86_64   - nothing provides libssl.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.3-1.el9.x86_64   - nothing provides libcrypto.so.3()(64bit) needed by mongodb-org-server-7.0.4-1.el9.x86_64   - nothing provides libcrypto.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.4-1.el9.x86_64   - nothing provides libssl.so.3()(64bit) needed by mongodb-org-server-7.0.4-1.el9.x86_64   - nothing provides libssl.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.4-1.el9.x86_64   - nothing provides libcrypto.so.3()(64bit) needed by mongodb-org-server-7.0.5-1.el9.x86_64   - nothing provides libcrypto.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.5-1.el9.x86_64   - nothing provides libssl.so.3()(64bit) needed by mongodb-org-server-7.0.5-1.el9.x86_64   - nothing provides libssl.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.5-1.el9.x86_64   - nothing provides libcrypto.so.3()(64bit) needed by mongodb-org-server-7.0.6-1.el9.x86_64   - nothing provides libcrypto.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.6-1.el9.x86_64   - nothing provides libssl.so.3()(64bit) needed by mongodb-org-server-7.0.6-1.el9.x86_64   - nothing provides libssl.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.6-1.el9.x86_64   - nothing provides libcrypto.so.3()(64bit) needed by mongodb-org-server-7.0.7-1.el9.x86_64   - nothing provides libcrypto.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.7-1.el9.x86_64   - nothing provides libssl.so.3()(64bit) needed by mongodb-org-server-7.0.7-1.el9.x86_64   - nothing provides libssl.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.7-1.el9.x86_64   - nothing provides libcrypto.so.3()(64bit) needed by mongodb-org-server-7.0.8-1.el9.x86_64   - nothing provides libcrypto.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.8-1.el9.x86_64   - nothing provides libssl.so.3()(64bit) needed by mongodb-org-server-7.0.8-1.el9.x86_64   - nothing provides libssl.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.8-1.el9.x86_64   - nothing provides libcrypto.so.3()(64bit) needed by mongodb-org-server-7.0.9-1.el9.x86_64   - nothing provides libcrypto.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.9-1.el9.x86_64   - nothing provides libssl.so.3()(64bit) needed by mongodb-org-server-7.0.9-1.el9.x86_64   - nothing provides libssl.so.3(OPENSSL_3.0.0)(64bit) needed by mongodb-org-server-7.0.9-1.el9.x86_64 (try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
总条数:1107 到第
上滑加载中