近來和同事共同開發(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ù),豐富自己的技能棧。
一入云原生深似海,下圖為我們更好的全局性了解云原生生態(tài)。
本次項(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安裝部署。
ceph到mgr分布式集群web界面管理
minio/chartmuseum對(duì)象存儲(chǔ),方便chart存儲(chǔ)管理。
jenkins進(jìn)行持續(xù)集成,持續(xù)發(fā)布,后期可以將其托管至kubernetes集群之上。
efk進(jìn)行kubernetes集群容器日志監(jiān)控管理,f為flutend容器化監(jiān)控利器。
kubeapps進(jìn)行chart,registry 添加,方便helm安裝部署。
Prometheus + grafana,各個(gè)app內(nèi)進(jìn)行export出來,進(jìn)行單個(gè)app到matric監(jiān)控。
例如次項(xiàng)目,分為創(chuàng)建configmap/deployment/service已經(jīng)拉去私有倉庫代碼的Secret。
exec "$@"
,方便后期添加配置擴(kuò)展
利用云服務(wù)器搭建部署kubernetes集群,提供計(jì)算與內(nèi)存資源。
需要利用云服務(wù)器磁盤部署Ceph分布式存儲(chǔ)系統(tǒng),為kubernetes提供底層存儲(chǔ)資源。
前段需要LB,為應(yīng)用代理到NodePort,kubernetes集群內(nèi)部使用flannel網(wǎng)絡(luò),
node到node之前通過vpc私有網(wǎng)絡(luò)通訊
利用ceph集群,構(gòu)建存儲(chǔ)類,同時(shí)利用CephFS來解決跨node掛載的應(yīng)用。
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"
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==
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: go2cloud-api-pvc
namespace: default
spec:
storageClassName: "ceph-rdb"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
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
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
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
apiVersion: v1
kind: Secret
metadata:
name: registry-secret
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxMC4yMzQuMi4yMTgiOiB7CgkJCSJhdXRoIjogIllXNWphRzVsZERwWWVIcDRRRGM0T1E9PSIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2Vyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
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"]
#!/bin/sh
# config go2cloud-api configfile
exec "$@"