主頁 >  其他 > 云原生之旅 - 4)基礎設施即代碼 使用 Terraform 創建 Kubernetes

云原生之旅 - 4)基礎設施即代碼 使用 Terraform 創建 Kubernetes

2022-10-30 07:35:24 其他

前言

上一篇文章我們已經簡單的入門Terraform, 本篇介紹如何使用Terraform在GCP和AWS 創建Kubernetes 資源,

Kubernetes 在云原生時代的重要性不言而喻,等于這個時代的作業系統,基本上只需要建這個資源,就可以將絕大多數的應用跑在上面,包括資料庫,甚至很多團隊的大資料處理例如 Spark, Flink 都跑在Kubernetes上,

  • GCP Kubernetes = GKE
  • AWS Kubernetes = EKS
  • Azure Kubernetes = AKS

本篇文章主要介紹前兩者的Terraform 代碼實作,現在使用官方的 module 要比以前方便太多了,哪怕是新手都可以很快的將資源建起來,當然如果要更多的了解,還是需要慢慢下功夫的,

關鍵詞:IaC, Infrastructure as Code, Terraform, 基礎設施即代碼,使用Terraform創建GKE,使用Terraform創建EKS

 

環境資訊:

* Terraform 1.2.9 * Google Cloud SDK 397.0.0 * aws-cli 2.7.7  

使用Terraform創建GKE

準備一個GCS bucket
# valid LOCATION values are `asia`, `eu` or `us`
gsutil mb -l $LOCATION gs://$BUCKET_NAME
gsutil versioning set on gs://$BUCKET_NAME

 

準備如下tf檔案

backend.tf
terraform {
  backend "gcs" {
    bucket = "sre-dev-terraform-test"
    prefix = "demo/state"
  }
}

providers.tf

terraform {
  required_version = ">= 1.2.9"

  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "~> 4.0"
    }
    google-beta = {
      source  = "hashicorp/google-beta"
      version = "~> 4.0"
    }
  }
}

provider "google" {
  project = local.project.project_id
  region  = local.project.region
}

provider "google-beta" {
  project = local.project.project_id
  region  = local.project.region
}

  

使用 terraform google module 事半功倍,代碼如下

gke-cluster.tf 

data "google_compute_zones" "available" {
  region = "us-central1"
  status = "UP"
}

resource "google_compute_network" "default" {
  project                 = local.project.project_id
  name                    = local.project.network_name
  auto_create_subnetworks = false
  routing_mode            = "GLOBAL"
}

resource "google_compute_subnetwork" "wade-gke" {
  project       = local.project.project_id
  network       = google_compute_network.default.name
  name          = local.wade_cluster.subnet_name
  ip_cidr_range = local.wade_cluster.subnet_range
  region        = local.wade_cluster.region

  secondary_ip_range {
    range_name    = format("%s-secondary1", local.wade_cluster.cluster_name)
    ip_cidr_range = local.wade_cluster.secondary_ip_range_pods
  }

  secondary_ip_range {
    range_name    = format("%s-secondary2", local.wade_cluster.cluster_name)
    ip_cidr_range = local.wade_cluster.secondary_ip_range_services
  }

  private_ip_google_access = true

}

resource "google_service_account" "sa-wade-test" {
  account_id   = "sa-wade-test"
  display_name = "sa-wade-test"
}


module "wade-gke" {
  source = "terraform-google-modules/kubernetes-engine/google//modules/beta-private-cluster"
  version = "23.1.0"

  project_id = local.project.project_id
  name       = local.wade_cluster.cluster_name

  kubernetes_version     = local.wade_cluster.cluster_version
  region                 = local.wade_cluster.region
  network                = google_compute_network.default.name
  subnetwork             = google_compute_subnetwork.wade-gke.name
  master_ipv4_cidr_block = "10.1.0.0/28"
  ip_range_pods          = google_compute_subnetwork.wade-gke.secondary_ip_range.0.range_name
  ip_range_services      = google_compute_subnetwork.wade-gke.secondary_ip_range.1.range_name

