一般來說應用日志和容器日志一樣輸出到console,這樣oc logs的時候就能把所有的獲取到,但這種模式下輸出的日志比較多,問題定位不方便,更多的時候開發人員只想通過應用日志來查看定位問題就夠了,所以可以考慮容器日志和應用日志進行分離。在Openshift的實現如下:
1.打開scc對宿主機訪問的限制
[root@master ~]# oc adm policy add-scc-to-user hostaccess -z default scc "hostaccess" added to: ["system:serviceaccount:project-1:default"]
2.編輯DeploymentConfig.添加volumeMounts
界面上帶的添加存儲是不支持hostPath的,所以只能自己修改yaml
apiVersion: apps.openshift.io/v1 kind: DeploymentConfig metadata: annotations: openshift.io/generated-by: OpenShiftWebConsole creationTimestamp: '2018-12-25T09:40:54Z' generation: 8 labels: app: tomcat name: tomcat namespace: project-1 resourceVersion: '199951' selfLink: /apis/apps.openshift.io/v1/namespaces/project-1/deploymentconfigs/tomcat uid: 2c73ab7e-0829-11e9-97d4-080027dc991a spec: replicas: 1 selector: app: tomcat deploymentconfig: tomcat strategy: activeDeadlineSeconds: 21600 resources: {} rollingParams: intervalSeconds: 1 maxSurge: 25% maxUnavailable: 25% timeoutSeconds: 600 updatePeriodSeconds: 1 type: Rolling template: metadata: annotations: openshift.io/generated-by: OpenShiftWebConsole creationTimestamp: null labels: app: tomcat deploymentconfig: tomcat spec: containers: - image: >- docker-registry.default.svc:5000/project-1/tomcat@sha256:8f701fff708316aabc01520677446463281b5347ba1d6e9e237dd21de600f809 imagePullPolicy: Always name: tomcat ports: - containerPort: 8080 protocol: TCP resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /var/applogs name: log-storage dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 volumes: - hostPath: path: /apps/project-1/tomcat type: '' name: log-storage test: false triggers: - type: ConfigChange - imageChangeParams: automatic: true containerNames: - tomcat from: kind: ImageStreamTag name: 'tomcat:8-slim' namespace: project-1 lastTriggeredImage: >- docker-registry.default.svc:5000/project-1/tomcat@sha256:8f701fff708316aabc01520677446463281b5347ba1d6e9e237dd21de600f809 type: ImageChange status: availableReplicas: 1 conditions: - lastTransitionTime: '2018-12-30T02:30:36Z' lastUpdateTime: '2018-12-30T02:30:36Z' message: Deployment config has minimum availability. status: 'True' type: Available - lastTransitionTime: '2018-12-30T04:42:52Z' lastUpdateTime: '2018-12-30T04:42:54Z' message: replication controller "tomcat-7" successfully rolled out reason: NewReplicationControllerAvailable status: 'True' type: Progressing details: causes: - type: ConfigChange message: config change latestVersion: 7 observedGeneration: 8 readyReplicas: 1 replicas: 1 unavailableReplicas: 0 updatedReplicas: 1
如果通過template來創建,可以將部署的dc參數化
volumes: - hostPath: path: /apps/{NAMESPACES}/{DEPLOYMENT_NAME} type: '' name: log-storage
啟動以后就看到在容器內部多了一個/var/applogs的目錄
同時在宿主機上自動建立了一個project-1/tomcat的目錄
就可以配置日志雲收集/apps下所有的日志內容了。