Kind快速部署Kubernetes多集群
Kind架构及原理
Kind 使用一个 container 来模拟一个 node,在 container 里面跑 systemd ,并用 systemd 托管 kubelet 以及 containerd,然后通过容器内部的 kubelet 把其他 K8s 组件,比如 kube-apiserver、etcd、CNI 等跑起来。
它可以通过配置文件的方式创建多个 container 来模拟创建多个 node,并以这些 node 构建一个多节点的 Kubernetes 集群。
Kind 内部使用的集群部署工具是 kubeadm,借助 kubeadm 提供的 Alpha 特性,它可以部署包括 HA master 的高可用集群。同时,在 HA master 下, 它还额外部署了一个 Nginx,用来提供负载均衡 vip。
Docker 安装
宿主机安装Docker
<span>for</span> <span> pkg </span> <span>in</span> <span> docker</span> <span>.</span> <span>io docker</span> <span>-</span> <span>doc docker</span> <span>-</span> <span>compose docker</span> <span>-</span> <span>compose</span> <span>-</span> <span>v2 podman</span> <span>-</span> <span>docker containerd runc</span> <span>;</span> <span> </span> <span>do</span> <span> sudo apt</span> <span>-</span> <span>get</span> <span> remove $pkg</span> <span>;</span> <span> </span> <span>done</span>
<span>sudo apt</span> <span>-</span> <span>get</span> <span> update</span>
<span>sudo apt</span> <span>-</span> <span>get</span> <span> install ca</span> <span>-</span> <span>certificates curl gnupg</span>
<span>sudo install </span> <span>-</span> <span>m </span> <span>0755</span> <span> </span> <span>-</span> <span>d </span> <span>/</span> <span>etc</span> <span>/</span> <span>apt</span> <span>/</span> <span>keyrings</span>
<span>curl </span> <span>-</span> <span>fsSL https</span> <span>:</span> <span>//download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg</span>
<span>sudo chmod a</span> <span>+</span> <span>r </span> <span>/</span> <span>etc</span> <span>/</span> <span>apt</span> <span>/</span> <span>keyrings</span> <span>/</span> <span>docker</span> <span>.</span> <span>gpg</span>
<span># Add the repository to Apt sources:</span>
<span>echo </span>
<span> </span> <span>"deb [arch="</span> <span>$</span> <span>(</span> <span>dpkg </span> <span>--</span> <span>print</span> <span>-</span> <span>architecture</span> <span>)</span> <span>" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu </span>
<span> "</span> <span>$</span> <span>(.</span> <span> </span> <span>/</span> <span>etc</span> <span>/</span> <span>os</span> <span>-</span> <span>release </span> <span>&&</span> <span> echo </span> <span>"$VERSION_CODENAME"</span> <span>)</span> <span>" stable"</span> <span> </span> <span>|</span> <span> </span>
<span> sudo tee </span> <span>/</span> <span>etc</span> <span>/</span> <span>apt</span> <span>/</span> <span>sources</span> <span>.</span> <span>list</span> <span>.</span> <span>d</span> <span>/</span> <span>docker</span> <span>.</span> <span>list </span> <span>></span> <span> </span> <span>/dev/</span> <span>null</span>
<span>sudo apt</span> <span>-</span> <span>get</span> <span> update</span>
安装Docker
<span>sudo apt</span> <span>-</span> <span>get</span> <span> install docker</span> <span>-</span> <span>ce docker</span> <span>-</span> <span>ce</span> <span>-</span> <span>cli containerd</span> <span>.</span> <span>io docker</span> <span>-</span> <span>buildx</span> <span>-</span> <span>plugin docker</span> <span>-</span> <span>compose</span> <span>-</span> <span>plugin</span>
Kind安装
首先我们下载Kind二进制包
<span>wget https</span> <span>:</span> <span>//github.com/kubernetes-sigs/kind/releases/download/v0.20.0/kind-linux-amd64</span>
<span>mv kind</span> <span>-</span> <span>linux</span> <span>-</span> <span>amd64 </span> <span>/</span> <span>usr</span> <span>/</span> <span>bin</span> <span>/</span> <span>kind</span>
<span>chmod </span> <span>+</span> <span>x </span> <span>/</span> <span>usr</span> <span>/</span> <span>bin</span> <span>/</span> <span>kind</span>
指定版本号并创建集群
<span>cat </span> <span>></span> <span>kind</span> <span>-</span> <span>demo</span> <span>.</span> <span>yaml</span> <span><<</span> <span>EOF</span>
<span>kind</span> <span>:</span> <span> </span> <span>Cluster</span>
<span>name</span> <span>:</span> <span> abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span>
<span>apiVersion</span> <span>:</span> <span> kind</span> <span>.</span> <span>x</span> <span>-</span> <span>k8s</span> <span>.</span> <span>io</span> <span>/</span> <span>v1alpha4</span>
<span>networking</span> <span>:</span>
<span> disableDefaultCNI</span> <span>:</span> <span> </span> <span>false</span>
<span>nodes</span> <span>:</span>
<span> </span> <span>-</span> <span> role</span> <span>:</span> <span> control</span> <span>-</span> <span>plane</span>
<span> </span> <span>#- role: control-plane</span>
<span> </span> <span>#- role: control-plane</span>
<span> </span> <span>-</span> <span> role</span> <span>:</span> <span> worker</span>
<span> </span> <span>-</span> <span> role</span> <span>:</span> <span> worker</span>
<span> </span> <span>-</span> <span> role</span> <span>:</span> <span> worker</span>
<span>EOF</span>
参数详解
- name 设置集群名称
- networking.disableDefaultCNI 创建的集群默认自带一个轻量级的 CNI 插件 kindnetd ,我们也可以禁用默认设置来安装其他 CNI,比如 Calico。
- nodes control-plance master节点数量
- nodes worker node节点数量
快速创建集群
本次版本采用v1.24.15
<span>kind create cluster </span> <span>--</span> <span>config</span> <span>=</span> <span>kind</span> <span>-</span> <span>demo</span> <span>.</span> <span>yaml </span> <span>--</span> <span>image</span> <span>=</span> <span>kindest</span> <span>/</span> <span>node</span> <span>:</span> <span>v1</span> <span>.</span> <span>24.15</span> <span> </span> <span>--</span> <span>name</span> <span>=</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span>
<span>日志输出以下</span>
<span>Creating</span> <span> cluster </span> <span>"abcdocker-kind-demo"</span> <span> </span> <span>...</span>
<span> </span> <span>✓</span> <span> </span> <span>Ensuring</span> <span> node image </span> <span>(</span> <span>kindest</span> <span>/</span> <span>node</span> <span>:</span> <span>v1</span> <span>.</span> <span>24.15</span> <span>)</span> <span> </span> <span>🖼</span>
<span> </span> <span>✓</span> <span> </span> <span>Preparing</span> <span> nodes </span> <span>📦</span> <span> </span> <span>📦</span>
<span> </span> <span>✓</span> <span> </span> <span>Writing</span> <span> configuration </span> <span>📜</span>
<span> </span> <span>✓</span> <span> </span> <span>Starting</span> <span> control</span> <span>-</span> <span>plane </span> <span>🕹️</span>
<span> </span> <span>✓</span> <span> </span> <span>Installing</span> <span> CNI </span> <span>🔌</span>
<span> </span> <span>✓</span> <span> </span> <span>Installing</span> <span> </span> <span>StorageClass</span> <span> </span> <span>💾</span>
<span> </span> <span>✓</span> <span> </span> <span>Joining</span> <span> worker nodes </span> <span>🚜</span>
<span>Set</span> <span> kubectl context to </span> <span>"kind-abcdocker-kind-demo"</span>
<span>You</span> <span> can now </span> <span>use</span> <span> your cluster </span> <span>with</span> <span>:</span>
<span>kubectl cluster</span> <span>-</span> <span>info </span> <span>--</span> <span>context kind</span> <span>-</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span>
<span>Thanks</span> <span> </span> <span>for</span> <span> </span> <span>using</span> <span> kind</span> <span>!</span> <span> </span> <span>😊</span>
安装kubectl
<span>curl </span> <span>-</span> <span>LO https</span> <span>:</span> <span>//dl.k8s.io/release/v1.24.15/bin/linux/amd64/kubectl</span>
<span>chmod </span> <span>+</span> <span>x kubectl</span>
<span>mv kubectl </span> <span>/</span> <span>usr</span> <span>/</span> <span>bin</span> <span>/</span>
可以查看集群状态
<span>root@abcdocker</span> <span>:~#</span> <span> kubectl cluster</span> <span>-</span> <span>info </span> <span>--</span> <span>context kind</span> <span>-</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span>
<span>Kubernetes</span> <span> control plane </span> <span>is</span> <span> running at https</span> <span>:</span> <span>//127.0.0.1:42687</span>
<span>CoreDNS</span> <span> </span> <span>is</span> <span> running at https</span> <span>:</span> <span>//127.0.0.1:42687/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy</span>
<span>To</span> <span> further debug </span> <span>and</span> <span> diagnose cluster problems</span> <span>,</span> <span> </span> <span>use</span> <span> </span> <span>'kubectl cluster-info dump'</span>
接下来我们就可以get node查看到节点信息
<span>root@abcdocker</span> <span>:~#</span> <span> kubectl </span> <span>get</span> <span> node</span>
<span>NAME STATUS ROLES AGE VERSION</span>
<span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span> <span>-</span> <span>control</span> <span>-</span> <span>plane </span> <span>Ready</span> <span> control</span> <span>-</span> <span>plane </span> <span>2m2s</span> <span> v1</span> <span>.</span> <span>24.15</span>
<span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span> <span>-</span> <span>worker </span> <span>Ready</span> <span> </span> <span><none></span> <span> </span> <span>90s</span> <span> v1</span> <span>.</span> <span>24.15</span>
<span>root@abcdocker</span> <span>:~#</span> <span> kubectl </span> <span>get</span> <span> pod </span> <span>-</span> <span>n kube</span> <span>-</span> <span>system</span>
<span>NAME READY STATUS RESTARTS AGE</span>
<span>coredns</span> <span>-</span> <span>57575c5f89</span> <span>-</span> <span>9ltk6</span> <span> </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>108s</span>
<span>coredns</span> <span>-</span> <span>57575c5f89</span> <span>-</span> <span>glgvh </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>107s</span>
<span>etcd</span> <span>-</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span> <span>-</span> <span>control</span> <span>-</span> <span>plane </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>2m7s</span>
<span>kindnet</span> <span>-</span> <span>ljptz </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>99s</span>
<span>kindnet</span> <span>-</span> <span>qzglw </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>109s</span>
<span>kube</span> <span>-</span> <span>apiserver</span> <span>-</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span> <span>-</span> <span>control</span> <span>-</span> <span>plane </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>2m5s</span>
<span>kube</span> <span>-</span> <span>controller</span> <span>-</span> <span>manager</span> <span>-</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span> <span>-</span> <span>control</span> <span>-</span> <span>plane </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>2m1s</span>
<span>kube</span> <span>-</span> <span>proxy</span> <span>-</span> <span>kvzx9 </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>109s</span>
<span>kube</span> <span>-</span> <span>proxy</span> <span>-</span> <span>pnzmz </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>99s</span>
<span>kube</span> <span>-</span> <span>scheduler</span> <span>-</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span> <span>-</span> <span>control</span> <span>-</span> <span>plane </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>2m9s</span>
Kind 常用命令
<span>查看集群</span>
<span>kind </span> <span>get</span> <span> clusters</span>
<span>删除集群</span>
<span>kind </span> <span>delete</span> <span> cluster </span> <span>--</span> <span>name </span> <span>集群名称</span>
Kind创建多套集群
实际上只是需要给yaml文件修改即可
<span>cat </span> <span>></span> <span>kind</span> <span>-</span> <span>demo1</span> <span>.</span> <span>yaml</span> <span><<</span> <span>EOF</span>
<span>kind</span> <span>:</span> <span> </span> <span>Cluster</span>
<span>name</span> <span>:</span> <span> abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo1</span>
<span>apiVersion</span> <span>:</span> <span> kind</span> <span>.</span> <span>x</span> <span>-</span> <span>k8s</span> <span>.</span> <span>io</span> <span>/</span> <span>v1alpha4</span>
<span>networking</span> <span>:</span>
<span> disableDefaultCNI</span> <span>:</span> <span> </span> <span>true</span> <span> </span> <span>#这里开启个cni</span>
<span>nodes</span> <span>:</span>
<span> </span> <span>-</span> <span> role</span> <span>:</span> <span> control</span> <span>-</span> <span>plane</span>
<span> </span> <span>#- role: control-plane</span>
<span> </span> <span>#- role: control-plane</span>
<span> </span> <span>-</span> <span> role</span> <span>:</span> <span> worker</span>
<span>EOF</span>
disableDefaultCNI禁用了默认的kindnetd插件,CNI就需要我们自己安装flannel或者其它calico组件
使用下面命令创建集群
版本我们这边换成1.28.0
<span>kind create cluster </span> <span>--</span> <span>config</span> <span>=</span> <span>kind</span> <span>-</span> <span>demo1</span> <span>.</span> <span>yaml </span> <span>--</span> <span>image</span> <span>=</span> <span>kindest</span> <span>/</span> <span>node</span> <span>:</span> <span>v1</span> <span>.</span> <span>28.0</span> <span> </span> <span>--</span> <span>name</span> <span>=</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo1</span>
<span>日志</span> <span> </span> <span>输出如下</span>
<span>Creating</span> <span> cluster </span> <span>"abcdocker-kind-demo1"</span> <span> </span> <span>...</span>
<span> </span> <span>✓</span> <span> </span> <span>Ensuring</span> <span> node image </span> <span>(</span> <span>kindest</span> <span>/</span> <span>node</span> <span>:</span> <span>v1</span> <span>.</span> <span>28.0</span> <span>)</span> <span> </span> <span>🖼</span>
<span> </span> <span>✓</span> <span> </span> <span>Preparing</span> <span> nodes </span> <span>📦</span> <span> </span> <span>📦</span>
<span> </span> <span>✓</span> <span> </span> <span>Writing</span> <span> configuration </span> <span>📜</span>
<span> </span> <span>✓</span> <span> </span> <span>Starting</span> <span> control</span> <span>-</span> <span>plane </span> <span>🕹️</span>
<span> </span> <span>✓</span> <span> </span> <span>Installing</span> <span> </span> <span>StorageClass</span> <span> </span> <span>💾</span>
<span> </span> <span>✓</span> <span> </span> <span>Joining</span> <span> worker nodes </span> <span>🚜</span>
<span>Set</span> <span> kubectl context to </span> <span>"kind-abcdocker-kind-demo1"</span>
<span>You</span> <span> can now </span> <span>use</span> <span> your cluster </span> <span>with</span> <span>:</span>
<span>kubectl cluster</span> <span>-</span> <span>info </span> <span>--</span> <span>context kind</span> <span>-</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo1</span>
<span>Thanks</span> <span> </span> <span>for</span> <span> </span> <span>using</span> <span> kind</span> <span>!</span> <span> </span> <span>😊</span>
查看集群状态
<span>root@abcdocker</span> <span>:~#</span> <span> kubectl </span> <span>get</span> <span> node</span>
<span>NAME STATUS ROLES AGE VERSION</span>
<span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo1</span> <span>-</span> <span>control</span> <span>-</span> <span>plane </span> <span>NotReady</span> <span> control</span> <span>-</span> <span>plane </span> <span>3m46s</span> <span> v1</span> <span>.</span> <span>28.0</span>
<span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo1</span> <span>-</span> <span>worker </span> <span>NotReady</span> <span> </span> <span><none></span> <span> </span> <span>3m17s</span> <span> v1</span> <span>.</span> <span>28.0</span>
<span>pod</span> <span>状态</span>
<span>root@abcdocker</span> <span>:~#</span> <span> kubectl </span> <span>get</span> <span> pod </span> <span>-</span> <span>n kube</span> <span>-</span> <span>system</span>
<span>NAME READY STATUS RESTARTS AGE</span>
<span>coredns</span> <span>-</span> <span>5dd5756b68</span> <span>-</span> <span>l94jm </span> <span>0</span> <span>/</span> <span>1</span> <span> </span> <span>Pending</span> <span> </span> <span>0</span> <span> </span> <span>3m58s</span>
<span>coredns</span> <span>-</span> <span>5dd5756b68</span> <span>-</span> <span>psm7p </span> <span>0</span> <span>/</span> <span>1</span> <span> </span> <span>Pending</span> <span> </span> <span>0</span> <span> </span> <span>3m58s</span>
<span>etcd</span> <span>-</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo1</span> <span>-</span> <span>control</span> <span>-</span> <span>plane </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>4m12s</span>
<span>kube</span> <span>-</span> <span>apiserver</span> <span>-</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo1</span> <span>-</span> <span>control</span> <span>-</span> <span>plane </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>4m11s</span>
<span>kube</span> <span>-</span> <span>controller</span> <span>-</span> <span>manager</span> <span>-</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo1</span> <span>-</span> <span>control</span> <span>-</span> <span>plane </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>4m12s</span>
<span>kube</span> <span>-</span> <span>proxy</span> <span>-</span> <span>bln4n </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>3m50s</span>
<span>kube</span> <span>-</span> <span>proxy</span> <span>-</span> <span>l4k49 </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>3m59s</span>
<span>kube</span> <span>-</span> <span>scheduler</span> <span>-</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo1</span> <span>-</span> <span>control</span> <span>-</span> <span>plane </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>4m16s</span>
切换集群
- 1.24集群版本默认cni插件
- 1.28集群版本不使用默认插件
接下来可以通过 kubectl config use-context xx_name
快速切换集群
首先获取Cluster名称,我现在在k8s 1.28版本,现在我切换到1.24.15版本
<span>root@abcdocker</span> <span>:~#</span> <span> kind </span> <span>get</span> <span> clusters</span>
<span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span>
<span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo1</span>
切换到abcdocker-kind-demo
集群
<span>root@abcdocker</span> <span>:~#</span> <span> kubectl config </span> <span>use</span> <span>-</span> <span>context kind</span> <span>-</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span>
<span>Switched</span> <span> to context </span> <span>"kind-abcdocker-kind-demo"</span> <span>.</span>
<span>root@abcdocker</span> <span>:~#</span> <span> kubectl </span> <span>get</span> <span> node</span>
<span>NAME STATUS ROLES AGE VERSION</span>
<span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span> <span>-</span> <span>control</span> <span>-</span> <span>plane </span> <span>Ready</span> <span> control</span> <span>-</span> <span>plane </span> <span>43m</span> <span> v1</span> <span>.</span> <span>24.15</span>
<span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span> <span>-</span> <span>worker </span> <span>Ready</span> <span> </span> <span><none></span> <span> </span> <span>43m</span> <span> v1</span> <span>.</span> <span>24.15</span>
切换到abcdocker-kind-demo1
集群
<span>root@abcdocker</span> <span>:~#</span> <span> kubectl config </span> <span>use</span> <span>-</span> <span>context kind</span> <span>-</span> <span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo1</span>
<span>Switched</span> <span> to context </span> <span>"kind-abcdocker-kind-demo1"</span> <span>.</span>
<span>root@abcdocker</span> <span>:~#</span> <span> kubectl </span> <span>get</span> <span> node</span>
<span>NAME STATUS ROLES AGE VERSION</span>
<span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo1</span> <span>-</span> <span>control</span> <span>-</span> <span>plane </span> <span>NotReady</span> <span> control</span> <span>-</span> <span>plane </span> <span>36m</span> <span> v1</span> <span>.</span> <span>28.0</span>
<span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo1</span> <span>-</span> <span>worker </span> <span>NotReady</span> <span> </span> <span><none></span> <span> </span> <span>36m</span> <span> v1</span> <span>.</span> <span>28.0</span>
测试集群
<span>cat</span> <span><<</span> <span>EOF </span> <span>|</span> <span> kubectl apply </span> <span>-</span> <span>f </span> <span>-</span>
<span>apiVersion</span> <span>:</span> <span> apps</span> <span>/</span> <span>v1</span>
<span>kind</span> <span>:</span> <span> </span> <span>Deployment</span>
<span>metadata</span> <span>:</span>
<span> name</span> <span>:</span> <span> nginx</span>
<span>spec</span> <span>:</span>
<span> selector</span> <span>:</span>
<span> matchLabels</span> <span>:</span>
<span> app</span> <span>:</span> <span> nginx</span>
<span> </span> <span>template</span> <span>:</span>
<span> metadata</span> <span>:</span>
<span> labels</span> <span>:</span>
<span> app</span> <span>:</span> <span> nginx</span>
<span> spec</span> <span>:</span>
<span> containers</span> <span>:</span>
<span> </span> <span>-</span> <span> image</span> <span>:</span> <span> nginx</span> <span>:</span> <span>alpine</span>
<span> name</span> <span>:</span> <span> nginx</span>
<span> ports</span> <span>:</span>
<span> </span> <span>-</span> <span> containerPort</span> <span>:</span> <span> </span> <span>80</span>
<span>---</span>
<span>apiVersion</span> <span>:</span> <span> v1</span>
<span>kind</span> <span>:</span> <span> </span> <span>Service</span>
<span>metadata</span> <span>:</span>
<span> name</span> <span>:</span> <span> nginx</span>
<span>spec</span> <span>:</span>
<span> selector</span> <span>:</span>
<span> app</span> <span>:</span> <span> nginx</span>
<span> type</span> <span>:</span> <span> </span> <span>NodePort</span>
<span> ports</span> <span>:</span>
<span> </span> <span>-</span> <span> protocol</span> <span>:</span> <span> TCP</span>
<span> port</span> <span>:</span> <span> </span> <span>80</span>
<span> targetPort</span> <span>:</span> <span> </span> <span>80</span>
<span> nodePort</span> <span>:</span> <span> </span> <span>30001</span>
<span>---</span>
<span>apiVersion</span> <span>:</span> <span> v1</span>
<span>kind</span> <span>:</span> <span> </span> <span>Pod</span>
<span>metadata</span> <span>:</span>
<span> name</span> <span>:</span> <span> busybox</span>
<span> </span> <span>namespace</span> <span>:</span> <span> </span> <span>default</span>
<span>spec</span> <span>:</span>
<span> containers</span> <span>:</span>
<span> </span> <span>-</span> <span> name</span> <span>:</span> <span> busybox</span>
<span> image</span> <span>:</span> <span> abcdocker9</span> <span>/</span> <span>centos</span> <span>:</span> <span>v1</span>
<span> command</span> <span>:</span>
<span> </span> <span>-</span> <span> sleep</span>
<span> </span> <span>-</span> <span> </span> <span>"3600"</span>
<span> imagePullPolicy</span> <span>:</span> <span> </span> <span>IfNotPresent</span>
<span> restartPolicy</span> <span>:</span> <span> </span> <span>Always</span>
<span>EOF</span>
查看服务状态
<span>root@abcdocker</span> <span>:~#</span> <span> kubectl </span> <span>get</span> <span> pod</span> <span>,</span> <span>svc</span>
<span>NAME READY STATUS RESTARTS AGE</span>
<span>pod</span> <span>/</span> <span>busybox </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>2m27s</span>
<span>pod</span> <span>/</span> <span>nginx</span> <span>-</span> <span>6fb79bc456</span> <span>-</span> <span>st6qk </span> <span>1</span> <span>/</span> <span>1</span> <span> </span> <span>Running</span> <span> </span> <span>0</span> <span> </span> <span>2m27s</span>
<span>NAME TYPE CLUSTER</span> <span>-</span> <span>IP EXTERNAL</span> <span>-</span> <span>IP PORT</span> <span>(</span> <span>S</span> <span>)</span> <span> AGE</span>
<span>service</span> <span>/</span> <span>kubernetes </span> <span>ClusterIP</span> <span> </span> <span>10.96</span> <span>.</span> <span>0.1</span> <span> </span> <span><none></span> <span> </span> <span>443</span> <span>/</span> <span>TCP </span> <span>48m</span>
<span>service</span> <span>/</span> <span>nginx </span> <span>NodePort</span> <span> </span> <span>10.96</span> <span>.</span> <span>93.229</span> <span> </span> <span><none></span> <span> </span> <span>80</span> <span>:</span> <span>30001</span> <span>/</span> <span>TCP </span> <span>2m28s</span>
测试dns
<span>root@abcdocker</span> <span>:~#</span> <span> kubectl </span> <span>exec</span> <span> </span> <span>-</span> <span>ti busybox </span> <span>--</span> <span> nslookup kubernetes</span>
<span>Server</span> <span>:</span> <span> </span> <span>10.96</span> <span>.</span> <span>0.10</span>
<span>Address</span> <span>:</span> <span> </span> <span>10.96</span> <span>.</span> <span>0.10</span> <span>#53</span>
<span>Name</span> <span>:</span> <span> kubernetes</span> <span>.</span> <span>default</span> <span>.</span> <span>svc</span> <span>.</span> <span>cluster</span> <span>.</span> <span>local</span>
<span>Address</span> <span>:</span> <span> </span> <span>10.96</span> <span>.</span> <span>0.1</span>
测试nginx nodeport
nginx nodeport>nginx需要进入到node容器
<span>root@abcdocker</span> <span>:~#</span> <span> kubectl </span> <span>get</span> <span> node</span>
<span>NAME STATUS ROLES AGE VERSION</span>
<span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span> <span>-</span> <span>control</span> <span>-</span> <span>plane </span> <span>Ready</span> <span> control</span> <span>-</span> <span>plane </span> <span>53m</span> <span> v1</span> <span>.</span> <span>24.15</span>
<span>abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span> <span>-</span> <span>worker </span> <span>Ready</span> <span> </span> <span><none></span> <span> </span> <span>52m</span> <span> v1</span> <span>.</span> <span>24.15</span>
<span>root@abcdocker</span> <span>:~#</span> <span> docker </span> <span>exec</span> <span> </span> <span>-</span> <span>it abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span> <span>-</span> <span>control</span> <span>-</span> <span>plane bash</span>
<span>root@abcdocker</span> <span>-</span> <span>kind</span> <span>-</span> <span>demo</span> <span>-</span> <span>control</span> <span>-</span> <span>plane</span> <span>:/#</span>