  service_account                 = google_service_account.sa-wade-test.email
  master_authorized_networks      = local.wade_cluster.master_authorized_networks
  master_global_access_enabled    = false
  istio                           = false
  issue_client_certificate        = false
  enable_private_endpoint         = false
  enable_private_nodes            = true
  remove_default_node_pool        = true
  enable_shielded_nodes           = false
  identity_namespace              = "enabled"
  node_metadata                   = "https://www.cnblogs.com/wade-xu/archive/2022/10/29/GKE_METADATA"
  horizontal_pod_autoscaling      = true
  enable_vertical_pod_autoscaling = false

  node_pools              = local.wade_cluster.node_pools
  node_pools_oauth_scopes = local.wade_cluster.oauth_scopes
  node_pools_labels       = local.wade_cluster.node_pools_labels
  node_pools_metadata     = https://www.cnblogs.com/wade-xu/archive/2022/10/29/local.wade_cluster.node_pools_metadata
  node_pools_taints       = local.wade_cluster.node_pools_taints
  node_pools_tags         = local.wade_cluster.node_pools_tags

}

  

變數 locals.tf

master_authorized_networks 需要改為自己要放行的白名單,只有白名單的IP才能訪問 cluster api endpoint,為了安全性,不要用0.0.0.0/0

locals {
  # project details
  project = {
    project_id       = "sre-eng-cn-dev"
    region           = "us-central1"
    network_name     = "wade-test-network"
  }

  # cluster details
  wade_cluster = {
    cluster_name                = "wade-gke"
    cluster_version             = "1.22.12-gke.500"
    subnet_name                 = "wade-gke"
    subnet_range                = "10.254.71.0/24"
    secondary_ip_range_pods     = "172.20.72.0/21"
    secondary_ip_range_services = "10.127.8.0/24"
    region                      = "us-central1"

    node_pools = [
      {
        name               = "app-pool"
        machine_type       = "n1-standard-2"
        node_locations     = join(",", slice(data.google_compute_zones.available.names, 0, 3))
        initial_node_count = 1
        min_count          = 1
        max_count          = 10
        max_pods_per_node  = 64
        disk_size_gb       = 100
        disk_type          = "pd-standard"
        image_type         = "COS"
        auto_repair        = true
        auto_upgrade       = false
        preemptible        = false
        max_surge          = 1
        max_unavailable    = 0
      }
    ]

    node_pools_labels = {
      all = {}
    }

    node_pools_tags = {
      all = ["k8s-nodes"]
    }

    node_pools_metadata = https://www.cnblogs.com/wade-xu/archive/2022/10/29/{
      all = {
        disable-legacy-endpoints ="true"
      }
    }

    node_pools_taints = {
      all = []
    }

    oauth_scopes = {
      all = [
        "https://www.googleapis.com/auth/monitoring",
        "https://www.googleapis.com/auth/compute",
        "https://www.googleapis.com/auth/devstorage.full_control",
        "https://www.googleapis.com/auth/logging.write",
        "https://www.googleapis.com/auth/service.management",
        "https://www.googleapis.com/auth/servicecontrol",
      ]
    }

    master_authorized_networks = [
      {
        display_name = "Whitelist 1"
        cidr_block   = "4.14.xxx.xx/32"
      },
      {
        display_name = "Whitelist 2"
        cidr_block   = "64.124.xxx.xx/32"
      },
    ]
  }
}
  output.tf 
output "cluster_id" {
  description = "GKE cluster ID"
  value       = https://www.cnblogs.com/wade-xu/archive/2022/10/29/module.wade-gke.cluster_id
}

output"cluster_endpoint" {
  description = "Endpoint for GKE control plane"
  value       = https://www.cnblogs.com/wade-xu/archive/2022/10/29/module.wade-gke.endpoint
  sensitive   = true
}

output"cluster_name" {
  description = "Google Kubernetes Cluster Name"
  value       = https://www.cnblogs.com/wade-xu/archive/2022/10/29/module.wade-gke.name
}

output"region" {
  description = "GKE region"
  value       = https://www.cnblogs.com/wade-xu/archive/2022/10/29/module.wade-gke.region
}

output"project_id" {
  description = "GCP Project ID"
  value       = https://www.cnblogs.com/wade-xu/archive/2022/10/29/local.project.project_id
}

 

tf檔案結構如下

 

部署

