1. Pod介绍
    Pod是Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上。Pod中包含了一个或多个容器,还包括了存储、网络等各个容器共享的资源。Pod支持多种容器环境,Docker则是最流行的容器环境。

  2. 下载并部署tomcat6(master节点)
    查看所有不同的资源对象kubectl get all,发现目前只有一个service
    在这里插入图片描述
    部署一个tomcat,镜像名称为tomcat:6.0.53-jre8,部署名称为tomcat6

kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8

查看资源详情kubectl get all -o wide,可以看到现在创建了一个pod,pod中有一个容器,且已经运行起来了,运行在node2节点;当然也有service等信息。
在这里插入图片描述
我们去node2节点查看,node2节点确实下载了tomcat镜像,创建并运行了tomcat容器
在这里插入图片描述
如果我们将当前创建的容器停掉docker stop d34fc809ceee,会发现node2节点中会自动再创建一个tomcat容器
在这里插入图片描述
这是因为k8s为了保证必须有一个创建的容器在运行中,如果因为异常关闭了一个,就会自动再创建一个。那如果整个节点服务器宕机了,则会在另一台节点中重新拉去镜像并创建容器,如果就一个node节点,那就会报错。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到node2处于终止中的状态,但是由于node2已经被我关机了,其实也终止不了,由于只有一台node,所以k8s想要创建新的tomcat容器,一直创建不成功,处于pending(等待)状态。
我们重启node2节点,再次查看pod状态:
在这里插入图片描述
我们去node2中查看,这里我们发现,容器的id又变了,说明k8s自动帮我们把之前的停止的容器给删掉了,又重新创建了新的tomcat容器,这一点还是挺神奇的。另外,master节点不会创建容器
在这里插入图片描述

  1. 资源暴露为新的Kubernetes Service
    通过kubectl expose可以将创建的tomcat资源暴露为一个服务。这里的80是pod端口,8080代表容器的端口,--type=NodePort服务类型,如果选择NodePort,会随机分配一个端口供外界访问,也就是说,我们通过浏览器访问一个url,这个url的端口是随机分配的,接着会去找pod的80端口,pod就会去找8080端口,也就是我们的tomcat资源。
kubectl expose deployment tomcat6 --port=80 --target-port=8080 --type=NodePort

在这里插入图片描述
查看当前service,这里分配了30686端口用于访问tomcat6

kubectl get svc -o wide
#或者
kubectl get service -o wide

在这里插入图片描述
通过url访问tomcat6:http://192.168.31.128:30686/或者http://192.168.31.129:30686/,这里我们发现通过128或者129都可以访问,说明master和node是一个整体。
在这里插入图片描述
在这里插入图片描述

  1. 动态扩容或缩容
    通过kubectl scale来扩容,扩容之后就会随机在各个容器创建新的pod,我这里只有一个node,所以都在node2上创建了
kubectl scale --replicas=3 deployment tomcat6

在这里插入图片描述
缩容就是修改数字即可,比如我们改回原来的1,我们发现有两个pod的状态变为Terminating了。

kubectl scale --replicas=1 deployment tomcat6

在这里插入图片描述

  1. 利用ingress解决多个ip访问的问题
    上面我们可以看到,既可以通过128也可以通过129访问tomcat,这样子非常没有统一性,如果有多个节点,那么就可以通过多个节点来访问。通过ingress可以设置成一个ip或者域名来访问,即使其中某个节点异常退出了,也还是可以正常访问。
    在上面复制多个pod时会发现有一个属性叫做replicaset对象,它的主要作用是确保Pod以你指定的副本数运行,即如果有容器异常退出,会自动创建新的 Pod 来替代。也就是我们上面提到的如果将docker容器停掉,会再自动创建docker容器。
    查看ingress的yaml配置文件中有一个属性叫做DaemonSet,它的作用是确保每个节点都有一个pod副本,也就是说每个节点都会安装ingress。
    在这里插入图片描述
    执行安装,yaml文件会在评论给大家:
kubectl apply -f ingress-controller.yaml

在这里插入图片描述
这里可以看到,节点里已经创建了ingress容器:
在这里插入图片描述
创建ingress规则:
编写一个yml文件,其中serviceName和上面一致叫做tomcat6,端口为暴露的pod端口80,域名叫做tomcat6.atguigu.com

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: web
spec:
  rules:
  - host: tomcat6.atguigu.com
    http:
      paths:
        - backend:
           serviceName: tomcat6
           servicePort: 80

执行yml文件:

kubectl apply -f ingress-tomcat6.yaml

在这里插入图片描述
在hosts文件中配置域名信息,ping一下,这里如果有多个节点只需要配置其中的一个节点就可以了,不能配置master节点

192.168.31.129  tomcat6.atguigu.com

在这里插入图片描述
在这里插入图片描述
最后再说一下,这里由于ingress底层使用的是nginx,默认就是用80访问,至于为什么,后面再探讨

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