{"id":35618,"date":"2023-04-28T21:56:28","date_gmt":"2022-11-28T04:33:36","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82\/"},"modified":"2024-04-30T01:46:07","modified_gmt":"2024-04-29T17:46:07","slug":"%e4%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82\/","title":{"rendered":"\u4e00\u4e2a\u5173\u4e8e\u65b0\u624b\u4f7f\u7528Kubernetes\u4f5c\u4e3aVIM\u6765\u901a\u8fc7Tacker\u90e8\u7f72CNF\u7684\u6545\u4e8b"},"content":{"rendered":"<h1>\u7ae0\u8282\u7d22\u5f15<\/h1>\n<p>1. \u9996\u5148<br \/>\n2. \u73af\u5883<br \/>\n3. \u5b89\u88c5\u6b65\u9aa4<br \/>\n4. \u53d1\u751f\u7684\u9519\u8bef<br \/>\n5. \u603b\u7ed3<\/p>\n<h1>\u8bf7\u63d0\u4f9b\u7f51\u5740\u4f5c\u4e3a\u53c2\u8003<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">ETSI NFV-SOL CNF (Containerized VNF) Deployment<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">VNF \u3068 CNF \u306e\u9055\u3044<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">VNF Package<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Kubernetes VIM Installation<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Master Node\u306bPod\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Kuryr installation as a Kubernetes network addon<\/ul>\n<h1>\u9996\u5148<\/h1>\n<p>\u4f60\u597d\u3002\u6211\u662f\u4e00\u540d\u65b0\u8fdb\u5458\u5de5\uff0c\u5df2\u7ecf\u5728\u8fd9\u91cc\u5de5\u4f5c\u4e86\u5927\u7ea63\u4e2a\u6708\u3002<\/p>\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f NFV \u3068\u3044\u3046\u8a00\u8449\u3059\u3089\u77e5\u3089\u306a\u304b\u3063\u305f\u65b0\u4eba\u304c Install via Devstack \u3092\u53c2\u8003\u306b\u3057\u3066 DevStack \u74b0\u5883\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3001VIM \u3068\u3057\u3066 OpenStack \u3068 Kubernetes \u3092\u767b\u9332\u3059\u308b\u307e\u3067\u306e\u624b\u9806\u3068\u767a\u751f\u3057\u305f\u30a8\u30e9\u30fc\u3092\u8907\u6570\u306e\u7ae0\u306b\u5206\u3051\u3066\u8a18\u8f09\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\u7b2c 1 \u7ae0: \u65b0\u4eba\u304c DevStack \u4e0a\u3067 Tacker \u3092\u52d5\u304b\u305d\u3046\u3068\u3059\u308b\u8a71<\/ul>\n<p>Install via Devstack \u3092\u5b9f\u969b\u306b\u8a66\u3057\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\u7b2c 2 \u7ae0: \u65b0\u4eba\u304c DevStack \u4e0a\u3067 TOSCA \u3092\u4f7f\u7528\u3057\u3066 VNF \u3092 VM \u3068\u3057\u3066\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u8a71<\/ul>\n<p>ETSI NFV-SOL VNF Deployment as VM with TOSCA \u3092\u5b9f\u969b\u306b\u8a66\u3057\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\u7b2c 3 \u7ae0: \u65b0\u4eba\u304c DevStack \u4e0a\u3067 LCM Operation User Data \u3092\u4f7f\u7528\u3057\u3066 VNF \u3092 VM \u3068\u3057\u3066\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u8a71<\/ul>\n<p>\u5c06ETSI NFV-SOL VNF\u90e8\u7f72\u4e3a\u5177\u6709LCM\u64cd\u4f5c\u7528\u6237\u6570\u636e\u7684\u865a\u62df\u673a\uff0c\u5e76\u5b9e\u9645\u8fdb\u884c\u6d4b\u8bd5\u3002<\/p>\n<ul class=\"post-ul\">\u7b2c 4 \u7ae0: \u3053\u306e\u8a18\u4e8b\u3067\u3059\u3002<\/ul>\n<p>\u6211\u4eec\u5c06\u5b9e\u9645\u5c1d\u8bd5 ETSI NFV-SOL CNF\uff08\u5bb9\u5668\u5316\u865a\u62df\u7f51\u7edc\u529f\u80fd\uff09\u90e8\u7f72\u3002<\/p>\n<p>\u8fd9\u6b21\u5b89\u88c5\u540e\uff0c\u6211\u6574\u7406\u4e86\u6211\u6240\u8c03\u67e5\u7684\u672f\u8bed\u5982\u4e0b\uff1a<\/p>\n<h2>CNF (Containerized Network Function)<\/h2>\n<p>\u63d0\u4f9b\u5bb9\u5668\u5316\u7684\u7f51\u7edc\u529f\u80fd\u3002<\/p>\n<h2>CSAR\uff08\u4e91\u670d\u52a1\u5b58\u6863\uff09<\/h2>\n<p>\u8fd9\u662f\u4e00\u4e2a\u4f7f\u7528ZIP\u6587\u4ef6\u683c\u5f0f\u7684\u5b58\u6863\u6587\u4ef6\u3002\u5176\u7ed3\u6784\u7b26\u5408TOSCA Simple Profile YAML v1.2\u89c4\u8303\u3002<\/p>\n<p>\u8fd9\u91cc\u7684\u6587\u4ef6\u7ed3\u6784\u7684\u5f52\u6863\u5df2\u7ecf\u5728VNF Package\u4e2d\u8fdb\u884c\u4e86\u63cf\u8ff0\u3002<\/p>\n<h1>\u73af\u5883<\/h1>\n<p>\u8bf7\u9605\u8bfb\u300a\u65b0\u4eba\u5728DevStack\u4e0a\u5c1d\u8bd5\u8fd0\u884cTacker\u7684\u6545\u4e8b\u300b\u548c\u300a\u65b0\u4eba\u5728DevStack\u4e0a\u4f7f\u7528TOSCA\u5c06VNF\u90e8\u7f72\u4e3a\u865a\u62df\u673a\u7684\u6545\u4e8b\u300b\uff0c\u6211\u5728ESXi\u4e0a\u5b89\u88c5\u4e86DevStack\uff0c\u5e76\u5bf9\u73af\u5883\u8fdb\u884c\u4e86\u4e00\u4e9b\u914d\u7f6e\u3002<\/p>\n<h1>\u5b89\u88c5\u6b65\u9aa4<\/h1>\n<p>\u8fd9\u4e2a\u6b65\u9aa4\u5728\u672c\u73af\u5883\u4e2d\u6210\u529f\u5b8c\u6210\u4e86\u5b89\u88c5\u3002<br \/>\n\u5c06\u53d1\u751f\u7684\u9519\u8bef\u603b\u7ed3\u5728\u6b65\u9aa4\u5b8c\u6210\u4e4b\u524d\u7684\u7b2c4\u4e2a\u9519\u8bef\u4e2d\u3002<\/p>\n<h2>\u7528\u6237\u548c\u76ee\u5f55<\/h2>\n<p>\u4f7f\u7528stack\u7528\u6237\u6267\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code>sudo -u stack -i\r\n<\/code><\/pre>\n<p>\u81ea\u5206\u3067\u4f5c\u6210\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u914d\u7f6e\u3059\u308b work \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>mkdir ~\/work\/\r\n<\/code><\/pre>\n<p>work \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>cd ~\/work\r\n<\/code><\/pre>\n<h2>Kubernetes \u74b0\u5883\u306e\u6e96\u5099 (kubeadm)<\/h2>\n<p>Tacker \u304c ETSINFV-SOL \u30b3\u30f3\u30c6\u30ca\u5316 VNF \u3092 Kubernetes \u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a18\u8f09\u3057\u307e\u3059\u3002<\/p>\n<p>\u672c\u74b0\u5883\u3067\u306f kuryr-kubernetes \u304c\u52d5\u4f5c\u3057\u306a\u3044\u305f\u3081\u3001Devstack \u5185\u306e Kubernetes \u3092 VIM \u3068\u3057\u3066\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002<br \/>\n\u3053\u306e kuryr-kubernetes \u306f VM \u3092\u518d\u8d77\u52d5\u3059\u308b\u3068\u505c\u6b62\u3057\u3001\u52d5\u4f5c\u3057\u306a\u304f\u306a\u308a\u307e\u3059\u3002<br \/>\n\u539f\u56e0\u306f\u73fe\u5728\u3082\u4e0d\u660e\u3067\u3059\u3002<br \/>\n\u305d\u306e\u305f\u3081\u3001\u65b0\u3057\u3044 VM \u4e0a\u306b kubeadm \u3067 Kubernetes \u3092\u8d77\u52d5\u3055\u305b\u3001VIM \u3068\u3057\u3066\u5229\u7528\u3057\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u624b\u9806\u306f Devstack \u3092\u52d5\u4f5c\u3055\u305b\u3066\u3044\u308b\u74b0\u5883\u3068\u306f\u5225\u306e\u74b0\u5883\u3067\u52d5\u4f5c\u3055\u305b\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002<br \/>\nDevstack \u3092\u52d5\u4f5c\u3055\u305b\u3066\u3044\u308b\u74b0\u5883\u3067\u306f etcd \u304c\u52d5\u4f5c\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u305d\u306e\u305f\u3081\u3001\u540c\u74b0\u5883\u3078\u65b0\u305f\u306b Kubernetes \u3092\u52d5\u4f5c\u3055\u305b\u308b\u3068 etcd \u304c\u7af6\u5408\u3057\u3066\u3057\u307e\u3044\u307e\u3059\u3002<\/p>\n<p>\u672c\u624b\u9806\u5b8c\u4e86\u5f8c\u306e\u74b0\u5883\u306f\u4e0b\u8a18\u306e\u56f3\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\n\u3053\u306e\u56f3\u306f 1. \u306f\u3058\u3081\u306b \u3067\u8ff0\u3079\u305f\u7ae0\u3092\u3059\u3079\u3066\u5b9f\u65bd\u6e08\u307f\u306e\u72b6\u614b\u3067\u3059\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d246537434c4406c2e97c\/37-0.png\" alt=\"4\u8a18\u4e8b\u76ee.PNG\" \/><\/div>\n<h3>\u7981\u7528\u4ea4\u6362<\/h3>\n<p>\u7531\u4e8eKubernetes\u5728\u521d\u59cb\u5316\u65f6\u53d1\u751f\u9519\u8bef\uff0c\u9700\u8981\u7981\u7528swap\u3002<\/p>\n<p>\u521b\u5efa fstab \u7684\u5907\u4efd\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>sudo cp -ai \/etc\/fstab{,.default}\r\n<\/code><\/pre>\n<p>\u7981\u7528\u4ea4\u6362\u64cd\u4f5c\u3002<br \/>\n\u6ce8\u9500\u4ee5\u4e0b\u9879\u76ee\u3002<\/p>\n<pre class=\"post-pre\"><code>$ vim  \/etc\/fstab\r\n\/swap.img     none    swap    sw      0       0\r\n<\/code><\/pre>\n<p>\u6211\u786e\u8ba4\u3002<\/p>\n<pre class=\"post-pre\"><code>$ diff \/etc\/fstab{.default,}\r\n12c12\r\n&lt; \/swap.img     none    swap    sw      0       0\r\n---\r\n&gt; #\/swap.img    none    swap    sw      0       0\r\n<\/code><\/pre>\n<p>\u8fd9\u4e2a\u8bbe\u7f6e\u5c06\u5bfc\u81f4\u5728\u91cd\u65b0\u542f\u52a8\u540e\u542f\u52a8\u65f6\u4ea4\u6362\u88ab\u7981\u7528\u7684\u72b6\u6001\uff0c\u4f46\u5982\u679c\u8981\u5728\u4e0d\u91cd\u65b0\u542f\u52a8\u7684\u60c5\u51b5\u4e0b\u7981\u7528\u4ea4\u6362\uff0c\u5219\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\u3002<\/p>\n<pre class=\"post-pre\"><code>sudo swapoff -a\r\n<\/code><\/pre>\n<h3>\u30ab\u30fc\u30cd\u30eb\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u8a2d\u5b9a<\/h3>\n<p>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30d6\u30ea\u30c3\u30b8\u3092\u901a\u904e\u3059\u308b\u30d1\u30b1\u30c3\u30c8\u306b\u5bfe\u3057 iptables \u30eb\u30fc\u30eb\u3092\u9069\u7528\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u6307\u5b9a\u3059\u308b\u30ab\u30fc\u30cd\u30eb\u30d1\u30e9\u30e1\u30fc\u30bf net.bridge.bridge-nf-call-iptables \u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/p>\n<p>1 \u3068\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<pre class=\"post-pre\"><code>$ cat \/proc\/sys\/net\/bridge\/bridge-nf-call-iptables\r\n1\r\n<\/code><\/pre>\n<p>0 \u3068\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u4ee5\u4e0b\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\u8a2d\u5b9a\u3092 1 \u306b\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>echo net.bridge.bridge-nf-call-iptables = 1 &gt; \/etc\/sysctl.d\/99-bridge-nf-call-iptables\r\nsysctl -p \/etc\/sysctl.d\/99-bridge-nf-call-iptables \r\n<\/code><\/pre>\n<h3>\u66f4\u6539 Docker \u9a71\u52a8\u7a0b\u5e8f<\/h3>\n<p>\u4eceKubernetes v1.21\u5f00\u59cb\uff0ckubeadm\u7684\u6807\u51c6cgroup\u9a71\u52a8\u7a0b\u5e8f\u5df2\u4ececgroupfs\u66f4\u6539\u4e3asystemd\u3002\u56e0\u6b64\uff0c\u9700\u8981\u68c0\u67e5Docker\u7684\u9a71\u52a8\u7a0b\u5e8f\uff0c\u5e76\u5728\u5fc5\u8981\u65f6\u8fdb\u884c\u66f4\u6539\u4e3asystemd\u3002<\/p>\n<p>\u6211\u786e\u5b9a\u3002 (W\u01d2 .)<\/p>\n<pre class=\"post-pre\"><code>$ docker info | grep Cgroup\r\n  Cgroup Driver: cgroupfs\r\n  Cgroup Version: 1\r\n<\/code><\/pre>\n<p>daemon.json \u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>sudo cp -ai \/etc\/docker\/daemon.json{,.default}\r\n<\/code><\/pre>\n<p>daemon.json \u30d5\u30a1\u30a4\u30eb\u306b\u4e0b\u8a18\u3092\u8ffd\u8a18\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo vim \/etc\/docker\/daemon.json\r\n\u30fb\u30fb\u30fb\r\n  \"exec-opts\": [\"native.cgroupdriver=systemd\"],\r\n\u30fb\u30fb\u30fb\r\n<\/code><\/pre>\n<p>\u6267\u884cdaemon\u7684\u91cd\u65b0\u52a0\u8f7d\u548cdocker.service\u7684\u91cd\u65b0\u542f\u52a8\u3002<\/p>\n<pre class=\"post-pre\"><code>sudo systemctl daemon-reload\r\nsudo systemctl restart docker.service\r\n<\/code><\/pre>\n<p>\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker info | grep Cgroup\r\n Cgroup Driver: systemd\r\n Cgroup Version: 1\r\n<\/code><\/pre>\n<h3>\u4e3b\u8282\u70b9\u7684\u8bbe\u7f6e<\/h3>\n<p>\u6211\u4eec\u5c06\u642d\u5efaKubernetes\u96c6\u7fa4\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo kubeadm init --pod-network-cidr=10.244.0.0\/16\r\nI0715 06:29:47.841987  107552 version.go:255] remote version is much newer: v1.24.3; falling back to: stable-1.22\r\n[init] Using Kubernetes version: v1.22.12\r\n[preflight] Running pre-flight checks\r\n[preflight] Pulling images required for setting up a Kubernetes cluster\r\n[preflight] This might take a minute or two, depending on the speed of your internet connection\r\n[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'\r\n[certs] Using certificateDir folder \"\/etc\/kubernetes\/pki\"\r\n[certs] Generating \"ca\" certificate and key\r\n[certs] Generating \"apiserver\" certificate and key\r\n[certs] apiserver serving cert is signed for DNS names [kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local yoshitest] and IPs [10.96.0.1 10.100.2.210]\r\n[certs] Generating \"apiserver-kubelet-client\" certificate and key\r\n[certs] Generating \"front-proxy-ca\" certificate and key\r\n[certs] Generating \"front-proxy-client\" certificate and key\r\n[certs] Generating \"etcd\/ca\" certificate and key\r\n[certs] Generating \"etcd\/server\" certificate and key\r\n[certs] etcd\/server serving cert is signed for DNS names [localhost yoshitest] and IPs [10.100.2.210 127.0.0.1 ::1]\r\n[certs] Generating \"etcd\/peer\" certificate and key\r\n[certs] etcd\/peer serving cert is signed for DNS names [localhost yoshitest] and IPs [10.100.2.210 127.0.0.1 ::1]\r\n[certs] Generating \"etcd\/healthcheck-client\" certificate and key\r\n[certs] Generating \"apiserver-etcd-client\" certificate and key\r\n[certs] Generating \"sa\" key and public key\r\n[kubeconfig] Using kubeconfig folder \"\/etc\/kubernetes\"\r\n[kubeconfig] Writing \"admin.conf\" kubeconfig file\r\n[kubeconfig] Writing \"kubelet.conf\" kubeconfig file\r\n[kubeconfig] Writing \"controller-manager.conf\" kubeconfig file\r\n[kubeconfig] Writing \"scheduler.conf\" kubeconfig file\r\n[kubelet-start] Writing kubelet environment file with flags to file \"\/var\/lib\/kubelet\/kubeadm-flags.env\"\r\n[kubelet-start] Writing kubelet configuration to file \"\/var\/lib\/kubelet\/config.yaml\"\r\n[kubelet-start] Starting the kubelet\r\n[control-plane] Using manifest folder \"\/etc\/kubernetes\/manifests\"\r\n[control-plane] Creating static Pod manifest for \"kube-apiserver\"\r\n[control-plane] Creating static Pod manifest for \"kube-controller-manager\"\r\n[control-plane] Creating static Pod manifest for \"kube-scheduler\"\r\n[etcd] Creating static Pod manifest for local etcd in \"\/etc\/kubernetes\/manifests\"\r\n[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory \"\/etc\/kubernetes\/manifests\". This can take up to 4m0s\r\n[apiclient] All control plane components are healthy after 17.502563 seconds\r\n[upload-config] Storing the configuration used in ConfigMap \"kubeadm-config\" in the \"kube-system\" Namespace\r\n[kubelet] Creating a ConfigMap \"kubelet-config-1.22\" in namespace kube-system with the configuration for the kubelets in the cluster\r\n[upload-certs] Skipping phase. Please see --upload-certs\r\n[mark-control-plane] Marking the node yoshitest as control-plane by adding the labels: [node-role.kubernetes.io\/master(deprecated) node-role.kubernetes.io\/control-plane node.kubernetes.io\/exclude-from-external-load-balancers]\r\n[mark-control-plane] Marking the node yoshitest as control-plane by adding the taints [node-role.kubernetes.io\/master:NoSchedule]\r\n[bootstrap-token] Using token: slx8x6.kvl1eks1u9auzbm6\r\n[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles\r\n[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to get nodes\r\n[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials\r\n[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token\r\n[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster\r\n[bootstrap-token] Creating the \"cluster-info\" ConfigMap in the \"kube-public\" namespace\r\n[kubelet-finalize] Updating \"\/etc\/kubernetes\/kubelet.conf\" to point to a rotatable kubelet client certificate and key\r\n[addons] Applied essential addon: CoreDNS\r\n[addons] Applied essential addon: kube-proxy\r\n\r\nYour Kubernetes control-plane has initialized successfully!\r\n\r\nTo start using your cluster, you need to run the following as a regular user:\r\n\r\n  mkdir -p $HOME\/.kube\r\n  sudo cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config\r\n  sudo chown $(id -u):$(id -g) $HOME\/.kube\/config\r\n\r\nAlternatively, if you are the root user, you can run:\r\n\r\n  export KUBECONFIG=\/etc\/kubernetes\/admin.conf\r\n\r\nYou should now deploy a pod network to the cluster.\r\nRun \"kubectl apply -f [podnetwork].yaml\" with one of the options listed at:\r\n  https:\/\/kubernetes.io\/docs\/concepts\/cluster-administration\/addons\/\r\n\r\nThen you can join any number of worker nodes by running the following on each as root:\r\n\r\nkubeadm join 10.100.2.210:6443 --token slx8x6.kvl1eks1u9auzbm6 \\\r\n        --discovery-token-ca-cert-hash sha256:06c48716c874f3565250f79837e07db67e7e98e493d45072818a335c07f0a633\r\n<\/code><\/pre>\n<p>.kube \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u914d\u7f6e\u3057\u307e\u3059\u3002<br \/>\n\u3053\u308c\u306b\u3088\u308a kubectl \u30b3\u30de\u30f3\u30c9\u306a\u3069\u304c\u4f7f\u7528\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>mkdir -p $HOME\/.kube\r\nsudo cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config\r\nsudo chown $(id -u):$(id -g) $HOME\/.kube\/config\r\n<\/code><\/pre>\n<p>Kubernetes \u5c06\u68c0\u67e5\u5176\u8fd0\u884c\u72b6\u6001\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl get node\r\nNAME        STATUS   ROLES                  AGE   VERSION\r\nyoshitest   Ready    control-plane,master   11m   v1.22.3\r\n\r\n$ kubectl get pod --all-namespaces\r\nNAMESPACE     NAME                                READY   STATUS              RESTARTS   AGE\r\nkube-system   coredns-78fcd69978-bflnm            0\/1     ContainerCreating   0          11m\r\nkube-system   coredns-78fcd69978-dh6kg            0\/1     ContainerCreating   0          11m\r\nkube-system   etcd-yoshitest                      1\/1     Running             1          11m\r\nkube-system   kube-apiserver-yoshitest            1\/1     Running             1          11m\r\nkube-system   kube-controller-manager-yoshitest   1\/1     Running             1          11m\r\nkube-system   kube-proxy-p84m8                    1\/1     Running             0          11m\r\nkube-system   kube-scheduler-yoshitest            1\/1     Running             1          11m\r\n<\/code><\/pre>\n<h3>CNI \u5b89\u88c5<\/h3>\n<p>\u5c06Calico\u4f5c\u4e3aCNI\u63d2\u4ef6\u5b89\u88c5\u3002<br \/>\n\u5de5\u4f5c\u76ee\u5f55\u5c06\u8bbe\u5b9a\u4e3a~\/work\/calico\u3002<\/p>\n<pre class=\"post-pre\"><code>mkdir -p ~\/work\/calico\r\ncd ~\/work\/calico\r\n<\/code><\/pre>\n<p>\u4e0b\u8f7d\u6240\u9700\u7684\u5b89\u88c5\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>curl https:\/\/projectcalico.docs.tigera.io\/manifests\/tigera-operator.yaml -O\r\ncurl https:\/\/projectcalico.docs.tigera.io\/manifests\/custom-resources.yaml -O\r\n<\/code><\/pre>\n<p>\u5c06 customer-resources.yaml \u6587\u4ef6\u4e2d spec.calicoNetwork.ipPools.cidr \u7684\u503c\u66f4\u6539\u4e3a\u4f7f\u7528 kubeadm init &#8211;pod-network-cidr= \u6307\u5b9a\u7684\u503c\u3002<\/p>\n<pre class=\"post-pre\"><code>$ vim custom-resources.yaml\r\n\u30fb\u30fb\u30fb\r\nspec:\r\n  # Configures Calico networking.\r\n  calicoNetwork:\r\n    # Note: The ipPools section cannot be modified post-install.\r\n    ipPools:\r\n    - blockSize: 26\r\n      cidr: 10.244.0.0\/16\r\n\u30fb\u30fb\u30fb\r\n<\/code><\/pre>\n<p>\u5b89\u88c5 Calico\u3002<\/p>\n<pre class=\"post-pre\"><code>kubectl apply -f tigera-operator.yaml\r\nkubectl apply -f custom-resources.yaml\r\n<\/code><\/pre>\n<p>\u60a8\u597d\u3002\u300c\u8d77\u52a8\u786e\u8ba4\u3057\u307e\u3059\u3002\u300d\u7684\u4e2d\u6587\u7ffb\u8bd1\u53ef\u4ee5\u662f\u300c\u8fdb\u884c\u542f\u52a8\u786e\u8ba4\u3002\u300d\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl get pod -n tigera-operator\r\nNAME                              READY   STATUS    RESTARTS   AGE\r\ntigera-operator-d8cbfddcc-dmfww   1\/1     Running   0          29s\r\n\r\n$ kubectl get pod -n calico-system\r\nNAME                                       READY   STATUS    RESTARTS   AGE\r\ncalico-kube-controllers-7f87b64bd9-fzshn   1\/1     Running   0          5m13s\r\ncalico-node-dgwhm                          1\/1     Running   0          5m13s\r\ncalico-typha-5fdf9ffc5c-bvmp9              1\/1     Running   0          5m14s\r\n<\/code><\/pre>\n<h3>\u5220\u9664 Master \u8282\u70b9\u7684 Taint \u4fe1\u606f<\/h3>\n<p>\u672c\u6b21\u6211\u4eec\u4e0d\u4f1a\u521b\u5efaWorker\u8282\u70b9\uff0c\u53ea\u5728Master\u8282\u70b9\u4e0a\u8fd0\u884c\u3002<br \/>\n\u4e3a\u4e86\u9632\u6b62Pod\u5728Master\u8282\u70b9\u4e0a\u90e8\u7f72\uff0cMaster\u8282\u70b9\u9ed8\u8ba4\u6dfb\u52a0\u4e86\u4e00\u4e2a\u540d\u4e3anode-role.kubernetes.io\/master:NoSchedule\u7684Taint\u3002<br \/>\n\u7531\u4e8e\u6ca1\u6709\u51c6\u5907Worker\u8282\u70b9\uff0c\u65e0\u6cd5\u90e8\u7f72Pod\uff0c\u56e0\u6b64\u5728\u672c\u73af\u5883\u4e2d\u5c06\u5220\u9664\u6b64Taint\u4fe1\u606f\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl get node\r\nNAME        STATUS   ROLES                  AGE   VERSION\r\nyoshitest   Ready    control-plane,master   33m   v1.22.3\r\n\r\n$ kubectl taint nodes yoshitest node-role.kubernetes.io\/master:NoSchedule-\r\nnode\/yoshitest untainted\r\n<\/code><\/pre>\n<h3>\u786e\u8ba4\u542f\u52a8\u6837\u672c\u6e05\u5355\u3002<\/h3>\n<p>\u8bf7\u51c6\u5907\u4ee5\u4e0b\u793a\u4f8b\u6587\u4ef6\u4f5c\u4e3amanifest\u7684\u6587\u4ef6\uff0c\u5e76\u5c1d\u8bd5\u542f\u52a8Pod\u4f5c\u4e3a\u793a\u4f8b\u3002<\/p>\n<pre class=\"post-pre\"><code>$ cat &lt;&lt; _EOF_ &gt; sample.yaml\r\napiVersion: apps\/v1 # for versions before 1.9.0 use apps\/v1beta2\r\nkind: Deployment\r\nmetadata:\r\n  name: nginx-deployment\r\nspec:\r\n  selector:\r\n    matchLabels:\r\n      app: nginx\r\n  replicas: 2 # tells deployment to run 2 pods matching the template\r\n  template:\r\n    metadata:\r\n      labels:\r\n        app: nginx\r\n    spec:\r\n      containers:\r\n      - name: nginx\r\n        image: nginx:1.14.2\r\n        ports:\r\n        - containerPort: 80\r\n_EOF_\r\n<\/code><\/pre>\n<p>\u542f\u52a8\u3002<\/p>\n<pre class=\"post-pre\"><code>kubectl apply -f sample.yaml\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u786e\u8ba4\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl get pod\r\nNAME                                READY   STATUS    RESTARTS   AGE\r\nnginx-deployment-66b6c48dd5-glcrt   1\/1     Running   0          10m\r\nnginx-deployment-66b6c48dd5-t7s4n   1\/1     Running   0          10m\r\n<\/code><\/pre>\n<h2>Kubernetes \u865a\u62df\u673a\u7ba1\u7406\u5668 (VIM)<\/h2>\n<p>\u8bf7\u5728\u57fa\u672c\u4e0a\u5df2\u7ecf\u8fd0\u884cDevstack\u7684\u673a\u5668\u4e0a\u8fdb\u884c\u4ee5\u4e0b\u5de5\u4f5c\u3002<br \/>\n\u53ea\u6709\u5728 Kubernetes Master \u8282\u70b9\u4e0a\u624d\u9700\u8981\u8fdb\u884c[VIM\u7528\u914d\u7f6e\u6587\u4ef6\u7684\u521b\u5efa\u6240\u9700\u4fe1\u606f\u83b7\u53d6]\u3002<\/p>\n<h3>\u83b7\u53d6\u521b\u5efaVIM\u914d\u7f6e\u6587\u4ef6\u6240\u9700\u7684\u4fe1\u606f<\/h3>\n<p>\u5728Kubernetes Master\u8282\u70b9\u4e0a\u6267\u884c\u6b64\u6b65\u9aa4\uff0c\u6536\u96c6\u6240\u9700\u7528\u4e8e\u521b\u5efa\u6587\u4ef6\u7684\u4ee5\u4e0b\u503c\u3002<\/p>\n<ul class=\"post-ul\">auth_url<\/ul>\n<p>\u6211\u7684 IP \u5730\u5740\u662f\uff1a&lt;\u81ea\u8eab\u7684 IP&gt;:6443\u3002<\/p>\n<p>\u5982\u679c\u4f7f\u7528\u547d\u4ee4\u6765\u67e5\u8be2\uff0c\u8bf7\u6309\u4ee5\u4e0b\u65b9\u5f0f\u64cd\u4f5c\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl cluster-info\r\nKubernetes control plane is running at https:\/\/10.100.2.210:6443\r\nCoreDNS is running at https:\/\/10.100.2.210:6443\/api\/v1\/namespaces\/kube-system\/services\/kube-dns:dns\/proxy\r\n\r\nTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.\r\n<\/code><\/pre>\n<ul class=\"post-ul\">bearer_token<\/ul>\n<p>\u786e\u8ba4\u5305\u542b\u6709&#8221;\u30d9\u30a2\u30c8\u30fc\u30af\u30f3&#8221;\u7684Kubernetes Secret\u540d\u79f0\u3002<\/p>\n<p>\u5728Kubernetes\u6570\u636e\u6a21\u578b\u4e2d\uff0c\u5305\u542b\u5728.data\u4e2d\u7684\u503c\u4ee5Base64\u5f62\u5f0f\u8fdb\u884c\u7f16\u7801\uff0c\u56e0\u6b64\u5982\u679c\u8981\u5c06\u5176\u7528\u4f5c\u88f8\u4ee4\u724c\uff0c\u9700\u8981\u4f7f\u7528base64 &#8211;decode\u6216base64 -d\u547d\u4ee4\u5bf9\u5176\u8fdb\u884c\u89e3\u7801\u3002<\/p>\n<pre class=\"post-pre\"><code>$  kubectl get secret\r\nNAME                  TYPE                                  DATA   AGE\r\ndefault-token-qm98x   kubernetes.io\/service-account-token   3      59m\r\n\r\n$ TOKEN=$(kubectl get secret default-token-qm98x -o jsonpath=\"{.data.token}\" | base64 --decode) &amp;&amp; echo $TOKEN\r\neyJhbGciOiJSUzI1NiIsImtpZCI6IjNGVXpEeGIxbU9xMGY0NEpEeGt4bkhrMDJidU9GSUVMUFN0RlRGMi16R1kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tcW05OHgiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImY2MGQxYWNlLTU3YmQtNDY1OC05YTBjLWIxMTdmMzNmY2EyYiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.kPwKalaP5123zJ7Lw29PCHpT_mU5uwjUkbtKFbn9rtCfUAXCEwOveTFf3F9s08RudaQKy5CJQrj5TqAS_7lQ2EQePKBL6_pW9YKxqUUNRw8krF7xa-ghTON2B0HKdTl51ZMPKwgjLkydrvH7JQT5C11WBbot0auct-m2wBlL1M8ahUdaHcv--nCHm4JF7NKMd8wW0ASmGBGV3Fei8GEUVMCp-GicrDzp8A0dgbVY9NZkWoed4cP6eSsVN_FaHwt2V4SqrvgjkNvDttFID9sL7UkcKGz8KIJSLzQnX6DVDuUyXjSpz7TsvAN2-DV2oO8fn35WlhLw9YZQ3t264qs0bQ\r\n<\/code><\/pre>\n<p>\u5728\u4f7f\u7528\u6b64\u4ee4\u724c\u4e4b\u524d\uff0c\u7528\u6237\u9700\u8981\u5c06\u7ba1\u7406\u5458\u89d2\u8272\u5e94\u7528\u4e8e\u6b64\u4ee4\u724c\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl create clusterrolebinding cluster-admin-binding \\\r\n--clusterrole cluster-admin --serviceaccount=default:default\r\nclusterrolebinding.rbac.authorization.k8s.io\/cluster-admin-binding created\r\n<\/code><\/pre>\n<ul class=\"post-ul\">ssl_ca_cert<\/ul>\n<p>\u83b7\u53d6\u6709\u5173 Kubernetes \u96c6\u7fa4\u8eab\u4efd\u9a8c\u8bc1\u7684\u8be6\u7ec6\u4fe1\u606f\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl get secrets default-token-qm98x  -o jsonpath=\"{.data.ca\\.crt}\" | base64 --decode\r\n-----BEGIN CERTIFICATE-----\r\nMIIC\/jCCAeagAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl\r\ncm5ldGVzMB4XDTIyMDcxNTA2Mjk0OVoXDTMyMDcxMjA2Mjk0OVowFTETMBEGA1UE\r\nAxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK6q\r\nQ\/LNRChV6tw2ucfNhV8sBBvWyt+0KtFyDA16h7Tm49wBBzx\/Y\/cF4UGBFUETcYgA\r\n9zUbrcPqnBeyVXD9Td5R0y\/oqPXuX3wBzetalcSe3OlZiAiG28asWf1jaXGCDgmk\r\nhfQBz2OQi0jO98XoG014ok7Ortgz0v6ZV\/9tcGPCwxlsERRXCYpeytHE4aCI\/aky\r\n8fnT7SGQ506WD7x4DnSYluH5ceH3NeQ56qIsLZUk4G75LVSTr26r7bds6n81urgV\r\npJi9OMaxA1SWveEoH5serSy5nNfLzjFZhS7r3KDkUl3yokltlQq61K3rHLNQoz+Z\r\n+BpklMSQj8a9thkylj8CAwEAAaNZMFcwDgYDVR0PAQH\/BAQDAgKkMA8GA1UdEwEB\r\n\/wQFMAMBAf8wHQYDVR0OBBYEFFNNpaDF4hs8BcdxmNoUyUcvVomAMBUGA1UdEQQO\r\nMAyCCmt1YmVybmV0ZXMwDQYJKoZIhvcNAQELBQADggEBAF72CNi5EUFeUYLxP9Qf\r\nbuSD2hQaDcgBr+W9de\/BFGXF1jm+lUag92Jd7+EIHwt27Pf4mRpZLce6pB3bhzQ6\r\noc7b5vs9k3B+3gByPKW52RZrz7cXL1nfz2TxgBEqiruZiviZiZB7f\/KkMZDeU+fW\r\nc5R96oBr4\/eGqtTh2P6q5UKYixOoYjhnZGCQOYG+SJInIqKQUBmbqaazCXCZNxdv\r\n1fPzBe73AnMdiFl9AzEc38htf912dh5SRzKmkH47cU\/m+7GbzXLsjhOtGWay\/rV4\r\nthpePCADCWBYrL62VZoRJs+VW7jNPTJwTMkfUuKN6KwSXugJVvAGRVsrV9rnTuOO\r\nsbQ=\r\n-----END CERTIFICATE-----\r\n<\/code><\/pre>\n<p>\u60a8\u53ef\u4ee5\u786e\u8ba4API\u7aef\u70b9\u548c\u8bbf\u95ee\u4ee4\u724c\u662f\u53ef\u7528\u7684\u3002<\/p>\n<pre class=\"post-pre\"><code>$ curl -k https:\/\/10.100.2.210:6443\/api\/ -H \"Authorization: Bearer $TOKEN\"\r\n{\r\n  \"kind\": \"APIVersions\",\r\n  \"versions\": [\r\n    \"v1\"\r\n  ],\r\n  \"serverAddressByClientCIDRs\": [\r\n    {\r\n      \"clientCIDR\": \"0.0.0.0\/0\",\r\n      \"serverAddress\": \"10.100.2.210:6443\"\r\n    },\r\n    {\r\n      \"clientCIDR\": \"10.96.0.0\/12\",\r\n      \"serverAddress\": \"10.96.0.1:443\"\r\n    }\r\n  ]\r\n}\r\n<\/code><\/pre>\n<h3>\u521b\u5efaVIM\u7684\u914d\u7f6e\u6587\u4ef6<\/h3>\n<p>\u4f7f\u7528\u83b7\u53d6\u5230\u7684\u4fe1\u606f\u6765\u521b\u5efa\u914d\u7f6e\u6587\u4ef6\u3002<br \/>\n\u4ee5\u4e0b\u6b65\u9aa4\u5c06\u5728\u8fd0\u884cDevstack\u7684\u8ba1\u7b97\u673a\u4e0a\u6267\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code>cat &lt;&lt; _EOF_ &gt; ~\/work\/vim-k8s.yaml\r\nauth_url: \"https:\/\/10.100.2.210:6443\"\r\nproject_name: \"default\"\r\nbearer_token: \"eyJhbGciOiJSUzI1NiIsImtpZCI6IjNGVXpEeGIxbU9xMGY0NEpEeGt4bkhrMDJidU9GSUVMUFN0RlRGMi16R1kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tcW05OHgiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImY2MGQxYWNlLTU3YmQtNDY1OC05YTBjLWIxMTdmMzNmY2EyYiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.kPwKalaP5123zJ7Lw29PCHpT_mU5uwjUkbtKFbn9rtCfUAXCEwOveTFf3F9s08RudaQKy5CJQrj5TqAS_7lQ2EQePKBL6_pW9YKxqUUNRw8krF7xa-ghTON2B0HKdTl51ZMPKwgjLkydrvH7JQT5C11WBbot0auct-m2wBlL1M8ahUdaHcv--nCHm4JF7NKMd8wW0ASmGBGV3Fei8GEUVMCp-GicrDzp8A0dgbVY9NZkWoed4cP6eSsVN_FaHwt2V4SqrvgjkNvDttFID9sL7UkcKGz8KIJSLzQnX6DVDuUyXjSpz7TsvAN2-DV2oO8fn35WlhLw9YZQ3t264qs0bQ\"\r\nssl_ca_cert: \"-----BEGIN CERTIFICATE-----\r\nMIIC\/jCCAeagAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl\r\ncm5ldGVzMB4XDTIyMDcxNTA2Mjk0OVoXDTMyMDcxMjA2Mjk0OVowFTETMBEGA1UE\r\nAxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK6q\r\nQ\/LNRChV6tw2ucfNhV8sBBvWyt+0KtFyDA16h7Tm49wBBzx\/Y\/cF4UGBFUETcYgA\r\n9zUbrcPqnBeyVXD9Td5R0y\/oqPXuX3wBzetalcSe3OlZiAiG28asWf1jaXGCDgmk\r\nhfQBz2OQi0jO98XoG014ok7Ortgz0v6ZV\/9tcGPCwxlsERRXCYpeytHE4aCI\/aky\r\n8fnT7SGQ506WD7x4DnSYluH5ceH3NeQ56qIsLZUk4G75LVSTr26r7bds6n81urgV\r\npJi9OMaxA1SWveEoH5serSy5nNfLzjFZhS7r3KDkUl3yokltlQq61K3rHLNQoz+Z\r\n+BpklMSQj8a9thkylj8CAwEAAaNZMFcwDgYDVR0PAQH\/BAQDAgKkMA8GA1UdEwEB\r\n\/wQFMAMBAf8wHQYDVR0OBBYEFFNNpaDF4hs8BcdxmNoUyUcvVomAMBUGA1UdEQQO\r\nMAyCCmt1YmVybmV0ZXMwDQYJKoZIhvcNAQELBQADggEBAF72CNi5EUFeUYLxP9Qf\r\nbuSD2hQaDcgBr+W9de\/BFGXF1jm+lUag92Jd7+EIHwt27Pf4mRpZLce6pB3bhzQ6\r\noc7b5vs9k3B+3gByPKW52RZrz7cXL1nfz2TxgBEqiruZiviZiZB7f\/KkMZDeU+fW\r\nc5R96oBr4\/eGqtTh2P6q5UKYixOoYjhnZGCQOYG+SJInIqKQUBmbqaazCXCZNxdv\r\n1fPzBe73AnMdiFl9AzEc38htf912dh5SRzKmkH47cU\/m+7GbzXLsjhOtGWay\/rV4\r\nthpePCADCWBYrL62VZoRJs+VW7jNPTJwTMkfUuKN6KwSXugJVvAGRVsrV9rnTuOO\r\nsbQ=\r\n-----END CERTIFICATE-----\"\r\ntype: \"kubernetes\"\r\n_EOF_\r\n<\/code><\/pre>\n<h3>Kubernetes VIM \u6ce8\u518c<\/h3>\n<p>\u5c06 Kubernetes VIM \u6ce8\u518c\u5230 Tacker \u4e0a\u3002<br \/>\ntest-vim-k8s-kubeadm \u662f\u8981\u6ce8\u518c\u7684 Kubernetes VIM \u7684\u540d\u79f0\u3002<\/p>\n<pre class=\"post-pre\"><code>$ openstack vim register --config-file vim-k8s.yaml test-vim-k8s-kubeadm --fit-width\r\n+----------------+---------------------------------------------------------------------------------------------------------+\r\n| Field          | Value                                                                                                   |\r\n+----------------+---------------------------------------------------------------------------------------------------------+\r\n| auth_cred      | {                                                                                                       |\r\n|                |     \"bearer_token\": \"***\",                                                                              |\r\n|                |     \"ssl_ca_cert\": \"b'gAAAAABi0SJYjdfgr98GZaz2sFM5kRw8ZDgZUWkWFwdqQaE1uRLcOiQz3qW4Si66ECS7vApgPHieINreB |\r\n|                | k4ECVvZH9CUGyQWCW1FvVsM7U_6M2jpVjsPDTE9s2h78WI4OIA_qw24zQtafubWuWmMeAv2h3ZtIeeo8vxrxMt6UsVNlpgyFrDE6fyG |\r\n|                | 0zZ7j9-HFFbHxTUXrr75maiBqQISmzpxvcG-URCyb-                                                              |\r\n|                | qdJIqPKSZ38isVlzpU5NpgEuuTxqMBdNPADGzUk0eGDiBHNLRjNQ1j-braFxFR9iXfxpHcsLbKtZztaacO-                     |\r\n|                | uJEjtpL1yXZ1lPbwGXurwWf4j2UzsxrnsWoHR1rdNV5PCnefIj-                                                     |\r\n|                | PIEub_kVOWSF33YuFqHgR7XbkAmMGJalRzE521rCGA64BlG7k1Es-                                                   |\r\n|                | SyN89YCeEEtnIVf6Kk3ylXfnw0SIefuN48VSj0UV1WJlkcEzXPTAEWueUIjj9pAxaaCW-                                   |\r\n|                | znFpqv4_3NZDyG5RYEuDqNo8pi7Vj4kBsT9NK-RcCeAg3cCQcaKsi_SD0NQ0NoWQd5eKWelSeDxTzhTlYpIN_SD7f85ab-          |\r\n|                | pKPrp4x_F-rPgTcOchrtYBQ3yZvg-zNihmuQLe1yKa_Hf9RjKzc5_I_t4pjoPy140n3QyefuM8yGN973MovEXe8WrjcS_z02VHs_nYB |\r\n|                | 1snD4vxhnbUVxNy0TbnAvcujVR_Y2jzw71iUsNVVwXLT3-81xcs5T7B6m-aFH0icyLQy3Ixvj-mm4GVbya8xCGidIaF1iIBV-NXHUng |\r\n|                | 0jmsGxRnoOfmLnUef1ek_TFYLmv43cbhbLLdiaPMMWdYdhN5z7AoJiWhL6cVlKmsd1WWKjBPW_GqQgFnlqN1l6CeL5G5_GFfsulcLxk |\r\n|                | b06Astvyvv0yMozjHgBMI79WbYmOyqo0NnMCkJFnJLAumP-jy_RtHeKpV8tq41j7BSm-ehc2vdgiWSuCXI5m0J49sDv9yQ631UBQmTf |\r\n|                | Nve1ANonQBIB6_sMon52chThE0JL6QtX_N4y0pe0HCyibQAh5a6d0qo2yUAQXS9pPctPkXw7IQpCi2pfr6WmD4SxY5GVegjZg6ySlY6 |\r\n|                | X-yShYHw88_ixnulGnLZDcXZp9Y14XwYCGOdY25wekuuvronkKJVnb7cedDV6jj8jTYwkLBuQLfAeJI7nG78DsrOs-              |\r\n|                | PlsVv4M2hgCgEbDRKckw9ZHcnPAKSGYGP-ongmwhobbkRYLCi8qSuSuCsUT47AvGjsC7yOUDVk0iX-DrQ2V5R-Nns-              |\r\n|                | pWOj25kz5EB0FxNkAWjVjyMaXYw3Ic3_p_hciOj6eE1CtIsVncHF50TlXVkOMrsbzgpH7zWRrbHh4VFKuk66Zrtgh-              |\r\n|                | iGv8LkhpOqLoG7x6ayfVmxjzZU2i--F4AKc8EBPXj-_05n6EeOgIEe4szLpUUy_UfeHsYhgkEeGkWWA6RR0HpzF-                |\r\n|                | uwKnsX1aMfCdFTUmnuvrJWnRJhAsMG-G3sChGo90_G5nNhbXMf6YWcMk8pocNjvVNLJ6vqvgH5aEsnSklbmI2XYHbFRgbCeKRJp'\",  |\r\n|                |     \"auth_url\": \"https:\/\/10.100.2.210:6443\",                                                            |\r\n|                |     \"username\": \"None\",                                                                                 |\r\n|                |     \"key_type\": \"barbican_key\",                                                                         |\r\n|                |     \"secret_uuid\": \"***\",                                                                               |\r\n|                |     \"password\": \"***\"                                                                                   |\r\n|                | }                                                                                                       |\r\n| auth_url       | https:\/\/10.100.2.210:6443                                                                               |\r\n| created_at     | 2022-07-15 08:16:25.496115                                                                              |\r\n| description    |                                                                                                         |\r\n| id             | e31459a6-1380-4fd8-930b-a70dc0500614                                                                    |\r\n| is_default     | False                                                                                                   |\r\n| name           | test-vim-k8s-kubeadm                                                                                    |\r\n| placement_attr | {                                                                                                       |\r\n|                |     \"regions\": [                                                                                        |\r\n|                |         \"calico-apiserver\",                                                                             |\r\n|                |         \"calico-system\",                                                                                |\r\n|                |         \"default\",                                                                                      |\r\n|                |         \"kube-node-lease\",                                                                              |\r\n|                |         \"kube-public\",                                                                                  |\r\n|                |         \"kube-system\",                                                                                  |\r\n|                |         \"tigera-operator\"                                                                               |\r\n|                |     ]                                                                                                   |\r\n|                | }                                                                                                       |\r\n| project_id     | cd492cafc33c4d6b878ee570f6aeae21                                                                        |\r\n| status         | PENDING                                                                                                 |\r\n| type           | kubernetes                                                                                              |\r\n| updated_at     | None                                                                                                    |\r\n| vim_project    | {                                                                                                       |\r\n|                |     \"name\": \"default\"                                                                                   |\r\n|                | }                                                                                                       |\r\n+----------------+---------------------------------------------------------------------------------------------------------+\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u5df2\u6ce8\u518cVIM\u7684\u72b6\u6001\u662f\u5426\u4e3aREACHABLE\u3002<\/p>\n<pre class=\"post-pre\"><code>$ openstack vim list\r\n+--------------------------------------+----------------------+----------------------------------+------------+------------+-----------+\r\n| ID                                   | Name                 | Tenant_id                        | Type       | Is Default | Status    |\r\n+--------------------------------------+----------------------+----------------------------------+------------+------------+-----------+\r\n| e31459a6-1380-4fd8-930b-a70dc0500614 | test-vim-k8s-kubeadm | cd492cafc33c4d6b878ee570f6aeae21 | kubernetes | False      | REACHABLE |\r\n+--------------------------------------+----------------------+----------------------------------+------------+------------+-----------+\r\n<\/code><\/pre>\n<p>\u6211\u5011\u5c07\u5b9a\u7fa9\u4e00\u500b\u74b0\u5883\u8b8a\u6578 VIM ID\u3002<\/p>\n<pre class=\"post-pre\"><code>export VIM_ID=e31459a6-1380-4fd8-930b-a70dc0500614\r\n<\/code><\/pre>\n<h2>VNF\u5305\u7684\u51c6\u5907\u5de5\u4f5c<\/h2>\n<p>VNF\u5305\u4e2d\u9700\u8981\u5305\u542bCNF\u5b9a\u4e49\uff0c\u9664\u4e86VNFD\u3002<\/p>\n<h3>\u521b\u5efa VNF \u5305\u7684\u76ee\u5f55<\/h3>\n<p>\u521b\u5efa\u4e00\u4e2a\u76ee\u5f55\u6765\u653e\u7f6eVNF\u8f6f\u4ef6\u5305\u3002<\/p>\n<pre class=\"post-pre\"><code>mkdir -p ~\/work\/deployment\/{TOSCA-Metadata,Definitions,Files\/kubernetes}\r\n<\/code><\/pre>\n<h3>\u521b\u5efaKubernetes\u5bf9\u8c61\u6587\u4ef6<\/h3>\n<p>CSAR VNF \u5305\u5fc5\u987b\u5305\u542b\u5b9a\u4e49\u8981\u90e8\u7f72\u7684 Kubernetes \u8d44\u6e90\u7684\u5bf9\u8c61\u6587\u4ef6\u3002<br \/>\n\u6839\u636e\u4e0d\u540c\u7684 yaml \u6587\u4ef6\u5185\u5bb9\uff0c\u53ef\u4ee5\u521b\u5efa Kubernetes API \u8d44\u6e90\u3002<\/p>\n<p>\u521b\u5efa\u4e00\u4e2a\u7b80\u5355\u7684\u90e8\u7f72\u8d44\u6e90\u3002<\/p>\n<pre class=\"post-pre\"><code>cat &lt;&lt; _EOF_ &gt; ~\/work\/deployment\/Files\/kubernetes\/deployment.yaml\r\napiVersion: apps\/v1\r\nkind: Deployment\r\nmetadata:\r\n name: curry-probe-test001\r\n namespace: default\r\nspec:\r\n replicas: 1\r\n selector:\r\n   matchLabels:\r\n     selector: curry-probe-test001\r\n template:\r\n   metadata:\r\n     labels:\r\n       selector: curry-probe-test001\r\n       app: webserver\r\n   spec:\r\n     containers:\r\n     - name: nginx-liveness-probe\r\n       image: nginx\r\n       imagePullPolicy: IfNotPresent\r\n       ports:\r\n       - containerPort: 80\r\n         protocol: TCP\r\n     - image: celebdor\/kuryr-demo\r\n       imagePullPolicy: IfNotPresent\r\n       name: kuryr-demo-readiness-probe\r\n       ports:\r\n       - containerPort: 8080\r\n         protocol: TCP\r\n_EOF_\r\n<\/code><\/pre>\n<p>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u306b vdu_mapping \u304c\u542b\u307e\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306e metadata.name \u306f\u3001\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30d5\u30ec\u30fc\u30d0\u30fc\u5b9a\u7fa9\u30d5\u30a1\u30a4\u30eb\u306e\u5bfe\u5fdc\u3059\u308b VDU \u306e properties.name \u3068\u540c\u3058\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<br \/>\n\u4eca\u56de\u306e\u624b\u9806\u3067\u306f metadata.name \u306f\u5f8c\u7a0b\u4f5c\u6210\u3059\u308b helloworld3_df_simple.yaml \u30d5\u30a1\u30a4\u30eb\u306e topology_template.node_templates.VDU1.properties.name \u3068\u540c\u3058\u3067\u3059\u3002<\/p>\n<h3>\u521b\u5efaTOSCA.meta\u6587\u4ef6<\/h3>\n<p>TOSCA.Meta\u6587\u4ef6\u5305\u542b\u4e86TOSCA.Meta\u6587\u4ef6\u3001CSAR\u7248\u672c\u548c\u5b9a\u4e49\u6587\u4ef6\u7684\u4fe1\u606f\u3002\u6b64\u5916\uff0c\u8fd8\u9700\u8981Artifact\u6587\u4ef6\u7684\u540d\u79f0\u3001\u5185\u5bb9\u7c7b\u578b\u3001\u52a0\u5bc6\u65b9\u5f0f\u4ee5\u53caArtifact\u6587\u4ef6\u7684\u54c8\u5e0c\u503c\u3002\u8fd9\u91cc\u7684Artifact\u6587\u4ef6\u6307\u7684\u662f\u6240\u521b\u5efa\u7684\u5bf9\u8c61\u6587\u4ef6\u3002<\/p>\n<p>\u83b7\u53d6Artifact\u6587\u4ef6\u7684\u54c8\u5e0c\u503c\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sha256sum ~\/work\/deployment\/Files\/kubernetes\/deployment.yaml\r\n4154adca79b0dc3829f69c82758736df674ffdd89603b4e827bd81afab6b4028  deployment\/Files\/kubernetes\/deployment.yaml\r\n<\/code><\/pre>\n<p>TOSCA.meta \u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>cat &lt;&lt; _EOF_ &gt; .\/deployment\/TOSCA-Metadata\/TOSCA.meta\r\nTOSCA-Meta-File-Version: 1.0\r\nCreated-by: dummy_user\r\nCSAR-Version: 1.1\r\nEntry-Definitions: Definitions\/helloworld3_top.vnfd.yaml\r\n\r\nName: Files\/kubernetes\/deployment.yaml\r\nContent-Type: application\/yaml\r\nAlgorithm: SHA-256\r\nHash: 4154adca79b0dc3829f69c82758736df674ffdd89603b4e827bd81afab6b4028\r\n_EOF_\r\n<\/code><\/pre>\n<h3>\u4e0b\u8f09 ETSI \u5b9a\u7fa9\u6587\u4ef6\u3002<\/h3>\n<p>\u8bf7\u4e0b\u8f7d\u5b98\u65b9\u6587\u4ef6\u3002<br \/>\nETSI GS NFV-SOL 001 \u6839\u636e TOSCA \u89c4\u8303\u5b9a\u4e49\u4e86 VNFD \u7684\u7ed3\u6784\u548c\u683c\u5f0f\u3002<\/p>\n<pre class=\"post-pre\"><code>cd ~\/work\/deployment\/Definitions\r\nwget https:\/\/forge.etsi.org\/rep\/nfv\/SOL001\/raw\/v2.6.1\/etsi_nfv_sol001_common_types.yaml\r\nwget https:\/\/forge.etsi.org\/rep\/nfv\/SOL001\/raw\/v2.6.1\/etsi_nfv_sol001_vnfd_types.yaml\r\n<\/code><\/pre>\n<h3>\u521b\u5efa VNFD<\/h3>\n<p>\u7531\u4e8e\u5728Kubernetes\u8d44\u6e90\u6587\u4ef6\u4e2d\u6307\u5b9a\u4e86CNF\u6240\u9700\u7684\u6240\u6709\u7ec4\u4ef6\uff0c\u56e0\u6b64VNFD\u4e2d\u4e0d\u5305\u542bKubernetes\u8d44\u6e90\u4fe1\u606f\uff0c\u5982VDU\u3001\u8fde\u63a5\u70b9\u548c\u865a\u62df\u94fe\u63a5\u3002<\/p>\n<p>\u521b\u5efa\u5305\u542bCNF\u5b9a\u4e49\u7684VNFD\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>cat &lt;&lt; _EOF_ &gt; ~\/work\/deployment\/Definitions\/helloworld3_top.vnfd.yaml\r\ntosca_definitions_version: tosca_simple_yaml_1_2\r\n\r\ndescription: Sample VNF\r\n\r\nimports:\r\n  - etsi_nfv_sol001_common_types.yaml\r\n  - etsi_nfv_sol001_vnfd_types.yaml\r\n  - helloworld3_types.yaml\r\n  - helloworld3_df_simple.yaml\r\n\r\ntopology_template:\r\n  inputs:\r\n    selected_flavour:\r\n      type: string\r\n      description: VNF deployment flavour selected by the consumer. It is provided in the API\r\n\r\n  node_templates:\r\n    VNF:\r\n      type: company.provider.VNF\r\n      properties:\r\n        flavour_id: { get_input: selected_flavour }\r\n        descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d7000003\r\n        provider: Company\r\n        product_name: Sample VNF\r\n        software_version: '1.0'\r\n        descriptor_version: '1.0'\r\n        vnfm_info:\r\n          - Tacker\r\n      requirements:\r\n        #- virtual_link_external # mapped in lower-level templates\r\n        #- virtual_link_internal # mapped in lower-level templates\r\n_EOF_\r\n<\/code><\/pre>\n<p>VNF \u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u30bf\u30a4\u30d7\u3068\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>cat &lt;&lt; _EOF_ &gt; ~\/work\/deployment\/Definitions\/helloworld3_types.yaml\r\ntosca_definitions_version: tosca_simple_yaml_1_2\r\n\r\ndescription: VNF type definition\r\n\r\nimports:\r\n  - etsi_nfv_sol001_common_types.yaml\r\n  - etsi_nfv_sol001_vnfd_types.yaml\r\n\r\nnode_types:\r\n  company.provider.VNF:\r\n    derived_from: tosca.nodes.nfv.VNF\r\n    properties:\r\n      descriptor_id:\r\n        type: string\r\n        constraints: [ valid_values: [ b1bb0ce7-ebca-4fa7-95ed-4840d7000003 ] ]\r\n        default: b1bb0ce7-ebca-4fa7-95ed-4840d7000003\r\n      descriptor_version:\r\n        type: string\r\n        constraints: [ valid_values: [ '1.0' ] ]\r\n        default: '1.0'\r\n      provider:\r\n        type: string\r\n        constraints: [ valid_values: [ 'Company' ] ]\r\n        default: 'Company'\r\n      product_name:\r\n        type: string\r\n        constraints: [ valid_values: [ 'Sample VNF' ] ]\r\n        default: 'Sample VNF'\r\n      software_version:\r\n        type: string\r\n        constraints: [ valid_values: [ '1.0' ] ]\r\n        default: '1.0'\r\n      vnfm_info:\r\n        type: list\r\n        entry_schema:\r\n          type: string\r\n          constraints: [ valid_values: [ Tacker ] ]\r\n        default: [ Tacker ]\r\n      flavour_id:\r\n        type: string\r\n        constraints: [ valid_values: [ simple ] ]\r\n        default: simple\r\n      flavour_description:\r\n        type: string\r\n        default: \"falvour\"\r\n    requirements:\r\n      - virtual_link_external:\r\n          capability: tosca.capabilities.nfv.VirtualLinkable\r\n      - virtual_link_internal:\r\n          capability: tosca.capabilities.nfv.VirtualLinkable\r\n_EOF_\r\n<\/code><\/pre>\n<p>VNF \u5165\u529b\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u30bf\u30a4\u30d7\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>cat &lt;&lt; _EOF_ &gt; ~\/work\/deployment\/Definitions\/helloworld3_df_simple.yaml\r\ntosca_definitions_version: tosca_simple_yaml_1_2\r\n\r\ndescription: Simple deployment flavour for Sample VNF\r\n\r\nimports:\r\n  - etsi_nfv_sol001_common_types.yaml\r\n  - etsi_nfv_sol001_vnfd_types.yaml\r\n  - helloworld3_types.yaml\r\n\r\ntopology_template:\r\n  inputs:\r\n    descriptor_id:\r\n      type: string\r\n    descriptor_version:\r\n      type: string\r\n    provider:\r\n      type: string\r\n    product_name:\r\n      type: string\r\n    software_version:\r\n      type: string\r\n    vnfm_info:\r\n      type: list\r\n      entry_schema:\r\n        type: string\r\n    flavour_id:\r\n      type: string\r\n    flavour_description:\r\n      type: string\r\n\r\n  substitution_mappings:\r\n    node_type: company.provider.VNF\r\n    properties:\r\n      flavour_id: simple\r\n    requirements:\r\n      virtual_link_external: []\r\n\r\n  node_templates:\r\n    VNF:\r\n      type: company.provider.VNF\r\n      properties:\r\n        flavour_description: A simple flavour\r\n\r\n    VDU1:\r\n      type: tosca.nodes.nfv.Vdu.Compute\r\n      properties:\r\n        name: curry-probe-test001\r\n        description: kubernetes controller resource as VDU\r\n        vdu_profile:\r\n          min_number_of_instances: 1\r\n          max_number_of_instances: 3\r\n\r\n  policies:\r\n    - scaling_aspects:\r\n        type: tosca.policies.nfv.ScalingAspects\r\n        properties:\r\n          aspects:\r\n            vdu1_aspect:\r\n              name: vdu1_aspect\r\n              description: vdu1 scaling aspect\r\n              max_scale_level: 2\r\n              step_deltas:\r\n                - delta_1\r\n\r\n    - vdu1_initial_delta:\r\n        type: tosca.policies.nfv.VduInitialDelta\r\n        properties:\r\n          initial_delta:\r\n            number_of_instances: 1\r\n        targets: [ VDU1 ]\r\n\r\n    - vdu1_scaling_aspect_deltas:\r\n        type: tosca.policies.nfv.VduScalingAspectDeltas\r\n        properties:\r\n          aspect: vdu1_aspect\r\n          deltas:\r\n            delta_1:\r\n              number_of_instances: 1\r\n        targets: [ VDU1 ]\r\n\r\n    - instantiation_levels:\r\n        type: tosca.policies.nfv.InstantiationLevels\r\n        properties:\r\n          levels:\r\n            instantiation_level_1:\r\n              description: Smallest size\r\n              scale_info:\r\n                vdu1_aspect:\r\n                  scale_level: 0\r\n            instantiation_level_2:\r\n              description: Largest size\r\n              scale_info:\r\n                vdu1_aspect:\r\n                  scale_level: 2\r\n          default_level: instantiation_level_1\r\n\r\n    - vdu1_instantiation_levels:\r\n        type: tosca.policies.nfv.VduInstantiationLevels\r\n        properties:\r\n          levels:\r\n            instantiation_level_1:\r\n              number_of_instances: 1\r\n            instantiation_level_2:\r\n              number_of_instances: 3\r\n        targets: [ VDU1 ]\r\n_EOF_\r\n<\/code><\/pre>\n<h3>VNF \u5305\u7684\u538b\u7f29<\/h3>\n<p>CSAR \u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u7528\u306b zip \u30d5\u30a1\u30a4\u30eb\u306b\u5727\u7e2e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>cd ~\/work\/deployment\r\nzip deployment.zip -r Definitions\/ Files\/ TOSCA-Metadata\/\r\n<\/code><\/pre>\n<h2>VNF \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u4f5c\u6210\u3068\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/h2>\n<p>Tacker \u3067\u7a7a\u306e VNF \u30d1\u30c3\u30b1\u30fc\u30b8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u3001\u4f5c\u6210\u3057\u305f\u5727\u7e2e VNF \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002<\/p>\n<h3>\u521b\u5efa VNF \u5305<\/h3>\n<p>\u7a7a\u306e VNF \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<br \/>\nVNF \u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u6b63\u5e38\u306b\u4f5c\u6210\u3055\u308c\u308b\u3068\u3001ID\u3001\u30ea\u30f3\u30af\u3001\u30aa\u30f3\u30dc\u30fc\u30c7\u30a3\u30f3\u30b0\u72b6\u614b\u3001\u904b\u7528\u72b6\u614b\u3001\u4f7f\u7528\u72b6\u614b\u306a\u3069\u306e\u60c5\u5831\u304c\u8fd4\u3055\u308c\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ openstack vnf package create\r\n+-------------------+-------------------------------------------------------------------------------------------------+\r\n| Field             | Value                                                                                           |\r\n+-------------------+-------------------------------------------------------------------------------------------------+\r\n| ID                | d765618d-a455-4fc5-99e2-ab457d34f92c                                                            |\r\n| Links             | {                                                                                               |\r\n|                   |     \"self\": {                                                                                   |\r\n|                   |         \"href\": \"\/vnfpkgm\/v1\/vnf_packages\/d765618d-a455-4fc5-99e2-ab457d34f92c\"                 |\r\n|                   |     },                                                                                          |\r\n|                   |     \"packageContent\": {                                                                         |\r\n|                   |         \"href\": \"\/vnfpkgm\/v1\/vnf_packages\/d765618d-a455-4fc5-99e2-ab457d34f92c\/package_content\" |\r\n|                   |     }                                                                                           |\r\n|                   | }                                                                                               |\r\n| Onboarding State  | CREATED                                                                                         |\r\n| Operational State | DISABLED                                                                                        |\r\n| Usage State       | NOT_IN_USE                                                                                      |\r\n| User Defined Data | {}                                                                                              |\r\n+-------------------+-------------------------------------------------------------------------------------------------+\r\n<\/code><\/pre>\n<p>VNF \u30d1\u30c3\u30b1\u30fc\u30b8 ID \u3092\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>export VNF_PACKAGE_ID=d765618d-a455-4fc5-99e2-ab457d34f92c\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u3002<br \/>\n\u5982\u679c\u662f\u4ee5\u4e0b\u7684\u72b6\u6001\uff0c\u8bf4\u660e\u521b\u5efa\u6210\u529f\u3002<\/p>\n<pre class=\"post-pre\"><code>$ openstack vnf package show $VNF_PACKAGE_ID \\\r\n-c 'Onboarding State' -c 'Operational State' -c 'Usage State' \r\n+-------------------+------------+\r\n| Field             | Value      |\r\n+-------------------+------------+\r\n| Onboarding State  | CREATED    |\r\n| Operational State | DISABLED   |\r\n| Usage State       | NOT_IN_USE |\r\n+-------------------+------------+\r\n<\/code><\/pre>\n<h3>VNF \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9<\/h3>\n<p>[VNF \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u5727\u7e2e] \u3067\u4f5c\u6210\u3057\u305f zip \u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u305f\u7a7a\u306e VNF \u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>cd ~\/work\/deployment\r\n\r\n$ openstack vnf package upload --path deployment.zip $VNF_PACKAGE_ID\r\nUpload request for VNF package 082f732d-4cb3-474b-8be0-cdace3224c6f has been accepted.\r\n<\/code><\/pre>\n<p>\u78ba\u8a8d\u3057\u307e\u3059\u3002<br \/>\n\u4e0b\u8a18\u306e\u72b6\u614b\u3067\u3042\u308c\u3070\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<pre class=\"post-pre\"><code>$ openstack vnf package show $VNF_PACKAGE_ID \\\r\n-c 'Onboarding State' -c 'Operational State' -c 'Usage State' -c 'VNFD ID'\r\n+-------------------+--------------------------------------+\r\n| Field             | Value                                |\r\n+-------------------+--------------------------------------+\r\n| Onboarding State  | ONBOARDED                            |\r\n| Operational State | ENABLED                              |\r\n| Usage State       | NOT_IN_USE                           |\r\n| VNFD ID           | b1bb0ce7-ebca-4fa7-95ed-4840d7000003 |\r\n+-------------------+--------------------------------------+\r\n<\/code><\/pre>\n<p>VNFD ID \u3092\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>export VNFD_ID=b1bb0ce7-ebca-4fa7-95ed-4840d7000003\r\n<\/code><\/pre>\n<h2>\u5236\u4f5cCNF\u6587\u4ef6<\/h2>\n<p>\u521b\u5efa\u4e00\u4e2aCNF\u6587\u4ef6\u3002<\/p>\n<p>default VIM \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u4e0b\u8a18\u306e\u3088\u3046\u306b\u672a\u5b9a\u7fa9\u306e\u30a8\u30e9\u30fc\u304c\u51fa\u3066\u3057\u307e\u3046\u305f\u3081\u3001\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ openstack vnflcm create $VNFD_ID\r\nDefault VIM is not defined. \r\n\r\n$ openstack vim set --is-default True $VIM_ID\r\n<\/code><\/pre>\n<p>default VIM \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306b\u5b9f\u884c\u7d50\u679c\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ openstack vnflcm create $VNFD_ID\r\n+-----------------------------+------------------------------------------------------------------------------------------------------------------+\r\n| Field                       | Value                                                                                                            |\r\n+-----------------------------+------------------------------------------------------------------------------------------------------------------+\r\n| ID                          | 952a2324-0ea5-4831-af87-4d9549f7b35a                                                                             |\r\n| Instantiation State         | NOT_INSTANTIATED                                                                                                 |\r\n| Links                       | {                                                                                                                |\r\n|                             |     \"self\": {                                                                                                    |\r\n|                             |         \"href\": \"http:\/\/localhost:9890\/vnflcm\/v1\/vnf_instances\/952a2324-0ea5-4831-af87-4d9549f7b35a\"             |\r\n|                             |     },                                                                                                           |\r\n|                             |     \"instantiate\": {                                                                                             |\r\n|                             |         \"href\": \"http:\/\/localhost:9890\/vnflcm\/v1\/vnf_instances\/952a2324-0ea5-4831-af87-4d9549f7b35a\/instantiate\" |\r\n|                             |     }                                                                                                            |\r\n|                             | }                                                                                                                |\r\n| VNF Configurable Properties |                                                                                                                  |\r\n| VNF Instance Description    | None                                                                                                             |\r\n| VNF Instance Name           | vnf-952a2324-0ea5-4831-af87-4d9549f7b35a                                                                         |\r\n| VNF Product Name            | Sample VNF                                                                                                       |\r\n| VNF Provider                | Company                                                                                                          |\r\n| VNF Software Version        | 1.0                                                                                                              |\r\n| VNFD ID                     | b1bb0ce7-ebca-4fa7-95ed-4840d7000003                                                                             |\r\n| VNFD Version                | 1.0                                                                                                              |\r\n| vnfPkgId                    |                                                                                                                  |\r\n+-----------------------------+------------------------------------------------------------------------------------------------------------------+\r\n<\/code><\/pre>\n<p>\u6211\u4eec\u5c06VNF\u5b9e\u4f8bID\u5b9a\u4e49\u4e3a\u73af\u5883\u53d8\u91cf\u3002<\/p>\n<pre class=\"post-pre\"><code>export VNF_INSTANCE_ID=952a2324-0ea5-4831-af87-4d9549f7b35a  \r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code>$ openstack vnf package show $VNF_PACKAGE_ID \\\r\n-c 'Usage State'\r\n+-------------+--------+\r\n| Field       | Value  |\r\n+-------------+--------+\r\n| Usage State | IN_USE |\r\n+-------------+--------+\r\n\r\n$ openstack vnflcm show $VNF_INSTANCE_ID \\\r\n-c 'Instantiation State'\r\n+---------------------+------------------+\r\n| Field               | Value            |\r\n+---------------------+------------------+\r\n| Instantiation State | NOT_INSTANTIATED |\r\n+---------------------+------------------+\r\n<\/code><\/pre>\n<h2>\u5c06CNF\u5b9e\u4f8b\u5316<\/h2>\n<p>\u5b9e\u4f8b\u5316CNF\u3002<\/p>\n<h3>\u521b\u5efa\u8bf7\u6c42\u53c2\u6570\u6587\u4ef6<\/h3>\n<p>\u83b7\u53d6\u5fc5\u8981\u7684\u4fe1\u606f\uff0c\u5e76\u521b\u5efa\u5b9e\u4f8b\u8bf7\u6c42\u6240\u9700\u7684\u53c2\u6570\u6587\u4ef6\u3002<\/p>\n<ul class=\"post-ul\">vimConnectionInfo.vimId: e31459a6-1380-4fd8-930b-a70dc0500614<\/ul>\n<p>CNF \u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3059\u308b VIM \u306e ID \u3092 openstack vim list \u30b3\u30de\u30f3\u30c9\u3067\u53d6\u5f97\u3057\u307e\u3059\u3002<br \/>\n\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3067\u8907\u6570\u306e VIM \u304c\u51fa\u529b\u3055\u308c\u305f\u5834\u5408\u306f\u81ea\u8eab\u304c\u4f7f\u7528\u3057\u305f\u3044 VIM \u306e ID \u3092 1 \u3064\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002<br \/>\n\u4eca\u56de\u306f\u65b0\u305f\u306b\u767b\u9332\u3057\u305f Kubernetes \u3092\u6307\u5b9a\u3059\u308b\u305f\u3081\u3001test-vim-k8s-kubeadm \u306e ID \u3092\u9078\u629e\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ openstack vim list\r\n+--------------------------------------+----------------------+----------------------------------+------------+------------+-----------+\r\n| ID                                   | Name                 | Tenant_id                        | Type       | Is Default | Status    |\r\n+--------------------------------------+----------------------+----------------------------------+------------+------------+-----------+\r\n| e31459a6-1380-4fd8-930b-a70dc0500614 | test-vim-k8s-kubeadm | cd492cafc33c4d6b878ee570f6aeae21 | kubernetes | False      | REACHABLE |\r\n+--------------------------------------+----------------------+----------------------------------+------------+------------+-----------+\r\n<\/code><\/pre>\n<p>\u521b\u5efa\u8bf7\u6c42\u53c2\u6570\u6587\u4ef6\u3002<\/p>\n<p>additionalParams\u4e2d\u5305\u542b\u4e86Kubernetes\u8d44\u6e90\u5b9a\u4e49\u6587\u4ef6\u7684\u8def\u5f84\u3002<br \/>\n\u8bf7\u6ce8\u610flcm-kubernetes-def-files\u5fc5\u987b\u662f\u4e00\u4e2a\u5217\u8868\u3002<br \/>\n\u7528\u6237\u4e5f\u53ef\u4ee5\u6307\u5b9a\u9700\u8981\u90e8\u7f72\u8d44\u6e90\u7684\u547d\u540d\u7a7a\u95f4\u3002<\/p>\n<pre class=\"post-pre\"><code>cat &lt;&lt; _EOF_ &gt; ~\/work\/instance_kubernetes.json\r\n{\r\n  \"flavourId\": \"simple\",\r\n  \"additionalParams\": {\r\n    \"lcm-kubernetes-def-files\": [\r\n      \"Files\/kubernetes\/deployment.yaml\"\r\n    ],\r\n    \"namespace\": \"default\"\r\n  },\r\n  \"vimConnectionInfo\": [\r\n    {\r\n      \"id\": \"8a3adb69-0784-43c7-833e-aab0b6ab4470\",\r\n      \"vimId\": \"e31459a6-1380-4fd8-930b-a70dc0500614\",\r\n      \"vimType\": \"kubernetes\"\r\n    }\r\n  ]\r\n}\r\n_EOF_\r\n<\/code><\/pre>\n<h3>\u521b\u5efa\u5b9e\u4f8b<\/h3>\n<p>\u5b9e\u4f8b\u5316 CNF \u5b9e\u4f8b\u3002<\/p>\n<pre class=\"post-pre\"><code>$ openstack vnflcm instantiate $VNF_INSTANCE_ID instance_kubernetes.json\r\nInstantiate request for VNF Instance 952a2324-0ea5-4831-af87-4d9549f7b35a has been accepted.\r\n<\/code><\/pre>\n<p>\u786e\u5b9e\u3002<\/p>\n<p>\u5982\u679c\u5b9e\u4f8b\u5316\u72b6\u6001\u4e3a&#8221;INSTANTIATED&#8221;\uff0c\u5219\u8868\u793a\u5b9e\u4f8b\u5316\u5df2\u6210\u529f\u3002<\/p>\n<pre class=\"post-pre\"><code>$ openstack vnflcm show  $VNF_INSTANCE_ID -c 'Instantiation State'\r\n+---------------------+--------------+\r\n| Field               | Value        |\r\n+---------------------+--------------+\r\n| Instantiation State | INSTANTIATED |\r\n+---------------------+--------------+\r\n<\/code><\/pre>\n<p>\u5982\u679cNOT_INSTANTIATED\u6ca1\u6709\u6539\u53d8\uff0c\u60a8\u4e5f\u53ef\u4ee5\u4f7f\u7528openstack vnflcm op list\u7b49\u547d\u4ee4\u6765\u786e\u8ba4\u8fdb\u5c55\u3002<br \/>\n\u5982\u679c\u64cd\u4f5c\u72b6\u6001\u4e3aPROCESSING\uff0c\u8868\u793a\u6b63\u5728\u5904\u7406\u4e2d\u3002<\/p>\n<h3>\u786e\u8ba4 Kubernetes \u7684\u90e8\u7f72<\/h3>\n<p>\u786e\u4fdd\u5728\u76ee\u6807\u7684Kubernetes VIM\u73af\u5883\u4e2d\u8fd0\u884c\u7740\u5bb9\u5668\u5316\u7684CNF\u3002<br \/>\n\u6b64\u547d\u4ee4\u5728Kubernetes\u4e3b\u8282\u70b9\u4e0a\u6267\u884c\u3002<\/p>\n<p>\u5982\u679c READY \u662f1\/1\uff0c\u5219\u8868\u793a\u90e8\u7f72\u5df2\u6210\u529f\u521b\u5efa\u3002<br \/>\n\u4f60\u4e5f\u53ef\u4ee5\u901a\u8fc7\u6dfb\u52a0 -A \u9009\u9879\u6765\u786e\u8ba4\u5b83\u5728\u54ea\u4e2a\u547d\u540d\u7a7a\u95f4\u4e0a\u8fd0\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl get deployment\r\nNAME                  READY   UP-TO-DATE   AVAILABLE   AGE\r\ncurry-probe-test001   1\/1     1            1           2m28s\r\n\r\n$ kubectl get deployment -A\r\nNAMESPACE          NAME                      READY   UP-TO-DATE   AVAILABLE   AGE\r\ncalico-apiserver   calico-apiserver          2\/2     2            2           97m\r\ncalico-system      calico-kube-controllers   1\/1     1            1           101m\r\ncalico-system      calico-typha              1\/1     1            1           101m\r\ndefault            curry-probe-test001       1\/1     1            1           2m37s\r\ndefault            nginx-deployment          2\/2     2            2           94m\r\nkube-system        coredns                   2\/2     2            2           120m\r\ntigera-operator    tigera-operator           1\/1     1            1           102m\r\n<\/code><\/pre>\n<h1>\u53d1\u751f\u7684\u9519\u8bef de<\/h1>\n<h2>CNF \u5b9e\u4f8b\u5316\u5931\u8d25\u3002<\/h2>\n<p>\u8fd9\u662f\u5728\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u65f6\u53d1\u751f\u7684\u9519\u8bef\u3002<br \/>\n\u8fd9\u4e2a\u9519\u8bef\u662f\u5728\u5b89\u88c5Devstack\u65f6\uff0c\u540c\u65f6\u5b89\u88c5\u7684Kubernetes\u4f5c\u4e3aVIM\u65f6\u53d1\u751f\u7684\u9519\u8bef\u3002<\/p>\n<pre class=\"post-pre\"><code>$ openstack vnflcm instantiate $VNF_INSTANCE_ID instance_kubernetes.json\r\n<\/code><\/pre>\n<h3>\u521b\u5efa\u8d44\u6e90\u5931\u8d25<\/h3>\n<pre class=\"post-pre\"><code>tacker-conductor[1171]: : kubernetes.client.exceptions.ApiException: (409)\r\ntacker-conductor[1171]: 2022-07-13 01:12:51.559 ERROR tacker.vnflcm.vnflcm_driver [req-3a222d79-e537-4cb1-8722-33c1127deae8 admin admin] Unable to instantiate vnf instance f30d5550-99f4-45f5-93b9-8c84e0c56a2d due to error : Failed to create resource.: tacker.common.exceptions.CreateApiFalse: Failed to create resource.\r\ntacker-conductor[1171]: 2022-07-13 01:12:51.560 ERROR root [req-3a222d79-e537-4cb1-8722-33c1127deae8 admin admin] Original exception being dropped: ['Traceback (most recent call last):\\n', '  File \"\/opt\/stack\/tacker\/tacker\/vnfm\/infra_drivers\/kubernetes\/k8s\/translate_outputs.py\", line 473, in deploy_k8s\\n    self._select_k8s_client_and_api(\\n', '  File \"\/opt\/stack\/tacker\/tacker\/vnfm\/infra_drivers\/kubernetes\/k8s\/translate_outputs.py\", line 400, in _select_k8s_client_and_api\\n    response = getattr(k8s_client_obj, self.method_value.get(kind))(\\n', '  File \"\/usr\/local\/lib\/python3.8\/dist-packages\/kubernetes\/client\/api\/apps_v1_api.py\", line 342, in create_namespaced_deployment\\n    return self.create_namespaced_deployment_with_http_info(namespace, body, **kwargs)  # noqa: E501\\n', '  File \"\/usr\/local\/lib\/python3.8\/dist-packages\/kubernetes\/client\/api\/apps_v1_api.py\", line 437, in create_namespaced_deployment_with_http_info\\n    return self.api_client.call_api(\\n', '  File \"\/usr\/local\/lib\/python3.8\/dist-packages\/kubernetes\/client\/api_client.py\", line 348, in call_api\\n    return self.__call_api(resource_path, method,\\n', '  File \"\/usr\/local\/lib\/python3.8\/dist-packages\/kubernetes\/client\/api_client.py\", line 180, in __call_api\\n    response_data = self.request(\\n', '  File \"\/usr\/local\/lib\/python3.8\/dist-packages\/kubernetes\/client\/api_client.py\", line 391, in request\\n    return self.rest_client.POST(url,\\n', '  File \"\/usr\/local\/lib\/python3.8\/dist-packages\/kubernetes\/client\/rest.py\", line 275, in POST\\n    return self.request(\"POST\", url,\\n', '  File \"\/usr\/local\/lib\/python3.8\/dist-packages\/kubernetes\/client\/rest.py\", line 234, in request\\n    raise ApiException(http_resp=r)\\n', 'kubernetes.client.exceptions.ApiException: (409)\\nReason: Conflict\\nHTTP response headers: HTTPHeaderDict({\\'Audit-Id\\': \\'f779dfd4-2b9f-4745-9b0b-77e3c4a027e3\\', \\'Cache-Control\\': \\'no-cache, private\\', \\'Content-Type\\': \\'application\/json\\', \\'X-Kubernetes-Pf-Flowschema-Uid\\': \\'278f6e23-4a3c-407d-a8d8-5865a79d827d\\', \\'X-Kubernetes-Pf-Prioritylevel-Uid\\': \\'109eaedd-4f4b-4c19-bd08-cc1a9c775c05\\', \\'Date\\': \\'Wed, 13\r\nContent-Length\\': \\'250\\'})\\nHTTP response body: {\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"deployments.apps \\\\\"curry-probe-test001\\\\\" already exists\",\"reason\":\"AlreadyExists\",\"details\":{\"name\":\"curry-probe-test001\",\"group\":\"apps\",\"kind\":\"deployments\"},\"code\":409}\\n\\n\\n', '\\nDuring handling of the above exception, another exception occurred:\\n\\n', 'Traceback (most recent call last):\\n', '  File \"\/opt\/stack\/tacker\/tacker\/vnflcm\/vnflcm_driver.py\", line 371, in _instantiate_vnf\\n    instance_id = self._vnf_manager.invoke(\\n', '  File \"\/opt\/stack\/tacker\/tacker\/common\/driver_manager.py\", line 71, in invoke\\n    return getattr(driver, method_name)(**kwargs)\\n', '  File \"\/opt\/stack\/tacker\/tacker\/vnfm\/infra_drivers\/kubernetes\/kubernetes_driver.py\", line 1837, in instantiate_vnf\\n    k8s_objs = transformer.deploy_k8s(k8s_objs)\\n', '  File \"\/opt\/stack\/tacker\/tacker\/vnfm\/infra_drivers\/kubernetes\/k8s\/translate_outputs.py\", line 494, in deploy_k8s\\n    raise exceptions.CreateApiFalse(error=msg)\\n', 'tacker.common.exceptions.CreateApiFalse: Failed to create resource.\\n']: tacker.common.exceptions.VnfInstantiationFailed: Vnf instantiation failed for vnf f30d5550-99f4-45f5-93b9-8c84e0c56a2d, error: Failed to create resource.\r\ntacker-conductor[1171]: 2022-07-13 01:12:51.560 DEBUG tacker.common.log [req-3a222d79-e537-4cb1-8722-33c1127deae8 admin admin] tacker.conductor.conductor_server.Conductor method _change_vnf_status called with arguments (&lt;tacker.context.Context object at 0x7fb5d4844a90&gt;, 'f30d5550-99f4-45f5-93b9-8c84e0c56a2d', ('ACTIVE', 'INACTIVE', 'ERROR', 'PENDING_INSTANTIATE', 'PENDING_CREATE', 'PENDING_UPDATE', 'PENDING_DELETE', 'PENDING_SCALE_IN', 'PENDING_SCALE_OUT', 'PENDING_HEAL', 'PENDING_TERMINATE', 'PENDING_CHANGE_EXT_CONN'), 'ERROR') {} from (pid=1171) wrapper \/opt\/stack\/tacker\/tacker\/common\/log.py:33\r\ntacker-conductor[1171]: 2022-07-13 01:12:51.563 DEBUG tacker.conductor.conductor_server [req-3a222d79-e537-4cb1-8722-33c1127deae8 admin admin] Change status of vnf f30d5550-99f4-45f5-93b9-8c84e0c56a2d from PENDING_CREATE to ERROR from (pid=1171) _change_vnf_status \/opt\/stack\/tacker\/tacker\/conductor\/conductor_server.py:643\r\n<\/code><\/pre>\n<p>\u65e0\u6cd5\u521b\u5efa\u8d44\u6e90\u3002\u867d\u7136\u6211\u4e0d\u592a\u6e05\u695a\u539f\u56e0\uff0c\u4f46\u5728Kubernetes\u4e2d\u4f3c\u4e4e\u65e0\u6cd5\u6b63\u5e38\u542f\u52a8Pod\u3002<br \/>\n\u6211\u4f1a\u68c0\u67e5VNF\u5305\u4e2d\u7684\u6e05\u5355\u6587\u4ef6\u548cKubernetes\u662f\u5426\u5b58\u5728\u95ee\u9898\u3002<\/p>\n<h3>Kubernetes\u78c1\u76d8\u538b\u529b\u5bfc\u81f4\u65e0\u6cd5\u8c03\u5ea6\u3002<\/h3>\n<pre class=\"post-pre\"><code>$ kubectl get pod -o wide\r\nNAME                                   READY   STATUS    RESTARTS   AGE   IP       NODE     NOMINATED NODE   READINESS GATES\r\ncurry-probe-test001-766bdd79bf-jwmlf   0\/2     Pending   0          19h   &lt;none&gt;   &lt;none&gt;   &lt;none&gt;           &lt;none&gt;\r\n\r\n$ kubectl get node\r\nNAME         STATUS   ROLES    AGE     VERSION\r\nyoshitest2   Ready    &lt;none&gt;   5d23h   v1.22.3\r\n\r\n$ kubectl describe node yoshitest2\r\n\r\nName:               yoshitest2\r\nRoles:              &lt;none&gt;\r\nLabels:             beta.kubernetes.io\/arch=amd64\r\n                    beta.kubernetes.io\/os=linux\r\n                    kubernetes.io\/arch=amd64\r\n                    kubernetes.io\/hostname=yoshitest2\r\n                    kubernetes.io\/os=linux\r\nAnnotations:        node.alpha.kubernetes.io\/ttl: 0\r\n                    volumes.kubernetes.io\/controller-managed-attach-detach: true\r\nCreationTimestamp:  Thu, 07 Jul 2022 02:26:46 +0000\r\nTaints:             node.kubernetes.io\/disk-pressure:NoSchedule\r\nUnschedulable:      false\r\n\r\n...\r\n\r\nEvents:\r\n  Type     Reason                Age                      From     Message\r\n  ----     ------                ----                     ----     -------\r\n  Warning  EvictionThresholdMet  11m (x20720 over 2d11h)  kubelet  Attempting to reclaim ephemeral-storage\r\n  Warning  FreeDiskSpaceFailed   83s (x718 over 2d11h)    kubelet  (combined from similar events): failed to garbage collect required amount of images. Wanted to free 8139422924 bytes, but freed 0 bytes\r\n  \r\n$ kubectl get pods --all-namespaces\r\nNAMESPACE     NAME                                   READY   STATUS    RESTARTS        AGE\r\ndefault       curry-probe-test001-766bdd79bf-jwmlf   0\/2     Pending   0               19h\r\nkube-system   kube-apiserver-yoshitest2              1\/1     Running   1 (5d23h ago)   5d23h\r\nkube-system   kube-controller-manager-yoshitest2     1\/1     Running   1 (5d23h ago)   5d23h\r\nkube-system   kube-scheduler-yoshitest2              1\/1     Running   1 (5d23h ago)   5d23h\r\n<\/code><\/pre>\n<p>\u67e5\u770b\u8282\u70b9(Node)\u548c Pod \u7684\u63cf\u8ff0(Describe)\u5f97\u5230\u4e86\u5982\u4e0a\u6240\u793a\u7684\u7ed3\u679c\u3002<\/p>\n<ul class=\"post-ul\">\u53c2\u8003: Master Node\u306bPod\u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a<\/ul>\n<p>node.kubernetes.io\/disk-pressure \u306f Node \u306e\u30c7\u30a3\u30b9\u30af\u304c\u4e0d\u8db3\u3057\u3066\u3044\u308b\u5834\u5408\u306b\u767a\u751f\u3057\u307e\u3059\u3002<br \/>\n\u305d\u306e\u305f\u3081\u3001\u30c7\u30a3\u30b9\u30af\u306e\u4f7f\u7528\u72b6\u6cc1\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ df -h\r\nFilesystem                         Size  Used Avail Use% Mounted on\r\nudev                               7.8G     0  7.8G   0% \/dev\r\ntmpfs                              1.6G  2.1M  1.6G   1% \/run\r\n\/dev\/mapper\/ubuntu--vg-ubuntu--lv   39G   37G   40M 100% \/\r\ntmpfs                              7.9G   20K  7.9G   1% \/dev\/shm\r\n...\r\n<\/code><\/pre>\n<p>\u901a\u8fc7\u786e\u8ba4\uff0c\u6211\u4eec\u53d1\u73b0\u4f7f\u7528\u7387\u5df2\u7ecf\u8fbe\u5230\u4e86100%\u3002<br \/>\n\u4f5c\u4e3a\u54cd\u5e94\u63aa\u65bd\uff0c\u6211\u4eec\u6682\u65f6\u5173\u95ed\u4e86\u4e00\u6b21\u673a\u5668\uff0c\u5e76\u5728ESXi\u4e0a\u5c06\u78c1\u76d8\u5206\u914d\u589e\u52a0\u4e86\u4e00\u500d\u3002<\/p>\n<h3>\u7f51\u7edc\u63d2\u4ef6 CNI \u65e0\u6cd5\u62c6\u9664 pod\u3002<\/h3>\n<p>\u8fd9\u662f\u5728\u6269\u5c55\u865a\u62df\u673a\u78c1\u76d8\u5e76\u91cd\u65b0\u5b9e\u4f8b\u5316\u65f6\u53d1\u751f\u7684\u9519\u8bef\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl get pod -o wide\r\nNAME                                   READY   STATUS              RESTARTS   AGE   IP       NODE         NOMINATED NODE   READINESS GATES\r\ncurry-probe-test001-766bdd79bf-jwmlf   0\/2     ContainerCreating   0          22h   &lt;none&gt;   yoshitest2   &lt;none&gt;           &lt;none&gt;\r\ncurry-probe-test001-766bdd79bf-xfgnf   0\/2     ContainerCreating   0          58m   &lt;none&gt;   yoshitest2   &lt;none&gt;           &lt;none&gt;\r\n\r\n$ kubectl describe pod curry-probe-test001-766bdd79bf-jwmlf \r\n\r\n...\r\n\r\nEvents:\r\n  Type     Reason               Age                    From               Message\r\n  ----     ------               ----                   ----               -------\r\n  Warning  FailedScheduling     158m (x1186 over 22h)  default-scheduler  0\/1 nodes are available: 1 node(s) had taint {node.kubernetes.io\/disk-pressure: }, that the pod didn't tolerate.                         \r\n  Normal   Scheduled            59m                    default-scheduler  Successfully assigned default\/curry-probe-test001-766bdd79bf-jwmlf to yoshitest2\r\n  Warning  Evicted              56m (x5 over 59m)      kubelet            The node was low on resource: ephemeral-storage.\r\n  Warning  ExceededGracePeriod  29m (x46 over 59m)     kubelet            Container runtime did not kill the pod within specified grace period. \r\n  Warning  FailedKillPod        4m11s (x286 over 59m)  kubelet            error killing pod: failed to \"KillPodSandbox\" for \"c17d2b89-7786-46d6-a005-7e866347517f\" with KillPodSandboxError: \"rpc error: code = Unknown desc = networkPlugin cni failed to teardown pod \\\"curry-probe-test001-766bdd79bf-jwmlf_default\\\" network: Looks like http:\/\/localhost:5036\/delNetwork cannot be reached. Is kuryr-daemon running?; Post \\\"http:\/\/localhost:5036\/delNetwork\\\": dial tcp 127.0.0.1:5036: connect: connection refused\"\r\n\r\n<\/code><\/pre>\n<p>Is kuryr-daemon running? \u3068\u306a\u3063\u3066\u304a\u308a\u3001kuryr-daemon \u304c\u52d5\u4f5c\u3057\u3066\u3044\u308b\uff1f \u3068\u66f8\u304b\u308c\u3066\u3044\u307e\u3059\u3002<br \/>\n\u307e\u305f\u3001localhost:5036\/delNetwork cannot be reached \u3088\u308a\u3001\u901a\u4fe1\u304c\u3067\u304d\u3066\u3044\u306a\u3044\u3088\u3046\u3067\u3059\u3002<br \/>\n\u901a\u5e38\u3001Devstack \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e stack.sh \u5b9f\u884c\u6642\u5b8c\u4e86\u306b kuryr-daemon \u306f\u52d5\u4f5c\u3057\u3066\u3044\u308b\u306f\u305a\u3067\u3059\u304c\u3001\u52d5\u4f5c\u3057\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n<p>\u73fe\u72b6\u614b\u304b\u3089 kuryr-kubernetes \u3092\u52d5\u4f5c\u3055\u305b\u308b\u305f\u3081\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3001\u52d5\u4f5c\u3059\u308b\u304b\u3092\u8a66\u3057\u307e\u3059\u3002<br \/>\n\u5b9f\u884c\u30b3\u30de\u30f3\u30c9\u306f\u6b63\u5e38\u306b kuryr-kubernetes \u304c\u52d5\u4f5c\u3057\u3066\u3044\u308b\u74b0\u5883\u306b\u3066 ps \u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u8abf\u3079\u307e\u3057\u305f\u3002<\/p>\n<pre class=\"post-pre\"><code>$ \/usr\/bin\/python3 \/usr\/local\/bin\/kuryr-k8s-controller --config-dir \/etc\/kuryr\r\nINFO kuryr_kubernetes.config [-] Logging enabled!\r\nINFO kuryr_kubernetes.config [-] \/usr\/local\/bin\/kuryr-k8s-controller version 6.0.1\r\nCRITICAL kuryr-kubernetes [-] Unhandled error: KeyError: 'KUBERNETES_SERVICE_HOST'\r\nERROR kuryr-kubernetes Traceback (most recent call last):\r\nERROR kuryr-kubernetes   File \"\/usr\/local\/bin\/kuryr-k8s-controller\", line 10, in &lt;module&gt;\r\nERROR kuryr-kubernetes     sys.exit(start())\r\nERROR kuryr-kubernetes   File \"\/opt\/stack\/kuryr-kubernetes\/kuryr_kubernetes\/controller\/service.py\", line 180, in start\r\nERROR kuryr-kubernetes     clients.setup_clients()\r\nERROR kuryr-kubernetes   File \"\/opt\/stack\/kuryr-kubernetes\/kuryr_kubernetes\/clients.py\", line 62, in setup_clients\r\nERROR kuryr-kubernetes     setup_kubernetes_client()\r\nERROR kuryr-kubernetes   File \"\/opt\/stack\/kuryr-kubernetes\/kuryr_kubernetes\/clients.py\", line 72, in setup_kubernetes_client\r\nERROR kuryr-kubernetes     host = os.environ['KUBERNETES_SERVICE_HOST']\r\nERROR kuryr-kubernetes   File \"\/usr\/lib\/python3.8\/os.py\", line 675, in __getitem__\r\nERROR kuryr-kubernetes     raise KeyError(key) from None\r\nERROR kuryr-kubernetes KeyError: 'KUBERNETES_SERVICE_HOST'\r\n<\/code><\/pre>\n<p>Unhandled error: KeyError: &#8216;KUBERNETES_SERVICE_HOST&#8217; \u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<br \/>\nKUBERNETES_SERVICE_HOST \u3068\u306f API \u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306e\u5916\u5411\u304d\u306e\u30a2\u30c9\u30ec\u30b9\u3067\u3059\u3002<br \/>\n.kube\/config \u306b\u3053\u306e\u60c5\u5831\u304c\u8a18\u9332\u3055\u308c\u3066\u3044\u307e\u3059\u3002<br \/>\n\u540c\u69d8\u306b KUBERNETES_SERVICE_PORT_HTTPS \u3082\u8a2d\u5b9a\u3057\u306a\u3051\u308c\u3070\u540c\u69d8\u306e\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3059\u308b\u305f\u3081\u3001\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ export KUBERNETES_SERVICE_HOST=10.100.2.220\r\n$ export KUBERNETES_SERVICE_PORT_HTTPS=6443\r\n<\/code><\/pre>\n<p>\u5b9a\u4e49\u540e\uff0c\u518d\u6b21\u6267\u884c\u547d\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code>$ \/usr\/bin\/python3 \/usr\/local\/bin\/kuryr-k8s-controller --config-dir \/etc\/kuryr\r\nINFO kuryr_kubernetes.config [-] Logging enabled!\r\nINFO kuryr_kubernetes.config [-] \/usr\/local\/bin\/kuryr-k8s-controller version 6.0.1\r\nCRITICAL kuryr-kubernetes [-] Unhandled error: RuntimeError: Unable to find token_file  : \/var\/run\/secrets\/kubernetes.io\/serviceaccount\/token\r\nERROR kuryr-kubernetes Traceback (most recent call last):\r\nERROR kuryr-kubernetes   File \"\/usr\/local\/bin\/kuryr-k8s-controller\", line 10, in &lt;module&gt;\r\nERROR kuryr-kubernetes     sys.exit(start())\r\nERROR kuryr-kubernetes   File \"\/opt\/stack\/kuryr-kubernetes\/kuryr_kubernetes\/controller\/service.py\", line 180, in start\r\nERROR kuryr-kubernetes     clients.setup_clients()\r\nERROR kuryr-kubernetes   File \"\/opt\/stack\/kuryr-kubernetes\/kuryr_kubernetes\/clients.py\", line 62, in setup_clients\r\nERROR kuryr-kubernetes     setup_kubernetes_client()\r\nERROR kuryr-kubernetes   File \"\/opt\/stack\/kuryr-kubernetes\/kuryr_kubernetes\/clients.py\", line 82, in setup_kubernetes_client\r\nERROR kuryr-kubernetes     _clients[_KUBERNETES_CLIENT] = k8s_client.K8sClient(api_root)\r\nERROR kuryr-kubernetes   File \"\/opt\/stack\/kuryr-kubernetes\/kuryr_kubernetes\/k8s_client.py\", line 66, in __init__\r\nERROR kuryr-kubernetes     raise RuntimeError(\r\nERROR kuryr-kubernetes RuntimeError: Unable to find token_file  : \/var\/run\/secrets\/kubernetes.io\/serviceaccount\/token\r\n<\/code><\/pre>\n<p>\u6b63\u5e38\u306a\u74b0\u5883\u3067\u3042\u308c\u3070 \/var\/run\/secrets\/kubernetes.io\/serviceaccount\/ \u304c\u3042\u308b\u305d\u3046\u3067\u3059\u304c\u3001\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u3066\u3044\u308b\u672c\u74b0\u5883\u3067\u306f \/var\/run \u307e\u3067\u3057\u304b\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002<\/p>\n<p>\u6b21\u306b kuryr-kubernetes \u7cfb\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u5fa9\u6d3b\u3067\u304d\u308b\u304b\u3092\u8a66\u3057\u307e\u3057\u305f\u3002<br \/>\n\u4e0b\u8a18\u306e\u30b5\u30a4\u30c8\u3067 Kuryr \u30b5\u30fc\u30d3\u30b9\u304c Kubernetes network \u30a2\u30c9\u30aa\u30f3\u3068\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3057\u305f\u3002<\/p>\n<ul class=\"post-ul\">\u53c2\u8003: Kuryr installation as a Kubernetes network addon<\/ul>\n<p>\u4f3c\u4e4e\u5728stack.sh\u4e2d\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5b89\u88c5kuryr-kubernetes\u3002<\/p>\n<p>\u5728stack.sh\u4e2d\u4f3c\u4e4e\u4f7f\u7528\u4e86\u4ee5\u4e0b\u547d\u4ee4\u6765\u5b89\u88c5kuryr-kubernetes\u3002<\/p>\n<p>\u5728stack.sh\u811a\u672c\u4e2d\u597d\u50cf\u4f7f\u7528\u4e86\u4ee5\u4e0b\u547d\u4ee4\u6765\u5b89\u88c5kuryr-kubernetes\u3002<\/p>\n<pre class=\"post-pre\"><code>source \/opt\/stack\/kuryr-kubernetes\/devstack\/plugin.sh stack pre-install\r\nsource \/opt\/stack\/kuryr-kubernetes\/devstack\/plugin.sh stack install\r\nsource \/opt\/stack\/kuryr-kubernetes\/devstack\/plugin.sh stack post-config\r\nsource \/opt\/stack\/kuryr-kubernetes\/devstack\/plugin.sh stack extra\r\nsource \/opt\/stack\/kuryr-kubernetes\/devstack\/plugin.sh stack test-config\r\n<\/code><\/pre>\n<p>\u4e0a\u8a18\u306e\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u3057\u307e\u3057\u305f\u304c\u3001$DEST \u306a\u3069\u306e\u69d8\u3005\u306a\u74b0\u5883\u5909\u6570\u304c\u89e3\u6c7a\u3067\u304d\u305a\u3001not found \u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u5728DevStack\u4e2d\uff0c\u63d0\u4f9b\u4e86\u4e00\u4e2a\u540d\u4e3aunstack.sh\u7684\u5378\u8f7d\u811a\u672c\u3002\u6b64\u5916\uff0c\u8fd8\u63d0\u4f9b\u4e86\u4e00\u4e2a\u540d\u4e3aclean.sh\u7684\u811a\u672c\uff0c\u7528\u4e8e\u5b8c\u5168\u5220\u9664\u5305\u62ec\u672c\u5730\u4ed3\u5e93\u5728\u5185\u7684\u6240\u6709\u5185\u5bb9\u3002\u5728\u6267\u884c\u4e86\u8fd9\u4e24\u4e2a\u811a\u672c\u4e4b\u540e\uff0c\u6211\u91cd\u65b0\u6267\u884c\u4e86stack.sh\u3002<\/p>\n<pre class=\"post-pre\"><code>$ .\/unstack.sh\r\n$ .\/clean.sh\r\n$ .\/stack.sh\r\n\r\n... \r\n\r\n[Call Trace]\r\n.\/stack.sh:1282:start_ovn_services\r\n\/opt\/stack\/devstack\/lib\/neutron-legacy:519:start_ovn\r\n\/opt\/stack\/devstack\/lib\/neutron_plugins\/ovn_agent:700:wait_for_sock_file\r\n\/opt\/stack\/devstack\/lib\/neutron_plugins\/ovn_agent:178:die\r\n[ERROR] \/opt\/stack\/devstack\/lib\/neutron_plugins\/ovn_agent:178 Socket \/var\/run\/openvswitch\/ovnnb_db.sock not found\r\nError on exit\r\n<\/code><\/pre>\n<p>unstack.sh \u3068 clean.sh \u3067\u306f\u521d\u56de\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6642\u306b\u8a2d\u5b9a\u3055\u308c\u305f\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8a2d\u5b9a\u304c\u524a\u9664\u3055\u308c\u307e\u305b\u3093\u3002<br \/>\n\u305d\u306e\u305f\u3081\u30012 \u56de\u76ee\u4ee5\u964d\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6642\u306b\u4e0d\u6574\u5408\u304c\u751f\u3058\u3001\u30a8\u30e9\u30fc\u3068\u306a\u3063\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002<\/p>\n<p>\u5bfe\u5fdc\u3068\u3057\u3066\u3001\u74b0\u5883\u3092\u4f5c\u6210\u3057\u76f4\u3057\u3001\u518d\u5ea6 stack.sh \u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<p>\u6700\u7ec8\uff0c kuryr-kubernetes \u65e0\u6cd5\u6b63\u5e38\u8fd0\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code>stack@yoshitest:~\/devstack$ kubectl get pod --all-namespaces\r\nNAMESPACE     NAME                                READY   STATUS    RESTARTS        AGE\r\nkube-system   kube-apiserver-yoshitest            1\/1     Running   1 (3m26s ago)   28s\r\nkube-system   kube-controller-manager-yoshitest   1\/1     Running   1 (3m26s ago)   51s\r\nkube-system   kube-scheduler-yoshitest            1\/1     Running   1 (3m26s ago)   50s\r\n\r\nstack@yoshitest:~\/devstack$ ps aux |grep kuryr\r\nstack      14446  0.0  0.0   6384  2472 pts\/0    S+   07:33   0:00 grep --color=auto kuryr\r\n<\/code><\/pre>\n<p>docker images \u30b3\u30de\u30f3\u30c9\u3067 Docker \u30a4\u30e1\u30fc\u30b8\u304c\u30d7\u30eb\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u306f\u78ba\u8a8d\u3067\u304d\u307e\u3057\u305f\u3002<br \/>\n\u3057\u304b\u3057\u3001docker ps \u30b3\u30de\u30f3\u30c9\u3067\u78ba\u8a8d\u3059\u308b\u3068\u3001\u8d77\u52d5\u3057\u3066\u3044\u308b\u69d8\u5b50\u306f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo docker images\r\nREPOSITORY                           TAG        IMAGE ID       CREATED         SIZE\r\nkuryr\/cni                            latest     d5eef84bb247   2 hours ago     1.28GB\r\n&lt;none&gt;                               &lt;none&gt;     29ba6174d4c5   2 hours ago     883MB\r\nkuryr\/controller                     latest     d0868ab345af   2 hours ago     1.06GB\r\nk8s.gcr.io\/kube-apiserver            v1.22.12   d922296a8b85   17 hours ago    128MB\r\nk8s.gcr.io\/kube-scheduler            v1.22.12   5ee90014579c   17 hours ago    52.7MB\r\nk8s.gcr.io\/kube-controller-manager   v1.22.12   f5ef4d6e36ee   17 hours ago    122MB\r\nk8s.gcr.io\/kube-proxy                v1.22.12   761817698b62   17 hours ago    104MB\r\nquay.io\/centos\/centos                stream8    f8a44dfb7278   4 weeks ago     339MB\r\nk8s.gcr.io\/etcd                      3.5.0-0    004811815584   13 months ago   295MB\r\nk8s.gcr.io\/coredns\/coredns           v1.8.4     8d147537fb7d   13 months ago   47.6MB\r\nquay.io\/kuryr\/golang                 1.16       d5dc529b0ee7   14 months ago   862MB\r\nk8s.gcr.io\/pause                     3.5        ed210e3e4a5b   16 months ago   683kB\r\n\r\n$ sudo docker ps -a\r\nCONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS                        PORTS     NAMES\r\n728597d87b27   k8s.gcr.io\/pause:3.5   \"\/pause\"                 10 minutes ago   Exited (0) 10 minutes ago               k8s_POD_nginx-deployment-66b6c48dd5-pdlws_default_e2c38d0e-6dbf-40fd-8c9a-c6a5a5b17514_0\r\nad3c146a8c38   k8s.gcr.io\/pause:3.5   \"\/pause\"                 10 minutes ago   Exited (0) 10 minutes ago               k8s_POD_nginx-deployment-66b6c48dd5-msvcp_default_3ec4a739-b003-4420-928d-09ceeab5c3ba_0\r\n8e465e2810ab   5ee90014579c           \"kube-scheduler --au\u2026\"   37 minutes ago   Up 37 minutes                           k8s_kube-scheduler_kube-scheduler-yoshitest_kube-system_acb57d0b7dff68b61cfe45619134da6c_1\r\ne6bddd398239   d922296a8b85           \"kube-apiserver --ad\u2026\"   37 minutes ago   Up 37 minutes                           k8s_kube-apiserver_kube-apiserver-yoshitest_kube-system_83bd29bbe6554e93295c44ac4a1ffb04_1\r\na14ae872f42d   f5ef4d6e36ee           \"kube-controller-man\u2026\"   37 minutes ago   Up 37 minutes                           k8s_kube-controller-manager_kube-controller-manager-yoshitest_kube-system_badbf50c21b4819f89f3693e164f4804_1\r\n6d50fd7b9147   k8s.gcr.io\/pause:3.5   \"\/pause\"                 37 minutes ago   Up 37 minutes                           k8s_POD_kube-controller-manager-yoshitest_kube-system_badbf50c21b4819f89f3693e164f4804_1\r\n0fb02e37c808   k8s.gcr.io\/pause:3.5   \"\/pause\"                 37 minutes ago   Up 37 minutes                           k8s_POD_kube-apiserver-yoshitest_kube-system_83bd29bbe6554e93295c44ac4a1ffb04_1\r\n008e41fb4f9b   k8s.gcr.io\/pause:3.5   \"\/pause\"                 37 minutes ago   Up 37 minutes                           k8s_POD_kube-scheduler-yoshitest_kube-system_acb57d0b7dff68b61cfe45619134da6c_1\r\naa681ca00be7   f5ef4d6e36ee           \"kube-controller-man\u2026\"   2 hours ago      Exited (255) 38 minutes ago             k8s_kube-controller-manager_kube-controller-manager-yoshitest_kube-system_badbf50c21b4819f89f3693e164f4804_0\r\n2b904fbf4145   5ee90014579c           \"kube-scheduler --au\u2026\"   2 hours ago      Exited (255) 38 minutes ago             k8s_kube-scheduler_kube-scheduler-yoshitest_kube-system_acb57d0b7dff68b61cfe45619134da6c_0\r\n1f8929b099c6   d922296a8b85           \"kube-apiserver --ad\u2026\"   2 hours ago      Exited (255) 38 minutes ago             k8s_kube-apiserver_kube-apiserver-yoshitest_kube-system_83bd29bbe6554e93295c44ac4a1ffb04_0\r\n9447e7c252f8   k8s.gcr.io\/pause:3.5   \"\/pause\"                 2 hours ago      Exited (255) 38 minutes ago             k8s_POD_kube-scheduler-yoshitest_kube-system_acb57d0b7dff68b61cfe45619134da6c_0\r\nca6f69e6faf7   k8s.gcr.io\/pause:3.5   \"\/pause\"                 2 hours ago      Exited (255) 38 minutes ago             k8s_POD_kube-controller-manager-yoshitest_kube-system_badbf50c21b4819f89f3693e164f4804_0\r\n3abbfee59682   k8s.gcr.io\/pause:3.5   \"\/pause\"                 2 hours ago      Exited (255) 38 minutes ago             k8s_POD_kube-apiserver-yoshitest_kube-system_83bd29bbe6554e93295c44ac4a1ffb04_0\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u4e2a\u73af\u5883\u4e2d\uff0ckuryr-kubernetes\u670d\u52a1\u65e0\u6cd5\u6b63\u5e38\u8fd0\u884c\u7684\u539f\u56e0\u5c1a\u4e0d\u6e05\u695a\u3002<br \/>\nkuryr-kubernetes\u662f\u7528\u4e8e\u8fde\u63a5OpenStack\u548cKubernetes\u7684Neutron\u7f51\u7edc\u7684\u670d\u52a1\u3002<br \/>\n\u5b83\u5728Devstack\u7684Kubernetes\u4e2d\u5145\u5f53\u4e86CNI\u7684\u89d2\u8272\u3002<br \/>\n\u56e0\u6b64\uff0c\u5982\u679ckuryr-kubernetes\u65e0\u6cd5\u8fd0\u884c\uff0c\u5c06\u65e0\u6cd5\u521b\u5efa\u65b0\u7684Pod\u3002<\/p>\n<p>Kubernetes \u306f CNI \u3068\u3057\u3066 kuryr-kubernetes \u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u306f\u306a\u304f\u3001Calico \u306a\u3069\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002<br \/>\n\u3057\u304b\u3057\u3001Devstack \u306e Kubernetes \u3067\u306f kuryr-kubernetes \u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u306a\u3051\u308c\u3070 Kubernetes \u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u305b\u3093\u3002<br \/>\n\u305d\u306e\u305f\u3081\u3001\u5225\u9014 Kubernetes \u74b0\u5883\u3092\u6e96\u5099\u3057\u3001VIM \u3068\u3057\u3066\u4f7f\u7528\u3057\u307e\u3059\u3002<br \/>\n3. \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806 \u306e\u3088\u3046\u306b kubeadm \u3067 Kubernetes \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3001VIM \u3068\u3057\u3066\u767b\u9332\u3057\u3066\u5229\u7528\u3057\u305f\u3068\u3053\u308d VNF \u3068\u3057\u3066 Pod \u3092\u7acb\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<h2>\u65e0\u6cd5\u5b89\u88c5Kubernetes\u3002<\/h2>\n<p>Kubernetes \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6642\u306b\u767a\u751f\u3057\u305f\u30a8\u30e9\u30fc\u3067\u3059\u3002<\/p>\n<h3>tcp 127.0.0.1:10248: connect: connection refused<\/h3>\n<p>\u4ee5\u4e0b\u662f\u547d\u4ee4\u6267\u884c\u65f6\u7684\u9519\u8bef\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo kubeadm init --pod-network-cidr=10.244.0.0\/16\r\n<\/code><\/pre>\n<p>\u6211\u4eec\u6ca1\u6709\u8bb0\u5f55\u8fd9\u4e2a\u73af\u5883\u7684\u9519\u8bef\u65e5\u5fd7\uff0c\u4f46\u662f\u5728\u4f7f\u7528kubeadm\u8fdb\u884cKubernetes\u91cd\u65b0\u5b89\u88c5\u65f6\uff0c\u51fa\u73b0\u4e86\u4e0e[\u53d1\u751f\u5931\u8d25]\u9519\u8bef\u7c7b\u4f3c\u7684\u9519\u8bef\u3002<\/p>\n<p>\u6211\u5011\u5c07\u6aa2\u67e5 Docker \u74b0\u5883\u7684\u9a45\u52d5\u7a0b\u5f0f\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker info | grep Cgroup\r\n  Cgroup Driver: cgroupfs\r\n  Cgroup Version: 1\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff0c\u5e76\u91cd\u65b0\u52a0\u8f7d\u5b88\u62a4\u7a0b\u5e8f\u5e76\u91cd\u65b0\u542f\u52a8docker.service\u3002<\/p>\n<pre class=\"post-pre\"><code>$  vim \/etc\/docker\/daemon.json\r\n\u30fb\u30fb\u30fb\r\n  \"exec-opts\": [\"native.cgroupdriver=systemd\"],\r\n\u30fb\u30fb\u30fb\r\n\r\n$ systemctl daemon-reload\r\n$ systemctl restart docker\r\n\r\n$ docker info | grep Cgroup\r\n Cgroup Driver: systemd\r\n Cgroup Version: 1\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u79cd\u72b6\u6001\u4e0b\uff0c\u518d\u6b21\u8fd0\u884c &#8220;sudo kubeadm init &#8211;pod-network-cidr=10.244.0.0\/16&#8221; \u547d\u4ee4\uff0c\u6210\u529f\u5b8c\u6210\u3002<\/p>\n<h3>\u8d77\u52a8\u5931\u8d25\u7684\u6837\u672c.yaml\u3002<\/h3>\n<p>\u4e0b\u8a18\u306e\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u6642\u306e\u30a8\u30e9\u30fc\u3067\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>kubectl apply -f sample.yaml\r\n<\/code><\/pre>\n<p>nginx-deployment-66b6c48dd5-glcrt \u306f\u672c\u74b0\u5883\u3067\u7acb\u3061\u4e0a\u304c\u3063\u305f Pod \u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002<br \/>\nkubectl get pod \u30b3\u30de\u30f3\u30c9\u3067\u8abf\u3079\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl describe pod nginx-deployment-66b6c48dd5-glcrt\r\n\r\n...\r\n\r\nEvents:\r\n  Type     Reason            Age                 From               Message\r\n  ----     ------            ----                ----               -------\r\n  Warning  FailedScheduling  1s (x3 over 2m44s)  default-scheduler  0\/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io\/master: }, that the pod didn't tolerate.\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u5728Master\u8282\u70b9\u4e0a\u8bbe\u7f6e\u4e86 node-role.kubernetes.io\/master:NoSchedule \u7684 Taints\uff0c\u56e0\u6b64\u65e0\u6cd5\u90e8\u7f72Pod\u3002<br \/>\n\u56e0\u6b64\uff0c\u9700\u8981\u53bb\u9664\u6b64Taint\u4fe1\u606f\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl describe node yoshitest\r\n\r\n...\r\n\r\nTaints:             node-role.kubernetes.io\/master:NoSchedule\r\n<\/code><\/pre>\n<p>\u6c61\u67d3\u60c5\u62a5\u5c06\u88ab\u5220\u9664\u3002<\/p>\n<pre class=\"post-pre\"><code>kubectl taint nodes yoshitest node-role.kubernetes.io\/master:NoSchedule-\r\nnode\/master untainted\r\n<\/code><\/pre>\n<h1>\u603b\u7ed3<\/h1>\n<p>\u7531\u4e8eKuryr-Kubernetes\u5728\u91cd\u65b0\u542f\u52a8\u65f6\u65e0\u6cd5\u6b63\u5e38\u5de5\u4f5c\uff0c\u6240\u4ee5\u65e0\u6cd5\u4f7f\u7528DevStack\u7684Kubernetes\u3002<br \/>\n\u636e\u8bf4\u5982\u679c\u4f7f\u7528Vagrant\u542f\u52a8DevStack\uff0c\u5b83\u4e0d\u4f1a\u5728\u91cd\u65b0\u542f\u52a8\u6216\u5176\u4ed6\u60c5\u51b5\u4e0b\u505c\u6b62\uff0c\u4f46\u7531\u4e8e\u6211\u6ca1\u6709\u5c1d\u8bd5\u8fc7\uff0c\u6240\u4ee5\u4e0d\u592a\u6e05\u695a\u3002<br \/>\n\u6211\u4e5f\u60f3\u8bd5\u4e00\u8bd5\u3002<\/p>\n<p>\u975e\u5e38\u611f\u8c22\u60a8\u9605\u8bfb\u5230\u8fd9\u91cc\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7ae0\u8282\u7d22\u5f15 1. \u9996\u5148 2. \u73af\u5883 3. \u5b89\u88c5\u6b65\u9aa4 4. \u53d1\u751f\u7684\u9519\u8bef 5. \u603b\u7ed3 \u8bf7\u63d0\u4f9b\u7f51\u5740\u4f5c\u4e3a\u53c2\u8003 ETSI  [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-35618","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>\u4e00\u4e2a\u5173\u4e8e\u65b0\u624b\u4f7f\u7528Kubernetes\u4f5c\u4e3aVIM\u6765\u901a\u8fc7Tacker\u90e8\u7f72CNF\u7684\u6545\u4e8b - 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\/\u4e00\u4e2a\u5173\u4e8e\u65b0\u624b\u4f7f\u7528kubernetes\u4f5c\u4e3avim\u6765\u901a\u8fc7tacker\u90e8\u7f72cnf\u7684\u6545\u4e8b\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4e00\u4e2a\u5173\u4e8e\u65b0\u624b\u4f7f\u7528Kubernetes\u4f5c\u4e3aVIM\u6765\u901a\u8fc7Tacker\u90e8\u7f72CNF\u7684\u6545\u4e8b\" \/>\n<meta property=\"og:description\" content=\"\u7ae0\u8282\u7d22\u5f15 1. \u9996\u5148 2. \u73af\u5883 3. \u5b89\u88c5\u6b65\u9aa4 4. \u53d1\u751f\u7684\u9519\u8bef 5. \u603b\u7ed3 \u8bf7\u63d0\u4f9b\u7f51\u5740\u4f5c\u4e3a\u53c2\u8003 ETSI [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4e00\u4e2a\u5173\u4e8e\u65b0\u624b\u4f7f\u7528kubernetes\u4f5c\u4e3avim\u6765\u901a\u8fc7tacker\u90e8\u7f72cnf\u7684\u6545\u4e8b\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-28T04:33:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T17:46:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d246537434c4406c2e97c\/37-0.png\" \/>\n<meta name=\"author\" content=\"\u97f5, \u79d1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u97f5, \u79d1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"31 \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%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82\/\",\"name\":\"\u4e00\u4e2a\u5173\u4e8e\u65b0\u624b\u4f7f\u7528Kubernetes\u4f5c\u4e3aVIM\u6765\u901a\u8fc7Tacker\u90e8\u7f72CNF\u7684\u6545\u4e8b - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-11-28T04:33:36+00:00\",\"dateModified\":\"2024-04-29T17:46:07+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4e00\u4e2a\u5173\u4e8e\u65b0\u624b\u4f7f\u7528Kubernetes\u4f5c\u4e3aVIM\u6765\u901a\u8fc7Tacker\u90e8\u7f72CNF\u7684\u6545\u4e8b\"}]},{\"@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\/6530331a63adef3b3443a1fab53a0e6e\",\"name\":\"\u97f5, \u79d1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g\",\"caption\":\"\u97f5, \u79d1\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunke\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4e00\u4e2a\u5173\u4e8e\u65b0\u624b\u4f7f\u7528Kubernetes\u4f5c\u4e3aVIM\u6765\u901a\u8fc7Tacker\u90e8\u7f72CNF\u7684\u6545\u4e8b - 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\/\u4e00\u4e2a\u5173\u4e8e\u65b0\u624b\u4f7f\u7528kubernetes\u4f5c\u4e3avim\u6765\u901a\u8fc7tacker\u90e8\u7f72cnf\u7684\u6545\u4e8b\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4e00\u4e2a\u5173\u4e8e\u65b0\u624b\u4f7f\u7528Kubernetes\u4f5c\u4e3aVIM\u6765\u901a\u8fc7Tacker\u90e8\u7f72CNF\u7684\u6545\u4e8b","og_description":"\u7ae0\u8282\u7d22\u5f15 1. \u9996\u5148 2. \u73af\u5883 3. \u5b89\u88c5\u6b65\u9aa4 4. \u53d1\u751f\u7684\u9519\u8bef 5. \u603b\u7ed3 \u8bf7\u63d0\u4f9b\u7f51\u5740\u4f5c\u4e3a\u53c2\u8003 ETSI [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4e00\u4e2a\u5173\u4e8e\u65b0\u624b\u4f7f\u7528kubernetes\u4f5c\u4e3avim\u6765\u901a\u8fc7tacker\u90e8\u7f72cnf\u7684\u6545\u4e8b\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-11-28T04:33:36+00:00","article_modified_time":"2024-04-29T17:46:07+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d246537434c4406c2e97c\/37-0.png"}],"author":"\u97f5, \u79d1","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u97f5, \u79d1","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"31 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82\/","name":"\u4e00\u4e2a\u5173\u4e8e\u65b0\u624b\u4f7f\u7528Kubernetes\u4f5c\u4e3aVIM\u6765\u901a\u8fc7Tacker\u90e8\u7f72CNF\u7684\u6545\u4e8b - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-11-28T04:33:36+00:00","dateModified":"2024-04-29T17:46:07+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4e00\u4e2a\u5173\u4e8e\u65b0\u624b\u4f7f\u7528Kubernetes\u4f5c\u4e3aVIM\u6765\u901a\u8fc7Tacker\u90e8\u7f72CNF\u7684\u6545\u4e8b"}]},{"@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\/6530331a63adef3b3443a1fab53a0e6e","name":"\u97f5, \u79d1","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g","caption":"\u97f5, \u79d1"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunke\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%b8%80%e4%b8%aa%e5%85%b3%e4%ba%8e%e6%96%b0%e6%89%8b%e4%bd%bf%e7%94%a8kubernetes%e4%bd%9c%e4%b8%bavim%e6%9d%a5%e9%80%9a%e8%bf%87tacker%e9%83%a8%e7%bd%b2cnf%e7%9a%84%e6%95%85%e4%ba%8b%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/35618","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\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=35618"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/35618\/revisions"}],"predecessor-version":[{"id":88934,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/35618\/revisions\/88934"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=35618"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=35618"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=35618"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}