Docker 如何在Kubernetes中使用一个YAML部署两个服务器,其中一个服务器依赖于另一个服务器

Docker 如何在Kubernetes中使用一个YAML部署两个服务器,其中一个服务器依赖于另一个服务器,docker,nginx,kubernetes,redis,yaml,Docker,Nginx,Kubernetes,Redis,Yaml,我有两个应用程序,nginx和redis,其中nginx使用redis缓存一些数据,因此必须在nginx中配置redis地址 一方面,我可以首先应用redis部署并获取其IP,然后应用nginx部署在我的系统中设置这两个应用程序 但另一方面,为了简化for-QA,我想创建一个Kubernetes-YAML文件(like),将这两个应用程序部署在两个不同的应用程序上。但是,如果我通过,我无法获得redis地址 那么我如何实现它呢 apiVersion:apps/v1 种类:部署 元数据: 姓名:r

我有两个应用程序,nginx和redis,其中nginx使用redis缓存一些数据,因此必须在nginx中配置redis地址

一方面,我可以首先应用redis部署并获取其IP,然后应用nginx部署在我的系统中设置这两个应用程序

但另一方面,为了简化for-QA,我想创建一个Kubernetes-YAML文件(like),将这两个应用程序部署在两个不同的应用程序上。但是,如果我通过,我无法获得redis地址

那么我如何实现它呢

