1. 程式人生 > 其它 >k8s service定義與建立

k8s service定義與建立

1. k8s-service定義與建立

  • 建立service:

    kubectl apply -f service.yaml
    
  • 檢視service:

    kubectl get service
    
  • 示例程式碼

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: web
      name: web
    spec:
      type: ClusterIP # 服務型別
      ports:
      - port: 80 # Service埠
        protocol: TCP # 協議
        targetPort: 80 # 容器埠
      selector:
        app: web # 指定關聯Pod的標籤
    
  • 多埠service配置

    對於某些服務,你需要公開多個埠。 Kubernetes 允許你在 Service 物件上配置多個埠定義。 為服務使用多個埠時,必須提供所有埠名稱,以使它們無歧義。 例如:

    apiVersion: v1
    kind: Service
    metadata:
      name: web
    spec:
      selector:
        app: web   # 指定關聯Pod的標籤
      type: ClusterIP # 服務型別
      ports:
        - name: http     # 容器名稱
          protocol: TCP   # 協議
          port: 80      # Service埠
          targetPort: 80    # 容器埠
        - name: https     # 容器名稱定義
          protocol: TCP   # 配置協議
          port: 443        # service埠
          targetPort: 443   # 容器埠
    

2. 案例

  • 我們先啟動一個pod容器

    [root@k8s-master deployment]# vim web.yaml 
    [root@k8s-master deployment]# cat web.yaml 
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web
      namespace: default
      annotations:       # 記錄回滾引數
        kubernetes.io/change-cause: "web.v1-nginx-1.19"   #記錄到revision中的內容,記錄版本號
    spec:
      replicas: 3 # Pod副本預期數量
      revisionHistoryLimit: 10 # RS歷史版本儲存數量
      selector:
        matchLabels:
          app: web
      strategy:
        rollingUpdate:
          maxSurge: 25%             # 滾動更新過程最大pod副本數
          maxUnavailable: 25%       # 滾動更新過程中最大不可用pod副本數,
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: web # Pod副本的標籤
        spec:
          containers:
          - name: web
            image: nginx:1.16
            readinessProbe:          # 存活檢查,如果失敗,將殺死容器,來重啟
              httpGet:
                port: 80
                path: /index.html
              initialDelaySeconds: 10 #啟動容器後多少秒健康檢查
              periodSeconds: 10 #以後間隔多少秒檢查一次
    
            livenessProbe:   # 就緒檢查,失敗就會剔除 service 
              httpGet:
                port: 80
                path: /index.html
    
    
  • 啟動pod服務

    [root@k8s-master deployment]# kubectl apply -f web-ClusterIP.yaml 
    deployment.apps/web unchanged
    
  • 使用service服務,暴露web應用

    [root@k8s-master service]# vim web-ClusterIP.yaml 
    [root@k8s-master service]# cat web-ClusterIP.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: web
      name: web
    spec:
      type: ClusterIP # 服務型別
      ports:
      - port: 80 # Service埠
        protocol: TCP # 協議
        targetPort: 80 # 容器埠
      selector:
        app: web # 指定關聯Pod的標籤
    
    
  • 啟動service服務

    [root@k8s-master service]# kubectl apply -f web-ClusterIP.yaml
    service/web created
    
  • 檢視service服務

    [root@k8s-master service]# kubectl get serviceNAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGEkubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   7d5hprobe-demo   ClusterIP   10.104.161.168   <none>        80/TCP    3d6hweb          ClusterIP   10.100.222.42    <none>        80/TCP    33s