• k8s简单部署nginx


    1. 前言

    在这里插入图片描述

    前文提要:

    1. kubeadm简单搭建k8s集群
    2. 第三方面板部署k8s

    上篇文章我们简单部署了k8s的集群环境,相比一定迫不及待的想部署一个实际应用了吧。那这里我们就简单部署一个大家几乎都用得上的应用nginx

    2. 部署nginx

    在这里插入图片描述

    2.1. 创建一个nginx的Deployment

    里面一一般包含nginx相关的镜像,端口,名字,pod数量

    kubernetes主要的功能就是管理多个Pod,Pod中可以包含一个或多个容器,而kubernetes是如可管理多个Pod的呢?对,没错,就是通过控制器,比如Deployment

    vim nginx-deployment.yaml
    
    • 1
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 2  # 设置副本数量
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:latest #镜像拉取地址
            ports:
            - containerPort: 80 #监听端口
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    kubectl apply -f nginx-deployment.yaml
    
    • 1
    1. 执行配置
    kubectl apply -f nginx-deployment.yaml
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    到这里running就算创建完成了。

    ❓那么,如何访问呢?或者说怎么把服务暴漏呢?那么多容器,到底访问哪一个呢?❓

    2.2. 创建一个nginx的service

    Service的主要目标是为Kubernetes集群内的应用程序提供一个稳定的网络端点,使它们可以相互通信。它顺便实现了以下几个功能。

    • 服务发现:Kubernetes中的应用程序通常以副本的方式运行,这意味着多个相同的应用程序副本可能分布在集群的不同节点上。Service允许客户端应用程序找到并连接到这些副本,而无需了解它们的具体位置。Service为应用程序提供了一个虚拟的DNS名称或IP地址,客户端可以使用该名称或IP地址来访问服务。
    • 负载均衡:Service在后台自动为多个副本分布的应用程序提供负载均衡。当客户端请求连接到Service时,它会将请求平均分发给可用的副本,以确保流量分布均匀,避免某个副本过载。
    • 完整性检查:Service还提供了对服务的基本完整性检查。如果某个副本不可用(例如,由于节点故障或容器崩溃),Service会将流量路由到可用的副本,以确保服务的连续性。

    不过我们为了测试,我们就用了一个最简单的ndeport的网络,说实话这并为用到k8s的核心内容,相当于单主机部署nginx并且开了一个端口。

    在这里插入图片描述

    • ClusterIP是默认的Service类型。 它为服务分配一个虚拟的Cluster IP地址,仅在Kubernetes集群内部可用。
      这意味着只有集群内部的其他Pod可以通过Cluster IP地址访问该服务。
      ClusterIP通常用于内部微服务之间的通信,不会暴露到集群外部。 NodePort:

    • NodePort: 类型的Service会在每个Node上都开放一个静态端口,允许从集群外部访问服务。
      当外部流量到达NodePort端口时,它将被转发到Service的Cluster IP地址,并由Kubernetes进行负载均衡。
      NodePort通常用于需要从集群外部访问服务的场景,但不是最安全的方式,因为端口是公开的。 LoadBalancer:

    • LoadBalancer:类型的Service使用云提供商(如AWS、Azure、GCP)的负载均衡器服务来公开应用程序。
      在创建LoadBalancer Service时,云提供商将为该服务分配一个外部IP地址,并将流量分发到集群中的Pod。
      LoadBalancer通常用于需要在云环境中公开服务并实现负载均衡的情况。它对于外部流量非常有用,并且可以与HTTPS等TLS证书集成以提供安全的外部访问。

    一般在落地方案中LoadBalancer分发流量是比较合适的,同时在纯后端应用中使用ClusterIP也没问题。

    1. 创建配置文件:
    vim nginx-service.yaml
    
    • 1
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
    spec:
      selector:
        app: nginx
      ports:
        - protocol: TCP
          port: 80
          targetPort: 80
          nodePort: 8000 #nortPort开在主机的端口
      type: NodePort  # 这里使用LoadBalancer类型,如果你在本地运行,可以使用NodePort类型或ClusterIP类型
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    /1e208a1ada514890ae22c3689db903b5.png)

    1. 执行配置文件:
    kubectl apply -f nginx-service.yaml
    
    • 1

    在这里插入图片描述

    3. 总结

    这篇文章,我们使用nodePort访问了k8s部署的nginx,并且简单理解了k8s的网络构成,这对对于我们理解k8s的庞大架构是重要的,希望我们不忘初心,砥砺前行!

  • 相关阅读:
    MySQL docker compose安装配置
    高通KMD框架详解
    清空一下问题机器的ClickOnce cache
    原生ip和非原生ip的区别
    基于poi和JavaBean的excel导出
    [手写spring](2)初始化BeanDefinitionMap
    基于MATLAB的GPS卫星绕地运行轨迹动态模拟仿真
    【MyBatis笔记07】MyBatis中的批量操作(批量新增、批量删除、批量更新)
    应用现代化产业联盟,正式成立
    Elasticsearch基础知识点总结介绍
  • 原文地址:https://blog.csdn.net/faker1234546/article/details/133709000