真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

項(xiàng)目容器化改造心得

一.概述

1.1 背景

近來和同事共同開發(fā)的遷移平臺(tái)項(xiàng)目想進(jìn)行容器化改造,順應(yīng)大趨勢(shì)往容器化這邊靠,項(xiàng)目前端平臺(tái)利用Django開發(fā),后端Restful API利用高性能Web框架Tornado完成,Agent端利用Flask開發(fā),各取了幾個(gè)大Python框架的優(yōu)勢(shì)。

創(chuàng)新互聯(lián)專注于濉溪企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),商城開發(fā)。濉溪網(wǎng)站建設(shè)公司,為濉溪等地區(qū)提供建站服務(wù)。全流程按需制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

之前CI/CD測(cè)試環(huán)境之前用的是Gitlab CI,master提交merge request后自動(dòng)構(gòu)建部署,正式環(huán)境通過Jenkins pipeline手動(dòng)拉去release 部署,容器化改造將Jenkins托管在Kubernetes之上,Master接受job請(qǐng)求,動(dòng)態(tài)生成slave來完成job任務(wù)。

此文記錄了容器化改造中自己遇到的一些心得,可能自己研究的還不夠,以下均為個(gè)人理解,大佬不喜勿噴,在本次利用Kubernetes將項(xiàng)目容器化過程中,決定python項(xiàng)目有點(diǎn)大材小用,但是通過這次改造,理解了不少容器化的特征,不斷的提升自己IT技術(shù),豐富自己的技能棧。

1.2 容器化改造優(yōu)勢(shì)

  • 更?。簶O大的資源利用效率, 最大限度榨取和共享物理資源,多項(xiàng)目更能體現(xiàn)出容器化多優(yōu)勢(shì),節(jié)約部署IT成本。
  • 更快:秒級(jí)啟動(dòng),實(shí)現(xiàn)業(yè)務(wù)系統(tǒng)更快的開發(fā)迭代 和 交付部署。
  • 彈性:可根據(jù)業(yè)務(wù)負(fù)載進(jìn)行彈性容器伸縮,彈性擴(kuò)展。
  • 方便:容器化業(yè)務(wù)部署支持藍(lán)綠/灰度/金絲雀等發(fā)布,回滾,更加靈活方便。
  • 靈活:監(jiān)控底層node節(jié)點(diǎn)健康狀態(tài),靈活調(diào)度至最優(yōu)節(jié)點(diǎn)部署。
  • 強(qiáng)一致性:容器將環(huán)境和代碼打包在鏡像內(nèi),保證了測(cè)試與生產(chǎn)環(huán)境的強(qiáng)一致性。

1.3 容器化改造的要求

  • 開發(fā)人員熟悉Docker虛擬化技術(shù),熟練編寫Dockerfile。
  • 熟悉kubernetes容器化編排系統(tǒng), 熟悉各組件資源清單編寫。
  • 開發(fā)需要考慮后期容器編排部署的需求來組織結(jié)構(gòu)和編寫代碼。
  • 部署人員需要熟悉kubernetes資源清單各參數(shù)含義,需要總體把控架構(gòu)中到從上到下架構(gòu)。
  • 考慮高可用架構(gòu)和rbac安全策略,外部流量引入及后期擴(kuò)容伸縮。

二.工具

2.1 云原生生態(tài)

一入云原生深似海,下圖為我們更好的全局性了解云原生生態(tài)。

項(xiàng)目容器化改造心得

2.2 工具應(yīng)用

本次項(xiàng)目改造用到的一些工具和應(yīng)用與大家分享(后期有時(shí)間將各個(gè)工具應(yīng)用單獨(dú)寫出來分享)

  • 代碼托管

Gitlab服務(wù)器進(jìn)行代碼托管,及gitlab ci/cd,后期可以將其托管至kubernetes集群之上。

  • 私有鏡像托管

利用Harbor進(jìn)行鏡像存儲(chǔ),審計(jì)管理及鏡像檢查,后期可托管至kubernetes之上。

  • 集群管理

kubernetes-dashboard部署,web界面方便各組件查看管理,簡(jiǎn)單容器terminal管理,日志分享查看。

Rancher部署,導(dǎo)入私有化kubernetes平臺(tái),方便集群管理及app安裝部署。

  • 存儲(chǔ)管理

ceph到mgr分布式集群web界面管理

minio/chartmuseum對(duì)象存儲(chǔ),方便chart存儲(chǔ)管理。

  • 集成發(fā)布

