使用k8s快速创建nginx集群【测试成功】

艺帆风顺 发布于 2025-04-03 22 次阅读


一、需求背景

    存在以下三台服务器:192.168.1.7(master)、192.168.1.8(node 1)、  192.168.1.9(node 2)

    在三台服务器组成nginx集群。

二、配置环境

查看k8s版本信息:    kubectl version    

    [root@jdnode-2 ~]# kubectl versionClient Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.6", GitCommit:"ad3338546da947756e8a88aa6822e9c11e7eac22", GitTreeState:"clean", BuildDate:"2022-04-14T08:49:13Z", GoVersion:"go1.17.9", Compiler:"gc", Platform:"linux/amd64"}The connection to the server localhost:8080 was refused did you specify the right host or port?

    查看docker 版本信息:

     docker version      24.0.5

    三、创建集群

        1、vim my_nginx.yaml 

      apiVersion: apps/v1kind: Deploymentmetadata: name: my-nginxspec: selector: matchLabels: run: my-nginx replicas: 3 template: metadata: labels: run: my-nginx spec: containers: - name: my-nginx image: nginx ports: - containerPort: 80

      这是一个 Kubernetes 的 YAML 配置文件,用于定义一个 Deployment,该 Deployment 将运行名为 "my-nginx" 的 Nginx 容器,并在集群中创建三个 Pod 副本。

      关键部分如下:

      • apiVersion: apps/v1: 表示使用的 Kubernetes API 版本,这里是 Apps API 的版本。

      • kind: Deployment: 声明这是一个 Deployment 对象。

      • metadata: 包含 Deployment 的元数据信息,其中 name 字段指定了 Deployment 的名称为 "my-nginx"。

      • spec: 定义 Deployment 的规范。

        • metadata: 包含 Pod 的元数据信息,其中 labels 字段指定了标签为 "run: my-nginx"。

        • spec: 定义了 Pod 的规范。

        • name: my-nginx: 容器的名称。

        • image: nginx: 容器所使用的 Docker 镜像为 Nginx。

        • ports: 容器暴露的端口配置,这里将容器的 80 端口映射到集群中。

        • containers: 描述了 Pod 中运行的容器。

        • selector: 用于选择将在其中运行 Pod 的标签。

        • replicas: 3: 指定要创建的 Pod 副本数为 3。

        • template: 定义了创建 Pod 所需的模板。

      这个 Deployment 文件的效果是在 Kubernetes 集群中创建一个名为 "my-nginx" 的 Deployment,该 Deployment 管理着三个运行 Nginx 容器的 Pod 副本。

      kubectl apply -f my_nginx.yaml     #启动

      [root@jdmaster k8s]#  kubectl get pod

        NAME READY STATUS RESTARTS AGEmy-nginx-cf54cdbf7-9qh74 1/1 Running 0 13mmy-nginx-cf54cdbf7-b9ptd 1/1 Running 0 13mmy-nginx-cf54cdbf7-m4ppl 1/1 Running 0 13m

        2vim my_service.yaml       

          apiVersion: v1kind: Servicemetadata: name: my-nginx labels: run: my-nginxspec: type: NodePort ports: - port: 8080 targetPort: 80 protocol: TCP name: http selector: run: my-nginx

          这是一个 Kubernetes 的 YAML 配置文件,用于定义一个 Service,该 Service 将与前面定义的 Deployment 关联,允许外部流量访问这个 Deployment。

          关键部分如下:

          • apiVersion: v1: 表示使用的 Kubernetes API 版本。

          • kind: Service: 声明这是一个 Service 对象。

          • metadata: 包含 Service 的元数据信息,其中 name 字段指定了 Service 的名称为 "my-nginx",同时还为 Service 打了一个标签 "run: my-nginx"。

          • spec: 定义 Service 的规范。

            • run: my-nginx: 选择具有标签 "run: my-nginx" 的 Pod。

            • port: 8080: 指定外部访问的端口。

            • targetPort: 80: 将请求转发到后端 Pod 的端口。

            • protocol: TCP: 指定通信协议为 TCP。

            • name: http: 定义了端口的名称。

            • type: NodePort: 指定 Service 类型为 NodePort,这意味着 Service 将暴露一个随机选择的端口,并将请求路由到后端 Pod。

            • ports: 定义了 Service 暴露的端口配置。

            • selector: 用于选择将接收流量的后端 Pod 的标签。

          这个 Service 文件的效果是创建了一个 NodePort 类型的 Service,名称为 "my-nginx",它将外部流量通过节点的某个随机端口转发到后端运行 Nginx 的 Pod

          kubectl apply -f my_service.yaml         #启动服务

          kubectl get svc        #查看状态

            [root@jdmaster k8s]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.1.0.1 443/TCP 3h24mmy-nginx NodePort 10.1.173.180 8080:31756/TCP 17m

            Kubernetes Service my-nginx 已经成功创建,并且是一个 NodePort 类型的服务。以下是输出中各字段的解释:

            • NAME: Service 的名称,这里是 my-nginx

            • TYPE: Service 的类型,这里是 NodePort,表示这是一个 NodePort 类型的服务。

            • CLUSTER-IP: Service 的 Cluster IP 地址,这个 IP 地址只在集群内部可用。

            • EXTERNAL-IP: 外部 IP 地址。在这里是 ,因为NodePort服务通常不会分配外部 IP,而是通过节点上的某个端口提供对服务的外部访问。

            • PORT(S): Service 暴露的端口。在这里是 8080:31756/TCP,表示 Service 将外部流量引导到节点上的端口 31756,而这个端口会映射到 Pod 的端口 8080

            • AGE: Service 创建后经过的时间。

            如果想通过集群的节点 IP 和 NodePort 访问 Nginx 服务,你可以使用 :31756,其中 是你集群中某个节点的 IP 地址。例如,如果你的集群中有一个节点的 IP 地址是 192.168.1.7,可以通过 http://192.168.1.7:31756 访问 Nginx 服务。NodePort 是随机选择的,因此端口号可能会有所不同。

            自定义端口nodePort

                Kubernetes 的nodePort应该在 30000 到 32767 的范围内

              apiVersion: v1kind: Servicemetadata: name: my-nginx labels: run: my-nginxspec: type: NodePort ports: - port: 8080 targetPort: 80 nodePort: 30888 protocol: TCP name: http selector: run: my-nginx

                [root@jdmaster k8s]# kubectl apply -f my_service.yamlThe Service "my-nginx" is invalid: spec.ports[0].nodePort: Invalid value: 32780: provided port is not in the valid range. The range of valid ports is 30000-32767

                外部通过IP地址:nodePort进行访问。

                希望该内容能对读者有所帮助,欢迎扫描下方二维码关注本号,更多内容持续更新中。