{"id":35953,"date":"2023-07-05T21:11:11","date_gmt":"2022-12-27T02:59:46","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova\/"},"modified":"2024-04-30T12:09:44","modified_gmt":"2024-04-30T04:09:44","slug":"%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova\/","title":{"rendered":"\u4f7f\u7528Image Builder\u6765\u521b\u5efa\u9002\u7528\u4e8eCluster API\u7684OVA"},"content":{"rendered":"<h1>&#8220;Image Builder\u662f\u4ec0\u4e48\uff1f&#8221;<\/h1>\n<p>Image Builder\u662f\u4e00\u4e2a\u7528\u4e8e\u521b\u5efa\u9884\u5148\u5b89\u88c5\u4e86Kubernetes\u7684\u865a\u62df\u673a\u955c\u50cf\u7684\u5de5\u5177\u3002\u5b83\u517c\u5bb9AWS\u3001Azure\u3001vSphere\u7b49\u591a\u4e2a\u73af\u5883\u3002\u5b83\u8fd8\u652f\u6301\u591a\u79cd\u57fa\u4e8e\u4e0d\u540c\u7684\u5ba2\u673a\u64cd\u4f5c\u7cfb\u7edf\uff0c\u5982RHEL\u548cUbuntu\u3002<\/p>\n<p>\u6211\u60f3\u8981\u4e3avSphere\u521b\u5efa\u865a\u62df\u673a\u955c\u50cf\uff0c\u6240\u4ee5\u8fd9\u6b21\u6253\u7b97\u5236\u4f5c\u4e00\u4e2a\u57fa\u4e8eUbuntu\u7684OVA\u3002<\/p>\n<h1>\u4f7f\u7528 Image Builder \u521b\u5efa OVA \u6587\u4ef6<\/h1>\n<p>\u5173\u4e8eImage Builder\u7684\u4f7f\u7528\u65b9\u6cd5\uff0c\u8be6\u60c5\u8bf7\u53c2\u8003\u4ee5\u4e0b\u94fe\u63a5\u3002\u867d\u7136\u63cf\u8ff0\u53ef\u80fd\u6709\u4e9b\u8fc7\u65f6\uff0c\u4e0e\u5b9e\u9645\u64cd\u4f5c\u7565\u6709\u4e0d\u540c\uff0c\u4f46\u6574\u4f53\u6b65\u9aa4\u5e94\u8be5\u6ca1\u6709\u53d8\u5316\uff0c\u6211\u4eec\u53ef\u4ee5\u53c2\u7167\u6b64\u94fe\u63a5\u8fdb\u884c\u64cd\u4f5c\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">The Image Builder Book &#8211; Quick Start<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">The Image Builder Book &#8211; Building Images for vSphere<\/ul>\n<p>\u987a\u4fbf\u63d0\u4e00\u4e0b\uff0c\u5728Ubuntu 22.04\u4e0a\u6267\u884c\u4e86\u4ee5\u4e0b\u547d\u4ee4\u3002<\/p>\n<h2>\u5b89\u88c5\u6240\u9700\u7684\u8f6f\u4ef6\u5305\u3002<\/h2>\n<p>\u9996\u5148\uff0c\u514b\u9686 Image Builder \u7684\u5b58\u50a8\u5e93\u3002<\/p>\n<pre class=\"post-pre\"><code>$ git clone https:\/\/github.com\/kubernetes-sigs\/image-builder.git\r\n<\/code><\/pre>\n<p>\u7136\u540e\uff0c\u5207\u6362\u5230image\/capi\u76ee\u5f55\uff0c\u6267\u884cmake deps\u547d\u4ee4\uff0c\u5b89\u88c5\u6240\u9700\u7684\u8f6f\u4ef6\u5305\u3002<\/p>\n<pre class=\"post-pre\"><code>$ cd image-builder\/images\/capi\/\r\n$ make deps\r\nhack\/image-grok-latest-flatcar-version.sh: line 9: jq: command not found\r\nhack\/ensure-ansible.sh\r\nCollecting pip\r\n  Downloading pip-22.3.1-py3-none-any.whl (2.1 MB)\r\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 2.1\/2.1 MB 15.5 MB\/s eta 0:00:00\r\nCollecting wheel\r\n  Downloading wheel-0.38.4-py3-none-any.whl (36 kB)\r\nInstalling collected packages: wheel, pip\r\n  WARNING: The script wheel is installed in '\/home\/ubuntu\/.local\/bin' which is not on PATH.\r\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\r\n  WARNING: The scripts pip, pip3 and pip3.10 are installed in '\/home\/ubuntu\/.local\/bin' which is not on PATH.\r\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\r\nSuccessfully installed pip-22.3.1 wheel-0.38.4\r\nUser's Python3 binary directory must be in $PATH\r\nLocation of package is:\r\nhack\/utils.sh: line 78: pip3: command not found\r\nmake: *** [Makefile:56: deps-ami] Error 1\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u627e\u4e0d\u5230jq\u547d\u4ee4\u548cpip3\uff0c\u6211\u51b3\u5b9a\u5b89\u88c5\u5b83\u4eec\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo apt isntall jq python3-pip\r\n<\/code><\/pre>\n<p>\u91cd\u65b0\u6267\u884c make deps\u3002<\/p>\n<pre class=\"post-pre\"><code>$ make deps\r\nhack\/ensure-ansible.sh\r\nCollecting ansible-core==2.11.5\r\n~~ snip ~~\r\nSuccessfully installed ansible-core-2.11.5 packaging-22.0 resolvelib-0.5.4\r\nUser's Python3 binary directory must be in $PATH\r\nLocation of package is:\r\nWARNING: Package(s) not found: ansible\r\nmake: *** [Makefile:56: deps-ami] Error 1\r\n<\/code><\/pre>\n<p>\u5c3d\u7ba1\u5b89\u88c5\u4e86 Ansible\uff0c\u4f46\u4ecd\u7136\u51fa\u73b0\u627e\u4e0d\u5230 Ansible \u5305\u7684\u9519\u8bef\u3002\u53ef\u80fd\u662f\u8def\u5f84\u8bbe\u7f6e\u4e0d\u6b63\u786e\uff0c\u56e0\u6b64\u8bf7\u5c1d\u8bd5\u627e\u5230 Ansible \u547d\u4ee4\u7684\u4f4d\u7f6e\u5e76\u8bbe\u7f6e\u6b63\u786e\u7684\u8def\u5f84\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo find \/ -name \"ansible\"\r\n\/home\/ubuntu\/.local\/bin\/ansible\r\n\/home\/ubuntu\/.local\/lib\/python3.10\/site-packages\/ansible\r\n\/home\/ubuntu\/.local\/lib\/python3.10\/site-packages\/ansible_test\/_data\/injector\/ansible\r\n\/home\/ubuntu\/workspace\/image-builder\/images\/capi\/ansible\r\n\r\n$ export PATH=\"\/home\/ubuntu\/.local\/bin\/:$PATH\"\r\n<\/code><\/pre>\n<p>\u91cd\u65b0\u632f\u4f5c\u7cbe\u795e\uff0c\u91cd\u65b0\u6267\u884c make deps\uff0c\u4f46\u8fd9\u6b21\u63d0\u793a\u6ca1\u6709 unzip \u547d\u4ee4\uff0c\u6240\u4ee5\u9700\u8981\u5b89\u88c5 unzip\u3002<\/p>\n<pre class=\"post-pre\"><code>$ make deps\r\nhack\/ensure-ansible.sh\r\nStarting galaxy collection install process\r\nProcess install dependency map\r\nStarting collection install process\r\n~~ snip ~~\r\nRequired-by: \r\nhack\/ensure-packer.sh\r\npacker_1.8.3_linux_amd64.zip: OK\r\nhack\/ensure-packer.sh: line 52: unzip: command not found\r\nmake: *** [Makefile:58: deps-ami] Error 127\r\n\r\n$ sudo apt install unzip -y\r\n<\/code><\/pre>\n<p>\u6211\u8ba4\u4e3a\u8fd9\u4e00\u6b21\u4f1a\u6210\u529f\uff0c\u6240\u4ee5\u6211\u91cd\u65b0\u8fd0\u884c\u4e86make deps\uff0c\u5e76\u4e14\u987a\u5229\u5b8c\u6210\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code>$ make deps\r\n~~ snip ~~\r\nNothing to do. All requested collections are already installed. If you want to reinstall them, consider using `--force`.\r\nhack\/ensure-packer.sh\r\nhack\/ensure-goss.sh\r\nRight version of binary present\r\n<\/code><\/pre>\n<h2>\u4f7f\u7528Packer \u5728 vSphere \u4e0a\u521b\u5efa\u865a\u62df\u673a<\/h2>\n<p>\u3053\u3053\u304b\u3089\u306f\u3001vSphere \u5411\u3051\u306e\u4f5c\u6210\u624b\u9806\u306b\u306a\u308a\u307e\u3059\u3002 vsphere.json \u3092\u57cb\u3081\u308d\u3001\u3068\u3044\u3046\u3053\u3068\u306a\u306e\u3067\u3001\u5fc5\u8981\u306a\u9805\u76ee\u3092\u5165\u529b\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ cat packer\/ova\/vsphere.json \r\n{\r\n    \"vcenter_server\":\"FQDN of vcenter\",\r\n    \"username\":\"vcenter_username\",\r\n    \"password\":\"vcenter_password\",\r\n    \"datastore\":\"template_datastore\",\r\n    \"folder\": \"template_folder_on_vcenter\",\r\n    \"cluster\": \"esxi_cluster_used_for_template_creation\",\r\n    \"network\": \"network_attached_to_template\",\r\n    \"insecure_connection\": \"false\",\r\n    \"template\": \"base_template_used_by_clone_builder\",\r\n    \"create_snbapshot\": \"creates a snaphot on base OVA after building\",\r\n    \"linked_clone\": \"Uses link cloning in vsphere-clone builder: true, by default\"\r\n}\r\n<\/code><\/pre>\n<p>\u6b21\u306b\u3001make deps-ova \u3092\u5b9f\u884c\u3057\u3066\u3001OVA \u4f5c\u6210\u306b\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ make deps-ova\r\nhack\/ensure-ansible.sh\r\nStarting galaxy collection install process\r\nNothing to do. All requested collections are already installed. If you want to reinstall them, consider using `--force`.\r\nhack\/ensure-ansible-windows.sh\r\nhack\/ensure-packer.sh\r\nhack\/ensure-goss.sh\r\nRight version of binary present\r\nhack\/ensure-ovftool.sh\r\n<\/code><\/pre>\n<p>\u5728\u5b8c\u6210\u4e86\u6b64\u524d\u7684\u6b65\u9aa4\u540e\uff0c\u4f5c\u4e3a\u53ef\u9009\u9879\uff0c\u901a\u8fc7\u4f7f\u7528 ovftool\uff0c\u6211\u4eec\u53ef\u4ee5\u521b\u5efa OVA \u5305\uff0c\u56e0\u6b64\u4e5f\u8981\u5c06 ovftool \u5b89\u88c5\u597d\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo .\/VMware-ovftool-4.4.3-18663434-lin.x86_64.bundle \r\n<\/code><\/pre>\n<p>\u53e6\u5916\uff0c\u6211\u6ce8\u610f\u5230 packer \u7684\u8def\u5f84\u8bbe\u7f6e\u4e0d\u6b63\u786e\uff0c\u6240\u4ee5\u6211\u4f1a\u5c06\u8def\u5f84\u8bbe\u7f6e\u4e3a &#8220;.\/image-builder\/images\/capi.local\/bin\/packer&#8221;\u3002<\/p>\n<p>\u73b0\u5728\uff0c\u6211\u4eec\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u6765\u521b\u5efa OVA \u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>$ IB_OVFTOOL=1 IB_OVFTOOL_ARGS=\"--allowExtraConfig\" make build-node-ova-vsphere-ubuntu-2004\r\n<\/code><\/pre>\n<p>\u525b\u525b\u60f3\u5230\u9806\u5229\u9032\u884c\u7684\u6642\u5019\uff0c\u7a81\u7136\u51fa\u73fe\u4e86\u4e00\u500b\u932f\u8aa4&#8230;<\/p>\n<pre class=\"post-pre\"><code>vsphere: output will be in this color.\r\n\r\n==&gt; vsphere: File \/home\/ubuntu\/.cache\/packer\/48e4ec4daa32571605576c5566f486133ecc271f.iso already uploaded; continuing\r\n==&gt; vsphere: File [iscsi01] packer_cache\/\/48e4ec4daa32571605576c5566f486133ecc271f.iso already exists; skipping upload.\r\n==&gt; vsphere: Creating VM...\r\n~~ snip ~~\r\n==&gt; vsphere: Waiting for SSH to become available...\r\n==&gt; vsphere: Connected to SSH!\r\n==&gt; vsphere: Provisioning with shell script: .\/packer\/files\/flatcar\/scripts\/bootstrap-flatcar.sh\r\n==&gt; vsphere: Provisioning with Ansible...\r\n    vsphere: Setting up proxy adapter for Ansible....\r\n==&gt; vsphere: Executing Ansible: ansible-playbook -e packer_build_name=\"vsphere\" -e packer_*****_type=vsphere-iso -e packer_http_addr=192.168.10.151:8394 --ssh-extra-args '-o IdentitiesOnly=yes' --extra-vars containerd_url=https:\/\/github.com\/containerd\/containerd\/releases\/download\/v1.6.2\/cri-containerd-cni-1.6.2-linux-amd64.tar.gz containerd_sha256=91f1087d556ecfb1f148743c8ee78213cd19e07c22787dae07fe6b9314bec121 pause_image=k8s.gcr.io\/pause:3.6 containerd_additional_settings= containerd_cri_socket=\/var\/run\/containerd\/containerd.sock containerd_version=1.6.2 crictl_url=https:\/\/github.com\/kubernetes-sigs\/cri-tools\/releases\/download\/v1.23.0\/crictl-v1.23.0-linux-amd64.tar.gz crictl_sha256=https:\/\/github.com\/kubernetes-sigs\/cri-tools\/releases\/download\/v1.23.0\/crictl-v1.23.0-linux-amd64.tar.gz.sha256 crictl_source_type=pkg custom_role_names=\"\" firstboot_custom_roles_pre=\"\" firstboot_custom_roles_post=\"\" node_custom_roles_pre=\"\" node_custom_roles_post=\"\" disable_public_repos=false extra_debs=\"\" extra_repos=\"\" extra_rpms=\"\" http_proxy= https_proxy= kubeadm_template=etc\/kubeadm.yml kubernetes_cni_http_source=https:\/\/github.com\/containernetworking\/plugins\/releases\/download kubernetes_cni_http_checksum=sha256:https:\/\/storage.googleapis.com\/k8s-artifacts-cni\/release\/v1.1.1\/cni-plugins-linux-amd64-v1.1.1.tgz.sha256 kubernetes_http_source=https:\/\/dl.k8s.io\/release kubernetes_container_registry=registry.k8s.io kubernetes_rpm_repo=https:\/\/packages.cloud.google.com\/yum\/repos\/kubernetes-el7-x86_64 kubernetes_rpm_gpg_key=\"https:\/\/packages.cloud.google.com\/yum\/doc\/yum-key.gpg https:\/\/packages.cloud.google.com\/yum\/doc\/rpm-package-key.gpg\" kubernetes_rpm_gpg_check=True kubernetes_deb_repo=\"https:\/\/apt.kubernetes.io\/ kubernetes-xenial\" kubernetes_deb_gpg_key=https:\/\/packages.cloud.google.com\/apt\/doc\/apt-key.gpg kubernetes_cni_deb_version=1.1.1-00 kubernetes_cni_rpm_version=1.1.1-0 kubernetes_cni_semver=v1.1.1 kubernetes_cni_source_type=pkg kubernetes_semver=v1.23.10 kubernetes_source_type=pkg kubernetes_load_additional_imgs=false kubernetes_deb_version=1.23.10-00 kubernetes_rpm_version=1.23.10-0 no_proxy= pip_conf_file= python_path= redhat_epel_rpm=https:\/\/dl.fedoraproject.org\/pub\/epel\/epel-release-latest-7.noarch.rpm epel_rpm_gpg_key= reenable_public_repos=true remove_extra_repos=false systemd_prefix=\/usr\/lib\/systemd sysusr_prefix=\/usr sysusrlocal_prefix=\/usr\/local load_additional_components=false additional_registry_images=false additional_registry_images_list= additional_url_images=false additional_url_images_list= additional_executables=false additional_executables_list= additional_executables_destination_path= build_target=virt amazon_ssm_agent_rpm= --extra-vars guestinfo_datasource_slug=https:\/\/raw.githubusercontent.com\/vmware\/cloud-init-vmware-guestinfo guestinfo_datasource_ref=v1.4.1 guestinfo_datasource_script=https:\/\/raw.githubusercontent.com\/vmware\/cloud-init-vmware-guestinfo\/v1.4.1\/install.sh --extra-vars  -e ansible_ssh_private_key_file=\/tmp\/ansible-key2998066837 -i \/tmp\/packer-provisioner-ansible3438111689 \/home\/ubuntu\/workspace\/image-*****\/images\/capi\/ansible\/firstboot.yml\r\n    vsphere:\r\n    vsphere: PLAY [all] *********************************************************************\r\n==&gt; vsphere: failed to handshake\r\n    vsphere:\r\n    vsphere: TASK [Gathering Facts] *********************************************************\r\n    vsphere: fatal: [default]: UNREACHABLE! =&gt; {\"changed\": false, \"msg\": \"Failed to connect to the host via ssh: Unable to negotiate with 127.0.0.1 port 41355: no matching host key type found. Their offer: ssh-rsa\", \"unreachable\": true}\r\n~~ snip ~~\r\n<\/code><\/pre>\n<p>\u60a8\u597d\uff0c\u770b\u8d77\u6765\u5bf9\u4e8e\u8fde\u63a5\u5230\u672c\u5730\u4e3b\u673a\uff08localhost\uff09\u7684 SSH \u51fa\u73b0\u4e86\u6545\u969c\u3002\u5f53\u641c\u7d22 &#8220;no matching host key type found&#8221; \u65f6\uff0c\u53d1\u73b0\u4e00\u7bc7\u6587\u7ae0\u63d0\u5230\u53ea\u9700\u8981\u5728 .ssh\/config \u6587\u4ef6\u4e2d\u6dfb\u52a0\u4ee5\u4e0b3\u884c\u5185\u5bb9\u5373\u53ef\u89e3\u51b3\u95ee\u9898\uff0c\u6240\u4ee5\u6211\u4f1a\u8fdb\u884c\u6dfb\u52a0\u3002<\/p>\n<pre class=\"post-pre\"><code>Host *\r\n   HostKeyAlgorithms=+ssh-rsa\r\n   PubkeyAcceptedAlgorithms=+ssh-rsa\r\n<\/code><\/pre>\n<p>\u518d\u6b21\u6267\u884c\u521b\u5efa OVA \u6587\u4ef6\u7684\u547d\u4ee4\u65f6\uff0cAnsible \u5c06\u6267\u884c\u5404\u79cd\u5904\u7406\uff0c\u5927\u7ea6\u7ecf\u8fc720\u5206\u949f\u540e\uff0cOVA \u6587\u4ef6\u88ab\u6210\u529f\u521b\u5efa\u3002<\/p>\n<pre class=\"post-pre\"><code>$ IB_OVFTOOL=1 IB_OVFTOOL_ARGS=\"--allowExtraConfig\" make build-node-ova-vsphere-ubuntu-2004\r\n~~ snip ~~\r\n==&gt; Wait completed after 20 minutes 17 seconds\r\n\r\n==&gt; Builds finished. The artifacts of successful builds are:\r\n--&gt; vsphere: ubuntu-2004-kube-v1.23.10\r\n--&gt; vsphere: ubuntu-2004-kube-v1.23.10\r\n--&gt; vsphere: ubuntu-2004-kube-v1.23.10\r\n--&gt; vsphere: ubuntu-2004-kube-v1.23.10\r\n<\/code><\/pre>\n<h1>\u7ed3\u675f<\/h1>\n<p>\u5728\u521b\u5efa Cluster API \u7528\u7684 OVA \u8fc7\u7a0b\u4e2d\uff0c\u867d\u7136\u51fa\u73b0\u4e86\u4e00\u4e9b\u610f\u5916\u9519\u8bef\uff0c\u4f46\u6bd4\u9884\u60f3\u7684\u8981\u7b80\u5355\u3002\u8fc7\u53bb\u6211\u4eec\u4e00\u76f4\u4f7f\u7528\u5b98\u65b9\u63d0\u4f9b\u7684\u6620\u50cf\u6587\u4ef6\uff0c\u4f46\u4ee5\u540e\u6211\u60f3\u8981\u6839\u636e Kubernetes \u7248\u672c\u548c\u5bbf\u4e3b\u64cd\u4f5c\u7cfb\u7edf\u7248\u672c\uff0c\u81ea\u5df1\u521b\u5efa\u9a8c\u8bc1\u7528\u7684 OVA\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;Image Builder\u662f\u4ec0\u4e48\uff1f&#8221; Image Builder\u662f\u4e00\u4e2a\u7528\u4e8e\u521b\u5efa\u9884\u5148\u5b89 [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-35953","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528Image Builder\u6765\u521b\u5efa\u9002\u7528\u4e8eCluster API\u7684OVA - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528image-builder\u6765\u521b\u5efa\u9002\u7528\u4e8ecluster-api\u7684ova\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Image Builder\u6765\u521b\u5efa\u9002\u7528\u4e8eCluster API\u7684OVA\" \/>\n<meta property=\"og:description\" content=\"&#8220;Image Builder\u662f\u4ec0\u4e48\uff1f&#8221; Image Builder\u662f\u4e00\u4e2a\u7528\u4e8e\u521b\u5efa\u9884\u5148\u5b89 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528image-builder\u6765\u521b\u5efa\u9002\u7528\u4e8ecluster-api\u7684ova\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-27T02:59:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T04:09:44+00:00\" \/>\n<meta name=\"author\" content=\"\u6587, \u7fd4\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6587, \u7fd4\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova\/\",\"name\":\"\u4f7f\u7528Image Builder\u6765\u521b\u5efa\u9002\u7528\u4e8eCluster API\u7684OVA - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-12-27T02:59:46+00:00\",\"dateModified\":\"2024-04-30T04:09:44+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Image Builder\u6765\u521b\u5efa\u9002\u7528\u4e8eCluster API\u7684OVA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\",\"name\":\"\u6587, \u7fd4\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"caption\":\"\u6587, \u7fd4\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Image Builder\u6765\u521b\u5efa\u9002\u7528\u4e8eCluster API\u7684OVA - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528image-builder\u6765\u521b\u5efa\u9002\u7528\u4e8ecluster-api\u7684ova\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Image Builder\u6765\u521b\u5efa\u9002\u7528\u4e8eCluster API\u7684OVA","og_description":"&#8220;Image Builder\u662f\u4ec0\u4e48\uff1f&#8221; Image Builder\u662f\u4e00\u4e2a\u7528\u4e8e\u521b\u5efa\u9884\u5148\u5b89 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528image-builder\u6765\u521b\u5efa\u9002\u7528\u4e8ecluster-api\u7684ova\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-12-27T02:59:46+00:00","article_modified_time":"2024-04-30T04:09:44+00:00","author":"\u6587, \u7fd4","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6587, \u7fd4","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"6 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova\/","name":"\u4f7f\u7528Image Builder\u6765\u521b\u5efa\u9002\u7528\u4e8eCluster API\u7684OVA - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-12-27T02:59:46+00:00","dateModified":"2024-04-30T04:09:44+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Image Builder\u6765\u521b\u5efa\u9002\u7528\u4e8eCluster API\u7684OVA"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c","name":"\u6587, \u7fd4","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","caption":"\u6587, \u7fd4"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8image-builder%e6%9d%a5%e5%88%9b%e5%bb%ba%e9%80%82%e7%94%a8%e4%ba%8ecluster-api%e7%9a%84ova\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/35953","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=35953"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/35953\/revisions"}],"predecessor-version":[{"id":91829,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/35953\/revisions\/91829"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=35953"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=35953"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=35953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}