ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-01 14:02:00  阅读:211  来源: 互联网

标签:ingress Kubernetes service app Pod deployment pod hello


容器镜像: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

标签:ingress,Kubernetes,service,app,Pod,deployment,pod,hello
来源: https://blog.csdn.net/huang_xjie/article/details/120577322

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有