kindest/node v1.20.2与Kubernetes v1.19.3


1、创建一个k8s资源的时候可以使用 kubectl create 也可以使用 kubectl apply?

  • kubectl create命令可创建新资源。 因此,如果再次运行该命令,则会抛出错误,因为资源名称在名称空间中应该是唯一的。

  •  kubectl apply命令将配置应用于资源。 如果资源不在那里,那么它将被创建。 kubectl apply命令可以第二次运行,因为它只是应用如下所示的配置。 在这种情况下,配置没有改变。 所以,pod没有改变。

在kubectl create和kubectl apply之间第一次创建资源时没有区别。 但是,第二次kubectl create会抛出错误。简单来说,如果在单个文件上运行操作以创建资源,则create和apply基本相同。 但是, apply允许您在目录下的多个文件上同时创建和修补。

2、如果直接删除pod触发了replicas的确保机制,需删除deployment。

#kubectl get deployments

NAME        READY   UP-TO-DATE   AVAILABLE   AGE

nginx-app   1/1     1            1           24h

#kubectl delete deployment  nginx-app 

3、 停止镜像 kindest/node v1.20.2  (浏览器不可以访问)

kubectl create deployment nginx-ubuntu --image=nginx -o yaml --dry-run > nginx-kind.yaml

# kubectl  create -f nginx- kind.yaml

    The connection to the server 127.0.0.1:36275 was refused - did you specify the right host or port?

*——>启动镜像kindest/node v1.20.2后(说明 Ubuntu 20.04.2 LTS中执行kubectl命令使用的是kind集群

# kubectl  create -f  nginx-kind.yaml

    deployment.apps/nginx-ubuntu created

然后启动服务

( kubectl expose deployment nginx- ubuntu --port=80 --target-port=8080 --type=NodePort -o yaml --dry-run=client > nginx-kind-svc.yaml)

# kubectl  create -f nginx-kind-svc.yaml

    service/nginx-ubuntu created

root@ATC-Analyzer:~# kubectl get svc

NAME           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE

nginx-ubuntu   NodePort    10.96.79.189           80:32502/TCP   45s

*:但是在浏览器中:localhost:8080 或  http://168.192.11.210: 32502 / 均 无法访问。

    说明 kubectl 使用的是kind集群(PORT:36275),而不是docker desktop中集成的Kubernetes集群,因为使用 kind集群,启动的容器APP在 docker desktop中也看不见,只能通过命令查看:kubectl  get pod,svc,deployment

kubectl命令怎么转换到使用 Kubernetes集群?

  • 在Windows PowerShell中执行kubectl命令使用的是 docker desktop中集成的Kubernetes集群, 启动的容器APP在docker desktop中也能看见;

  • 在Ubuntu 20.04.2 LTS中执行kubectl命令使用的是 kind集群,启动的容器APP在docker desktop中看不见;

  • 以上是对k8s( kubectl)而言,docker命令创建容器在 Windows PowerShell和 Ubuntu 20.04.2之间互相都能看见。

4、步骤3在 Windows PowerShell(含按windows键输入bash打开的MINGW64:/c/Users/mi_zy) 中操作:(浏览器可以访问)

(kubectl create deployment nginx-win10 --image=nginx -o yaml --dry-run > nginx-win10.yaml)

# kubectl  create -f nginx-win10.yaml

    deployment.apps/nginx-win10 created

( kubectl expose deployment nginx- win10  --port=6000 --target-port=80 --type=NodePort -o yaml --dry-run=client >nginx-win10-svc.yaml)

# kubectl  create -f  nginx-win10-svc.yaml

    service/nginx-win10 created

启动的容器APP在 docker desktop中也能看见:

*:但是在浏览器中无法访问:localhost:6000(win10主机端口需是 : 32153

--target-port='': 是容器内部的端口即 Container Port,Name or number for the port on the container that the service should direct traffic to.Optional.

--port='': The port that the service should serve on. Copied from the resource being exposed, if unspecified

PS C:\Users\atc> kubectl get svc

NAME          TYPE        CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE

nginx-win10   NodePort    10.104.249.27   168.192.11.210    6000: 32153/TCP   3m48s

然后http://168.192.11.210: 32153/  可以访问(含127.0.0.1:32153)!(即使没有参数 --external-ip=168.192.11.210也可以),说明使用win10的 Kubernetes集群,参数 --port=6000外还有一层转换( 6000: 32153),即80(Pod)-->6000(Node:docker-desktop/OS-IMAGE:Docker Desktop"/KERNEL-VERSION:"5.4.72-microsoft-standard- WSL2")-->32153(Win10对外暴露端口)

> kubectl get node  -o wide

NAME             STATUS   ROLES    AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE         KERNEL-VERSION                   CONTAINER-RUNTIME

docker-desktop   Ready    master   25h   v1.19.3    192.168.65.3           Docker Desktop   5.4.72-microsoft-standard-WSL2   docker://20.10.2

  • service的clusterip可以使用,使用方式serviceClusterIP:port(其他方式都不行),所有的节点都可以通过访问serviceClusterIP:port进行访问服务
  • pod的clusterip进行访问,使用方式podClusterIP:targetport,但是每个节点只能使用自己节点的podClusterIP访问自己的pod
  • node的ip进行访问,使用方式nodeIP:nodePort(如果nodePort没有指定,创建service会自动生成一个)

5、切换命名空间:

$ kubectl config set-context  docker-desktop  --namespace=zabbix

Context "docker-desktop" modified.$ kubectl get pods,deployment,replicaset

NAME                             READY   STATUS             RESTARTS   AGE

pod/mysql-server-rwk84           0/1     Pending            0          3h57m

pod/zabbix-agent-v5zkd           1/1     Running            1          3h57m

pod/zabbix-java-gateway-47wwj    1/1     Running            1          3h57m

pod/zabbix-proxy-mysql-jbgmm     1/1     Running            1          3h57m

pod/zabbix-proxy-sqlite3-q42ph   1/1     Running            1          3h57m

pod/zabbix-server-qc744          1/2     Running            9          3h57m

pod/zabbix-web-8hscw             0/1     CrashLoopBackOff   12         3h57m

pod/zabbix-web-d48hk             0/1     CrashLoopBackOff   7          3h57m

6、基于YAML文件创建部署

$ kubectl create -f kubernetes.yaml

namespace/zabbix created

service/zabbix-web created

......

7、查看状态

$ kubectl get pods,deployment,replicaset

NAME                             READY   STATUS    RESTARTS   AGE

pod/mysql-server-7rcbb           0/1     Pending   0          107s

pod/zabbix-agent-8w4nh           1/1     Running   0          107s

8、使用其YAML配置文件删除Kubernetes部署 https://www.cnblogs.com/a5idc/p/13703692.html

$ kubectl delete -f kubernetes.yaml

namespace "zabbix" deleted

service "zabbix-web" deleted

......

9、将 zabbix-web默认ClusterIP修改为type: NodePort

$ kubectl get service

NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP      PORT(S)                      AGE

zabbix-web             NodePort    10.97.231.16     192.168.31.165   80: 30309/TCP,443:32219/TCP   6m13s

打开浏览器:http://192.168.31.165: 30309/

当前无法使用此页面

192.168.31.165 未发送任何数据。

ERR_EMPTY_RESPONSE

有可能是 pod/mysql-server状态为 Pending导致,待查。

请使用浏览器的分享功能分享到微信等