apiVersion:apps/v1 种类:部署 元数据: 姓名:redis master 标签: 应用程序:redis 规格: 选择器: 火柴标签: 应用程序:redis 角色:硕士 层:后端 副本:2份 模板: 元数据: 标签: 应用程序:redis 角色:硕士 层:后端 规格: 容器: -姓名:master-c 图片:docker.io/redis:alpine 端口: -集装箱港口:6379 --- apiVersion:apps/v1 种类:部署 元数据: 姓名:我的nginx 规格: 选择器:#定义部署如何查找要管理的POD。 火柴标签: 应用程序:我的nginx 模板: 元数据:#定义新创建的pod的标签。 标签: 应用程序:我的nginx 层:前端 规格: 终止时间:5秒 容器: -名称:我的nginx#定义容器名称 image:my-nginx:dev#docker映像加载-i my-nginx-docker_image.tar imagePullPolicy:Never#Always,IfNotPresent(默认),Never 端口: 环境: -名称:NGINX\u错误\u日志\u严重性\u级别 值:调试 -名称:我的应用程序REDIS主机 #如何使用上一次部署创建的标有redis master的POD的IP地址? 数值:10.86.50.235 # https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/ #价值来源: #fieldRef: #fieldPath:status.podIP#这是当前的POD IP -名称:我的应用程序客户端ID 值:客户端id -名称:我的应用程序客户端密码 # https://kubernetes.io/docs/concepts/configuration/secret 值:客户端密码 --- # https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service 版本:v1 种类:服务 # https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-选择器 # https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/ #元数据—帮助唯一标识对象的数据,包括名称字符串、UID和可选命名空间 元数据: 姓名:我的nginx 规格: 类型:节点端口 选择器: #使用相应的“.metadata.labels”字段为播客定义适当的选择器。 #使用:kubectl get pods--selector app=my nginx | | kubectl get pod-l app=my nginx验证它 #确保服务指向正确的pod,例如,`kubectl descripe pod-l app=my nginx` 应用程序:我的nginx 端口: #默认情况下,为方便起见,“targetPort”设置为与“port”字段相同的值。 -名称:http 端口:6080 目标港:80 #默认情况下,为了方便起见,Kubernetes控制平面将从一个范围(默认值:30000-32767)分配一个端口 节点端口:30080 -名称:https 港口:6443 目标港:443 节点端口:30443 增加了一些网络输出

    
    Microsoft Windows [Version 10.0.18362.900]
    (c) 2019 Microsoft Corporation. All rights reserved.
    
    PS C:\Users\ssfang> kubectl get pods
    NAME                            READY   STATUS    RESTARTS   AGE
    my-nginx-pod                    1/1     Running   9          5d14h
    redis-master-7db899bccb-npl6s   1/1     Running   3          2d15h
    redis-master-7db899bccb-rgx47   1/1     Running   3          2d15h
    
    C:\Users\ssfang> kubectl exec redis-master-7db899bccb-npl6s -- cat /etc/resolv.conf
    nameserver 10.96.0.10
    search default.svc.cluster.local svc.cluster.local cluster.local
    options ndots:5
    
    C:\Users\ssfang> kubectl exec my-nginx-pod -- cat /etc/resolv.conf
    nameserver 10.96.0.10
    search default.svc.cluster.local svc.cluster.local cluster.local
    options ndots:5
    
    C:\Users\ssfang> kubectl -n kube-system get svc
    NAME                                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                  AGE
    ingress-nginx-controller-admission   ClusterIP   10.108.221.2   <none>        443/TCP                  7d11h
    kube-dns                             ClusterIP   10.96.0.10     <none>        53/UDP,53/TCP,9153/TCP   7d17h
    
    
    C:\Users\ssfang> kubectl get ep kube-dns --namespace=kube-system
    NAME       ENDPOINTS                                                 AGE
    kube-dns   172.17.0.2:53,172.17.0.5:53,172.17.0.2:9153 + 3 more...   7d17h
    
    C:\Users\ssfang> kubectl get ep kube-dns --namespace=kube-system -o=yaml
    apiVersion: v1
    kind: Endpoints
    metadata:
      annotations:
        endpoints.kubernetes.io/last-change-trigger-time: "2020-07-09T02:08:35Z"
      creationTimestamp: "2020-07-01T09:34:44Z"
      labels:
        k8s-app: kube-dns
        kubernetes.io/cluster-service: "true"
        kubernetes.io/name: KubeDNS
      managedFields:
      - apiVersion: v1
        fieldsType: FieldsV1
        fieldsV1:
          f:metadata:
            f:annotations:
              .: {}
              f:endpoints.kubernetes.io/last-change-trigger-time: {}
            f:labels:
              .: {}
              f:k8s-app: {}
              f:kubernetes.io/cluster-service: {}
              f:kubernetes.io/name: {}
          f:subsets: {}
        manager: kube-controller-manager
        operation: Update
        time: "2020-07-09T02:08:35Z"
      name: kube-dns
      namespace: kube-system
      resourceVersion: "523617"
      selfLink: /api/v1/namespaces/kube-system/endpoints/kube-dns
    subsets:
    - addresses:
        nodeName: minikube
        targetRef:
          kind: Pod
          namespace: kube-system
          resourceVersion: "523566"
          uid: ed3a9f46-718a-477a-8804-e87511db16d1
      - ip: 172.17.0.5
        nodeName: minikube
        targetRef:
          kind: Pod
          name: coredns-546565776c-hmm5s
          namespace: kube-system
          resourceVersion: "523616"
          uid: ae21c65c-e937-4e3d-8a7a-636d4f780855
      ports:
      - name: dns-tcp
        port: 53
        protocol: TCP
      - name: metrics
        port: 9153
        protocol: TCP
      - name: dns
        port: 53
        protocol: UDP
    C:\Users\ssfang> kubectl get service
    NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                         AGE
    kubernetes           ClusterIP   10.96.0.1     <none>        443/TCP                         7d20h
    my-nginx-service     NodePort    10.98.82.96   <none>        6080:30080/TCP,6443:30443/TCP   7d13h
    
    PS C:\Users\ssfang> kubectl describe pod/my-nginx-pod | findstr IP
    IP:           172.17.0.8
    IPs:
      IP:  172.17.0.8
    PS C:\Users\ssfang> kubectl describe service/my-nginx-service | findstr IP
    IP:                       10.98.82.96
    
    C:\Users\ssfang> kubectl describe pod/my-nginx-65ffdfb5b5-dzgjk | findstr IP
    IP:           172.17.0.4
    IPs:
      IP:           172.17.0.4
    
  • C:\Users\ssfang>kubectl exec my-nginx-65ffdfb5b5-dzgjk-it--bash
  • C:\Users\ssfang>ssh-o strichostkeychecking=no-i C:\Users\ssfang.minikube\machines\minikube\id\u rsadocker@10.86.50.252&::minikube ssh
  • 
    _             _
    _         _ ( )           ( )
    ___ ___  (_)  ___  (_)| |/')  _   _ | |_      __
    /' _ ` _ `\| |/' _ `\| || , <  ( ) ( )| '_`\  /'__`\
    | ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )(  ___/
    (_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)
    $ping default.svc.cluster.local
    ping:地址“default.svc.cluster.local”错误
    $ping my-nginx-pod.default.svc.cluster.local
    ping:地址“my nginx pod.default.svc.cluster.local”错误
    $ping my-nginx-service.default.svc.cluster.local
    ping:错误地址“my nginx service.default.svc.cluster.local”
    $Nsami
    服务器:10.86.50.1
    地址:10.86.50.1:53
    **服务器找不到whoami:NXDOMAIN
    **服务器找不到whoami:NXDOMAIN
    $ping-c3-W20 172.17.0.8
    PING 172.17.0.8(172.17.0.8):56个数据字节
    172.17.0.8中的64字节:seq=0 ttl=64时间=0.053毫秒
    172.17.0.8中的64字节:seq=1 ttl=64时间=0.035毫秒
    172.17.0.8中的64字节:seq=2 ttl=64时间=0.040毫秒
    ---172.17.0.8平统计---
    传输3个数据包,接收3个数据包,0%数据包丢失
    往返最小/平均/最大=0.035/0.042/0.053 ms
    $ping-c3-W20 172.17.0.4
    PING 172.17.0.4(172.17.0.4):56个数据字节
    172.17.0.4中的64字节:seq=0 ttl=64时间=0.070毫秒
    172.17.0.4中的64字节:seq=1 ttl=64时间=0.039毫秒
    172.17.0.4中的64字节:seq=2 ttl=64时间=0.038毫秒
    ---172.17.0.4平统计---
    传输3个数据包,接收3个数据包,0%数据包丢失
    往返最小/平均/最大=0.038/0.049/0.070 ms
    
    硬编码IP地址不是一种好的做法。相反,您也可以为redis创建服务,并使用kubernetes dns配置在nginx部署中配置服务dns名称,如下面的
    my svc.my namespace.svc.cluster domain.example
    。然后,您的nginx将通过此服务与redis容器通信

    硬编码IP地址不是一个好的做法。相反,您也可以为redis创建服务,并使用kubernetes dns配置在nginx部署中配置服务dns名称,如
    my svc.my namespace.svc.cluster domain.example
    。然后,您的nginx将通过此服务与redis容器通信。

    但是我
        
        # How to install nslookup, dig, host commands in Linux
        apt-get install dnsutils -y # In ubuntu
        yum install bind-utils -y # In RHEL/Centos
        
        root@my-nginx-pod:/etc# apt update && apt-get install -y dnsutils iputils-ping
        
        root@my-nginx-pod:/etc# nslookup my-nginx-service
        Server:         10.96.0.10
        Address:        10.96.0.10#53
        
        Name:   my-nginx-service.default.svc.cluster.local
        Address: 10.98.82.96
        
        root@my-nginx-pod:/etc# nslookup my-nginx-pod
        Server:         10.96.0.10
        Address:        10.96.0.10#53
        
        ** server can't find my-nginx-pod: SERVFAIL
        
        
        root@my-nginx-pod:/etc# ping -c3 -W60 my-nginx-pod
        PING my-nginx-pod (172.17.0.8) 56(84) bytes of data.
        64 bytes from my-nginx-pod (172.17.0.8): icmp_seq=1 ttl=64 time=0.011 ms
        64 bytes from my-nginx-pod (172.17.0.8): icmp_seq=2 ttl=64 time=0.021 ms
        64 bytes from my-nginx-pod (172.17.0.8): icmp_seq=3 ttl=64 time=0.020 ms
        
        --- my-nginx-pod ping statistics ---
        3 packets transmitted, 3 received, 0% packet loss, time 2065ms
        rtt min/avg/max/mdev = 0.011/0.017/0.021/0.005 ms
        
        root@my-nginx-pod:/etc# ping -c3 -W20 my-nginx-service
        PING my-nginx-service.default.svc.cluster.local (10.98.82.96) 56(84) bytes of data.
        
        --- my-nginx-service.default.svc.cluster.local ping statistics ---
        3 packets transmitted, 0 received, 100% packet loss, time 2060ms
        
        
        root@my-nginx-pod:/etc# ping -c3 -W20 my-nginx-pod.default.svc.cluster.local
        ping: my-nginx-pod.default.svc.cluster.local: Name or service not known
        
        root@my-nginx-pod:/etc# ping -c3 -W20 my-nginx-service.default.svc.cluster.local
        PING my-nginx-service.default.svc.cluster.local (10.98.82.96) 56(84) bytes of data.
        
        --- my-nginx-service.default.svc.cluster.local ping statistics ---
        3 packets transmitted, 0 received, 100% packet loss, time 2051ms
        
    
        
        root@my-nginx-65ffdfb5b5-dzgjk:/etc# ping -c3 -W20 my-nginx-pod.default.svc.cluster.local
        ping: my-nginx-pod.default.svc.cluster.local: Name or service not known
        root@my-nginx-65ffdfb5b5-dzgjk:/etc# ping -c3 -W20 my-nginx-service.default.svc.cluster.local
        ping: my-nginx-service.default.svc.cluster.local: Name or service not known
        
        root@my-nginx-65ffdfb5b5-dzgjk:/etc# ping -c3 -W20 172.17.0.8
        PING 172.17.0.8 (172.17.0.8) 56(84) bytes of data.
        64 bytes from 172.17.0.8: icmp_seq=1 ttl=64 time=0.195 ms
        64 bytes from 172.17.0.8: icmp_seq=2 ttl=64 time=0.039 ms
        64 bytes from 172.17.0.8: icmp_seq=3 ttl=64 time=0.039 ms
        
        --- 172.17.0.8 ping statistics ---
        3 packets transmitted, 3 received, 0% packet loss, time 2055ms
        rtt min/avg/max/mdev = 0.039/0.091/0.195/0.073 ms
    
    
    
                                 _             _
                    _         _ ( )           ( )
          ___ ___  (_)  ___  (_)| |/')  _   _ | |_      __
        /' _ ` _ `\| |/' _ `\| || , <  ( ) ( )| '_`\  /'__`\
        | ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )(  ___/
        (_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)
        
        $ ping default.svc.cluster.local
        ping: bad address 'default.svc.cluster.local'
        $ ping my-nginx-pod.default.svc.cluster.local
        ping: bad address 'my-nginx-pod.default.svc.cluster.local'
        $ ping my-nginx-service.default.svc.cluster.local
        ping: bad address 'my-nginx-service.default.svc.cluster.local'
        $ nslookup whoami
        Server:         10.86.50.1
        Address:        10.86.50.1:53
        
        ** server can't find whoami: NXDOMAIN
        
        ** server can't find whoami: NXDOMAIN
        
        $ ping -c3 -W20 172.17.0.8
        PING 172.17.0.8 (172.17.0.8): 56 data bytes
        64 bytes from 172.17.0.8: seq=0 ttl=64 time=0.053 ms
        64 bytes from 172.17.0.8: seq=1 ttl=64 time=0.035 ms
        64 bytes from 172.17.0.8: seq=2 ttl=64 time=0.040 ms
        
        --- 172.17.0.8 ping statistics ---
        3 packets transmitted, 3 packets received, 0% packet loss
        round-trip min/avg/max = 0.035/0.042/0.053 ms
        $ ping -c3 -W20 172.17.0.4
        PING 172.17.0.4 (172.17.0.4): 56 data bytes
        64 bytes from 172.17.0.4: seq=0 ttl=64 time=0.070 ms
        64 bytes from 172.17.0.4: seq=1 ttl=64 time=0.039 ms
        64 bytes from 172.17.0.4: seq=2 ttl=64 time=0.038 ms
        
        --- 172.17.0.4 ping statistics ---
        3 packets transmitted, 3 packets received, 0% packet loss
        round-trip min/avg/max = 0.038/0.049/0.070 ms