Kubernetes通过deployment、service和ingress搭建应用

容器镜像:huangxjie/tomcat:0.0.1    该镜像只是一个简单的测试镜像,可以使用此镜像或者更换自己的镜像

deployment

首先讨论如果不使用deployment而是创建单个pod,当然这样是可以访问容器内的资源。但是万一此pod因为网络原因无法访问,那么项目就无法访问了,只能自己再创建新的pod重新部署应用。为了解决这个问题可以使用replicateSet来控制副本,这里使用deployment来控制副本数量。

使用deployment创建pod,deployment不仅可以控制pod副本的数量,deployment还有pod回滚,升级等功能

apiVersion: apps/v1    # #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment       # 资源类型为Deployment
metadata:          # 元数据,即 Deployment 的一些基本属性和信息
  name: hello-deployment  # Deployment 的名称
  labels:              # 标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组
    app: hello         # 为该Deployment设置key为app,value为hello的标签
spec:              # 这是关于该Deployment的描述          
  replicas: 3          # 使用该Deployment创建3个应用程序实例
  selector:            # 标签选择器
    matchLabels:       # 选择包含标签app:hello的资源 
      app: hello
  template:            # 这是选择或创建的Pod的模板
    metadata:            # Pod的元数据
      name: hello        # Pod的名称,K8s会在后面加上字符区分不同的Pod
      labels:            # Pod的标签,上面的selector即选择包含标签app:hello的Pod
        app: hello
    spec:              # 关于该Pod的描述    
      containers:        # container,与docker中的container是同一种
      - name: tomcat     # container的名称
        image: huangxjie/tomcat:0.0.1  # 使用我的测试镜像
        ports:
        - containerPort: 80  # 容器访问端口

service

如果不使用service,可以直接访问pod从而访问应用。但是因为网络等因素导致pod被删除之后,虽然deployment能够保证副本的总数量,但是副本的名称和地址都会改变,如果在使用之前的地址访问就访问不到部署的应用,所以我们使用service来提供统一的对外接口。

apiVersion: v1        
kind: Service            # 资源类型为Service
metadata:
  name: hello-service    # 设置service的名称为hello-service
spec:                    # 关于该service的描述
  selector:              # 选择器
    app: hello             # 选择key为app,value为hello的pod
  type: NodePort         # service的类型设置为NodePort
  ports:               
    - port: 80           # 服务集群IP的端口号,<cluster ip>:port 是提供给集群内部客户访问service的入口
      targetPort: 8080   # 背后Pod的目标端口
      nodePort: 30002    # 通过集群节点的30123端口可以访问该服务,<nodeIP>:nodePort 是提供给集群外部客户访问service的入口

ingress

Ingress 是 Kubernetes 的一种 API 对象,将集群内部的 Service 通过 HTTP/HTTPS 方式暴露到集群外部,并通过规则定义 HTTP/HTTPS 的路由。Ingress 具备如下特性:集群外部可访问的 URL、负载均衡、SSL Termination、按域名路由(name-based virtual hosting)

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: hello-ingress-for-hello  # Ingress 的名字,仅用于标识
spec:
  rules:                         # Ingress 中定义 L7 路由规则
  - host: hello.example.com      # 根据 virtual hostname 进行路由(请使用您自己的域名)
    http:
      paths:                     # 按路径进行路由
      - path: /
        backend:
          serviceName: hello-service  # 指定后端的 Service 为之前创建的 hello-service
          servicePort: 80

上一篇:activiti学习之服务任务


下一篇:关于 Kubernetes 的这些原理,你一定要了解