jenkins進(jìn)行持續(xù)集成,持續(xù)發(fā)布,后期可以將其托管至kubernetes集群之上。

  • 日志監(jiān)控

efk進(jìn)行kubernetes集群容器日志監(jiān)控管理,f為flutend容器化監(jiān)控利器。

  • helm倉庫管理

kubeapps進(jìn)行chart,registry 添加,方便helm安裝部署。

  • 容器內(nèi)app監(jiān)控

Prometheus + grafana,各個(gè)app內(nèi)進(jìn)行export出來,進(jìn)行單個(gè)app到matric監(jiān)控。

  • 下圖為導(dǎo)航頁,直觀的展示用的這些工具

項(xiàng)目容器化改造心得

三.改造的要求

3.1 程序要求

3.1.1 項(xiàng)目結(jié)構(gòu)
  • 將配置文件單獨(dú)創(chuàng)建config文件夾,方便后期kubernetes創(chuàng)建configmap進(jìn)行資源映射

項(xiàng)目容器化改造心得

  • 如果后期部署為deployment無狀態(tài)應(yīng)用,應(yīng)該將共享的數(shù)據(jù)存儲(chǔ)單獨(dú)創(chuàng)建目錄,方便后去volume掛載

項(xiàng)目容器化改造心得

  • 項(xiàng)目結(jié)果目錄下單獨(dú)創(chuàng)建deploy目錄存放

項(xiàng)目容器化改造心得

例如次項(xiàng)目,分為創(chuàng)建configmap/deployment/service已經(jīng)拉去私有倉庫代碼的Secret。

  • 項(xiàng)目下均適用entrypoint.sh 為容器入口,最后添加exec "$@",方便后期添加配置擴(kuò)展

項(xiàng)目容器化改造心得

3.1.2 代碼要求
  • 配置文件盡可能使用yaml語言編寫,方便后期加載為configmap中便于修改讀寫。

