精华内容
下载资源
问答
  • 创建 Deployment / pod 的 yaml 配置文件 cat >> app_aas.yaml << EOF apiVersion: extensions/v1beta1 kind: Deployment metadata: name: aas namespace: product labels: app: aas spec: selec.....

    大家好,我是Linux运维工程师 Linke 。技术过硬,从不挖坑~

    k8s启动容器,一定要理解 namespace 、deployment 、 pod 、container 、service 、labels 之间的关系,大体关系是这样的。

    namespace 就好比是一个大的分组,一个k8s集群内可以创建多个namespace ,在它之下才能创建deployment ,然后在 deployment 之下可以启动多个名字一样的 pod(名字一样,id不同,pod全名是pod名加id组成的) ,在一个pod内可以启动多个 container ,一般情况下,一个pod内只跑一个容器,有些特殊的场景才会在pod内启动多个容器;创建了 service 可以将 pod 对 k8s 集群内进行dns解析,并且提供负载均衡能力,同一个namespace下的service可以直接使用 service名字进行解析,不同namespace执行的 service 需要加上 servicename.namespace 才能解析,并且,要解析service的话,只能在pod的容器内进行,容器之外无法解析。

    最危险的操作是删除namespace,删除了这个的话,它下面的所有东西全部将被删除,所以namespace 、service 、pod 的yaml文件一定要分类放好,三者各自放在自己的目录中。

    k8s各namespace之下的 pod 的 ip 在集群内可以直接通信。


    进入正题

    以下是namespace的 yaml 文件
    kind 指定文件类型为 Namespace
    metadata 下定义 Namespace 名字为 product ,给这个 Namespace 定义一个 labels 为 name=product

    cat >> product_namespaces.yaml << EOF
    apiVersion: v1
    kind: Namespace
    metadata:
       name: product
       labels: 
         name: product
    EOF
    

    启动Namespace并查看

    kubectl create -f product_namespaces.yaml
    kubectl get namespaces
    

    以下是我在生产环境的 pod 的yaml 文件,差不多已经很完善了。经过了一年多的不断完善。


    创建 Deployment / pod 的 yaml 配置文件

    cat >> app_aas.yaml << EOF
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: aas
      namespace: product
      labels:
        app: aas
    spec:
      selector:
        matchLabels:
          app: aas
      revisionHistoryLimit: 5
      replicas: 2
      minReadySeconds: 60
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 1
      template:
        metadata:
          labels:
            app: aas 
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                  - key: app
                    operator: In
                    values:
                    - aas
                topologyKey: kubernetes.io/hostname
          terminationGracePeriodSeconds: 60
          imagePullSecrets:
          - name: resecret-product
          nodeSelector:
            apptype: memnode
          containers:
          - name: aas 
            readinessProbe:
              httpGet:
                path: /aas/
                port: 8080
                scheme: HTTP
              initialDelaySeconds: 80
              timeoutSeconds: 20
            livenessProbe:
              httpGet:
                path: /aas/
                port: 8080
                scheme: HTTP
              initialDelaySeconds: 80
              timeoutSeconds: 20
            env:
            - name: JAVA_OPTS
              value: "-Xms1024M -Xmx1024M -server -Duser.timezone=GMT+08"
            image: registry.test.com/appimage/aas:AAS.01.00.001.release
            resources:
              limits:
                cpu: "600m"
                memory: 2048Mi
              requests:
                cpu: "300m"
                memory: 1280Mi
            volumeMounts:
            - mountPath: /etc/localtime
              readOnly: false
              name: localtime
            - mountPath: /home/gooagoo/config
              readOnly: false
              name: appconfig
            - mountPath: /home/gooagoo/resource
              readOnly: false
              name: appresource
            - mountPath: /home/gooagoo/log
              readOnly: false
              name: log
            - mountPath: /opt/tomcat/logs
              readOnly: false
              name: tomcatlog
            - mountPath: /mnt/mfs
              readOnly: false
              name: mnt
            
          volumes:
          - name: "localtime"
            hostPath:
              path: "/etc/localtime"
              type: File
          - name: "tomcatlog"
            hostPath:
              path: "/home/app/log/aas/tomcatlogs"
          - name: "log"
            hostPath:
              path: "/home/app/log/aas"
          - name: "appconfig"
            hostPath:
                path: "/home/app/config"
          - name: "appresource"
            hostPath:
                path: "/home/app/resource"
          - name: "mnt"
            flexVolume:
              driver: "alicloud/nas"
              options:
                server: "15123496df-bee90.cn-beijing.nas.aliyuncs.com"
                path: "/"
                vers: "4.0"
    EOF
    

    创建deployment 和 pod
    查看deploy
    查看pod

    kubectl create -f app_aas.yaml
    kubectl get deploy -n product
    kubectl get pod -n product
    

    详解:

    api版本

    apiVersion: extensions/v1beta1
    

    类型为Deployment文件

    kind: Deployment
    

    定义Deployment名称、所属namespace、Deployment 的 labels名称

    metadata:
      name: aas
      namespace: product
      labels:
        app: aas
    

    最外层的spec下的内容定义了pod启动、更新的规则
    定义 pod 启动在 labels 为 aas 的 Deployment 内

    spec:
      selector:
        matchLabels:
          app: aas
    

    指定可以列出pod的历史版本个数为 5 个、pod副本为2个、滚动更新间隔为60s 、每次最多更新1个

      revisionHistoryLimit: 5
      replicas: 2
      minReadySeconds: 60
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 1
    

    定义pod的 labels 名称为 aas

      template:
        metadata:
          labels:
            app: aas 
    

    第二层spec内定义pod的详细启动参数
    防止带有相同 labels 的pod 不能启动到一个节点,避免相同应用启动到同一个节点,节点挂掉后,应用不能提供服务,生成环境建议必须要加这个。terminationGracePeriodSeconds官方解释为优雅的关闭pod,我的理解是就好比是 kill 命令不带 -9 ,最大限时为 60s ,超过时间后则强制杀掉 pod。

        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                  - key: app
                    operator: In
                    values:
                    - aas
                topologyKey: kubernetes.io/hostname
          terminationGracePeriodSeconds: 60
    

    启动pod所使用的镜像时私有docker仓库的话,使用自建的 Secrets 名称为 resecret-product 的授权拉取站点镜像,如何创建 secrets ,请参考文档: k8s创建secret,拉取私有仓库的镜像;并且pod只能分配到 labels 的键值为 apptype=memnode 的节点上,如何创建节点的 labels ,请参考文档:kubernetes调度pod到指定节点

          imagePullSecrets:
          - name: resecret-product
          nodeSelector:
            apptype: memnode
    

    指定容器的基础名称为 aas(启动pod后,容器的名称会在指定的 aas 后拼接上随机字符串做为pod实现名称)
    readinessProbe:pod创建后,第一次执行探测是需要等待80s,探测超时时间为20s,如果80s后探测健康接口超时时间超过20s,那么pod内的容器应用程序将重启。以下定义的探测接口是 http 请求,整体接口是这样的: http://容器ip:8080/aas/ ,如果在 20s内返回 200 状态码,认为pod启动成功。
    livenessProbe: 每隔 80s 探测一次容器内的这个 http 健康接口,如果在 20s内返回 200 状态码,认为pod可以正常工作,否则pod内的容器程序将重启。

          containers:
          - name: aas 
            readinessProbe:
              httpGet:
                path: /aas/
                port: 8080
                scheme: HTTP
              initialDelaySeconds: 80
              timeoutSeconds: 20
            livenessProbe:
              httpGet:
                path: /aas/
                port: 8080
                scheme: HTTP
              initialDelaySeconds: 80
              timeoutSeconds: 20
    

    env:启动容器时,向容器内传入环境变量名称为JAVA_OPTS,变量值为-Xms1024M -Xmx1024M -server -Duser.timezone=GMT+08 ,如果你打镜像时就定义了环境变量,那么这个会覆盖掉原来的环境变量
    image:使用镜像 registry.test.com/appimage/aas:AAS.01.00.001.release 启动

            env:
            - name: JAVA_OPTS
              value: "-Xms1024M -Xmx1024M -server -Duser.timezone=GMT+08"
            image: registry.test.com/appimage/aas:AAS.01.00.001.release
    

    requests:pod启动时,直接给容器中的系统分配 300m 的cpu (容器内使用的cpu是宿主机的逻辑核数,每核cpu使用一点cpu,加起来一共只能使用300m,1000m为1核),1024m的内存。
    limits: pod启动后,最多可以消耗300m的cpu,最多可以消耗宿主机1280m内存。

            resources:
              limits:
                cpu: "300m"
                memory: 1280Mi
              requests:
                cpu: "300m"
                memory: 1024Mi
    

    volumeMounts:指定将要挂载到容器内的文件或者目录的路径,readOnly为true时,挂载到容器内的文件或目录为只读权限
    volumes:挂载到容器内的路径在宿主机对应的路径
    flexVolume : 挂载阿里云 nas 的方式,挂载nas,需要在宿主机安装 nfs 客户端才行。

            volumeMounts:
            - mountPath: /etc/localtime
              readOnly: false
              name: localtime
            - mountPath: /home/gooagoo/config
              readOnly: false
              name: appconfig
            - mountPath: /home/gooagoo/resource
              readOnly: false
              name: appresource
            - mountPath: /home/gooagoo/log
              readOnly: false
              name: log
            - mountPath: /opt/tomcat/logs
              readOnly: false
              name: tomcatlog
            - mountPath: /mnt/mfs
              readOnly: false
              name: mnt
          volumes:
          - name: "localtime"
            hostPath:
              path: "/etc/localtime"
              type: File
          - name: "tomcatlog"
            hostPath:
              path: "/home/gooagoo/log/aas/tomcatlogs"
          - name: "log"
            hostPath:
              path: "/home/gooagoo/log/aas"
          - name: "appconfig"
            hostPath:
                path: "/home/gooagoo/config"
          - name: "appresource"
            hostPath:
                path: "/home/gooagoo/resource"
          - name: "mnt"
            flexVolume:
              driver: "alicloud/nas"
              options:
                server: "23fd346df-fds10.cn-beijing.nas.aliyuncs.com"
                path: "/"
                vers: "4.0"
    

    以下是启动service使用的配置文件
    文件详解:
    kind 指定文件为 Service
    metadata指定service名字为 aas ,在 product 的 namespace 中创建
    spec下的内容为开放 service 的 8080 端口(pod内容器对外的什么端口,这里就用什么端口,它将直接映射在pod中),并且代理labels是 app=aas 的 pod
    如上所说,要使用service名字 aas 找到 pod ,只能在 启动 pod 的容器中才能解析出来。

    cat >> aas_service.yaml  << EOF
    apiVersion: v1
    kind: Service
    metadata:
      name: aas
      namespace: product
    spec:
      ports:
      - port: 8080
      selector:
        app: aas
    EOF
    

    创建service 和查看 servic

    kubectl create -f  aas_service.yaml
    kubectl get svc -n product
    

    如果pod或者service已经创建,修改了yaml文件后,需要重读 yaml 文件的话,可以用下面的命令

    kubectl apply -f app_aas.yaml
    kubectl apply -f aas_service.yaml
    

    使用 app_aas.yaml 文件删除 deploy 和 pod(删除service、namespace同理,但是删除namespace的话,下面的所有东西都会被删除,所以namespace创建后,一般就不会再动了)

    kubectl delete -f app_aas.yaml
    

    如果删除了yaml文件的话,要删除pod的话,有两种方式,直接删除pod会自动再创建,需要删除deploy后,pod 才不会自动再创建
    删除pod,自动创建,可以把这个功能当做重新分配pod到k8s工作节点(一定要指定命名空间,即namespace)

    kubectl delete po aas-6a5s2gf43dg34 -n product
    

    不使用 yaml 文件永久删除的话,请直接删除deploy

    kubectl delete deploy aas -n product
    

    不使用 yaml 文件永久删除service

    kubectl delete -f svc aas -n product
    
    展开全文
  • 由于PodService是kubernetes集群范围内的虚拟概念,所以集群外的客户端系统无法通过Pod的IP地址或者Service的虚拟IP地址和虚拟端口号访问到它们。为了让外部客户端可以访问这些服务,可以将PodService的端口号...

    由于Pod和Service是kubernetes集群范围内的虚拟概念,所以集群外的客户端系统无法通过Pod的IP地址或者Service的虚拟IP地址和虚拟端口号访问到它们。为了让外部客户端可以访问这些服务,可以将Pod或Service的端口号映射到宿主机,以使得客户端应用能够通过物理机访问容器应用。

    将容器应用的端口号映射到物理机

    (1) 通过设置容器级别的hostPort,将容器应用的端口号映射到物理机上:

    apiVersion: v1
    kind: Pod
    metadata:
      name: webapp
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: tomcat
        ports:
        - containerPort: 8080
          hostPort: 8081 # 通过物理机的IP地址和8081端口访问Pod的tomcat服务
    

    (2) 通过设置Pod级别的hostNetwork=true,改Pod中所有容器的端口号都将被直接映射到物理机上。设置hostNetwork=true时需要注意,在容器的ports定义部分如果不指定hostPort,则默认hostPort等于containerPort,如果制定了hostPort,则hostPort必须等于containerPort的值。

    apiVersion: v1
    kind: Pod
    metadata:
      name: webapp
      labels:
        app: webapp
    spec:
      hostNetwork: true
      containers:
      - name: webapp
        image: tomcat
        ports:
        - containerPort: 8080 # 通过物理机的IP地址和8080端口访问Pod的tomcat服务
    

    将Service的端口号映射到物理机

    (1) 通过设置nodePort映射到物理机,同时设置Service的类型为NodePort:

    apiVersion: v1
    kind: Service
    metadata:
      name: webapp
    spec:
      type: NodePort
      ports:
      - port: 8080 # service 所需的端口号
        targetPort: 8080 # 后端pod的端口号
        nodePort: 8081  # 与service端口号映射的物理节点的端口号,通过物理机的IP地址和8081端口访问Pod的tomcat服务
        selector:
          app: webapp
    

    (2) 通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种方法仅用于在公有云服务提供商的云平台上设置Service的场景。

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: myapp
      ports:
      - protocol: TCP
        port: 80
        targerPort: 9376
        nodePort: 30001
      clusterIP: 10.0.171.239
      loadBalancerIP: 78.11.24.19
      type: LoadBalancer
    status:
      loadBalancer:
        ingress:
        - ip: 146.148.47.155 # 云服务商提供的负载均衡器的IP地址
    
    展开全文
  • podservice创建

    2020-01-07 16:20:03
    vim nginx-pod.yaml nginx-pod测试: apiVersion: v1 kind: Pod metadata: name: nginx-pods namespace: default labels: app: nginx-pods release: v1 spec: containers: - name: nginx-...

    vim nginx-pod.yaml

    nginx-pod测试:
    	apiVersion: v1
    	kind: Pod
    	metadata:
    	  name: nginx-pods
    	  namespace: default
    	  labels:
    	    app: nginx-pods
    	    release: v1
    	spec:
    	  containers:
    	  - name: nginx-pods
    	    image: nginx:latest
    	    imagePullPolicy: IfNotPresent
    	    ports:
    	      - containerPort: 80
    

    vim nginx-pod-service.yaml

    nginx-service-nodeport测试:
    	apiVersion: v1
    	kind: Service
    	metadata:
    	  name: nginx-service-nodeport
    	spec:
    	  ports:
    	    - port: 80
    	      targetPort: 80
    	      protocol: TCP
    	  type: NodePort
    	  selector:
    	    app: nginx-pods
    

    成果:
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • Servicepod关系?

    2019-10-08 14:43:00
    1、为什么使用Service? 1)防止Pod失联。 2)定义一组Pod的访问策略。 3)支持clusterIP,Nodeport以及LoadBalance三种类型。 4)Service的底层实现主要使用iptables和IPVS这两种网络模式。 2、Service文件配置...

    1、为什么使用Service?
    1)防止Pod失联。
    2)定义一组Pod的访问策略。
    3)支持clusterIP,Nodeport以及LoadBalance三种类型。
    4)Service的底层实现主要使用iptables和IPVS这两种网络模式。

    2、Service文件配置定义
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
      name: nginx-service
    spec:
      type: NodePort    #外部访问
      clusterIP: 10.108.77.3   #内部访问
      ports:
      - nodePort: 32518     #固定nodeport的端口号
        port: 80
        protocol: TCP         #后端的协议
        targetPort: 80         #到后端的端口
      selector:                   #寻找后端的pod
        app: nginx  

    3、查看现有的Service信息
    [root@master01 demo3]# kubectl get svc
    NAME                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
    kubernetes            ClusterIP   10.96.0.1        <none>        443/TCP        53d
    nginx-harbor-server   NodePort    10.106.214.106   <none>        80:31806/TCP   29h
    nginx-service         NodePort    10.108.77.3      <none>        80:32518/TCP   31h

    [root@master01 demo3]# kubectl get ep      #查看Service后端服务器信息
    NAME                  ENDPOINTS                                                             AGE
    kubernetes            192.168.187.141:6443                                             53d
    nginx-harbor-server   10.244.1.38:80,10.244.1.40:80,10.244.2.32:80   29h
    nginx-service         10.244.1.37:80,10.244.2.33:80,10.244.2.34:80       31h

    [root@master01 demo3]# kubectl get pod -l app=nginx -o wide   #根据标签查主机ID、IP地址等信息
    NAME                               READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
    nginx-deployment-9b644dcd5-dbdbr   1/1     Running   2          31h   10.244.2.34   node02   <none>           <none>
    nginx-deployment-9b644dcd5-kxrgf   1/1     Running   3          31h   10.244.1.37   node01   <none>           <none>
    nginx-deployment-9b644dcd5-rcp88   1/1     Running   3          31h   10.244.2.33   node02   <none>           <none>

    [root@master01 demo3]# kubectl describe svc nginx-service   #详细查看service的信息
    Name:                     nginx-service
    Namespace:                default
    Labels:                   app=nginx
    Annotations:              <none>
    Selector:                 app=nginx
    Type:                     NodePort
    IP:                       10.108.77.3
    Port:                     <unset>  80/TCP
    TargetPort:               80/TCP
    NodePort:                 <unset>  32518/TCP
    Endpoints:                10.244.1.37:80,10.244.2.33:80,10.244.2.34:80
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Events:                   <none>


    4、Pod与Service的关系?
    1)Server通过label-selector与Pod相互连。
    2)通过server实现Pod的负载均衡(TCP、UDP 4层)

    Service对外提供服务类型:
    1)ClusterIP:默认值,分配一个集群内部可以访问的虚拟IP(内部VIP),用于集群内部之间调用,默认的类型。
    2)NodePort:在每个Node上启用一个端口来暴露服务,供集群外部访问。
    用户--》域名--》Node IP:port--》podIP
    3)LoadBalancer:在每个Node上启用一个端口来暴露服务,除此外,还会请求底层云平台上的负载均衡,将每个node作为后端的服务器添加进去。
    用户--》域名--》SLB---》Node IP:port--》podIP


    5、Service代理模式:
    1)iptables:默认
    [root@node01 ~]# ps -ef|grep kube-proxy      #网络代理
    root      2268  2251  0 14:07 ?        00:00:08 /usr/local/bin/kube-proxy --config=/var/lib/kube-proxy/config.conf --hostname-override=node01
    root     46693 21733  0 19:20 pts/0    00:00:00 grep --color=auto kube-proxy

    [root@node01 kubernetes]# iptables-save|grep KUBE-SVC-GKN7Y2BSGW4NJTYL
    :KUBE-SVC-GKN7Y2BSGW4NJTYL - [0:0]
    -A KUBE-NODEPORTS -p tcp -m comment --comment "default/nginx-service:" -m tcp --dport 32518 -j KUBE-SVC-GKN7Y2BSGW4NJTYL
    -A KUBE-SERVICES -d 10.108.77.3/32 -p tcp -m comment --comment "default/nginx-service: cluster IP" -m tcp --dport 80 -j KUBE-SVC-GKN7Y2BSGW4NJTYL
    -A KUBE-SVC-GKN7Y2BSGW4NJTYL -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-2DGLPGXWBWWNXDYH
    -A KUBE-SVC-GKN7Y2BSGW4NJTYL -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-4KRMMUFVU5N5AUS2
    -A KUBE-SVC-GKN7Y2BSGW4NJTYL -j KUBE-SEP-3ULGC5KCIWJAGE3V

    [root@node01 kubernetes]# iptables-save|grep KUBE-SEP-2DGLPGXWBWWNXDYH
    :KUBE-SEP-2DGLPGXWBWWNXDYH - [0:0]
    -A KUBE-SEP-2DGLPGXWBWWNXDYH -s 10.244.1.37/32 -j KUBE-MARK-MASQ
    -A KUBE-SEP-2DGLPGXWBWWNXDYH -p tcp -m tcp -j DNAT --to-destination 10.244.1.37:80
    -A KUBE-SVC-GKN7Y2BSGW4NJTYL -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-2DGLPGXWBWWNXDYH

    iptables与ipvs的比较?
    1)创建的很多的iptables规则。(更新,非增量式更新)
    2)iptables规则是从上之下的逐条匹配。(匹配延迟大)
    3) ipvs工作在系统内核,iptables是在用户系统层面。
    4)ipvs调度算法丰富,rr,wrr,lc,wlc,ip hash


    6、LVS就是基于ipvs内核调度模块实现的负载均衡。
    [root@node01 kubernetes]# ipvsadm -ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn


    #修改ConfigMap的kube-system/kube-proxy中的config.conf,把 mode: "" 改为mode: “ipvs" 保存退出即可
    [root@k8smaster centos]# kubectl edit cm kube-proxy -n kube-system
    configmap/kube-proxy edited
    ###删除之前的proxy pod
    [root@k8smaster centos]# kubectl get pod -n kube-system |grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'
    pod "kube-proxy-2m5jh" deleted
    pod "kube-proxy-nfzfl" deleted
    pod "kube-proxy-shxdt" deleted
    #查看proxy运行状态
    [root@k8smaster centos]# kubectl get pod -n kube-system | grep kube-proxy
    kube-proxy-54qnw                              1/1     Running   0          24s
    kube-proxy-bzssq                              1/1     Running   0          14s
    kube-proxy-cvlcm                              1/1     Running   0          37s
    #查看日志,如果有 `Using ipvs Proxier.` 说明kube-proxy的ipvs 开启成功!
    [root@k8smaster centos]# kubectl logs kube-proxy-54qnw -n kube-system
    I0518 20:24:09.319160       1 server_others.go:176] Using ipvs Proxier.
    W0518 20:24:09.319751       1 proxier.go:386] IPVS scheduler not specified, use rr by default
    I0518 20:24:09.320035       1 server.go:562] Version: v1.14.2
    I0518 20:24:09.334372       1 conntrack.go:52] Setting nf_conntrack_max to 131072
    I0518 20:24:09.334853       1 config.go:102] Starting endpoints config controller
    I0518 20:24:09.334916       1 controller_utils.go:1027] Waiting for caches to sync for endpoints config controller
    I0518 20:24:09.334945       1 config.go:202] Starting service config controller
    I0518 20:24:09.334976       1 controller_utils.go:1027] Waiting for caches to sync for service config controller
    I0518 20:24:09.435153       1 controller_utils.go:1034] Caches are synced for service config controller
    I0518 20:24:09.435271       1 controller_utils.go:1034] Caches are synced for endpoints config controller

    展开全文
  • 由于PodService都是Kubernetes集群范围内的虚拟概念,所以集群外的客户端系统无法通过Pod的IP地址或者Service的虚拟IP地址和虚拟端口号访问它们。 为了让外部客户端可以访问这些服务,可以将PodService的端口号...
  • kubernetes集群外部访问PodService

    千次阅读 2019-08-22 11:44:29
    由于PodService是kubernetes集群范围内的虚拟概念,所以集群外的客户端系统无法通过Pod的IP 地址或者Service的虚拟IP地址和虚拟端口号访问到它们。为了让外部客户端可以访问这些服务,可以将 PodService的端口号...
  • Kubenetes里podservice绑定的实现方式

    千次阅读 2018-10-01 22:25:35
    如何在Kubernetes里创建一个Nginx service介绍了如何创建一个Kubernetes podservice,使用的方法是命令kubectl run。 本文介绍另一种方式,通过这种方式来学习Kubernetes里pod和对应的service是如何绑定的。 首先...
  • servicepod关联

    2019-06-26 17:20:48
    当我们创建pod时,仅仅是创建了pod,要为其创建rc(ReplicationController),他才会有固定的副本,然后为其创建service,集群内部才能访问该pod,使用 NodePort 或者 LoadBalancer 类型的 Service,外部网络也可以...
  • Kubernetes的PodService定义详解笔记

    千次阅读 2018-12-11 09:54:28
    Pod定义详解 Service定义详解
  • 一、service访问pod 每个pod都会有自己的ip地址,当controller用新的pod代替发生故障的pod时,新的pod会分配到新的IP地址 service有自己的ip,而且这个ip是不变的。客户端只需要访问service的ipkubernetes则负责...
  • k8s常用创建的命名空间、podservice

    千次阅读 2019-01-17 17:48:30
    k8s常用创建的命名空间、podservice 使用 Namespaces Namespace的创建、删除和查看。 创建 (1) 命令行直接创建 $ kubectl create namespace new-namespace (2) 通过文件创建 $ cat my-namespace.yaml api...
  • k8s 删除 podservice

    2020-12-20 22:56:21
    2、删除deployment(先删除deployment,删除后replicaset.apps 和 pod 自动就被删除了) kubectl deletedeployment.apps/nginx-1596365264-controller -n kube-system kubectl deletedeployment....
  • 通过 Service 访问 Pod

    2018-03-02 14:27:00
    我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉。Deployment 等 controller 会通过动态创建和销毁 Pod 来保证应用整体的健壮性。换句话说,Pod 是脆弱的,但...
  • Service实现Pod访问

    2019-01-02 16:56:34
    1、编辑Service的配置文件 vim httpd-svc.yml apiVersion: v1 #v1是Service的版本号; kind: Service #指明当前资源类型; metadata: #该资源的元数据; name: httpd-svc #Service的名字; ...
  • k8s中podservice、ingress之间的关系

    千次阅读 2020-11-18 16:05:24
    前言 当应用服务需要通过域名访问时,会经过pod–>service–>ingress的部署流程,实现所需要的功能 Pod 直接访问Pod资源,存在的缺陷 ...k8s中Service对象是用来解决上述Pod访问的问题 注 Serv
  • 一.背景 理想状态下,我们可以认为Kubernetes Pod是健壮的。但是,理想与现实的...众所周知,每个pod都拥有自己的IP地址,当新的Controller用新的Pod替代发生故障的Pod时,我们会发现,新的IP地址可能跟故障的Pod...
  • Pod、ReplicaSet、Deployment、Service的关系。 Pod:k8s管理的最小单位,包括一个或多个容器,是提供实际业务服务的组件。 ReplicaSet(rs):是Pod的管理控制组件,监控Pod的健康状况,保障Pod按照用户的期望去...
  • k8s-通过 Service访问 Pod

    2020-07-19 21:32:43
    k8s-通过 Service访问 Pod创建 Service创建 Deployment创建 serviceDNS 访问 Service外网访问 Service 创建 Service k8s 从逻辑上代表了一组 Pod,具体是哪些 Pod 则是由 label 来挑选。 Service 有自己的 IP,而且...
  • 如果只删除pod,deployment会自动重建,所以应该先删除deployment。 下面演示的是删除所有deployment,可以指定只删除...因为pod都删除了,对应的service就没有用了 kubectl delete svc SERVICE_NAME ...
  • servicepod通过标签绑定 servicepod绑定 apiVersion: v1 kind: Service metadata: name: my-haproxy labels: app: my-haproxy spec: ports: - port: 8078 targetP...
  • 十分钟了解k8s servicepod转发机制

    万次阅读 2020-07-23 20:40:36
    core-dns会给service分配一个内部的虚拟ip(节点上根本查询不到这个ip,ping是不通的,具体是怎么访问到的继续往下看),因此内部服务可以通过这个ip或者是serviceName来访问到pod的服务。 service提供的常用type: ...
  • servicepod怎么关联的

    千次阅读 2018-03-08 17:24:34
    当我们创建pod时,仅仅是创建了pod,要为其创建rc(ReplicationController),他才会有固定的副本,然后为其创建service,集群内部才能访问该pod,使用 NodePort 或者 LoadBalancer 类型的 Service,外部网络也可以...
  • PodService是Kubernetes集群范围内的虚拟概念。集群外的客户端系统无法通过Pod的IP地址或者Service的虚拟IP地址和虚拟端口号访问到它们。解决措施:1.将容器应用的端口号映射到物理机上,包括两种方式(1)通过...
  • **一般情况下通过RC或者Deploy创建的Pod才可以使用Service进行绑定,如果以Kind=Pod形式创建,则无法绑定Service。**简单的来说:当时是淡出的创建一个tomcat pod,想绑定一下service访问,结果页面一直404.研究了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,799
精华内容 19,519
关键字:

podservice