近來和同事共同開發的遷移平臺項目想進行容器化改造,順應大趨勢往容器化這邊靠,項目前端平臺利用Django開發,後端Restful API利用高性能Web框架Tornado完成,Agent端利用Flask開發,各取了幾個大Python框架的優點。前端
以前CI/CD測試環境以前用的是Gitlab CI,master提交merge request後自動構建部署,正式環境經過Jenkins pipeline手動拉去release 部署,容器化改造將Jenkins託管在Kubernetes之上,Master接受job請求,動態生成slave來完成job任務。node
此文記錄了容器化改造中本身遇到的一些心得,可能本身研究的還不夠,如下均爲我的理解,大佬不喜勿噴,在本次利用Kubernetes將項目容器化過程當中,決定python項目有點大材小用,可是經過此次改造,理解了很多容器化的特徵,不斷的提高本身IT技術,豐富本身的技能棧。python
一入雲原生深似海,下圖爲咱們更好的全局性瞭解雲原生生態。mysql
本次項目改造用到的一些工具和應用與你們分享(後期有時間將各個工具應用單獨寫出來分享)git
Gitlab服務器進行代碼託管,及gitlab ci/cd,後期能夠將其託管至kubernetes集羣之上。web
利用Harbor進行鏡像存儲,審計管理及鏡像檢查,後期可託管至kubernetes之上。redis
kubernetes-dashboard部署,web界面方便各組件查看管理,簡單容器terminal管理,日誌分享查看。sql
Rancher部署,導入私有化kubernetes平臺,方便集羣管理及app安裝部署。docker
ceph到mgr分佈式集羣web界面管理shell
minio/chartmuseum對象存儲,方便chart存儲管理。
jenkins進行持續集成,持續發佈,後期能夠將其託管至kubernetes集羣之上。
efk進行kubernetes集羣容器日誌監控管理,f爲flutend容器化監控利器。
kubeapps進行chart,registry 添加,方便helm安裝部署。
Prometheus + grafana,各個app內進行export出來,進行單個app到matric監控。
例如次項目,分爲建立configmap/deployment/service已經拉去私有倉庫代碼的Secret。
exec "$@"
,方便後期添加配置擴展
利用雲服務器搭建部署kubernetes集羣,提供計算與內存資源。
須要利用雲服務器磁盤部署Ceph分佈式存儲系統,爲kubernetes提供底層存儲資源。
前段須要LB,爲應用代理到NodePort,kubernetes集羣內部使用flannel網絡,
node到node以前經過vpc私有網絡通信
利用ceph集羣,構建存儲類,同時利用CephFS來解決跨node掛載的應用。
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: QVFCRitmUmM1c1FxxxxxxxxxxxxxxxxxxxxxxxxHFoQVh6NlRvQ2c9PQ==
複製代碼
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節點
REDIS_HOST: redis-cluster-redis-ha-announce-0.default.svc.cluster.local
REDIS_PORT: 6379
REDIS_PASSWORD: go2cloxxxxxxxx
# go2cloud-platform 監聽端口
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中到那個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 "$@"
複製代碼