<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          最簡單的 K8S 部署文件編寫姿勢,沒有之一!

          共 4050字,需瀏覽 9分鐘

           ·

          2020-12-17 01:31

          1. 頭疼編寫 K8S 部署文件?

          • K8S yaml?參數(shù)很多,需要邊寫邊查?

          • 保留回滾版本數(shù)怎么設(shè)?

          • 如何探測啟動成功,如何探活?

          • 如何分配和限制資源?

          • 如何設(shè)置時區(qū)?否則打印日志是 GMT 標(biāo)準(zhǔn)時間

          • 如何暴露服務(wù)供其它服務(wù)調(diào)用?

          • 如何根據(jù) CPU 和內(nèi)存使用率來配置水平伸縮?

          首先,你需要知道有這些知識點,其次要把這些知識點都搞明白也不容易,再次,每次編寫依然容易出錯!

          2. 創(chuàng)建服務(wù)鏡像

          前一篇文章?講解了如何快速創(chuàng)建自己的服務(wù)鏡像,不過為了演示,這篇文章我們以?redis:6-alpine?鏡像為例。

          3. 完整 K8S 部署文件編寫過程

          • 首先安裝?goctl?工具

          GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go get -u github.com/tal-tech/go-zero/tools/goctl


          • 一鍵生成 K8S 部署文件

          goctl kube deploy -name redis -namespace adhoc -image redis:6-alpine -o redis.yaml -port 6379


          生成的?yaml?文件如下:

          apiVersion: apps/v1
          kind: Deployment
          metadata:
          name: redis
          namespace: adhoc
          labels:
          app: redis
          spec:
          replicas: 3
          revisionHistoryLimit: 5
          selector:
          matchLabels:
          app: redis
          template:
          metadata:
          labels:
          app: redis
          spec:
          containers:
          - name: redis
          image: redis:6-alpine
          lifecycle:
          preStop:
          exec:
          command: ["sh","-c","sleep 5"]
          ports:
          - containerPort: 6379
          readinessProbe:
          tcpSocket:
          port: 6379
          initialDelaySeconds: 5
          periodSeconds: 10
          livenessProbe:
          tcpSocket:
          port: 6379
          initialDelaySeconds: 15
          periodSeconds: 20
          resources:
          requests:
          cpu: 500m
          memory: 512Mi
          limits:
          cpu: 1000m
          memory: 1024Mi
          volumeMounts:
          - name: timezone
          mountPath: /etc/localtime
          volumes:
          - name: timezone
          hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai

          ---

          apiVersion: v1
          kind: Service
          metadata:
          name: redis-svc
          namespace: adhoc
          spec:
          ports:
          - port: 6379
          selector:
          app: redis

          ---

          apiVersion: autoscaling/v2beta1
          kind: HorizontalPodAutoscaler
          metadata:
          name: redis-hpa-c
          namespace: adhoc
          labels:
          app: redis-hpa-c
          spec:
          scaleTargetRef:
          apiVersion: apps/v1
          kind: Deployment
          name: redis
          minReplicas: 3
          maxReplicas: 10
          metrics:
          - type: Resource
          resource:
          name: cpu
          targetAverageUtilization: 80

          ---

          apiVersion: autoscaling/v2beta1
          kind: HorizontalPodAutoscaler
          metadata:
          name: redis-hpa-m
          namespace: adhoc
          labels:
          app: redis-hpa-m
          spec:
          scaleTargetRef:
          apiVersion: apps/v1
          kind: Deployment
          name: redis
          minReplicas: 3
          maxReplicas: 10
          metrics:
          - type: Resource
          resource:
          name: memory
          targetAverageUtilization: 80
          • 部署服務(wù),如果?adhoc?namespace 不存在的話,請先通過?kubectl create namespace adhoc?創(chuàng)建

          $ kubectl apply -f redis.yaml
          deployment.apps/redis created
          service/redis-svc created
          horizontalpodautoscaler.autoscaling/redis-hpa-c created
          horizontalpodautoscaler.autoscaling/redis-hpa-m created
          • 查看服務(wù)允許狀態(tài)

          $ kubectl get all -n adhoc
          NAME READY STATUS RESTARTS AGE
          pod/redis-585bc66876-5ph26 1/1 Running 0 6m5s
          pod/redis-585bc66876-bfqxz 1/1 Running 0 6m5s
          pod/redis-585bc66876-vvfc9 1/1 Running 0 6m5s

          NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
          service/redis-svc ClusterIP 172.24.15.8 6379/TCP 6m5s

          NAME READY UP-TO-DATE AVAILABLE AGE
          deployment.apps/redis 3/3 3 3 6m6s

          NAME DESIRED CURRENT READY AGE
          replicaset.apps/redis-585bc66876 3 3 3 6m6s

          NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
          horizontalpodautoscaler.autoscaling/redis-hpa-c Deployment/redis 0%/80% 3 10 3 6m6s
          horizontalpodautoscaler.autoscaling/redis-hpa-m Deployment/redis 0%/80% 3 10 3 6m6s
          • 測試服務(wù)

          $ kubectl run -i --tty --rm cli --image=redis:6-alpine -n adhoc -- sh
          /data # redis-cli -h redis-svc
          redis-svc:6379> set go-zero great
          OK
          redis-svc:6379> get go-zero
          "great"

          4. 總結(jié)

          goctl?工具極大簡化了 K8S yaml 文件的編寫,提供了開箱即用的最佳實踐,并且支持了模板自定義。

          如果覺得工具有幫助,歡迎?star??

          5. 項目地址

          https://github.com/tal-tech/go-zero

          6. 微信交流群

          瀏覽 55
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  蜜桃视频在线观看18 | 日本十八禁视频 | 人人操人人射 | 婷婷久久综合久色 | 欧美成人一区二区三区高清 |