項(xiàng)目容器化改造心得

  • 由于后期方便容器監(jiān)控,采用Fluentd配合EL進(jìn)行集群及應(yīng)用監(jiān)控,監(jiān)控容器目錄為/var/lib/docker/containers/*.log,需要將日志輸出到stdout,所以對(duì)于需要監(jiān)控到日志,可以定向到標(biāo)準(zhǔn)輸出/標(biāo)準(zhǔn)錯(cuò)誤輸出已經(jīng)日志文件內(nèi)。

3.2 架構(gòu)要求

3.2.1 基礎(chǔ)資源
  • 計(jì)算

利用云服務(wù)器搭建部署kubernetes集群,提供計(jì)算與內(nèi)存資源。

  • 存儲(chǔ)

需要利用云服務(wù)器磁盤部署Ceph分布式存儲(chǔ)系統(tǒng),為kubernetes提供底層存儲(chǔ)資源。

  • 網(wǎng)絡(luò)

前段需要LB,為應(yīng)用代理到NodePort,kubernetes集群內(nèi)部使用flannel網(wǎng)絡(luò),

node到node之前通過vpc私有網(wǎng)絡(luò)通訊

    • 容器間通信:同一個(gè) POD 內(nèi)多個(gè)容器間的通信,使用 lo 網(wǎng)卡通信
    • POD間通信:POD IP 直接與 POD IP 通信
    • POD 與 Service:POD IP 直接與 Cluster IP
    • Service 與集群外部客戶端的通信,ingress、NodePort、Loadbacer
3.2.2 流量引入
  • 需要結(jié)合部署在公有化/私有化,還是裸機(jī)上,需要提前規(guī)劃好前段時(shí)云LB就可以借助其部署證書,七層加載證書。
  • 如果沒有云產(chǎn)品就需要考慮ingress流量引入集群加載證書。

四.項(xiàng)目部分示例

4.1 存儲(chǔ)類

利用ceph集群,構(gòu)建存儲(chǔ)類,同時(shí)利用CephFS來解決跨node掛載的應(yīng)用。

  • 存儲(chǔ)類ceph-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ceph-rdb
provisioner: ceph.com/rbd
reclaimPolicy: Retain
parameters:
  monitors: 10.xx.xx.xx:6789
  pool: kube
  adminId: admin
  adminSecretName: ceph-admin-secret
  adminSecretNamespace: kube-system
  userId: kube
  userSecretName: ceph-client-secret
  userSecretNamespace: kube-system
  fsType: xfs
  imageFormat: "2"
  imageFeatures: "layering"
  • ceph 認(rèn)證ceph-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: ceph-admin-secret
  namespace: kube-system
type: "kubernetes.io/rbd"
data:
  # ceph auth get-key client.admin |base64
  key: QVFCRitmUmM1c1FxxxxxxxxxxxxxxxxxxxxxxxxHFoQVh7NlRvQ2c9PQ== 
  • 對(duì)于共享目錄
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: go2cloud-api-pvc
  namespace: default
spec:
  storageClassName: "ceph-rdb"
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi
  • 配置文件通過configmap掛載
apiVersion: v1
data:
  config.yaml: |
    ---
    DB_ENGINE: MySQL
    DB_HOST: mariadb-cluster-mariadb-master.default.svc.cluster.local
    DB_PORT: 3306
    DB_USER: go2clouduser
    DB_PASSWORD: go2xxxxxxxxx
    DB_NAME: go2cxxxxxxxx

    # Use redis as cache
    # Redis配置,連接replication的master節(jié)點(diǎn)
    REDIS_HOST: redis-cluster-redis-ha-announce-0.default.svc.cluster.local
    REDIS_PORT: 6379
    REDIS_PASSWORD: go2cloxxxxxxxx
    # go2cloud-platform 監(jiān)聽端口
    HTTP_LISTEN_PORT: 8088
    # callback url
    API_MIGRATE_SERVER_URL: http://go2cloud-api-service.default.svc.cluster.local:8004
    PLATFORM_CALLBACK_URL: http://go2cloud-platform-service.default.svc.cluster.local:8088
kind: ConfigMap
metadata:
  name: go2cloud-platform-cm

4.2 應(yīng)用相關(guān)資源

    • go2cloud-platform-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: go2cloud-platform
  namespace: default
spec:
  selector:
    matchLabels:
      # 匹配下面選擇的template 中的label.app名稱
      app: go2cloud-platform
  replicas: 2
  template:
    metadata:
      labels: 
        app: go2cloud-platform
        release: latest
    spec: 
      imagePullSecrets:
      - name: registry-secret
      containers:
      - name: go2cloud-platform
        image: 10.234.xxx.xxx/go2cloud/go2cloud-plaxxxxx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8088
          protocol: TCP
        volumeMounts:
          # 必須匹配volumes的名稱
        - name: go2cloud-platform-config
          mountPath: /data/config
          readOnly: true
        resources:
          requests:
            cpu: 250m
            memory: 520Mi
          limits:
            cpu: 500m
            memory: 1024Mi
        livenessProbe:
          tcpSocket: 
            port: 8088
          initialDelaySeconds: 20
      volumes:
      # 定義邏輯卷的名稱
      - name: go2cloud-platform-config
        configMap:
          # 使用configmap資源的名稱
          name: go2cloud-platform-cm
          items:
          # 使用configmap中到那個(gè)key
          - key: config.yaml
            # 使用configmap中到key映射到容器中到文件名稱
            path: config.yaml
            mode: 0644 
    • go2cloud-platform-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: go2cloud-platform-service
  namespace: default
spec:
  selector:
    app: go2cloud-platform
  type: NodePort
  ports:
  - name: http
    nodePort: 30020
    port: 8088
    targetPort: 8088
    protocol: TCP
    • registry-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: registry-secret
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxMC4yMzQuMi4yMTgiOiB7CgkJCSJhdXRoIjogIllXNWphRzVsZERwWWVIcDRRRGM0T1E9PSIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2Vyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    • Dockerfile
FROM python:latest
LABEL maintainer="kaliarch"
ENV BASE_ROOT="/data" 
ADD . ${BASE_ROOT}
RUN pip install --default-timeout=100 -r ${BASE_ROOT}/requirements/requirements.txt \
&& ln -s ${BASE_ROOT}/entrypoint.sh /bin/entrypoint.sh

EXPOSE 8088/tcp
ENTRYPOINT ["/bin/sh","/bin/entrypoint.sh"]
CMD ["python","/data/runserver","start","all"]
    • entrypoint.sh
#!/bin/sh
# config go2cloud-api configfile

exec "$@"

五.反思

  • 個(gè)人決定云原生后期回成為大趨勢(shì),提前掌握容器化編排技術(shù),不至于技術(shù)棧落伍。
  • 充分利用云生態(tài)應(yīng)用切合自身項(xiàng)目特點(diǎn)進(jìn)行容器化改造會(huì)快速不少。
  • 覺得云原生是將來的大趨勢(shì),盡快入門,擁抱云原生。

當(dāng)前名稱:項(xiàng)目容器化改造心得
本文來源:http://weahome.cn/article/ggjhsi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部