k8s学习(2)--k8s入门基本操作体验
Pod介绍Pod是Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上。Pod中包含了一个或多个容器,还包括了存储、网络等各个容器共享的资源。Pod支持多种容器环境,Docker则是最流行的容器环境。下载并部署tomcat6(master节点)查看所有不同的资源对象kubectl get all,发现目前只有一个service部
-
Pod介绍
Pod是Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上。Pod中包含了一个或多个容器,还包括了存储、网络等各个容器共享的资源。Pod支持多种容器环境,Docker则是最流行的容器环境。 -
下载并部署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节点不会创建容器
- 资源暴露为新的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是一个整体。
- 动态扩容或缩容
通过kubectl scale
来扩容,扩容之后就会随机在各个容器创建新的pod,我这里只有一个node,所以都在node2上创建了
kubectl scale --replicas=3 deployment tomcat6
缩容就是修改数字即可,比如我们改回原来的1,我们发现有两个pod的状态变为Terminating了。
kubectl scale --replicas=1 deployment tomcat6
- 利用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访问,至于为什么,后面再探讨
更多推荐
所有评论(0)