確保自己的GCP account已經登陸,并且有足夠的權限操作GCP Project,

gcloud auth login

gcloud auth list

 

terraform init
terraform plan
terraform apply

 

配置連接GKE集群

### Adding the cluster to your context
gcloud container clusters get-credentials $(terraform output -raw cluster_name) \
--region $(terraform output -raw region) \
--project $(terraform output -raw project_id)

 

使用

 下載安裝 kubectl 來管理以及部署資源到集群,    ### 本文首發于博客園 https://www.cnblogs.com/wade-xu/p/16839468.html  

使用Terraform創建EKS

準備好S3 bucket,更新backend providers.tf
terraform {
  backend "s3" {
    bucket = "sre-dev-terraform"
    key    = "test/eks.tfstate"
    region = "cn-north-1"
  }
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.25.0"
    }
  }
}

provider "aws" {
  region     = local.region
}

# https://github.com/terraform-aws-modules/terraform-aws-eks/issues/2009
provider "kubernetes" {
  host                   = module.wade-eks.cluster_endpoint
  cluster_ca_certificate = base64decode(module.wade-eks.cluster_certificate_authority_data)

  exec {
    api_version = "client.authentication.k8s.io/v1beta1"
    command     = "aws"
    # This requires the awscli to be installed locally where Terraform is executed
    args = ["eks", "get-token", "--cluster-name", module.wade-eks.cluster_id]
  }
}

  

類似的,使用terraform aws module, 這里有個小插曲,我建的時候提示 cn-north-1d 這個zone沒有足夠的資源,所以我在data available zone 里面排除了這個zone

data "aws_availability_zones" "available" {

  # Cannot create cluster because cn-north-1d, 
  # the targeted availability zone, does not currently have sufficient capacity to support the cluster.
  exclude_names = ["cn-north-1d"]
}

module "wade-eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "18.27.1"

  cluster_name    = local.cluster_name
  cluster_version = local.cluster_version

  cluster_endpoint_private_access = true
  cluster_endpoint_public_access  = true

  # api server authorized network list
  cluster_endpoint_public_access_cidrs = local.master_authorized_networks

  cluster_addons = {
    coredns = {
      resolve_conflicts = "OVERWRITE"
    }
    kube-proxy = {}
    vpc-cni = {
      resolve_conflicts = "OVERWRITE"
    }
  }

  vpc_id     = module.vpc.vpc_id
  subnet_ids = module.vpc.private_subnets

  # Extend cluster security group rules
  cluster_security_group_additional_rules = local.cluster_security_group_additional_rules

  eks_managed_node_group_defaults = {
    ami_type     = local.node_group_default.ami_type
    min_size     = local.node_group_default.min_size
    max_size     = local.node_group_default.max_size
    desired_size = local.node_group_default.desired_size
  }

  eks_managed_node_groups = {
    # dmz = {
    #   name = "dmz-pool"
    # }
    app = {
      name                           = "app-pool"
      instance_types                 = local.app_group.instance_types
      create_launch_template         = false
      launch_template_name           = ""
      disk_size                      = local.app_group.disk_size

      create_security_group          = true
      security_group_name            = "app-node-group-sg"
      security_group_use_name_prefix = false
      security_group_description     = "EKS managed app node group security group"
      security_group_rules            = local.app_group.security_group_rules

      update_config = {
        max_unavailable_percentage = 50
      }
    }
  }

  # aws-auth configmap
  # create_aws_auth_configmap = true
  manage_aws_auth_configmap = true

  aws_auth_roles = [
    {
      rolearn  = "arn:aws-cn:iam::9935108xxxxx:role/CN-SRE" # replace me
      username = "sre"
      groups   = ["system:masters"]
    },
  ]

  aws_auth_users = [
    {
      userarn  = "arn:aws-cn:iam::9935108xxxxx:user/wadexu" # replace me
      username = "wadexu"
      groups   = ["system:masters"]
    },
  ]

  tags = {
    Environment = "dev"
    Terraform   = "true"
  }

  # aws china only because https://github.com/terraform-aws-modules/terraform-aws-eks/pull/1905
  cluster_iam_role_dns_suffix = "amazonaws.com"
}

 

