k8s入门操作

发布于:2025-08-07 ⋅ 阅读:(27) ⋅ 点赞:(0)

一、部署一个 tomcat

  • 创建一个部署叫tomcat6 用docker hub的镜像 tomcat:6.0.53-jre8这个镜像带了JRE8的环境的
kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8

  • 获取K8S里面的所有资源
kubectl get all

资源分为四张表

前面是资源类型,相当于现在要部署一个pod ,pod 是tomcat6-5f7ccf4cb9-wlrdc 带了一些其他唯一标识5f7cc..., ready0/1,这个tomcat pod里面有一个容器,但是它还没准备好 容器正在创建中ContainerCreating

当前还有一个Service 我们说的服务 后来我们说一下Service是什么

那么,这次就是我们的deployment,我们的这次部署tomcat6,做了一次部署,但是呢,零个成功,那还没有成功呢。

还有我们的replicaset, 那这个呢,就是我们的复制,我们这个应用呢,要复制几份?我们现在要复制一份,但是呢,还没有一个ready状态。

而且,我们现在既然让master来调度给我们来要部署一个pod了,那相当于这个pod就得在我们的其他节点note2或者note3来部署,那么怎么知道master放在哪个节点了呢?

我们可以kubectl get all -o wide,我们让它打印出更宽泛的内容

kubectl get all -o wide

那么在这儿呢,可以看到我们这个tomcat6里边的这个pod,它部署的节点是k8s-node2, 然后呢,它正在running,说明呢,它在node2节点已经部署好了。

我先用这个命令来验证一件事情,我们docker images看我们note2节点下载了哪些镜像,发现呢,这有一个镜像叫tomcat

那说明我们现在他们刚的部署,那分配给note2节点了。Note2节点先下载镜像,那它肯定要启动容器啊。来打开PS看一下正在运行中的容器,

有一个容器呢,那就叫tomcat,它也把这个容器启动了。这容器的名字超长,那就在这儿lt_747ac6ea-4b9f-402e-a824-adbdc7933362_0,所以们这个容器也都启动了,所有的东西呢,都准备好了。

那我们这一块看到的这个kubectl get pods 来获取它默认名称空间的,因为如果我们是kubectl get pods --all-namespaces是获取所有的

来获取它到它默认名称空间

kubectl get pods

kubectl get pods --all-namespaces

我们默认的其他系统的服务都在kube-system 名称空间里面

部署的所有应用都在默认的命名空间 default

kubectl get pods -o wide

确实能看到在k8s-node2节点已经创建这次部署

那这次部署呢,就牵扯到我们之前的说的这么各种资源,我们再来看一下,kubectl get all

我们一个pod一个service,还有一个deployment,还有一个replicaset 这些东西是什么,我们来后来再说

现在模拟node2宕机,会是什么效果

第一种:node2 docker stop tomcat6,主动关闭它也会重新再拉起一个新的

这就是由于我们这个部署规定东西总是得有一份

第二种:现在为了模仿node2宕机,直接关机node2

master就感知到

kubectl get nodes

这里是需要一段时间才能感应到,在测试的同学不要着急 现在可以看到node2在发送Terminating node3在拉取镜像

中途看了一下拉取镜像有失败,但是我去node3节点docker images 又看到了tomcat6 再回到主节点在看就是running了

node2节点还在运行是因为Terminating中断命令发出去node2无法接收,所以没有关闭

可以看到它会在node3再拉取创建一个tomcat,这就是容灾恢复,一旦我们有一个节点出现了宕机,它可以帮我们自动恢复

此时再把node2开机,就会恢复到只有一个tomcat了,因为node2开机接收到Terminating命令会关闭

二、暴露 nginx 访问

tomcat6,既然已经创建好了,如果想要暴露给外面访问tomcat6,接下来可以使用这个命令将

kubectl expose deployment tomcat6 --port=80 --target-port=8080 --type=NodePort

要暴露一个部署,暴露哪个部署呢?我们的这个tomcat6,那接下来呢,有一个--port 80, 然后--port 8080, 然后--type=NodePort这是什么意思?

就是我们都知道,Tomcat默认暴露的端口是8080。但如果是使用docker容器的话,以前是把8080映射一个端口。

现在docker,又是用pod封装的,就指的是我们这个pod里边的这个容器,它暴露的端口是8080。访问pod用哪个端口?用80,然后访问到我们的8080。

接下来整个pod,要作为一个我们称为叫service,要暴露出去。暴露出去以后用的是什么模式,有一个叫NodePort, 叫这个节点端口的模式,那这种模式就相当咱们这个pod作为一个service,它随机分配一个端口帮我来暴露出去,

也可以使用--node port=自己来指定一个端口。最终效果就是这样,如果指定30778,去外界访问30778,那么就会访问到pod的这个80,那pod的80就会带到它容器里面的8080。

一个pod里面可能还会有多个容器,这也是可能的

先来测试一下,具体它们都写什么值,后来再说好

发现有一个东西叫service,就暴露了一个service,现在来使用这个命令获取所有的service

kubectl get svc

之前有个默认service叫kubernetes,现在还有个tomcat6,它随机分配了一个叫31738。想要看更广泛的信息

kubectl get svc -o wide

其实就可以使用31738来访问了

获取到所有的service是kubectl get svc,也可以来kubectl get all,就能看到所有的信息。

kubectl get all

这个pod,被封装成一个service,对外暴露的是31738。这个pod产生是由于这次部署产生的。这次部署呢,最终还有一个副本,副本相当运行几份,运行一份,我们就相当一台机器一份就行。

三、动态扩容

kubectl scale --replicas=3 deployment tomcat6

kubectl get pods -o wide

可以看到 node2节点运行两个 node3节点运行一个

kubectl get svc -o wide

在任何节点访问31738都访问到tomcat

四、缩容

缩容也是一样的,把副本数变为1

kubectl scale --replicas=1 deployment tomcat6

五、删除

Kubectl get all
kubectl delete deploy/nginx
kubectl delete service/nginx-service
[root@k8s-node1 ~]# kubectl get all

NAME READY STATUS RESTARTS AGE

pod/tomcat6-5f7ccf4cb9-xd4cx 1/1 Running 0 58m

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

service/kubernetes ClusterIP 10.96.0.1 443/TCP 15h

service/tomcat6 NodePort 10.96.58.120 80:31738/TCP 25m

NAME READY UP-TO-DATE AVAILABLE AGE

deployment.apps/tomcat6 1/1 1 1 96m

NAME DESIRED CURRENT READY AGE

replicaset.apps/tomcat6-5f7ccf4cb9 1 1 1 96m

[root@k8s-node1 ~]# kubectl delete deployment.apps/tomcat6

deployment.apps "tomcat6" deleted

[root@k8s-node1 ~]# kubectl get all

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

service/kubernetes ClusterIP 10.96.0.1 443/TCP 15h

service/tomcat6 NodePort 10.96.58.120 80:31738/TCP 26m

[root@k8s-node1 ~]# kubectl get pods

No resources found in default namespace.

[root@k8s-node1 ~]# kubectl delete service/tomcat6

service "tomcat6" deleted

[root@k8s-node1 ~]# kubectl get all

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

service/kubernetes ClusterIP 10.96.0.1 443/TCP 15h


网站公告

今日签到

点亮在社区的每一天
去签到