locals.tf 這里為了安全性,最好給cluster api server endpoint 加好白名單來訪問,否則 0.0.0.0/0代表全開

locals {
  cluster_name    = "test-eks-2022"
  cluster_version = "1.22"
  region          = "cn-north-1"

  vpc = {
    cidr = "10.0.0.0/16"
    private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
    public_subnets  = ["10.0.4.0/24", "10.0.5.0/24"]
  }

  master_authorized_networks =   [
    "4.14.xxx.xx/32",   # allow office 1
    "64.124.xxx.xx/32", # allow office 2
    "0.0.0.0/0"         # allow all access master node
  ]

  # Extend cluster security group rules example
  cluster_security_group_additional_rules = {
    egress_nodes_ephemeral_ports_tcp = {
      description                = "To node 1025-65535"
      protocol                   = "tcp"
      from_port                  = 1025
      to_port                    = 65535
      type                       = "egress"
      source_node_security_group = true
    }
  }

  node_group_default = {
    ami_type     = "AL2_x86_64"
    min_size     = 1
    max_size     = 5
    desired_size = 1
  }

  dmz_group = {
  }

  app_group = {
    instance_types = ["t3.small"]
    disk_size    = 50

    # example rules added for app node group
    security_group_rules = {
        egress_1 = {
          description = "Hello CloudFlare"
          protocol    = "udp"
          from_port   = 53
          to_port     = 53
          type        = "egress"
          cidr_blocks = ["1.1.1.1/32"]
        }
      }
  }
}

 

vpc.tf

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "3.14.2"

  name = "wade-test-vpc"

  cidr = local.vpc.cidr
  azs  = slice(data.aws_availability_zones.available.names, 0, 2)

  private_subnets = local.vpc.private_subnets
  public_subnets  = local.vpc.public_subnets

  enable_nat_gateway   = true
  single_nat_gateway   = true
  enable_dns_hostnames = true

  public_subnet_tags = {
    "kubernetes.io/cluster/${local.cluster_name}" = "shared"
    "kubernetes.io/role/elb"                      = 1
  }

  private_subnet_tags = {
    "kubernetes.io/cluster/${local.cluster_name}" = "shared"
    "kubernetes.io/role/internal-elb"             = 1
  }
}

  

output.tf

output "cluster_id" {
  description = "EKS cluster ID"
  value       = https://www.cnblogs.com/wade-xu/archive/2022/10/29/module.wade-eks.cluster_id
}

output"cluster_endpoint" {
  description = "Endpoint for EKS control plane"
  value       = https://www.cnblogs.com/wade-xu/archive/2022/10/29/module.wade-eks.cluster_endpoint
}

output"region" {
  description = "EKS region"
  value       = https://www.cnblogs.com/wade-xu/archive/2022/10/29/local.region
}

output"cluster_name" {
  description = "AWS Kubernetes Cluster Name"
  value       = https://www.cnblogs.com/wade-xu/archive/2022/10/29/local.cluster_name
}

 

檔案結構如下

 ### 本文首發于博客園 https://www.cnblogs.com/wade-xu/p/16839468.html

 

部署

配置aws account key/secret

Option 1: Export AWS access and security to environment variables

export AWS_ACCESS_KEY_ID=xxx export AWS_SECRET_ACCESS_KEY=xxx

 

Option 2: Add a profile to your AWS credentials file

aws configure
# or
vim ~/.aws/credentials

[default]
aws_access_key_id=xxx
aws_secret_access_key=xxx

 

可以使用如下命令來驗證當前用的是哪個credentials

aws sts get-caller-identity 

  

部署tf資源

terraform init

terraform plan

terraform apply

  

成功之后有如下輸出

  

配置連接EKS集群

#### Adding the cluster to your context
aws eks --region $(terraform output -raw region) update-kubeconfig \
    --name $(terraform output -raw cluster_name)  

 

使用

同上面,需要下載kubectl 

Example 命令:

kubectl cluster-info

kubectl get nodes

  

感謝閱讀,如果您覺得本文的內容對您的學習有所幫助,您可以打賞和推薦,您的鼓勵是我創作的動力

 

Learning by Doing

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/523121.html

標籤:其他

上一篇:游戲影片技術簡介

下一篇:漫談Entity-Component-System

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more